想练习一下链表,所以就有了这个用C写的学生管理系统

没有把它写入文件,才不是因为我懒哈哈哈,主要是为了练习链表的

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. typedef struct student
  6. { // 定义学生的基本数据
  7. char stuName[]; // 姓名
  8. long stuID; // 学号
  9. char gender[]; // 性别
  10. int score[]; // 三门课的成绩
  11. struct student* next;
  12. }stu, *LNode;
  13.  
  14. typedef struct headNode
  15. { // 定义链表的头结点类型
  16. int length; // 储存学生数量
  17. struct student* next;
  18. }HNode;
  19.  
  20. HNode* InitList();
  21. void printMenu();
  22. void alternation(HNode* head);
  23. int isExist(HNode* head, long existID);
  24. void addStu(HNode* head);
  25. void deleteStu(HNode* head);
  26. void searchStu(HNode* head);
  27. void modifyStu(HNode* head);
  28. void displayStu(HNode* head);
  29.  
  30. int main()
  31. {
  32. HNode* head = InitList();
  33. printf("************* 欢迎进入学生管理系统 *************\n");
  34. while ()
  35. {
  36. printMenu();
  37. alternation(head);
  38. }
  39. return ;
  40. }
  41.  
  42. void printMenu()
  43. { // 菜单
  44. printf("\n - - - - - - - - -\n");
  45. printf("| 1.添加学生信息 |\n");
  46. printf("| 2.删除学生信息 |\n");
  47. printf("| 3.修改学生信息 |\n");
  48. printf("| 4.查找学生信息 |\n");
  49. printf("| 5.显示全部信息 |\n");
  50. printf("| 6.退出系统 |\n");
  51. printf(" - - - - - - - - \n");
  52. }
  53.  
  54. void alternation(HNode *head)
  55. { // 选择要执行的操作
  56. int option;
  57. printf("请选择操作:");
  58. scanf("%d", &option);
  59. switch (option)
  60. {
  61. case : addStu(head); break; //添加
  62. case : deleteStu(head); break; //删除
  63. case : modifyStu(head); break; //修改
  64. case : searchStu(head); break; //查询
  65. case : displayStu(head); break; //显示全部学生信息
  66. case : printf("退出系统,再见。"); exit();
  67. default: printf("输入错误,请重新输入:");
  68. }
  69. }
  70.  
  71. HNode* InitList()
  72. { // 初始化链表
  73. HNode* head = NULL;
  74. head = (HNode*)malloc(sizeof(HNode));
  75. head->length = ;
  76. head->next = NULL;
  77. return head;
  78. }
  79.  
  80. void addStu(HNode* head) // 添加学生信息
  81. { // 前插法添加学生信息
  82. LNode p = NULL;
  83. p = (stu*)malloc(sizeof(stu));
  84. p->next = NULL;
  85. //- - - - - - - - 开始录入信息 - - - - - - - -//
  86. printf("请输入学号(输入-1录入结束):");
  87. scanf("%d", &p->stuID);
  88. if (p->stuID == -)
  89. return;
  90. if (isExist(head, p->stuID))
  91. { // 在添加之前判断是否已存在该学生
  92. printf("已存在该学生信息,无需输入!");
  93. return;
  94. }
  95. //getchar();
  96. printf("请输入姓名:");
  97. scanf("%s", &p->stuName);
  98. printf("请输入性别:");
  99. scanf("%s", &p->gender);
  100. printf("请输入成绩(英语、语文、数学):");
  101. for (int i = ; i < ; i++)
  102. {
  103. scanf("%d", &p->score[i]);
  104. }
  105. //- - - - - - - - 录入信息结束 - - - - - - - -//
  106. head->length ++;
  107. p->next = head->next; // 更新学生人数
  108. head->next = p;
  109. printf("添加成功!");
  110. }
  111.  
  112. void deleteStu(HNode* head)
  113. { // 删除某个学生的信息
  114. stu* temp = NULL;
  115. stu* p = head->next;
  116. long deleteID;
  117. printf("请输入要删除学生的学号:");
  118. scanf("%d", &deleteID);
  119. if (!isExist(head, deleteID))
  120. { // 在删除之前判断是否已存在该学生
  121. printf("不存在该学生,删除失败!");
  122. return;
  123. }
  124. while (p != NULL)
  125. {
  126. if (p->next->stuID == deleteID)
  127. {
  128. temp = p->next;
  129. p->next = p->next->next;
  130. free(temp);
  131. }
  132. p = p->next;
  133. }
  134. printf("删除成功!");
  135. }
  136.  
  137. int isExist(HNode* head,long existID)
  138. { // 判断学生是否存在
  139. stu* p = head->next;
  140. while (p != NULL)
  141. {
  142. if (p->stuID == existID)
  143. return ;
  144. p = p->next;
  145. }
  146. return ;
  147. }
  148.  
  149. void searchStu(HNode* head)
  150. { // 查找某个学生的信息
  151. long searchID;
  152. stu* p = head->next;
  153. printf("请输入要查询的学号:");
  154. scanf("%d", &searchID);
  155. if (!isExist(head, searchID))
  156. { // 在查询之前判断是否不存在该学生
  157. printf("不存在该学生,查询失败!");
  158. return;
  159. }
  160. while (p != NULL)
  161. {
  162. if (p->stuID == searchID)
  163. {
  164. printf("该学生的信息如下:\n");
  165. printf("姓名:%s\n学号:%d\n性别:%s\n英语成绩:%d\n语文成绩:%d\n数学成绩:%d\n",
  166. p->stuName, p->stuID, p->gender, p->score[], p->score[], p->score[]);
  167. return;
  168. }
  169. p = p->next;
  170. }
  171. }
  172.  
  173. void modifyStu(HNode* head)
  174. { // 修改某个学生的信息,支持单项信息修改
  175. stu* p = NULL;
  176. p = head->next;
  177. long modifyID;
  178. printf("输入要修改信息的学生的学号:");
  179. scanf("%d", &modifyID);
  180. if (!isExist(head, modifyID))
  181. { // 在修改之前判断是否已存在该学生
  182. printf("不存在该学生,修改失败!");
  183. return;
  184. }
  185. while (p != NULL)
  186. {
  187. if (p->stuID == modifyID)
  188. {
  189. int option;
  190. long newID;
  191. char newName[];
  192. char newGender[];
  193. int newScore;
  194. printf("请输入要修改的项目(1.学号 2.姓名 3.性别 4.英语成绩 5.语文成绩 6.数学成绩):");
  195. scanf("%d", &option);
  196. switch (option)
  197. {
  198. case : printf("请输入新的学号:"); scanf("%d", &newID); p->stuID = newID; break;
  199. case : printf("请输入新的姓名:"); scanf("%s", newName); strcpy(p->stuName,newName); break;
  200. case : printf("请输入新的性别:"); scanf("%s", newGender); strcpy(p->gender,newGender); break;
  201. case : printf("请输入新的英语成绩:"); scanf("%d", &newScore); p->score[] = newScore; break;
  202. case : printf("请输入新的语文成绩:"); scanf("%d", &newScore); p->score[] = newScore; break;
  203. case : printf("请输入新的数学成绩:"); scanf("%d", &newScore); p->score[] = newScore; break;
  204. }
  205. }
  206. p = p->next;
  207. }
  208. printf("修改成功!");
  209. }
  210.  
  211. void displayStu(HNode* head)
  212. {
  213. stu* p = NULL;
  214. p = head->next;
  215. printf("当前一共有%d个学生的信息,信息如下:\n",head->length);
  216. while (p != NULL)
  217. {
  218. printf("学号:%d 姓名:%s 性别:%s 英语成绩:%d 语文成绩:%d 数学成绩:%d\n",
  219. p->stuID, p->stuName, p->gender, p->score[], p->score[], p->score[]);
  220. p = p->next;
  221. }
  222. }

C语言学生管理系统的更多相关文章

  1. C语言学生管理系统(增进版)

    在原版上进行改进,主要改进的功能有. 1.利用atof:将字符串转换为浮点型: 利用atoi:将字符串转换为整型: 原文地址:http://www.cnblogs.com/sddai/p/577412 ...

  2. C语言学生管理系统(原版本)(自编)

    /*系统特色:(大牛勿笑) *颜色提示 *文字提示 *功能 */ #include <stdio.h> #include <stdlib.h> #include <mat ...

  3. C语言学生管理系统源码分享

    大家好 我就是如假包换的...陈玲 自从运营了C语言程序设计微信公众号 很多粉丝都给我备注 ...奇葩 实在是不敢当 也被人开始叫玲玲姐 我知道 很多人都想看我出境 我本人也有 年多的舞台演讲训练 实 ...

  4. C语言学生管理系统完善版

    #include<stdio.h>#include<string.h>#include <stdlib.h>#define M 100struct score    ...

  5. C语言学生管理系统(C语言课程设计/精简版)

    #include<stdio.h>#include<stdlib.h>#include<windows.h>#include<conio.h>typed ...

  6. 学生管理系统-火车订票系统 c语言课程设计

    概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描 ...

  7. #006 C语言大作业学生管理系统第三天

    还差最后两部分 读取文件 恢复删除的学生信息 先学会处理文件的 知识点,再继续跟着视频做这个作业. 应该明天周六能把视频里手把手教的学生管理系统敲完 第二周尽量自己能完成C语言课本最后面那道学生管理系 ...

  8. c语言之学生管理系统

    0x00 学生管理系统 说到学生管理系统,对于每一个初学c语言的人都是一道不得不过的砍.不过,学习c,我觉得每个人都应该写一个学生管理系统,至于为什么,我想倘若连一个学生管理系统都写不好,哪么他的c是 ...

  9. 学生管理系统(C语言简单实现)

    仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2.实训目的及要求 3. 源码 4.实验小结 1 .实训名称 实训12:文件 2. ...

随机推荐

  1. Janet Wu price

    上次也是第一次参加百公里是2012的时候,那年的主题是一路有你,和一群同事从深圳湾走到福田,最后累了就回家了,那晚应该是睡得很好吧. 今年是提前报名了,虽然还不确定是否参加.因为说实话,我不喜欢拥堵的 ...

  2. 【系统篇】Archlinux系统安装

    本教程为最新安装Linux的教程,想看更详细可以到我B站主页看视频教程 ArchLinux安装配置手册[系统篇] 本教程参考自 https://wiki.archlinux.org/index.php ...

  3. python安装pip (windows64)

    1.前提条件是先安装了easy_install(easy_install安装教程http://www.cnblogs.com/IT-Crowd/articles/6528469.html) 2.在ea ...

  4. jdbc Template 存储过程 返回多个结果 ,out 输出参数

    public ReportVo getReport() { //执行存储过程 ReportVo reportVo=jdbcTemplate.execute(new CallableStatementC ...

  5. js实现图片的懒加载

    原文地址:https://blog.phyer.cn/article/9277.欢迎大家访问我的博客(●ˇ∀ˇ●) // 防抖 let lazy_timer; window.addEventListe ...

  6. 前端实现html转pdf方法总结

    最近要搞前端html转pdf的功能.折腾了两天,略有所收,踩了一些坑,所以做些记录,为后来的兄弟做些提示,也算是回馈社区.经过一番调(sou)研(suo)发现html导出pdf一般有这几种方式,各有各 ...

  7. CSS-水平居中、垂直居中、水平垂直居中

    1.水平居中 水平居中可分为行内元素水平居中和块级元素水平居中 1.1 行内元素水平居中 这里行内元素是指文本text.图像img.按钮超链接等,只需给父元素设置text-align:center即可 ...

  8. sublime text3 搭建c++/c环境

    sublime搭建的c++/c使用很方便,实用性很强,自己阅览了无数的博客,csdn,博客园的都看了,最后还是自己摸索着搭建成功了,如果觉得还不错请给个评论谢谢.(提前声明本人专利不允许转载!!!!) ...

  9. RedisTemplate:我不背锅,是你用错了

    今天分享一个RedisTemplate的问题,感兴趣的可以继续看下去了,不感兴趣的继续撩妹去吧! 如下图:一位朋友给了我一个报错的图片,为啥为啥取不到值? 我也有点懵,第一反应就是RedisTempl ...

  10. JavaScript实现集合与字典

    JavaScript实现集合与字典 一.集合结构 1.1.简介 集合比较常见的实现方式是哈希表,这里使用JavaScript的Object类进行封装. 集合通常是由一组无序的.不能重复的元素构成. 数 ...