经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
C语言使用单链表实现学生信息管理系统
来源:jb51  时间:2021/11/22 18:45:57  对本文有异议

本文实例为大家分享了C语言使用单链表实现学生信息管理系统,供大家参考,具体内容如下

初学数据结构,记录一下学习过程。

运行结果如图:

1.运行界面

2.录入学生信息

3.按照总分进行排序

代码如下:

  1. #define ERROR 0
  2. #define OK 1
  3. #define OVERFLOW -1;
  4. typedef int ElemType;
  5. typedef int Status;
  6. #include<stdio.h>
  7. #include<stdlib.h>
  8. #include<malloc.h>
  9. #include<string.h>
  10. #include<iostream>
  11. typedef struct{
  12. char name[20];
  13. char snumber[20];
  14. char sex[10];
  15. int math;
  16. int chinese;
  17. int english;
  18. }student;
  19. typedef struct LNode{
  20. student data;
  21. struct LNode *next;
  22. }LNode,*LinkList;
  23. //单链表初始化
  24. Status InitList(LinkList &L){
  25. L = new LNode;
  26. L->next = NULL;
  27. return OK;
  28. }
  29. //创建单链表
  30. void CreateList(LinkList &L,int n){
  31. LinkList r;
  32. LinkList p;
  33. L = new LNode;
  34. L->next = NULL;
  35. r = L;
  36. int i;
  37. for(i = 0;i<n;i++){
  38. p = new LNode;
  39. scanf("%s%s%s%d%d%d",&p->data.name,&p->data.snumber,&p->data.sex,&p->data.chinese,&p->data.math,&p->data.english);
  40. //scanf("%d%d%d",&p->data.chinese,&p->data.math,&p->data.english);
  41. p->next=NULL;
  42. r->next=p;
  43. r = p;
  44. }
  45. }
  46.  
  47.  
  48. //总分统计
  49. int GradeSum(LinkList L){
  50. int sum;
  51. sum = (L->data.chinese)+(L->data.english)+(L->data.math);
  52. return sum;
  53. }
  54. //统计所有学生信息
  55. void BianLi(LinkList L){
  56. LinkList p;
  57. p = L->next;
  58. printf("姓名\t学号\t性别\t语文\t数学\t英语\t总分\n");
  59. while(p){
  60. printf("%s\t%s\t%s\t",p->data.name,p->data.snumber,p->data.sex);
  61. printf("%d\t%d\t%d\t%d",p->data.chinese,p->data.math,p->data.english,GradeSum(p));
  62. p = p->next;
  63. printf("\n");
  64. }
  65. }
  66. //按照总分排序
  67. void OrderSum(LinkList &L){
  68. LinkList p,q,tail;
  69.  
  70. tail = NULL;
  71.  
  72. while((L->next->next) != tail)
  73. {
  74. p = L;
  75. q = L->next;
  76. while(q->next != tail)
  77. {
  78. if( GradeSum(q) < GradeSum(q->next))
  79. {
  80. p->next = q->next;
  81. q->next = q->next->next;
  82. p->next->next = q;
  83. q = p->next;
  84. }
  85. q = q->next;
  86. p = p->next;
  87. }
  88. tail = q;
  89. }
  90. printf("排序完毕!\n");
  91.  
  92. }
  93. //根据语文进行排序
  94. void OrderChinese(LinkList &L){
  95. LinkList p,q,tail;
  96.  
  97. tail = NULL;
  98.  
  99. while((L->next->next) != tail)
  100. {
  101. p = L;
  102. q = L->next;
  103. while(q->next != tail)
  104. {
  105. if((q->data.chinese) < (q->next->data.chinese))
  106. {
  107. p->next = q->next;
  108. q->next = q->next->next;
  109. p->next->next = q;
  110. q = p->next;
  111. }
  112. q = q->next;
  113. p = p->next;
  114. }
  115. tail = q;
  116. }
  117. printf("排序完毕!\n");
  118.  
  119. }
  120. //根据英语进行排序
  121. void OrderEnglish(LinkList &L){
  122. LinkList p,q,tail;
  123.  
  124. tail = NULL;
  125.  
  126. while((L->next->next) != tail)
  127. {
  128. p = L;
  129. q = L->next;
  130. while(q->next != tail)
  131. {
  132. if((q->data.english) < (q->next->data.english))
  133. {
  134. p->next = q->next;
  135. q->next = q->next->next;
  136. p->next->next = q;
  137. q = p->next;
  138. }
  139. q = q->next;
  140. p = p->next;
  141. }
  142. tail = q;
  143. }
  144. printf("排序完毕!\n");
  145.  
  146. }
  147. //根据数学进行排序
  148. void OrderMath(LinkList &L){
  149. LinkList p,q,tail;
  150.  
  151. tail = NULL;
  152.  
  153. while((L->next->next) != tail)
  154. {
  155. p = L;
  156. q = L->next;
  157. while(q->next != tail)
  158. {
  159. if((q->data.math) < (q->next->data.math))
  160. {
  161. p->next = q->next;
  162. q->next = q->next->next;
  163. p->next->next = q;
  164. q = p->next;
  165. }
  166. q = q->next;
  167. p = p->next;
  168. }
  169. tail = q;
  170. }
  171. printf("排序完毕!\n");
  172.  
  173. }
  174. //删除学生信息
  175. Status ListDelete(LinkList &L,int i){
  176. LinkList p;
  177. LinkList q;
  178. int j;
  179. p = L;j = 0;
  180. while((p->next)&&(j<i-1)){
  181. p = p->next;
  182. ++j;
  183. }
  184. if(!(p->next)||(j>i-1)) return ERROR;
  185. q = p->next;
  186. p->next = q->next;
  187. delete q;
  188. return OK;
  189. }
  190. void DeleteStudent(LinkList &L){
  191. int i;
  192. printf("请输入需要删除的学生序号\n");
  193. scanf("%d",&i);
  194. ListDelete(L,i);
  195. printf("删除完毕!\n");
  196.  
  197. }
  198. //插入学生信息
  199. Status ListInsert(LinkList &L,int i,char name[],char snumber[],char sex[],int chinese,int math,int english){
  200. LinkList p = L;
  201. LinkList s;
  202. int j = 0;
  203. while(p && (j<i-1)){
  204. p = p->next;
  205. ++j;
  206. }
  207. if(!p||j>i-1) return ERROR;
  208. s = new LNode;
  209. strcpy(s->data.name,name);
  210. strcpy(s->data.snumber,snumber);
  211. strcpy(s->data.sex,sex);
  212. s->data.chinese = chinese;
  213. s->data.math = math;
  214. s->data.english = english;
  215. s->next = p->next;
  216. p->next = s;
  217. return OK;
  218. }
  219. void InsertStudent(LinkList &L){
  220. int n;
  221. char name[20],snumber[20],sex[10];
  222. int chinese,math,english;
  223. printf("请输入插入的位置N:");
  224. scanf("%d",&n);
  225. printf("请依次输入学生的姓名、学号、性别、语文成绩、数学成绩、英语成绩、总分\n");
  226. scanf("%s%s%s%d%d%d",&name,&snumber,&sex,&chinese,&math,&english);
  227. ListInsert(L,n,name,snumber,sex,chinese,math,english);
  228.  
  229. }
  230. void menu(){
  231. printf("\t\t\t ======================================================\n\n");
  232. printf("\t\t\t ‖ 学生信息管理系统 ‖ \n\n");
  233. printf("\t\t\t ======================================================\n\n");
  234. printf("\t\t\t ===================系统功能菜单=======================\n");
  235. printf("\t\t\t ‖ ------------------------------------------------ ‖\n");
  236. printf("\t\t\t ‖ ------------------------------------------------ ‖ \n");
  237. printf("\t\t\t ====================================================== \n");
  238. printf("\t\t\t ‖ 0.录入学生信息 ‖ ‖ 1.统计学生信息 ‖ \n");
  239. printf("\t\t\t ======================================================\n");
  240. printf("\t\t\t ‖ 2.按照总分排序 ‖ ‖ 3.按照语文成绩排序 ‖ \n");
  241. printf("\t\t\t ====================================================== \n");
  242. printf("\t\t\t ‖ 4.按照数学成绩排序 ‖ ‖ 5.按英语成绩排序 ‖ \n");
  243. printf("\t\t\t ======================================================\n");
  244. printf("\t\t\t ‖ 6.删除学生信息 ‖ ‖ 7.插入学生信息 ‖ \n");
  245. printf("\t\t\t ====================================================== \n");
  246. printf("\t\t\t ‖ 8.退出系统 ‖ \n");
  247. printf("\t\t\t ========================== \n");
  248. printf("\t\t\t ----------------------------------------------- \n");
  249. printf("\n\n\n");
  250. }
  251. void luRu(LinkList &L){
  252. int n;
  253. printf("请输入学生数目N:");
  254. scanf("%d",&n);
  255. printf("请依次输入学生的姓名、学号、性别、语文成绩、数学成绩、英语成绩、总分\n");
  256. CreateList(L,n);
  257. printf("学生信息已录入完毕!\n");
  258. }
  259. void main(int args,char argv[]){
  260. LinkList p;
  261. InitList(p);
  262. int i;
  263. do{
  264. menu();
  265. scanf("%d",&i);
  266. getchar();
  267. switch(i){
  268. case 0:luRu(p);break;
  269. case 1:BianLi(p);break;
  270. case 2:OrderSum(p);BianLi(p);break;
  271. case 3:OrderChinese(p);BianLi(p);break;
  272. case 4:OrderMath(p);BianLi(p);break;
  273. case 5:OrderEnglish(p);BianLi(p);break;
  274. case 6: DeleteStudent(p);break;
  275. case 7:InsertStudent(p);break;
  276. case 8:exit(0);
  277. }
  278. }while(i != -1);
  279. }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号