学生信息管理系统 数据结构课程设计.docx
《学生信息管理系统 数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统 数据结构课程设计.docx(21页珍藏版)》请在冰点文库上搜索。
![学生信息管理系统 数据结构课程设计.docx](https://file1.bingdoc.com/fileroot1/2023-7/11/bdb89a41-8e7e-4949-893f-6cc39cac919f/bdb89a41-8e7e-4949-893f-6cc39cac919f1.gif)
学生信息管理系统数据结构课程设计
第一章选题意义
1.1背景
信息社会的高科技,商品经济化的高效益,使计算机的应用已普及到经济和社会生活的各个领域。
计算机虽然与人类的关系愈来愈密切,还有人由于计算机操作不方便继续用手工劳动。
为了适应现代社会人们高度强烈的时间观念,学籍管理系统软件为教学办公室带来了极大的方便。
面对学校的规模不断过大,学生数量急剧增加,有关学生的各种信息量成倍增加。
面对庞大的信息量需要有学生信息管理系统来提高学生管理工作的效率。
通过这样的系统可以做到信息的规范化管理、科学性统计和快速查询、修改、增加、删除等,从而减少管理方面的工作量。
1.2目标
通过本系统软件,能帮助教研人员利用计算机,快速方便的对学生信息管理进行录其主要任务是计算学生各种信息进行日常管理,如查询、修改、增加、删除,保存。
做到看界面简单易懂,容易操作,提高了学校管理效率以及提升了学生信息的安全性和完整性。
1.3开发工具
Microsoftvisualc++的简介VisualC++6.0,简称VC或者VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。
VisualC++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。
虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用有很大的局限性,只适用于Windows2000、WindowsXP和WindowsNT4.0。
所以实际中,更多的是以VisualC++6.0为平台。
第二章系统分析
2.1可行性分析
2.1.1经济的可行性
主要从对项目的经济上进行分析评价,一方面是支出的费用,包括设备购置费、管理和维护费用、人员工资和培训费等,另一个是取得的收益。
这是个超小型的管理系统,从投入的人力,财力与物力来讲是非常之小的,只要一台电脑,一台打印机,这个系统就可以搞起来,考虑到学校里有电脑,现只要购置一台打印机就可以了。
从节省人力方面,可以让管理人员从繁与复杂的工作中解脱出来,做更多的工作。
2.1.2技术上的可行性
技术上的可行性分析要考虑将来要采用的硬件和软件技术能否满足用户提出的要求(如计算机的容量、速度等)。
此外,还要考虑开发人员的水平,做为计算机信息管理的学生,数据库设计方面对于我们应该还过得去,编写的程序可以运行实现所需,而且此系统操作简单,可适用大多数人。
2.1.3总结
通过以上两点的分析,编写或开发这个学生信息管理系统是可行的,只要这个系统能实现对学生数据的输入、修改、删除、浏览与查询就可以了。
如果技术方面可行,可以编写登陆时不可见密码,保证信息的的安全性。
还有每一个功能实现以后加入返回主菜单,使程序更加的完美。
2.2用户需求分析
2.2.1本系统的最终用户学校管理员,根据我们日常生活中的经验,结合对自己学校学校管理员的咨询,这个系统能实现对学生数据的录入,保存,添加,查询,修改,删除,输出。
1.有关学籍信息的录入,包括输入学生基本信息如学号,班级,姓名等。
2.学生信息保存,包括系统里面所含的所有学生信息。
3.学生信息添加,可以添加新同学的所用相关的基本信息。
4.学生信息查询,有两种查询方式:
按照学生学号查询和按学生姓名查询。
5.学生信息修改,按照学号查到你所要修改的学生信息,然后再对其修改。
6.学生信息删除,按照学号查到你所要删除的学生信息,系统会为你自动删除。
7.学生信息输出。
可以查看本系统所有学生的信息。
2.2.2总结
通过以上的分析,编写或开发这个学生信息管理系统是只需要实现学生数据的录入,保存,添加,查询,修改,删除,输出就可以了。
2.3功能模块设计
2.4函数的设计与描述
本系统主要是学生学籍信息管理,通过编写主函数,主菜单函数,子菜单函数,输入、输出函数等通过对系统功能的认识与运行来实现学生管理系统的操作。
函数1,voidmenu(STUDENT*&student)主菜单,来选择所需要的实现的功能。
函数2,voidinit_STUDENT(STUDENT*&head)利用链表存放学生的信息,初始化。
函数3,voidfuzhi_wencha(STUDENT*&head,intn);创建链表,对学生信息进行录入。
函数4,voidsave(STUDENT*head);对录入的学生记录进行保存,防止丢失。
函数5,voidcharu(STUDENT*&head);插入新同学的学生信息。
函数6,voidchazhao_STUDENT(STUDENT*&head);查找学生信息。
函数7,voidxiugai_STUDENT(STUDENT*&head);修改学生信息。
函数8,voidshanchu_STUDENT(STUDENT*&head);删除学生信息。
函数9,voiddisplay_STUDENT(STUDENT*&head);输出学生的信息。
第三章程序流程
第四章程序的运行及结果分析
主界面:
选择1:
输入学生信息
选择2:
保存学生信息
选择3:
添加学生信息
选择4:
查询学生记录
按照学生学号查询
按照学生姓名查询
选择5:
修改学生信息
选择6:
删除学生信息
选择7:
输出学生信息
第五章编码、实现与测试
5.1各功能的主要编码
自定义一个STUDENT的类型,来标识学生的信息。
用链表来存放学生的信息。
实现输入功能的函数:
(主要步骤)
voidfuzhi_wencha(STUDENT*&head,intn)
{
STUDENT*s,*r;inti;
r=head;
for(i=0;i{
s=(STUDENT*)malloc(LEN);
cout<<"请输入第"<
";
cin>>s->xuehao;
cout<<"请输入第"<
";
cin>>s->xingming;
cout<<"请输入第"<
";
cin>>s->xingbie;
cout<<"请输入第"<
";
cin>>s->phohe;
cout<<"请输入第"<
";
cin>>s->banji;
cout<<"请输入第"<
";
cin>>s->address;
s->next=NULL;
r->next=s;
r=s;
cout<}
cout<<"成功插入数据元素!
"<}
实现保存功能的函数:
(主要步骤)
voidsave(STUDENT*head)
{FILE*fp;/*定义指向文件的指针*/
STUDENT*p;/*定义移动指针*/
charoutfile[10];
printf("输出文件例如:
c:
\\scoreEnteroutfilename,forexamplec:
\\score\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"w"))==NULL)/*为输出打开一个二进制文件,为只写方式*/
{
printf("打不开文件Cannotopenthefile\n");
return;/*若打不开则返回菜单*/
}
printf("\n保存中...Savingthefile......\n");
p=head;/*移动指针从头指针开始*/
while(p!
=NULL)/*如p不为空*/
{
fwrite(p,LEN,1,fp);/*写入一条记录*/
p=p->next;/*指针后移*/
}
fclose(fp);/*关闭文件*/
printf("保存成功....Savethefilesuccessfully!
\n");
}
实现添加功能的函数:
(主要步骤)
voidcharu(STUDENT*&head)
{
STUDENT*p,*s;
s=(STUDENT*)malloc(sizeof(STUDENT));
p=head;
while(p->next!
=NULL)
{
p=p->next;
}
cout<<"请输入要添加的学生的学号:
";
cin>>s->xuehao;
cout<<"请输入要添加的学生的姓名:
";
cin>>s->xingming;
cout<<"请输入要添加的学生的性别:
";
cin>>s->xingbie;
cout<<"请输入要添加的学生的电话:
";
cin>>s->phohe;
cout<<"请输入要添加的学生的班级:
";
cin>>s->banji;
cout<<"请输入要添加的学生的住址:
";
cin>>s->address;
s->next=NULL;
p->next=s;
}
实现查询功能的函数:
(主要步骤)
voidchazhao_STUDENT(STUDENT*&head)
{
STUDENT*p=head->next;
intn;
intk;
longinttem;
charname[10];
cout<<"1.按照学生学号查找"<cout<<"2.按照学生姓名查找"<cout<<"请输入要查找的方式:
"<cin>>n;
switch(n)
{
case1:
{system("cls");
cout<<"请输入你要查询的学生学号:
";
cin>>tem;
while((p->xuehao!
=tem)&&p!
=NULL)
{
p=p->next;
}
if((p!
=NULL))
{
cout<<"学号为"<xuehao<<"的学生信息如下:
"<cout<<"-----------"<xuehao<<"的学生简历--------------------"<<<"****1.学号:
"<xuehao<<"*****"<<<"****2.姓名:
"<xingming<<"*****"<<<"****3.性别:
"<xingbie<<"*****"<<<"****4.班级:
"<banji<<"*****"<<<"****5.班级:
"<phohe<<"*****"<<<"****6.家庭住址:
"<address<<"*****"<<<"---------------------------------------------------------"<}
else
{
cout<<"该学生系统中没有学号为"<xuehao<<"的学生信息"<}
};break;
case2:
{system("cls");
cout<<"请输入你要查询的学生姓名:
"<cin>>name;
k=strcmp(p->xingming,name);
while(k==0)
{
p=p->next;
}
if((p!
=NULL))
{
cout<<"姓名为"<xingming<<"的学生信息如下:
"<cout<<"-----------"<xingming<<"的学生简历--------------------"<<<"****1.学号:
"<xuehao<<"*****"<<<"****2.姓名:
"<xingming<<"*****"<<<"****3.性别:
"<xingbie<<"*****"<<<"****4.班级:
"<banji<<"*****"<<<"****5.班级:
"<phohe<<"*****"<<<"****6.家庭住址:
"<address<<"*****"<<<"---------------------------------------------------------"<}
else
{
cout<<"该学生系统中没有学号为"<xuehao<<"的学生信息"<}
}break;
}
}
实现修改功能的函数:
(主要步骤)
voidxiugai_STUDENT(STUDENT*&head)
{
longinttem;
STUDENT*p=head->next;
cout<<"请输入被修改的学生的学号"<cin>>tem;
while((p->xuehao!
=tem)&&p!
=NULL)
{
p=p->next;
}
if(p==NULL)
{
cout<<"该学生系统中没有学号为"<}
else
{
cout<<"请输入新学号";
cin>>p->xuehao;
cout<<"请输入新的姓名:
";
cin>>p->xingming;
cout<<"请输入新的性别:
";
cin>>p->xingbie;
cout<<"请输入新的电话:
";
cin>>p->phohe;
cout<<"请输入新的班级:
";
cin>>p->banji;
cout<<"请输入新的住址:
";
cin>>p->address;
}
}
实现删除功能的函数:
(主要步骤)
voidshanchu_STUDENT(STUDENT*&head)
{
STUDENT*p,*r;
p=head;
longinttem;
cout<<"请输入要删除的学生的学号:
"<cin>>tem;
while((p->next->xuehao!
=tem)&&p!
=NULL)
{
p=p->next;
}
if(p==NULL)
{
cout<<"该系统中没有学生学号为"<}
else
{
r=p->next;//先保存要被删除的结点信息
p->next=r->next;
free(r);
}
}
实现输出功能的函数:
(主要步骤)
voiddisplay_STUDENT(STUDENT*&head)
{
STUDENT*p=head->next;
while(p!
=NULL)
{
cout<<"姓名为"<xingming<<"的学生简历如下:
"<cout<<"-----------"<xingming<<"的学生简历--------------------"<<<"****1.学号:
"<xuehao<<"*****"<<<"****2.姓名:
"<xingming<<"*****"<<<"****3.性别:
"<xingbie<<"*****"<<<"****4.班级:
"<banji<<"*****"<<<"****5.班级:
"<phohe<<"*****"<<<"****6.家庭住址:
"<address<<"*****"<<<"---------------------------------------------------------"<p=p->next;
}
}
5.2系统测试
5.2.1系统测试的目的
一个程序并不可能达到十分完美,难免存在一些错误。
如果不能及时将其找出并修改,会造成系统崩溃并造成不必要的损失。
通软件测试,尽可能多的找出系统中的错误,以便与及时修改。
学生管理系统是对学生信息进行管理的系统,一旦系统无法运行,对学校管理带来很多的影响。
所以通过软件测试的手段,尽可能排除程序中的错误,已达到程序运行稳定的目的,使学校的工作不会因此受到影响。
5.2.2系统的测试环境
1、系统测试的性能要求
系统的性能要求通常指系统需要的存储容量以及后援存储,重新启动和安全性,运行效率等方面的考虑。
系统运行时对数据的保密性要求不高对一般的数据不要求进行加密。
此外,对其它软件几乎没有依赖性,程序健壮性较好。
2、测试数据
(1)信息输入
选择几组数据进行添加修改删除等操作实现其基本功能
(2)信息查询
信息输入后,通过信息查询,查看结果是否和设计时数据一致,以确认数据的正确性。
,
(3)信息的删除,通过对信息的删除,然后进行信息查询,验证信息是否已经成功删除。
3、系统测试的评价
系统功能评价:
此系统各模块都能实现各自的功能,符合学校对系统的要求,系统运行稳定。
结论:
此系统是可行的。
第六章遇到的问题及解决方法
6.1语法错误
1、语句的最后忘记了加上“;”,使程序发生错误。
2、把“<<”与“>>”写反,以及字符与字符串的操作问题,这些是比较简单的错误,很容易分辨出来,并改正之。
3、函数的返回值问题,也是比较容易找出并解决的问题。
6.2逻辑错误
1、文件的写入与读出,刚开始对文件的操作不太明白,一致不能很好的操作文件,其中最大的问题是对已存在的文件读取问题,通过“显示全部学生成绩”将数据从文件中读取,可是在使用过程中总是出现读出错误,出现乱码。
2、内存的分配问题,这也是困惑了我好久的问题。
对于我们初学者来说对内存的分配和释放问题是比较抽象和模糊的难题,本来使用链表的方式存储数据,然而待到排序时出现了交换数据困难的问题,以及分配空间繁琐释放空间不及时的问题,造成空间浪费使得程序运行效率低的问题。
因此最后采用了顺序存储记录的方式,这样就能改变前述问题。
整个调试过程中主要是这么几个问题,其余的是一些小问题,很容易的就调试出来了。
第七章总结和体会
两个星期的课程设计,虽然有些疲劳和困倦,但带给我很多的收获。
数据结构与算法已经学了一个学期了,有许多知识都存在似懂非懂的现象,这种现象通过实际的上机操作,已经减少了许多。
对这些知识也有了更深的理解和很好的掌握。
也有很多理论上说得过去的代码,但到了实际操作,却是行不通的。
这种困惑,有许多已经通过实际操作解决了,并能够深刻认识,但也有很多没有明白。
只能避过这些方法,换方法实现。
在课程设计之前,因为有了综合实验的经验与教训,明白了写代码这一步是非常重要的,因为当你把代码输入电脑,并用编译器将其运行,发现通过不了,再来检查找出问题,这是一件非常辛苦的事情,也很浪费时间。
于是在课程设计的时候,我花了两天的时间来规划与写代码,将要实现的内容分析清楚,才把代码输入电脑。
我觉得写程序,应该先找到该程序中的核心地方,用多种方法来实现该核心,这才可能避免等到发现逻辑上或者编译器不支持上的错误,才来想补救的措施,这样花费时间在想补救措施是很不值得的。
此次任务的完成,也体现出同学之间的团结精神。
实践是检验真理的唯一标准。
没有实践,就不会发现和深刻体会它的真实所在。
只有通过检验的真理,在自己的心里,才会认可它的真实性。
面向对象程序设计的完成,使我们懂得了真理的重要性,理论和实际的相结合,才能真正把握所学和所掌握的知识。
参考资料
<<汉语程序设计语言>>--------沈志斌编著电子工业出版社
<<面向对象程序设计及C++>>--------朱立华 朱建编著人民邮件出版社
<<数据库原理及应用>>--------李绍原主编科学出版社
《C语言课程设计》--------高涛 陆丽娜编西安交通大学出版社