数据结构课程设计 学生成绩管理系统

上传人:仙*** 文档编号:28809890 上传时间:2021-09-14 格式:DOC 页数:20 大小:167.01KB
返回 下载 相关 举报
数据结构课程设计 学生成绩管理系统_第1页
第1页 / 共20页
数据结构课程设计 学生成绩管理系统_第2页
第2页 / 共20页
数据结构课程设计 学生成绩管理系统_第3页
第3页 / 共20页
点击查看更多>>
资源描述
数据结构课程设计(实训)报告书 信息科学与技术学院数据结构课程设计(实训)报告书 题 目: 学生成绩管理系统 专 业: 信息管理与信息系统 班 级: - 姓 名: - 学 号: - _指导老师: - - 设计时间:2011年3月14日 2011年3月18日目 录数据结构课程设计(实训)报告书11. 课程设计(实训)计划12. 系统需求分析与功能设计13. 总体设计14、算法说明25、系统难点分析36、系统测试37、心得体会88、参考文献9附录源代码9数据结构课程设计(实训)报告书1. 课程设计(实训)计划(1)编写算法;(2)算法测试;(3)设计实验报告: 1)设计任务书 2)目录 3)总体设计方案(流程图) 4)使用说明书及运行实例(界面) 5)源代码及注释 6)课程设计心得2. 系统需求分析与功能设计(1)成绩管理系统主要功能: 1)初始化链表 2)输入数据 3)显示全部记录4)查询记录(分按姓名和学号查询两种)5)删除记录6)添加记录6)学生成绩排名并显示排名(2)界面设计 系统界面采用图形和数字化菜单设计(3)课程设计的要求和数据 1)C语言实现2)对学生信息进行管理(包括成绩的输入、输出、查询、删除、排序、退出)3)学生信息:基本信息:学号、姓名、性别、成绩等学生成绩输入(一次性输入一条记录并计算总分及平均分)显示信息:完成全部学生记录的显示查询信息:完成按学号和按姓名查询记录,并显示删除信息:按学号删除信息排序:按学生总分排序,显示排名4)应提供一个主界面调用各项功能,使得操作界面清晰美观5)退出系统,记录无保存3. 总体设计1、功能模块:(1)成绩输入功能(2)成绩输出功能(3)成绩查询功能(4)删除功能(5)排序功能(6)退出系统2、详细设计:(1)初始化学生信息表:申请头结点STU *head,head-next=NULL;实现此操作(2)成绩输出模块:void xianshi(L) void paixu(L) void chaxun(L)通过此输出信息(3)查询模块:void chanzhao(L)实现个种查找功能(4)删除功能:void shanchu(L)(5)排序功能:void paixu(L)3、总体设计方案程序流程图:结束开始输出菜单根据菜单输入n的值选择程序输入退出输出查找排序添加删除4、算法说明Void main()主函数(内含初始化链表head=(STU *) malloc (sizeof(STU); head-next=NULL、主界面、函数调用模块应用switch()语句);Void shuru(L)创建输入数据:r=(STU*)malloc(sizeof(STU)申请结点输入数据,插入到链表,r-next=NULL;s-next=r;s=r;保存;Void xianshi(L)显示学生信息:应用循环语句while(q-next!=tail)输出每一节点数据,直至q指向为节点tail=NULL;Void chaxun(L)查找学生信息并显示结果:分按学号和姓名查询并输出查找的信息,switch做判断按何种方式查询,while()循环语句进行匹配查询,知道找到为止,引用strcmp()函数进行匹配;Void chazhao( L,no)按要求查找记录:while()语句循环按学号进行查找;Void tianjia(L)尾插法插入数据,p2=(STU*)malloc(sizeof(STU)申请结点,输入数据,找到尾结点for(p3=L;p3-next!=NULL;p3=p3-next),插入链表p3-next=p2;Void gengxin(L)修改学生信息:查找函数chazhao()找到要修改的节点,再进行修改Void shanchu(L)删除学生记录:while(strcmp(p-sname,name)!=0)&p-next!=NULL)找到要删除的节点,进行删除;Void mingci(L)为学生成绩排名并显示排名;冒泡排序法给链表安总成绩排名,然后for()循环输出排序完的链表数据。5、系统难点分析1、链表的排序,只能做到初步的排序,不能实现对成绩相同的学生排名相同功能;2、查找功能不够强大,对字符串的查询比如不区分大小写功能不能实现;3、对各种输入值不加于区分,比如姓名写成数字,年龄的限制(1-100)4、程序重复的语句多、繁琐,不善应用函数的调用。6、系统测试源代码(见附录)调试运行如下:(如图1、图2)图1图2图3输入测试:10输入目的:查看输入除主界面外的序号可否进行操作。正确输出:输入错误!请慎重选择。实际输出:如下图所示。当前状态:通过(实际输出与正确相符)。测试结果分析:测试策略:输入一个主界面不包含的选项。得到数据显示输入错误。(如图3)图4输入测试:a输入目的:查看输入字符可否进行操作。正确输出:输入错误!请慎重选择。实际输出:(图4)当前状态:通过(实际输出与正确相符)。测试结果分析:测试策略:输入一个主界面不包含的选项。得到数据显示输入错误。图5已删测试输入:输入姓名:邱为民;输入学号:1;输入性别:1为男;输入年龄:21;输入语文成绩88;数学成绩82;英语成绩89;一个学生信息登记完毕。再输入另一个学生数据:输入姓名:陈婷婷;输入学号:1;输入性别:测试目的:设计该输入的目的在于测试程序在登记学生信息方面是否存在无法登记学生信息、在选择登记学生信息时是否没有出现相应界面等情况以及能否正确输入等功能。正确输出:输入姓名:邱为民;输入学号:1;输入性别:1为男;输入年龄:21;输入语文成绩88;输入数学成绩82;输入英语成绩89选择是否输入信息请按(1、0):1;输入姓名:陈婷婷;输入学号:1;输入性别:0;输入年龄:实际输出:如上(图5)输出界面。当前状态:已改正(实际输出与正确输出不符,但现在已修改正确)测试结果分析:测试策略在于输入一组数据后以便后面的操作完成学生信息的登记。得到的数据由上面的截图(图5)证明。测试输入:2选择显示测试目的:测试显示功能是否能够实现正确输出:按姓名、学号、性别、年龄、语文、数学、英语、平均分及总分显示学生信息。实际输出:如下图(图6)所示。当前状态:通过(实际输出与正确相符)。测试结果分析:测试策略:选择查找看其是否正确找到所查找数据。得到数据结果显示查找无误。图6已删测试输入:3选择查找测试目的:测试查找功能是否能够实现正确输出:1按学号查询 2按姓名查询 0返回主菜单 选择1 请输入要查找的学号:1查找结果:既要查找的数据。查询完毕或没有要查询的记录!实际输出:如下图(图7)所示。当前状态:通过(实际输出与正确相符)。测试结果分析:测试策略:按学号查找,首先要输入对应的数据,接着成功查找。显示的数据是按学号查找的结果,无差错。图7已删测试输入:4选择添加学生数据。测试目的:查看添加功能是否能够运行。正确输出:;输入要添加的姓名:小丘;输入添加的学号:7;输入性别(1为男,0为女):0;输入年龄:19;请你输入语文成绩:88;输入数学成绩:85;输入英语成绩:90;此信息已添加。并且再次查询。实际输出:如下图(图8)所示。当前状态:通过(实际输出与正确相符)。测试结果分析:测试策略:分别输入提示信息查看添加功能是否能够运用。通过再次查询显示添加无误。图8已删图9已删测试输入:5选择修改学生数据。测试目的:测试是否能够实现修改功能。正确输出:输入要修改的人名:小丘;输入新姓名:小球球;输入新学号(原来是学号5):5;输入新性别:(1是男0是女)0;输入年龄(原来年龄是19)19;输入语文成绩(原来是88.000000分):88;输入数学成绩(原来是88.000000分):85;请你输入英语成绩(原来是88.000000分):90;提示:修改完成或没找到要修改的项!。再次查询并显示查询结果。实际输出:如上图(图9)所示。当前状态:通过(实际输出与正确相符)。测试结果分析:测试策略:根据提示输入修改的数据分别观察是否正确。得到的数据是提示我输入信的数据并告诉我原来的数据,我根据提示输入新的数据,结果无误。测试输入:6选择删除操作。测试目的:测试其是否能够正确删除想要删除的数据。正确输出:请输入要删除的姓名:3; 已删除!并显示新的数据。实际输出:如图(图10)所示。当前状态:通过(实际输出与正确相符)。测试结果分析:测试策略:根据提示进行删除;系统提示删除成功。得到的数据显示显示删除成功,证明这一部分无差错。图10已删测试输入:7选择排序测试目的:看排序功能是否能够实现正确输出:按照名次、姓名、学号、性别、年龄、语文、数学、英语、平均分、总分显示学生数据。实际输出:如下图(图11)所示。当前状态:通过(实际输出与正确相符)。测试结果分析:测试策略:选择排序,系统自动根据总分和平均分对数据进行排序并输出。得到的数据显示并未出错。图11已删测试输入:0选择退出。测试目的:成功退出系统。正确输出:press any key to continue.实际输出:如下图(图12)所示。当前状态:通过(实际输出与正确相符)。测试结果分析:测试策略:选择退出以便成功退出系统。得到数据:无误图12已删7、心得体会这次的实训结束了,现在的我正在做着最后的工作填写实训报告。感触还真是很多,那几天的坚持,每天八节课就坐在电脑前敲着代码,有的时候晚上回了寝室还要继续敲。可以说我们男生还是对程序这块比较感兴趣的。但是面对这么大的一个课题写这样的一个程序我还是第一次,所以对于我来说难道还是挺大的。很多时候焦头烂额心烦意乱也写不好,写出来后反复调试反复出错,简直是在考验我们的耐心。看着每个同学焦急的样子,真的有点担心在规定的期限内是不是能够完成任务。所以期间自己会想,如果将来从事了这个行业,面对更加复杂的程序更加有难度的题目要求,心理压力不是更大么?不管怎么样,还是要把程序写完。其中也遇到了很多困难:因为这个题目要求要有9个小题目,而且有的小题目还要求里面还要有选择,这样难度更加提高而且更加复杂。刚开始会理不出头绪,不知道该先弄哪一块。从头开始往后写整个程序是不可能的,那样会错的更加离谱,所以只好先分快些再综合起来。而且整个星期天天对着电脑敲这样一个程序确实很烦躁。但是告诉自己要坚持下去,到了最后把程序调试出来后,心里真的是激动万分,感慨也颇深:面对复杂的事情而且要长期坚持时,千万不可浮躁了事,那样欠下的债会越来越多,一定要定下心来踏踏实实的去做,我发现有了好的开始,后面再乱的思绪也会慢慢捋清楚。心态很重要,第一天还好,第二天的时候,心虚特别浮躁,显然那天的效率十分低下,回去后和朋友聊天,被开导后慢慢整理思绪平静下心来开始做,发现一切并没有原本想象的那么棘手。面对问题要自己主动去解决,程序过程中难免有很多难题,别人无法帮助自己,要靠自己去努力克服才能接着做下一步。所以在完成后,除了自己完成任务的喜悦感意外,还有一些感慨,我觉得这一次我不仅仅收获了如何去写一个程序,而是如何做好一件看似棘手困难的复杂的事情。8、参考文献1杨路明,c语言程序设计教程.北京:邮电大学出版社,2005年12月第2版2耿国华,数据结构C语言描述.北京:高等教育出版社,2005年7月第1版附录源代码如下:#include #include #include #include #include linlist.h/*定义结构体类型typedef struct Stuchar sname20;int sno;char sex10;int nianling;float yuwen;float shuxue;float yingyu;float avg;float sum;struct Stu *next;STU,*Linlist;void shuru(L);void xianshi(L);void chaxun(L);void tianjia(L);void gengxin(L);void shanchu(L);void mingci(L);STU* chazhao(Linlist L,int no);/*主函数*/void main()int m;STU *head;head=(STU *) malloc (sizeof(STU);head-next=NULL;while(m) printf( *欢迎进入学生成绩管理*n);printf( |输入 0 返回 |nn);printf( |输入 1 输入学生信息 |nn);printf( |输入 2 显示学生信息 |nn);printf( |输入 3 查询学生信息 |nn);printf( |输入 4 添加学生信息 |nn);printf( |输入 5 更新学生信息 |nn);printf( |输入 6 删除学生信息 |nn);printf( |输入 7 计算并显示学生排名 |n);printf( *n);scanf(%d,&m);switch(m) case 1:shuru(L);break; case 2:xianshi(L);break; case 3:chaxun(L);break; case 4:tianjia(L);break; case 5:gengxin(L);break; case 6:shanchu(L);break; case 7:mingci(L);break; case 0:; break;default:printf(输入错误!请慎重选择n);break;/*各子函数*/STU* chazhao(Linlist L,int no) /* 按学号查询 */ STU *r; r=L-next; while(r!=NULL) if(r-sno=no) return r; r=r-next; return 0; void shuru(Linlist head)int flag=1, c,sex,sno;STU *r=NULL,*s=NULL,*m=NULL;s=head;while(s-next!=NULL) s=s-next; /* 将指针置于最末尾 */while(1) r=(STU*)malloc(sizeof(STU);/*申请结点*/ printf(输入姓名:); /*添加信息*/ scanf(%s,r-sname); printf(输入学号:);scanf(%d,&sno);m=chazhao(head,sno);while(m!=NULL)m=chazhao(head,sno); if(m!=NULL) printf(请你输入不重复的学号:n); scanf(%d,&sno); r-sno=sno; printf(输入性别(1-boy,0-girl):);doscanf(%d,&sex); if(sex=1)strcpy(r-sex,boy); else if(sex=0) strcpy(r-sex,girl);else printf(输入错误!(1-boy,0-girl):n);while(sex!=1&sex!=0); printf(输入年龄:); scanf(%d,&r-nianling); printf(输入语文成绩:); scanf(%f,&r-yuwen); while(r-yuwenyuwen100.0) if(r-yuwenyuwen100.0) printf(输入错误,请重新输入!n); printf(输入语文成绩:); scanf(%f,&r-yuwen); printf(输入数学成绩:); scanf(%f,&r-shuxue); while(r-shuxueshuxue100.0) if(r-shuxueshuxue100.0) printf(输入错误,请重新输入!n); printf(输入数学成绩:); scanf(%f,&r-shuxue); printf(输入英语成绩:); scanf(%f,&r-yingyu); while(r-yingyuyingyu100.0) if(r-yingyuyingyu100.0) printf(输入错误,请重新输入!n); printf(输入英语:); scanf(%f,&r-yingyu); r-sum=r-yuwen+r-shuxue+r-yingyu; r-avg=r-sum/3; r-next=NULL; s-next=r; s=r; printf(选择是否输入信息请按(1/0):n); scanf(%d,&c); if(c=0) break; /*保存链表*/printf(信息已输入!n);void xianshi(Linlist L)STU *a=NULL; STU *p,*q,*tail,*s; tail=NULL; if(L-next=NULL)printf(此表中无记录,请输入记录后在使用此功能!n);return; while(L-next!=tail) p=L; q=p-next; while(q-next!=tail) if(p-next-snoq-next-sno) s=q-next; p-next=q-next; q-next=q-next-next; p-next-next=q; q=s; p=p-next; q=q-next; tail=q; a=L-next;printf(姓名t学号t性别t年龄t语文t数学t英语t平均分t总分n);for(a=L-next;a!=NULL;a=a-next)printf(%-8s%-8d%-8s%-8d%-8.2f%-8.2f%-8.2f%-8.2f%-8.2fn,a-sname,a-sno,a-sex,a-nianling,a-yuwen,a-shuxue,a-yingyu,a-avg,a-sum);void chaxun(Linlist L)STU *p;char name20;int sno, n;if(L-next=NULL)printf(此表中无记录,请输入记录后在使用此功能!n);return;while(n)printf( *请选择查询方式*n);printf( 1*按学号查询n);printf( 2*按姓名查询n);printf( 0*返回主菜单n);scanf(%d,&n);switch(n)case 1:printf(请输入要查询的学号:n);scanf(%d,&sno);printf(*学生信息*n);printf(姓名t学号t性别t年龄t语文t数学t英语n);for(p=L-next;p!=NULL;p=p-next)if(p-sno)=sno)printf(%-8s%-8d%-8s%-8d%-10.2f%-10.2f%-10.2fn,p-sname,p-sno,p-sex,p-nianling,p-yuwen,p-shuxue,p-yingyu); printf(*查询完毕或没有要查询的记录!n);break;case 2:printf(请输入要查询的姓名n);scanf(%s,name);printf(*学生信息*n);printf(姓名t学号t性别t年龄t语文t数学t英语n);for(p=L-next;p!=NULL;p=p-next)if(strcmp(p-sname,name)=0)printf(%-8s%-8d%-8s%-8d%-10.2f%-10.2f%-10.2fn,p-sname,p-sno,p-sex,p-nianling,p-yuwen,p-shuxue,p-yingyu); printf(*查询完毕或没有要查询的记录!n);break;case 0:break; default:printf(输入错误!请慎重选择);break;void gengxin(Linlist L)STU *p1,*m;char name20;int sex,sno;if(L-next=NULL)printf(此表中无记录,请输入记录后在使用此功能!n);return;printf(输入要修改的人名:);scanf(%s,name);p1=L;while(p1!=NULL)if(strcmp(p1-sname,name)=0) printf(输入新姓名:); /*修改信息*/ scanf(%s,p1-sname); printf(输入新学号(原来是学号%d):,p1-sno); scanf(%d,&sno); m=chazhao(L,sno);while(m!=NULL)m=chazhao(L,sno); if(m!=NULL) printf(请你输入不重复的学号(以0返回上一级菜单:)n); scanf(%d,&sno); p1-sno=sno; printf(输入新性别(1-boy,0-girl):);doscanf(%d,&sex); if(sex=1)strcpy(p1-sex,boy); else if(sex=0) strcpy(p1-sex,girl);else printf(输入错误!(1-boy,0-girl):n);while(sex!=1&sex!=0); printf(输入年龄(原来年龄是%d):,p1-nianling); scanf(%d,&p1-nianling); printf(输入语文成绩(原来是%f分):,p1-yuwen); scanf(%f,&p1-yuwen); while(p1-yuwenyuwen100.0) if(p1-yuwenyuwen100.0) printf(输入错误,请重新输入!n); printf(输入语文成绩:); scanf(%f,&p1-yuwen); printf(输入数学成绩(原来是%f分):,p1-shuxue); scanf(%f,&p1-shuxue); while(p1-shuxueshuxue100.0) if(p1-shuxueshuxue100.0) printf(输入错误,请重新输入!n); printf(输入数学成绩:); scanf(%f,&p1-shuxue); printf(输入英语成绩(原来是%f分):,p1-yingyu); scanf(%f,&p1-yingyu); while(p1-yingyuyingyu100.0) if(p1-yingyuyingyu100.0) printf(输入错误,请重新输入!n); printf(输入英语成绩:); scanf(%f,&p1-yingyu); p1-sum=p1-yuwen+p1-shuxue+p1-yingyu; p1-avg=p1-sum/3;p1=p1-next;printf(修改完成或没找到要修改的项!n);void tianjia(Linlist L)STU *p2=NULL,*p3=NULL,*m;int sex,sno;p2=(STU*)malloc(sizeof(STU); /*申请结点*/if(L-next=NULL)printf(此表中无记录,请输入记录后在使用此功能!n);return; printf(输入添加的姓名:); scanf(%s,p2-sname); printf(输入添加的学号:); scanf(%d,&sno); m=chazhao(L,sno);while(m!=NULL)m=chazhao(L,sno); if(m!=NULL) printf(请你输入不重复的学号(以0返回上一级菜单:)n); scanf(%d,&sno); p2-sno=sno; printf(输入性别(1-boy,0-girl):);doscanf(%d,&sex); if(sex=1)strcpy(p2-sex,boy); else if(sex=0) strcpy(p2-sex,girl);else printf(输入错误!(1-boy,0-girl):n);while(sex!=1&sex!=0); printf(输入年龄:); scanf(%d,&p2-nianling); printf(输入语文成绩:); scanf(%f,&p2-yuwen); while(p2-yuwenyuwen100.0) if(p2-yuwenyuwen100.0) printf(输入错误,请重新输入!n); printf(输入语文成绩:); scanf(%f,&p2-yuwen); printf(输入数学成绩:); scanf(%f,&p2-shuxue); while(p2-shuxueshuxue100.0) if(p2-shuxueshuxue100.0) printf(输入错误,请重新输入!n); printf(输入数学成绩:); scanf(%f,&p2-shuxue); printf(输入英语成绩:); scanf(%f,&p2-yingyu); while(p2-yingyuyingyu100.0) if(p2-yingyuyingyu100.0) printf(输入错误,请重新输入!n); printf(输入英语成绩:); scanf(%f,&p2-yingyu); p2-sum=p2-yuwen+p2-shuxue+p2-yingyu; p2-avg=p2-sum/3; p2-next=NULL; /*保存到链表*/ if(L=NULL) L=(STU*)malloc(sizeof(STU); L-next=p2; else for(p3=L;p3-next!=NULL;p3=p3-next);/*找到尾结点*/ p3-next=p2; printf(此信息已添加n);void shanchu(Linlist L)STU *p=L,*pr=L;char name20;if(L-next=NULL)printf(此表中无记录,请输入记录后在使用此功能!n);return;printf(请输入要删除的姓名:n);scanf(%s,name);if(L=NULL)printf(无此结点n);return;while(strcmp(p-sname,name)!=0)&p-next!=NULL)pr=p;p=p-next;if(strcmp(p-sname,name)=0)if(p=L)L=p-next;elsepr-next=p-next;free(p);printf(已删除!n);elseprintf(没有找到要删除的对象n);void mingci(Linlist L)STU *a=NULL;int i; STU *p,*q,*tail,*s; tail=NULL; if(L-next=NULL)printf(此表中无记录,请输入记录后在使用此功能!n);return; while(L-next!=tail) p=L; q=p-next; while(q-next!=tail) if(p-next-sumnext-sum) s=q-next; p-next=q-next; q-next=q-next-next; p-next-next=q; q=s; p=p-next; q=q-next; tail=q; a=L-next;printf(名次t姓名t学号t性别t年龄t语文t数学t英语t平均分t总分n);for(a=L-next,i=1;a!=NULL;a=a-next,i+)printf(%-8d%-8s%-8d%-8s%-8d%-8.2f%-8.2f%-8.2f%-8.2f%-8.2fn,i,a-sname,a-sno,a-sex,a-nianling,a-yuwen,a-shuxue,a-yingyu,a-avg,a-sum);- 18 -
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!