1需求分析1.1研究背景教育信息化必将涉及许多具体的技术和机器在教育中的应用,它使得一些人往往以技术论,机器论的观点来认识教育信息化的目的,认为教育信息化就是以机器代替教师讲课,代替教育写板书,就是以电子教材代替印刷教材,就是实现网上学习……,并以代替性、省力性、顺利性、效率性作为评价教育信息化的尺度。
而成绩管理系统将大大的提高老师的管理效率,使得老师可以针对学生的具体情况进行深入教育,培养跨世纪的创新人才,是实现教育的现代化。
教育信息化应以新的教育思想、教育观念指导信息技术在教育的各个部门、各个领域广泛应用,应根据创新人才培养的要求,利用信息技术,探索新的教育模式,促进教育现代化。
只有在这样的基础上指导信息技术的教育应用,才是我们所需要的教育信息化。
也就相应产生了对学生成绩的高效管理。
1.2课题研究的目的及意义现在我国各院高校的学生成绩管理水平普遍不高,有的还停留在纸质基础上,这种管理手段已不能适应时代的发展,因为它浪费了许多的人力和物力。
在当今信息时代这种传统的管理方法必然会被计算机为基础的信息管理系统所代替。
成绩管理系统提供了强大的管理功能,方便管理员对考试成绩等信息的添加、修改、删除、查询、分类等操作。
本系统将提高管理人员的工作效率和工作质量。
如今,计算机网络带动了全球信息化得进程。
在高校中,信息化带来的传统教学、科研模式的变化,需要新的管理机制:以信息技术为手段的校务管理,也需要新的机制,即需要一个数字化的校园(Digital Campus)。
数字校园的建设也是高校信息化的重要组成部分。
成绩管理是学校管理中的异常重要的一个环节,作为学校,除了育人,就是与育知,学生成绩管理的计算机化是整个学校教务管理中的重要一部分,能否实现这一步关系到学校办学整体效率的高低,在于它的重要性,学生成绩管理系统的开发与应用就逐渐提入议程,并占着重要的分量。
运用成绩管理系统可以减轻学院教学人员的工作量,加快查询速度,加强管理,以及国家各部门关于信息化的步伐,是各项管理更加规范化。
同时也可以是学生能够尽快知道自己的考试成绩,投入新的课程的学习或复习。
并且也可为高校教育在未来市场的竞争力的提高打下坚实的基础。
1.3课题要求1.以线性链表存储包括学号、姓名、c语言成绩的学生信息。
2.在程序执行过程中,根据输出的提示信息,通过键盘输入程序中的运算命令;相应的输入数据和运算结果显示在其后。
3.程序执行命令包括:<1>.输入学生信息<2>.显示全部信息<3>.查询学生信息<4>.删除学生信息<5>.插入学生信息<6>.修改学生信息<7>.显示分类信息<0>.退出系统2概要设计2.1 抽象数据类型定义为实现上述程序功能,以线性链表为存储结构,为此,进行抽象数据类型定义:ADT Student{数据对象:D={e1,e2,e3|e1,e2,e3∈student(储存学生信息的结构体)}数据关系:R={<e1,e2,e3>}基本操作P:creatList(&L)操作结果:构造一个空的线性链表。
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(&L);初始条件:线性链表L已存在。
操作结果:在给定的信息节点后插入所输入的信息节点,若成功则返回OK,否则返回ERROR。
modify(&L);初始条件:线性链表L已存在。
操作结果:查询所输入的信息结点,并修改其信息。
classify(&L);初始条件:线性链表L已存在。
操作结果:按照给定的条件将所有结点信息分类,并输出各类别信息。
} ADT Student2.2 程序流程图NONOYes开始输入口令主菜单 选择的序号是否符合要求输入学生信息 显示全部信息查询学生信息删除学生信息插入学生信息修改学生信息显示分类信息退出系统3详细设计3.1 存储结构及方式本系统得学生信息采用结构体student定义,并用单链表存储:typedef struct student{char num[13];//学号char name[15];//姓名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)//输入学生信息{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)//查询学生信息{system("cls");char num3[13];……system("pause");return OK;}4,删除学生信息:调用函数Status dele(pstunode &head),提示输入要删除的学生学号,判断其是否存在,若存在则将其从链表中删除,提示删除成功后退出并返回主菜单。
代码如:Status dele(pstunode &head)//删除学生信息{system("cls");char num1[13];……system("pause");return OK;}5,插入学生信息:调用函数Status append(pstunode &head),提示输入学生学号,判断其合法性,然后输入要插入的学生信息,并将其插入该节点之后,退出并返回主菜单。
代码如: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 &head),按照60分以下、60~79分、80~89分、90分以上进行学生信息分类,并显示。
其代码如:Status classify(pstunode &head)//显示分类信息{system("cls");……system("pause");return OK;}8,查找学生信息:调用函数Status getelem(pstunode head,char number[11],pstunode &p)。
其代码如:Status getelem(pstunode head,char number[11],pstunode &p)//查找学生信息{p=head->next;……return OK;}9,保存学生信息:调用函数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)out<<p->data.num<<"\t"<<p-><<"\t"<<p->data.score<<endl;out.close();return OK;}10,读文件:调用函数Status start(pstunode &head),在c盘下查找sort文件,并将数据读入。
其代码如:Status start(pstunode &head)//读文件{pstunode p,q;……system("pause");return OK;}4 调试分析经过一周的代码编写与调试,我终于将各个模块整合了起来,在这个过程中,我遇到了很多问题,如数据未定义,括号不匹配,漏掉分号等简单语法错误,同时也有如循环条件判断错误导致死循环,指针使用前未赋值导致系统报错,逻辑错误而无法产生正确结果等较复杂情况。
但经过自己的不断查阅资料,不断重新编写终于解决了这些问题。
同时考虑到程序的健壮性要求,我增加了该系统对不合法数据的识别功能,并能够及时反馈给用户。