VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 97|回复: 1

C语言写的studentSystem

[复制链接]
01_avatar_middle
最佳答案
0 
在线会员 发表于 2020-4-30 09:28:33 | 显示全部楼层 |阅读模式
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <windows.h>
  4. #include <string.h>
  5. struct student
  6. {
  7.         char num[20];
  8.         char name[20];
  9.         int age;
  10.         char tel[20];
  11.         char addr[20];
  12. };
  13. //写数据结构
  14. //死方法:
  15. //1.抽象单一个体
  16. //2.描述最初状态 :初始化--->初始化变量
  17. //3.插入,删除
  18. //4.打印遍历
  19. struct Node //变量加变量名
  20. {
  21.         struct student data;
  22.         struct Node * next;//int *
  23. };
  24. //1.1链表是个什么东西:结构体变量和结构体变量连接在一起
  25. //1.2指针第二种变为变量的方式:动态的申请
  26. //1.3用第一个结点表示整个链表
  27. struct Node * createList(){
  28.         //有表头链表:第一个结点不存储数据
  29. //无表头链表:第一个结点存储数据
  30.         //1.产生一个
  31.         struct Node * listHeadNode = (struct Node *)malloc(sizeof(struct Node));
  32.         //初始化一个变量
  33.         listHeadNode->next = NULL;
  34.         return listHeadNode;
  35. }
  36. struct Node * createNode(struct student data){
  37.         //有表头链表:第一个结点不存储数据
  38.         //无表头链表:第一个结点存储数据
  39.         //1.产生一个
  40.         struct Node * newNode = (struct Node *)malloc(sizeof(struct Node));
  41.         //初始化一个变量
  42.         newNode->data = data;
  43.         newNode->next = NULL;
  44.         return newNode;
  45. }
  46. //插入那个链表 , 插入的数据是多少
  47. void insertNodeByHead(struct Node * listHeadNode, struct student data)//录入信息
  48. {
  49.         //想不清楚的问题,那就去画
  50.         struct Node * newNode = createNode(data);
  51.         newNode->next = listHeadNode->next;
  52.         listHeadNode->next = newNode;
  53. }
  54. void deleteNodeByAppoinName(struct Node * listHeadNode, char *name)
  55. {
  56.         struct Node * posFrontNode = listHeadNode;
  57.         struct Node * posNode = listHeadNode->next;
  58.         if (posNode == NULL){
  59.                 printf("无相关内容, 无法删除!\n");
  60.                 return;
  61.         }
  62.         else{
  63.                 while (strcmp(posNode->data.name , name)){
  64.                         posFrontNode = posNode;
  65.                         posNode = posFrontNode->next;
  66.                         if (posNode == NULL){
  67.                                 printf("无相关内容, 无法删除!\n");
  68.                                 return;
  69.                         }

  70.                 }
  71.                 posFrontNode->next = posNode->next;
  72.                 free(posNode);
  73.         }
  74. }
  75. struct Node * searchNodeByAppoinNum(struct Node * listHeadNode, char * num)
  76. {
  77.         struct Node * pMove = listHeadNode->next;
  78.         if (pMove == NULL)
  79.         {
  80.                 return pMove;
  81.         }
  82.         else{
  83.         while (strcmp(pMove->data.num, num))
  84.         {
  85.                 pMove = pMove->next;
  86.                 if (pMove == NULL)
  87.                         break;
  88.                 }
  89.                 return pMove;
  90.         }
  91. }
  92. void printNode(struct Node * curNode)
  93. {
  94.         printf("\t学号\t姓名\t年龄\t电话\t\t住址\n");
  95.         printf("\t%s\t%s\t%d\t%s\t\t%s\n", curNode->data.num, curNode->data.name, curNode->data.age, curNode->data.tel, curNode->data.addr);
  96. }
  97. //打印 :浏览信息
  98. void printList(struct Node * ListHeadNode)//浏览信息
  99. {
  100.         struct Node * pMove = ListHeadNode->next;
  101.         printf("\t学号\t姓名\t年龄\t电话\t\t住址\n");
  102.         while (pMove){
  103.                 printf("\t%s\t%s\t%d\t%s\t\t%s\n", pMove->data.num,pMove->data.name ,pMove->data.age, pMove->data.tel, pMove->data.addr);
  104.                 pMove = pMove->next;
  105.         }
  106.         printf("\n");
  107. }
  108. void readInfoFromFile(char * fileName, struct Node * listHeadNode)
  109. {
  110.         FILE *fp = fopen(fileName, "r");
  111.         if (fp == NULL)
  112.         {
  113.                 fp = fopen(fileName, "w");
  114.         }
  115.         struct student tempData;
  116.         while (fscanf(fp, "\t%s\t%s\t%d\t%s\t\t%s\n", tempData.num, tempData.name, tempData.age, tempData.tel, tempData.addr) != EOF);
  117.         {
  118.                 insertNodeByHead(listHeadNode, tempData);
  119.                 memset(&tempData, 0, sizeof(tempData));
  120.         }
  121.         fclose(fp);
  122. }
  123. void saveInfoToFile(char * fileName, struct Node * listHeadNode)
  124. {
  125.      FILE * fp = fopen(fileName, "w");
  126.          struct Node * pMove = listHeadNode->next;
  127.        
  128.          while (pMove){
  129.                  fprintf(fp, "\t%s\t%s\t%d\t%s\t\t%s\n", pMove->data.num, pMove->data.name, pMove->data.age, pMove->data.tel, pMove->data.addr);
  130.                  pMove = pMove->next;
  131.          }
  132.          fclose(fp);
  133. }
复制代码
  1. #include "singleList.h"
  2. struct Node *  list = NULL;
  3. void systemMenu()
  4. {
  5.         //几个菜单 通常情况下几个函数
  6.         //菜单-功能
  7.         //隐藏的功能:同步文件的功能
  8.         printf("**************** 学生管理系统 ******************\n");
  9.         printf("**************** 0.退出系统 ******************\n");
  10.         printf("**************** 1.插入信息 ******************\n");
  11.         printf("**************** 2.浏览信息 ******************\n");
  12.         printf("**************** 3.删除信息 ******************\n");
  13.         printf("**************** 4.修改信息 ******************\n");
  14.         printf("**************** 5.查找信息 ******************\n");
  15.         printf("请输入(0~5):");

  16.         //每一次交互,都没有告诉别人程序的这个地方需要交互
  17. }
  18. void keyDown()
  19. {
  20.         int userKey;
  21.         struct student tempData;
  22.         scanf("%d", &userKey);
  23.         switch (userKey)
  24.         {
  25.         case 0: // 退出系统
  26.                 printf("\t\t【退出系统】\n");
  27.                 system("pause");
  28.                 exit(0);
  29.                 break;
  30.         case 1:
  31.                 printf("\t\t【插入信息】\n");//插入信息
  32.                 printf("请输入学号,姓名,年龄,电话,住址: ");
  33.                 scanf("%s%s%d%s%s", tempData.num,tempData.name, &tempData.age, tempData.tel, tempData.addr);
  34.                 insertNodeByHead(list, tempData);
  35.                 saveInfoToFile("student.txt", list);
  36.                 break;
  37.         case 2:  
  38.                 printf("\t\t【浏览信息】\n");//浏览信息
  39.                 printList(list);
  40.                 break;
  41.         case 3:  
  42.                 printf("\t\t【删除信息】\n");//删除信息
  43.                 printf("请输入要删除的学生姓名:");
  44.                 scanf("%s", tempData.name);
  45.                 deleteNodeByAppoinName(list, tempData.name);
  46.                 saveInfoToFile("student.txt", list);
  47.                 break;
  48.         case 4:  
  49.                 printf("\t\t【修改信息】\n");//修改信息
  50.                 printf("请输入要修改的学生的学号:");
  51.                 scanf("%s", tempData.num);
  52.                 if (searchNodeByAppoinNum(list, tempData.num) == NULL)
  53.                 {
  54.                         printf("未找到相关信息!\n");
  55.                 }
  56.                 else
  57.                 {
  58.                         struct Node * curNode = searchNodeByAppoinNum(list, tempData.num);
  59.                         printf("请输入学号,姓名,年龄,电话,住址: ");
  60.                         scanf("%s%s%d%s%s", curNode->data.num, curNode->data.name, &curNode->data.age, curNode->data.tel, curNode->data.addr);
  61.                         saveInfoToFile("student.txt", list);
  62.                 }
  63.                 break;
  64.         case 5:  
  65.                 printf("\t\t【查找信息】\n");//查找信息
  66.                 printf("请输入要查找的学号:");
  67.                 scanf("%s", tempData.num);
  68.                 if (searchNodeByAppoinNum(list, tempData.num) == NULL)
  69.                 {
  70.                         printf("未找到相关信息!\n");
  71.                 }
  72.                 else
  73.                 {
  74.                         printNode(searchNodeByAppoinNum(list, tempData.num));
  75.                 }
  76.                 break;
  77.         default:
  78.                 printf("输入错误!重新输入\n");
  79.                 break;
  80.         }

  81. }
  82. int main()
  83. {
  84.        
  85.         list = createList();
  86.         readInfoFromFile("student.txt", list);
  87.         while (1)
  88.         {
  89.                 systemMenu();
  90.                 keyDown();
  91.                 system("pause");
  92.                 system("cls");




  93.         }

  94.         return 0;
  95.        
  96. }
复制代码

不知为什么,录入信息之后,查看信息就会出现一堆乱码,第二次运行,就因为这堆乱码发生中断,哪位大佬同学可以帮忙一下?
5cfdf40fbaf6cb276d847bc7adefc82.png




上一篇:逐梦旅程window游戏编程
下一篇:MFC
84_avatar_middle
最佳答案
1 
在线会员 发表于 2020-4-30 10:38:53 | 显示全部楼层
Node  malloc以后填充0 ,主要就是那个student结构体初始化内存
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-5-27 22:48

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表