学生成绩记录簿管理系统课程设计.doc

上传人:仙人指路1688 文档编号:2888245 上传时间:2023-03-01 格式:DOC 页数:34 大小:357KB
返回 下载 相关 举报
学生成绩记录簿管理系统课程设计.doc_第1页
第1页 / 共34页
学生成绩记录簿管理系统课程设计.doc_第2页
第2页 / 共34页
学生成绩记录簿管理系统课程设计.doc_第3页
第3页 / 共34页
学生成绩记录簿管理系统课程设计.doc_第4页
第4页 / 共34页
学生成绩记录簿管理系统课程设计.doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《学生成绩记录簿管理系统课程设计.doc》由会员分享,可在线阅读,更多相关《学生成绩记录簿管理系统课程设计.doc(34页珍藏版)》请在三一办公上搜索。

1、1需求分析1.1研究背景教育信息化必将涉及许多具体的技术和机器在教育中的应用,它使得一些人往往以技术论,机器论的观点来认识教育信息化的目的,认为教育信息化就是以机器代替教师讲课,代替教育写板书 ,就是以电子教材代替印刷教材,就是实现网上学习,并以代替性、省力性、顺利性、效率性作为评价教育信息化的尺度。而成绩管理系统将大大的提高老师的管理效率,使得老师可以针对学生的具体情况进行深入教育,培养跨世纪的创新人才,是实现教育的现代化。教育信息化应以新的教育思想、教育观念指导信息技术在教育的各个部门、各个领域广泛应用,应根据创新人才培养的要求,利用信息技术,探索新的教育模式,促进教育现代化。只有在这样的

2、基础上指导信息技术的教育应用,才是我们所需要的教育信息化。也就相应产生了对学生成绩的高效管理。1.2课题研究的目的及意义 现在我国各院高校的学生成绩管理水平普遍不高,有的还停留在纸质基础上,这种管理手段已不能适应时代的发展,因为它浪费了许多的人力和物力。在当今信息时代这种传统的管理方法必然会被计算机为基础的信息管理系统所代替。成绩管理系统提供了强大的管理功能,方便管理员对考试成绩等信息的添加、修改、删除、查询、分类等操作。本系统将提高管理人员的工作效率和工作质量。如今,计算机网络带动了全球信息化得进程。在高校中,信息化带来的传统教学、科研模式的变化,需要新的管理机制:以信息技术为手段的校务管理

3、,也需要新的机制,即需要一个数字化的校园(Digital Campus)。数字校园的建设也是高校信息化的重要组成部分。成绩管理是学校管理中的异常重要的一个环节,作为学校,除了育人,就是与育知,学生成绩管理的计算机化是整个学校教务管理中的重要一部分,能否实现这一步关系到学校办学整体效率的高低,在于它的重要性,学生成绩管理系统的开发与应用就逐渐提入议程,并占着重要的分量。运用成绩管理系统可以减轻学院教学人员的工作量,加快查询速度,加强管理,以及国家各部门关于信息化的步伐,是各项管理更加规范化。同时也可以是学生能够尽快知道自己的考试成绩,投入新的课程的学习或复习。并且也可为高校教育在未来市场的竞争力

4、的提高打下坚实的基础。1.3课题要求1.以线性链表存储包括学号、姓名、c语言成绩的学生信息。2.在程序执行过程中,根据输出的提示信息,通过键盘输入程序中的运算命令;相应的输入数据和运算结果显示在其后。3.程序执行命令包括:.输入学生信息.显示全部信息.查询学生信息.删除学生信息.插入学生信息.修改学生信息.显示分类信息.退出系统2概要设计2.1 抽象数据类型定义为实现上述程序功能,以线性链表为存储结构,为此,进行抽象数据类型定义:ADT Student 数据对象:D=e1,e2,e3|e1,e2,e3student(储存学生信息的结构体)数据关系:R=基本操作P:creatList(&L)操作

5、结果:构造一个空的线性链表。 getelem(L,e ,&p);初始条件:线性链表L已存在。操作结果:在L中查找含有e元素的p节点是否存在,若存在则返回OK,否则返回ERROR。input(&L);初始条件:线性链表L已存在。操作结果:向链表尾插入新节点信息。 all(&L);初始条件:线性链表L已存在。操作结果:显示线性链表L的所有节点信息。 list(&L);初始条件:线性链表L已存在。操作结果:查询是否存在给定信息的节点,若存在则返回OK,否则返回ERROR。 dele(&L);初始条件:线性链表L已存在。操作结果:删除给定信息的节点,若成功则返回OK,否则返回ERROR。 append

6、(&L);初始条件:线性链表L已存在。操作结果:在给定的信息节点后插入所输入的信息节点,若成功则返回OK,否则返回ERROR。 modify(&L);初始条件:线性链表L已存在。操作结果:查询所输入的信息结点,并修改其信息。classify(&L);初始条件:线性链表L已存在。操作结果:按照给定的条件将所有结点信息分类,并输出各类别信息。 ADT Student2.2 程序流程图开始 NO输入口令 主菜单 NO 选择的序号是否符合要求 Yes修改学生信息退出系统显示分类信息插入学生信息删除学生信息查询学生信息显示全部信息输入学生信息3详细设计3.1 存储结构及方式本系统得学生信息采用结构体st

7、udent定义,并用单链表存储: typedef struct studentchar num13;/学号char name15;/姓名int score;/c语言成绩student;typedef struct node student data;/数据域 struct node *next;/指针域stunode,*pstunode;3.2 主要的功能函数1,输入学生信息:调用函数Status input(pstunode &head),首先判断输入的合法性,后将该条信息添加到链表尾部,用于选择是否继续输入,否则返回主菜单。其代码如: Status input(pstunode &head

8、)/输入学生信息 system(cls); char m;while(m=y|m=Y);return OK; 2,显示全部学生信息:调用函数Status all(pstunode &head),其代码如: Status all(pstunode &head)/显示全部信息 system(cls); pstunode p; system(pause); return OK; 3,查询学生信息:调用函数Status list(pstunode &head),提示输入要查询的学生学号,并判断其合法性,后将信息输出,并退出返回主菜单。代码如: Status list(pstunode &head)/查

9、询学生信息 system(cls); char num313; system(pause); return OK;4,删除学生信息:调用函数Status dele(pstunode &head),提示输入要删除的学生学号,判断其是否存在,若存在则将其从链表中删除,提示删除成功后退出并返回主菜单。代码如: Status dele(pstunode &head)/删除学生信息system(cls);char num113;system(pause);return OK;5,插入学生信息:调用函数Status append(pstunode &head),提示输入学生学号,判断其合法性,然后输入要插

10、入的学生信息,并将其插入该节点之后,退出并返回主菜单。代码如: Status append(pstunode &head)/插入学生信息system(cls);system(pause);return OK;6,修改学生信息:调用函数Status modify(pstunode &head),提示输入要修改的学生学号,验证合法性后进行修改,修改成功退出并返回主菜单。其代码如: Status modify(pstunode &head)/修改学生信息system(cls); system(pause);return OK;7,显示分类信息:调用函数Status classify(pstunode

11、 &head),按照60分以下、6079分、8089分、90分以上进行学生信息分类,并显示。其代码如: Status classify(pstunode &head)/显示分类信息 system(cls); system(pause); return OK;8,查找学生信息:调用函数Status getelem(pstunode head,char number11,pstunode &p)。其代码如: Status getelem(pstunode head,char number11,pstunode &p)/查找学生信息p=head-next;return OK;9,保存学生信息:调用函

12、数Status save(pstunode &head),将输入的全部信息保存在c盘下的sort文件中。其代码如: Status save(pstunode &head)/保存学生信息ofstream out; out.open(c:sort.txt); for(pstunode p=head-next;p;p=p-next) outdata.numtdata.nametdata.scoreendl; out.close(); return OK;10,读文件:调用函数Status start(pstunode &head),在c盘下查找sort文件,并将数据读入。其代码如: Status s

13、tart(pstunode &head)/读文件 pstunode p,q; system(pause); return OK;4 调试分析经过一周的代码编写与调试,我终于将各个模块整合了起来,在这个过程中,我遇到了很多问题,如数据未定义,括号不匹配,漏掉分号等简单语法错误,同时也有如循环条件判断错误导致死循环,指针使用前未赋值导致系统报错,逻辑错误而无法产生正确结果等较复杂情况。但经过自己的不断查阅资料,不断重新编写终于解决了这些问题。同时考虑到程序的健壮性要求,我增加了该系统对不合法数据的识别功能,并能够及时反馈给用户。每一件事,过程才是最美好的,我写完一个功能模块,进行不断调试,当看到期

14、待的结果展现在面前时,由衷的喜悦溢于言表;特别当所有功能模块整合到一块后,经过调试能被主函数成功调用时,那感觉太妙了。总的来说,本次课程设计,令人受益匪浅。对数据结构这门课程学习了很多理论知识,但是理论与实践的距离很大,开始时对结构体,对链表的体会只是在意识层面,而通过这次课程设计,真真正正的运用它们来储存学生信息时,我才认识到它们都是很好的工具,仿佛也有了可触的感觉。同时,我也深深体会到自己的C语言知识还是那么浅薄,而这次也让自己动手能力和独立思考能力有了很大的提高。5 用户手册1. 本程序的运行环境为WINDOWS操作系统,运行软件为Microsoft Visual C+;2. 开始运行程

15、序,输入登录密码“ting”,开始进入主菜单。3. 若用户首次登陆,则应首先进行学生信息录入,否则即可按照主菜单的选项选择所要执行功能,须进行合法的数据输入。4. 当输入1,则进行学生信息输入操作,按要求输入学号(小于12位整数),姓名(小于15的字符串),每次均用回车键结束输入。5. 当输入2,则显示已录入全部学生信息。6. 当输入3,则进行学生信息查询操作,用户需要输入所要查询学生的学号或姓名,若该学生信息存在,则系统会显示该学生的全部信息。7. 当输入4,则进行删除学生信息操作,用户需要输入所要删除的学生学号,若该学号存在,系统会将其删除。8. 当输入5,则进行插入学生信息操作,该操作是

16、在已经录入的一位学生后插入新学生信息。用户需要首先输入该已录入的学生学号,后输入新学生信息。9. 当输入6,则进行修改学生信息操作,用户需要输入需要修改的学生学号或姓名,若该学生信息存在,则会提示继续输入修改信息,否则退出返回主菜单。10. 当输入7,则按照c语言成绩将学生信息以60分以下、6079分、8089分、90分以上等级别进行分类并显示。11. 当输入0,则退出系统,并保存最终的所有学生信息,程序运行完毕。6 测试数据及结果1,使用密码,首次进入学生记录簿信息管理系统:2,进入系统界面,对不合法输入做出判断:3,选择1,输入学生信息,并对不合法输入作出判断:4,显示全部信息:5,查询学

17、生信息:6,删除学生信息,并对不合法输入作出判断,后显示结果:7,插入学生信息,后显示结果:8,修改学生信息,对不合法输入做出判断,后显示结果:9,显示分类信息:10,退出系统并保存信息,所输入信息将保存在C盘下的sort文件下。 参考文献1 严蔚敏,吴伟民编著. 数据结构(C语言版). 北京:清华大学出版社,1997.042 孟爱国,左利芳,谢中科等编著.C语言程序设计.上海:复旦大学出版社,2010.23 马春江, 李慧勇, 孟繁军编著. 新编数据结构教程.北京: 中国电力出版社,20064 孙淑霞,肖阳春,魏琴等.C/C+程序设计教程(第2版)。北京:电子工业出版社,2007.035 谭

18、浩强。C+程序设计。北京:清华大学出版社,2004,066 朱战立编著.数据结构使用C+语言.西安:西安电子科技大学出版社,2001.27 缪淮扣,顾训穰,沈俊编著.数据结构:C+实现.北京:科学出版社,2002附录 源代码程序#include #include iostream.h#include string.h#include #include iomanip.h#include stdlib.h#define ERROR 0#define OK 1#define N 2typedef int Status;typedef struct studentchar num13;/学号char

19、 name15;/姓名int score;/c语言成绩student;typedef struct node student data;/数据域 struct node *next;/指针域stunode,*pstunode;Status getelem(pstunode head,char number11,pstunode &p);/查找学生信息Status input(pstunode &head);/输入学生信息Status all(pstunode &head);/显示全部信息Status list(pstunode &head);/查询学生信息Status dele(pstunod

20、e &head);/删除学生信息Status append(pstunode &head);/插入学生信息Status modify(pstunode &head);/修改学生信息Status classify(pstunode &head);/显示分类信息void password()/使用密码进入 char str17; system(cls); coutendlendlendl; coutsetw(30)str1; coutendlendlendl; if (strcmp(str1,ting)!=0) coutsetw(40)口令不正确!请重新输入!n; system(pause); p

21、assword(); return;char menu()/主菜单 system(cls);int n=1;char select;coutendlendlendl;coutsetw(19)*主菜单*endlendl;coutsetw(26)n+.输入学生信息endlendl;coutsetw(26)n+.显示全部信息endlendl;coutsetw(26)n+.查询学生信息endlendl; coutsetw(26)n+.删除学生信息endlendl; coutsetw(26)n+.插入学生信息endlendl; coutsetw(26)n+.修改学生信息endlendl;coutsetw

22、(26)n+.显示分类信息endlendl;coutsetw(26)0.退出系统endlendlendl;coutsetw(22)select;if(select=0&select=7); elsecoutendlsetw(26)非法数据!请重新输入!;system(pause);select=menu();return select; char Exit()/退出系统 system(cls);char s;coutsetw(36)确定退出系统请输入Y或y s;return s; void creatList(pstunode &head)/建立带表头空链表 head=(pstunode)ma

23、lloc(sizeof(stunode); if(!head) exit(0); head-next=NULL; Status input(pstunode &head)/输入学生信息 system(cls); char m; char s50; int i,k; pstunode p,q,frist,last; for(q=head;q-next;q=q-next);last=q;dofrist=( pstunode)malloc(sizeof(stunode);if(!frist) return ERROR;coutsetw(25)s; if(strlen(s)data.num,s); e

24、lse k=0;cout=0&si=9) continue; else k=0;coutnext;p;p=p-next) if(strcmp(frist-data.num,p-data.num)=0)/如果学号输入重复则退出 free(frist); cout该学号已存在!endl; system(pause); return ERROR; coutsetw(25)s; if(strlen(s)data.name,s); else k=0;cout您输入的姓名过长(小于15位),请重新输入:; while(k=0); coutsetw(25)frist-data.score; frist-ne

25、xt=NULL; last-next=frist; last=frist; coutendlendl; cout继续输入请按y或Y,否则按任意键结束输入:endl; m=getch(); coutmnext; if(!head-next) cout该系统学生信息为空!endl;system(pause); return ERROR; else while(p) cout学号:setiosflags(ios:left)setw(13)data.num姓名:setw(15)data.name该学生的c语言成绩为:data.scorenext; coutendlnext; if(!head-next

26、) cout该类学生信息为空!endlendlendl; return ERROR; else while(p)cout学号:setiosflags(ios:left)setw(13)data.num姓名:setw(15)data.name该学生的c语言成绩为:data.scorenext; coutendl;coutendlnext) cout该系统学生信息为空!endl;system(pause); return ERROR; cout请输入您想查询的学生学号或者姓名:num3; if(!getelem(head,num3,p) return ERROR;/查找,若不成功则退出 cout该

27、学生学号是:data.numendl; cout该学生姓名是:data.nameendl; cout该学生c语言成绩为:data.scoreendl; coutnext) cout该系统学生信息为空!endl;system(pause); return ERROR;cout请输入要删除的学生学号num1;p1=head-next;while(strcmp(p1-data.num,num1)!=0&p1-next!=NULL)p2=p1;p1=p1-next ;if(strcmp(p1-data.num,num1)=0)if(p1=head-next)head-next=p1-next;else

28、 p2-next=p1-next;free(p1);cout学号为num1的学生的信息已删除!endl;else cout学号num1不存在!next) cout该系统学生信息为空!endl;system(pause); return ERROR;pstunode p1,p2,p3;/p1为指向要插入的前驱节点,p2指向要插入的新节点,p3用于循环cout请输入你要在该学生后插入新学生信息,则其学号为:num;coutendl; if(!getelem(head,num,p1) return ERROR;/查找,若不成功则退出p2=(pstunode)malloc(sizeof(stunode

29、);cout请输入您想插入的学生学号,姓名,c+成绩:s; if(strlen(s)data.num,s); else k=0;cout=0&si=9) continue; else k=0;coutnext;p3;p3=p3-next)/如果学号输入重复则退出 if(strcmp(p2-data.num,p3-data.num)=0) cout该学号已存在!endl; system(pause); return ERROR; coutsetw(25)s; if(strlen(s)data.name); else k=0;cout您输入的姓名过长(小于15位),请重新输入:;while(k=0

30、); coutsetw(25)p2-data.score;p2-next=p1-next;p1-next=p2;system(pause);return OK; Status modify(pstunode &head)/修改学生信息system(cls);pstunode p;char num13;char s50;int i,k; if(!head-next) cout该系统学生信息为空!endl;system(pause); return ERROR;coutnum;if(!getelem(head,num,p) return ERROR; /查找,若不成功则退出 couts; if(s

31、trlen(s)data.num); else k=0;cout=0&si=9) continue; else k=0;cout您输入的学号为非整数,请重新输入: ;break; while(k=0); couts; if(strlen(s)data.name,s); else k=0;cout您输入的姓名过长(小于15位),请重新输入:;while(k=0);coutp-data.score; system(pause);return OK; Status classify(pstunode &head)/显示分类信息 system(cls); pstunode p,q1,q2,q3,q4,

32、s; pstunode L1,L2,L3,L4; creatList(L1); creatList(L2); creatList(L3); creatList(L4); q1=L1; q2=L2; q3=L3; q4=L4; if(!head-next) cout该系统学生信息为空!next;s;s=s-next) p=( pstunode)malloc(sizeof(stunode); if(!p) return ERROR; if(s-data.scoredata.name,s-data.name);strcpy(p-data.num,s-data.num);p-data.score=s-data.score;/复制数据 p-next=NULL;q1-next=p;q1=p; else if(s-data.score=60&s-data.scoredata.name,s-data.name);strcpy(p-data.num,s-data.num);p-data.score=s-data.score;/复制数据 p-next=NULL;q2-next=p;q2=p; else if(s-data.score=80&s-data.score90)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号