学生成绩记录簿管理系统课程设计.docx
《学生成绩记录簿管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《学生成绩记录簿管理系统课程设计.docx(36页珍藏版)》请在冰点文库上搜索。
学生成绩记录簿管理系统课程设计
1需求分析
1.1研究背景
教育信息化必将涉及许多具体的技术和机器在教育中的应用,它使得一些人往往以技术论,机器论的观点来认识教育信息化的目的,认为教育信息化就是以机器代替教师讲课,代替教育写板书,就是以电子教材代替印刷教材,就是实现网上学习……,并以代替性、省力性、顺利性、效率性作为评价教育信息化的尺度。
而成绩管理系统将大大的提高老师的管理效率,使得老师可以针对学生的具体情况进行深入教育,培养跨世纪的创新人才,是实现教育的现代化。
教育信息化应以新的教育思想、教育观念指导信息技术在教育的各个部门、各个领域广泛应用,应根据创新人才培养的要求,利用信息技术,探索新的教育模式,促进教育现代化。
只有在这样的基础上指导信息技术的教育应用,才是我们所需要的教育信息化。
也就相应产生了对学生成绩的高效管理。
1.2课题研究的目的及意义
现在我国各院高校的学生成绩管理水平普遍不高,有的还停留在纸质基础上,这种管理手段已不能适应时代的发展,因为它浪费了许多的人力和物力。
在当今信息时代这种传统的管理方法必然会被计算机为基础的信息管理系统所代替。
成绩管理系统提供了强大的管理功能,方便管理员对考试成绩等信息的添加、修改、删除、查询、分类等操作。
本系统将提高管理人员的工作效率和工作质量。
如今,计算机网络带动了全球信息化得进程。
在高校中,信息化带来的传统教学、科研模式的变化,需要新的管理机制:
以信息技术为手段的校务管理,也需要新的机制,即需要一个数字化的校园(DigitalCampus)。
数字校园的建设也是高校信息化的重要组成部分。
成绩管理是学校管理中的异常重要的一个环节,作为学校,除了育人,就是与育知,学生成绩管理的计算机化是整个学校教务管理中的重要一部分,能否实现这一步关系到学校办学整体效率的高低,在于它的重要性,学生成绩管理系统的开发与应用就逐渐提入议程,并占着重要的分量。
运用成绩管理系统可以减轻学院教学人员的工作量,加快查询速度,加强管理,以及国家各部门关于信息化的步伐,是各项管理更加规范化。
同时也可以是学生能够尽快知道自己的考试成绩,投入新的课程的学习或复习。
并且也可为高校教育在未来市场的竞争力的提高打下坚实的基础。
1.3课题要求
1.以线性链表存储包括学号、姓名、c语言成绩的学生信息。
2.在程序执行过程中,根据输出的提示信息,通过键盘输入程序中的运算命令;相应的输入数据和运算结果显示在其后。
3.程序执行命令包括:
<1>.输入学生信息
<2>.显示全部信息
<3>.查询学生信息
<4>.删除学生信息
<5>.插入学生信息
<6>.修改学生信息
<7>.显示分类信息
<0>.退出系统
2概要设计
2.1抽象数据类型定义
为实现上述程序功能,以线性链表为存储结构,为此,进行抽象数据类型定义:
ADTStudent{
数据对象:
D={e1,e2,e3|e1,e2,e3∈student(储存学生信息的结构体)}
数据关系:
R={}
基本操作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已存在。
操作结果:
按照给定的条件将所有结点信息分类,并输出各类别信息。
}ADTStudent
2.2程序流程图
NO
NO
Yes
3详细设计
3.1存储结构及方式
本系统得学生信息采用结构体student定义,并用单链表存储:
typedefstructstudent
{
charnum[13];//学号
charname[15];//姓名
intscore;//c语言成绩
}student;
typedefstructnode
{
studentdata;//数据域
structnode*next;//指针域
}stunode,*pstunode;
3.2主要的功能函数
1,输入学生信息:
调用函数Statusinput(pstunode&head),首先判断输入的合法性,后将该条信息添加到链表尾部,用于选择是否继续输入,否则返回主菜单。
其代码如:
Statusinput(pstunode&head)//输入学生信息
{
system("cls");
charm;
………
}while(m=='y'||m=='Y');
returnOK;
}
2,显示全部学生信息:
调用函数Statusall(pstunode&head),其代码如:
Statusall(pstunode&head)//显示全部信息
{
system("cls");
pstunodep;
……
system("pause");
returnOK;
}
3,查询学生信息:
调用函数Statuslist(pstunode&head),提示输入要查询的学生学号,并判断其合法性,后将信息输出,并退出返回主菜单。
代码如:
Statuslist(pstunode&head)//查询学生信息
{
system("cls");
charnum3[13];
……
system("pause");
returnOK;
}
4,删除学生信息:
调用函数Statusdele(pstunode&head),提示输入要删除的学生学号,判断其是否存在,若存在则将其从链表中删除,提示删除成功后退出并返回主菜单。
代码如:
Statusdele(pstunode&head)//删除学生信息
{
system("cls");
charnum1[13];
……
system("pause");
returnOK;
}
5,插入学生信息:
调用函数Statusappend(pstunode&head),提示输入学生学号,判断其合法性,然后输入要插入的学生信息,并将其插入该节点之后,退出并返回主菜单。
代码如:
Statusappend(pstunode&head)//插入学生信息
{
system("cls");
……
system("pause");
returnOK;
}
6,修改学生信息:
调用函数Statusmodify(pstunode&head),提示输入要修改的学生学号,验证合法性后进行修改,修改成功退出并返回主菜单。
其代码如:
Statusmodify(pstunode&head)//修改学生信息
{
system("cls");
……
system("pause");
returnOK;
}
7,显示分类信息:
调用函数Statusclassify(pstunode&head),按照60分以下、60~79分、80~89分、90分以上进行学生信息分类,并显示。
其代码如:
Statusclassify(pstunode&head)//显示分类信息
{
system("cls");
……
system("pause");
returnOK;
}
8,查找学生信息:
调用函数Statusgetelem(pstunodehead,charnumber[11],pstunode&p)。
其代码如:
Statusgetelem(pstunodehead,charnumber[11],pstunode&p)//查找学生信息
{
p=head->next;
……
returnOK;
}
9,保存学生信息:
调用函数Statussave(pstunode&head),将输入的全部信息保存在c盘下的sort文件中。
其代码如:
Statussave(pstunode&head)//保存学生信息
{
ofstreamout;
out.open("c:
\\sort.txt");
for(pstunodep=head->next;p;p=p->next)
out<data.num<<"\t"<data.name<<"\t"<data.score<out.close();
returnOK;
}
10,读文件:
调用函数Statusstart(pstunode&head),在c盘下查找sort文件,并将数据读入。
其代码如:
Statusstart(pstunode&head)//读文件
{
pstunodep,q;
……
system("pause");
returnOK;
}
4调试分析
经过一周的代码编写与调试,我终于将各个模块整合了起来,在这个过程中,我遇到了很多问题,如数据未定义,括号不匹配,漏掉分号等简单语法错误,同时也有如循环条件判断错误导致死循环,指针使用前未赋值导致系统报错,逻辑错误而无法产生正确结果等较复杂情况。
但经过自己的不断查阅资料,不断重新编写终于解决了这些问题。
同时考虑到程序的健壮性要求,我增加了该系统对不合法数据的识别功能,并能够及时反馈给用户。
每一件事,过程才是最美好的,我写完一个功能模块,进行不断调试,当看到期待的结果展现在面前时,由衷的喜悦溢于言表;特别当所有功能模块整合到一块后,经过调试能被主函数成功调用时,那感觉太妙了。
总的来说,本次课程设计,令人受益匪浅。
对数据结构这门课程学习了很多理论知识,但是理论与实践的距离很大,开始时对结构体,对链表的体会只是在意识层面,而通过这次课程设计,真真正正的运用它们来储存学生信息时,我才认识到它们都是很好的工具,仿佛也有了可触的感觉。
同时,我也深深体会到自己的C语言知识还是那么浅薄,而这次也让自己动手能力和独立思考能力有了很大的提高。
5用户手册
1.本程序的运行环境为WINDOWS操作系统,运行软件为MicrosoftVisualC++;
2.开始运行程序,输入登录密码“ting”,开始进入主菜单。
3.若用户首次登陆,则应首先进行学生信息录入,否则即可按照主菜单的选项选择所要执行功能,须进行合法的数据输入。
4.当输入1,则进行学生信息输入操作,按要求输入学号(小于12位整数),姓名(小于15的字符串),每次均用回车键结束输入。
5.当输入2,则显示已录入全部学生信息。
6.当输入3,则进行学生信息查询操作,用户需要输入所要查询学生的学号或姓名,若该学生信息存在,则系统会显示该学生的全部信息。
7.当输入4,则进行删除学生信息操作,用户需要输入所要删除的学生学号,若该学号存在,系统会将其删除。
8.当输入5,则进行插入学生信息操作,该操作是在已经录入的一位学生后插入新学生信息。
用户需要首先输入该已录入的学生学号,后输入新学生信息。
9.当输入6,则进行修改学生信息操作,用户需要输入需要修改的学生学号或姓名,若该学生信息存在,则会提示继续输入修改信息,否则退出返回主菜单。
10.当输入7,则按照c语言成绩将学生信息以60分以下、60~79分、80~89分、90分以上等级别进行分类并显示。
11.当输入0,则退出系统,并保存最终的所有学生信息,程序运行完毕。
6测试数据及结果
1,使用密码,首次进入学生记录簿信息管理系统:
2,进入系统界面,对不合法输入做出判断:
3,选择1,输入学生信息,并对不合法输入作出判断:
4,显示全部信息:
5,查询学生信息:
6,删除学生信息,并对不合法输入作出判断,后显示结果:
7,插入学生信息,后显示结果:
8,修改学生信息,对不合法输入做出判断,后显示结果:
9,显示分类信息:
10,退出系统并保存信息,所输入信息将保存在C盘下的sort文件下。
参考文献
[1]严蔚敏,吴伟民编著.数据结构(C语言版).北京:
清华大学出版社,1997.04
[2]孟爱国,左利芳,谢中科等编著.C语言程序设计.上海:
复旦大学出版社,2010.2
[3]马春江,李慧勇,孟繁军编著.新编数据结构教程.北京:
中国电力出版社,2006
[4]孙淑霞,肖阳春,魏琴等.C/C++程序设计教程(第2版)。
北京:
电子工业出版社,2007.03
[5]谭浩强。
C++程序设计。
北京:
清华大学出版社,2004,06
[6]朱战立编著.数据结构——使用C++语言.西安:
西安电子科技大学出版社,2001.2
[7]缪淮扣,顾训穰,沈俊编著.数据结构:
C++实现.北京:
科学出版社,2002
附录源代码程序
#include
#include"iostream.h"
#include"string.h"
#include
#include"iomanip.h"
#include"stdlib.h"
#defineERROR0
#defineOK1
#defineN2
typedefintStatus;
typedefstructstudent
{
charnum[13];//学号
charname[15];//姓名
intscore;//c语言成绩
}student;
typedefstructnode
{
studentdata;//数据域
structnode*next;//指针域
}stunode,*pstunode;
Statusgetelem(pstunodehead,charnumber[11],pstunode&p);//查找学生信息
Statusinput(pstunode&head);//输入学生信息
Statusall(pstunode&head);//显示全部信息
Statuslist(pstunode&head);//查询学生信息
Statusdele(pstunode&head);//删除学生信息
Statusappend(pstunode&head);//插入学生信息
Statusmodify(pstunode&head);//修改学生信息
Statusclassify(pstunode&head);//显示分类信息
voidpassword()//使用密码进入
{
charstr1[7];
system("cls");
cout<cout<";
cin>>str1;
cout<if(strcmp(str1,"ting")!
=0)
{
cout<请重新输入!
\n";
system("pause");
password();
}
return;
}
charmenu()//主菜单
{
system("cls");
intn=1;
charselect;
cout<cout<cout<cout<cout<cout<cout<cout<cout<cout<cout<";
cin>>select;
if(select>='0'&&select<='7');
else
{
cout<请重新输入!
";
system("pause");
select=menu();
}
returnselect;
}
charExit()//退出系统
{
system("cls");
chars;
cout<cin>>s;
returns;
}
voidcreatList(pstunode&head)//建立带表头空链表
{
head=(pstunode)malloc(sizeof(stunode));
if(!
head)exit(0);
head->next=NULL;
}
Statusinput(pstunode&head)//输入学生信息
{
system("cls");
charm;
chars[50];
inti,k;
pstunodep,q,frist,last;
for(q=head;q->next;q=q->next);
last=q;
do
{frist=(pstunode)malloc(sizeof(stunode));
if(!
frist)returnERROR;
cout<";
do//学号过长或为非整数时则重新输入
{
k=1;
cin>>s;
if(strlen(s)<=12)strcpy(frist->data.num,s);
else{k=0;cout<<"您输入的学号过长(小于12位),请重新输入:
";}//学号过长则重新输入
for(i=0;s[i]!
=0;i++)
{
if(s[i]>='0'&&s[i]<='9')continue;
else{k=0;cout<<"您输入的学号为非整数,请重新输入:
";break;}
}
}while(k==0);
for(p=head->next;p;p=p->next)
if(strcmp(frist->data.num,p->data.num)==0)//如果学号输入重复则退出
{
free(frist);
cout<<"该学号已存在!
"<system("pause");
returnERROR;
}
cout<";
do//姓名过长则重新输入
{
k=1;
cin>>s;
if(strlen(s)<=15)
strcpy(frist->data.name,s);
else
{k=0;cout<<"您输入的姓名过长(小于15位),请重新输入:
";}
}while(k==0);
cout<";
cin>>frist->data.score;
frist->next=NULL;
last->next=frist;
last=frist;
cout<cout<<"继续输入请按\"y\"或\"Y\",否则按任意键结束输入:
"<m=getch();
cout<}while(m=='y'||m=='Y');
returnOK;
}
Statusall(pstunode&head)//显示全部信息
{
system("cls");
pstunodep;
p=head->next;
if(!
head->next){cout<<"该系统学生信息为空!
"<elsewhile(p)
{
cout<<"学号:
"<:
left)<data.num<<"姓名:
"<data.name<<"该学生的c语言成绩为:
"<data.score<p=p->next;
cout<}
system("pause");
returnOK;
}
Statusall2(pstunode&head)//显示全部信息,为classify()所特殊调用
{
pstunodep;
p=head->next;
if(!
head->next){cout<<"该类学生信息为空!
"<elsewhile(p)
{
cout<<"学号:
"<:
left)<data.num<<"姓名:
"<data.name<<"该学生的c语言成绩为:
"<data.score<p=p->next;
cout<}
cout<returnOK;
}
Statuslist(pstunode&head)//查询学生信息
{
system("cls");
charnum3[13];
pstunodep;
if(!
head->next){cout<<"该系统学生信息为空!
"<