C语言实现学生信息管理系统的代码写

今天小编给大家分享一下C语言实现学生信息管理系统的代码写的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。具

今天小编给大家分享一下C语言实现学生信息管理系统的代码写的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

具体代码如下

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6.  
  7. //数据的设计------->学生信息抽象出
  8. struct student
  9. {
  10.     char name[20];
  11.     int age;
  12.     char sex[5];
  13.     char tel[20];
  14. };
  15.  
  16.  
  17. //结构分结构去写
  18. //某一种数据结构去实现什么东西的时候,单独去写一种数据结构
  19. //先把数据结构写对了再说
  20. struct Node
  21. {
  22.     //int data;
  23.     struct student data;
  24.     struct Node* next;
  25. };
  26.  
  27. //创建表
  28. struct Node* createList()
  29. {
  30.     //用结构体变量表示表头
  31.     //指针-->变量   动态内存申请
  32.     struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
  33.     //表头:做差异化处理 数据data不做初始化
  34.     headNode->next = NULL;
  35.     return headNode;
  36. }
  37.  
  38.  
  39. struct Node* createNode(struct student data)
  40. {
  41.     struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
  42.     newNode->data = data;
  43.     newNode->next = NULL;
  44.     return newNode;
  45. }
  46.  
  47.  
  48. //插入结点
  49. void insertNodeByHead(struct Node* headNode, struct student data)
  50. {
  51.     struct Node* newNode = createNode(data);
  52.     //表头法
  53.     newNode->next = headNode->next;
  54.     headNode->next = newNode;
  55. }
  56.  
  57. //指定位置删除
  58. //data为struct student型,结构体,不能直接比较
  59. void deleteAPPoinNode(struct Node* headNode, char* name)//指定姓名进行删除
  60. {
  61.     struct Node* posNode = headNode->next;
  62.     struct Node* posFrontNode = headNode;
  63.     if (posNode == NULL)
  64.     {
  65.         printf("数据为空,无法删除!\\n");
  66.         return;
  67.     }
  68.     //姓名为字符串,不能直接比较,字符串的比较为strcmp
  69.     while (strcmp(posNode->data.name,name))
  70.     {
  71.         posFrontNode = posNode;
  72.         posNode = posFrontNode->next;
  73.         if (posNode == NULL)
  74.         {
  75.             printf("未找到指定位置,无法删除!\\n");
  76.             return;
  77.         }
  78.     }
  79.     //找到了
  80.     posFrontNode->next = posNode->next;
  81.     free(posNode);
  82. }
  83.  
  84. //查找功能
  85. struct Node* searchInfoByData(struct Node* headNode,char* name)//指定姓名查找
  86. {
  87.     struct Node* pMove = headNode->next;
  88.     while (pMove != NULL && strcmp(pMove->data.name, name))
  89.     {
  90.         pMove = pMove->next;
  91.     }
  92.     return pMove;
  93. }
  94.  
  95.  
  96. //文件读操作(链表的存储)
  97. void readInfoFromFile(struct Node* headNode,const char *fileName)
  98. {
  99.     //1.打开
  100.     FILE *fp;//文件指针
  101.     struct student data;
  102.     fp = fopen(fileName, "r");//以读取方式打开
  103.     if (fp == NULL)
  104.     {
  105.         fopen(fileName, "w+");//以创建方式打开
  106.  
  107.     }
  108.     //2.读文件
  109.     while (fscanf(fp, "%s\\t%d\\t%s\\t%s\\n"/*格式化形式*/, data.name, &data.age, data.sex, data.tel) != EOF/*文件结束符*/)//将文件作为输入设备,格式化读到data中
  110.     {
  111.         insertNodeByHead(headNode, data);//读过程中存放到链表
  112.     }
  113.     //3.关闭文件
  114.     fclose(fp);
  115. }
  116.  
  117. //文件写操作(链表的读取)
  118. void writeInfoToFile(struct Node* headNode,const char *fileName)
  119. {
  120.     FILE *fp;
  121.     fp = fopen(fileName, "w");//以追加方式打开
  122.     if (fp == NULL)
  123.     {
  124.         printf("文件打开失败!");
  125.         return;
  126.     }
  127.     struct Node* pMove = headNode->next;
  128.     while (pMove)
  129.     {
  130.         fprintf(fp, "%s\\t%d\\t%s\\t%s\\n"/*格式化形式*/, pMove->data.name, pMove->data.age, pMove->data.sex, pMove->data.tel);
  131.         pMove = pMove->next;
  132.     }
  133.  
  134.     fclose(fp);
  135. }
  136.  
  137. //打印链表
  138. void printfList(struct Node* headNode)
  139. {
  140.     struct Node* pMove = headNode->next;
  141.     //涉及到数据的处理
  142.     printf("姓名\\t年龄\\t性别\\t电话\\n");
  143.     while (pMove)
  144.     {
  145.         printf("%s\\t%d\\t%s\\t%s\\n", pMove->data.name, pMove->data.age, pMove->data.sex, pMove->data.tel);
  146.         pMove = pMove->next;
  147.     }
  148.     printf("\\n");
  149. }
  150.  
  151.  
  152. /*
  153.     1.界面
  154.     2.数据结构的设计
  155.         //需要和数据结构设计糅合在一起
  156.     3.交互
  157. */
  158. #include "myList.h"
  159. //菜单设计
  160. void menu()
  161. {
  162.     //所有操作都同步到文件
  163.     printf("-----------【学生信息管理系统】-----------\\n");
  164.     printf("\\t\\t0.退出系统\\n");
  165.     printf("\\t\\t1.录入信息\\n");
  166.     printf("\\t\\t2.浏览信息\\n");
  167.     printf("\\t\\t3.修改信息\\n");
  168.     printf("\\t\\t4.删除信息\\n");
  169.     printf("\\t\\t5.查找信息\\n");
  170.     printf("------------------------------------------\\n");
  171. } 
  172. struct Node* list = createList();
  173. //用户的交互
  174. //根据所选菜单项,做相应的事情
  175. void keyDown()
  176. {
  177.     int choice = 0;
  178.     struct student data;
  179.     struct Node* pMove = NULL;
  180.     scanf("%d", &choice);
  181.     switch (choice)
  182.     {
  183.     case 0:
  184.         printf("正常退出!\\n");
  185.         system("pause");
  186.         exit(0);
  187.         break;
  188.     case 1:
  189.         printf("---------------【录入信息】---------------\\n");//插入链表
  190.         printf("请输入学生姓名年龄性别电话:");
  191.             fflush(stdin);//清空缓冲区
  192.             scanf("%s%d%s%s", data.name, &data.age, data.sex, data.tel);
  193.         insertNodeByHead(list, data);
  194.         break;
  195.     case 2:
  196.         printf("---------------【浏览信息】--------------\\n");//打印链表
  197.         printfList(list);
  198.         break;
  199.     case 3:
  200.         printf("---------------【修改信息】---------------\\n");
  201.         printf("需要修改信息的学生姓名:");
  202.         scanf("%s", data.name);
  203.         deleteAPPoinNode(list, data.name);
  204.         printf("请重新输入学生信息:");
  205.         fflush(stdin);
  206.         scanf("%s%d%s%s", data.name, &data.age, data.sex, data.tel);
  207.         insertNodeByHead(list, data);
  208.         break;
  209.     case 4:
  210.         printf("---------------【删除信息】---------------\\n");
  211.         printf("请输入删除的学生姓名:");
  212.         scanf("%s", data.name);
  213.         deleteAPPoinNode(list,data.name);
  214.         break;
  215.     case 5:
  216.         printf("---------------【查找信息】---------------\\n");
  217.         printf("请输入要查找学生姓名:");
  218.         scanf("%s", data.name);
  219.         pMove = searchInfoByData(list, data.name);
  220.         if (pMove == NULL)
  221.         {
  222.             printf("未找到相关信息,无法删除!\\n");
  223.             system("pause");
  224.         }
  225.         else
  226.         {
  227.             printf("姓名\\t年龄\\t性别\\t电话\\n");
  228.             printf("%s\\t%d\\t%s\\t%s\\n", pMove->data.name, pMove->data.age, pMove->data.sex, pMove->data.tel);
  229.         }
  230.         break;
  231.     default:
  232.         printf("选择错误,重新输入\\n");
  233.         system("pause");
  234.         break;
  235.     }
  236.     writeInfoToFile(list, "1.txt");//保存,调用文件写函数
  237. }
  238.  
  239.  
  240. int main()
  241. {
  242.     readInfoFromFile(list, "1.txt");//程序运行前,调用文件读函数
  243.     while (1)
  244.     {
  245.         menu();
  246.         keyDown();
  247.         system("pause");
  248.         system("cls");
  249.     }
  250.     /*测试链表代码
  251.     struct Node* list = createList();
  252.     insertNodeByHead(list, 1);
  253.     insertNodeByHead(list, 3);
  254.     insertNodeByHead(list, 2);
  255.     insertNodeByHead(list, 5);
  256.     printfList(list);
  257.     printf("删除指定位置!\\n");
  258.     deleteAPPoinNode(list, 3);
  259.     printfList(list);
  260.     printf("链表的查找:\\n");
  261.     printf("%d\\n",searchInfoByData(list, 5)->data);*/
  262.  
  263.  
  264.     system("pause");
  265.     return 0;
  266. }

运行截图

1.录入信息

C语言实现学生信息管理系统的代码写

2.浏览信息

C语言实现学生信息管理系统的代码写

3.修改信息

C语言实现学生信息管理系统的代码写

4.查找信息

C语言实现学生信息管理系统的代码写

5.删除信息

C语言实现学生信息管理系统的代码写

C语言实现学生信息管理系统的代码写

6.退出系统

C语言实现学生信息管理系统的代码写

以上就是“C语言实现学生信息管理系统的代码写”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注恰卡网行业资讯频道。

本站部分文章来自网络或用户投稿,如无特殊说明或标注,均为本站原创发布。涉及资源下载的,本站旨在共享仅供大家学习与参考,如您想商用请获取官网版权,如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
开发者

怎么使用python安装whl文件

2022-7-23 1:18:46

开发者

C++二叉树如何创建及遍历

2022-7-23 1:19:00

搜索