学生信息管理系统实训报告.docx
《学生信息管理系统实训报告.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统实训报告.docx(26页珍藏版)》请在冰豆网上搜索。
学生信息管理系统实训报告
实训报告
题 目:
学生信息管理系统
学 院:
信息工程学院
专 业:
嵌入式1班
项目组长:
刘永强
项目成员:
刘强项强吴盛林
瞿孟孟管豫冀徐兵
******
项目小组任务分配表
组员姓名
学号
组员任务
刘永强
130********
课题研究的意义,需求分析
开发总结,整理相关文档
刘强
13003070427
各模块功能实现
项强
13003070433
编码实现
吴盛林
13003070426
主函数设计,模块详细设计
瞿孟孟
系统功能和性能分析,可行性分析
管豫冀
系统设计,结构设计和模块设计
徐兵
13003070435
系统测试与维护
前言
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对学生信息进行管理,具有手工管理所无法比拟的优点。
例如:
检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高学生档案管理的效率,也是进行科学化、正规化管理,与世界接轨的重要条件。
随着国家对于教育的重视逐渐加大,学校正向着大型化、规模化发展,而对于大中型学校,跟学生信息管理有关的信息随之急剧增加。
在这种情况下单靠人工来处理员工的工资不但显得力不从心,而且极容易出错。
该系统就是设计一个学生信息数据库管理系统,由计算机代替人工执行一系列诸如增加新学生,删除旧学生,学生信息修改,查询,维护及打印等操作。
这样就使学生部门管理人员可以轻松快捷地完成学生信息管理的任务。
第1章绪论
§1.1什么是学生信息管理系统
学生信息管理系统是校园网络中一个重要的应用系统,它大大改善了学校教学、科研与管理的基础环境,在一定程度上反映出学校管理现代化的水平。
信息管理系统提供了强大的学生档案管理管理功能,方便管理员对学生信息的添加、修改、删除、查询等操作。
本系统开发的总体任务是实现学生信息管理的系统化、规范化、自动化、达到提高学生信息管理效率的目的。
§1.2课题研究的意义
随着我国教育产业化的飞速发展,社会对教育水平和教学管理软硬件的要求日益提高,尤其是对一个学校能够具有一整套完善的教学管理软件提出了更多的要求。
为了适应这种形式,教育系统尤其是大学不仅首先要有坚实的硬件基础,还要有一整套完善的教学管理软件管理系统。
而要实现这一功能,就要求学校管理者配备一套高效的教育管理网络系统,以便在学校内实施良好的一整套完善的管理且以最快地速度响应教师和学生的需求,及时为他们提供服务,为他们提供一个高效、便捷的环境。
学生信息管理系统是校园网络中一个重要的应用系统,它大大改善了学校教学、科研与管理的基础环境,在一定程度上反映出学校管理现代化的水平。
随着国家对于教育的重视逐渐加大,学校正向着大型化、规模化发展,而对于大中型学校,跟学生信息管理有关的信息随之急剧增加。
在这种情况下单靠人工来处理员工的工资不但显得力不从心,而且极容易出错。
该系统就是设计一个学生信息数据库管理系统,由计算机代替人工执行一系列诸如增加新学生,删除旧学生,学生信息修改,查询,维护及打印等操作。
这样就使学生部门管理人员可以轻松快捷地完成学生信息管理的任务。
第2章系统分析
§2.1需求分析
§2.1.1功能需求
学生管理系统的几个主要功能如下:
(1)提供学生录入信息功能
可以输入学生的姓名,学号,选修课,实验课,必修课和总分。
(2)查询学生信息功能
根据学生学号来查询学生信息。
(3)删除学生信息功能
提供学号,查找是否有此人信息,然后选择删除学生信息。
(4)插入学生信息功能
输入学生学号,插入该学生的学号的后面
(5)学生成绩排名功能
根据学生的总分成绩,来进行排名,将排名后的成绩保存到磁盘文件
§2.1.2性能需求
本软件系统各种特点决定了系统需要具有以下几个主要特性:
(1)多样性。
现在,计算机语言越来越普及,用户面临的选择越来越多。
想要保证对用户的吸引力,就必须要在多样性上下功夫了。
所以,系统的多样性、功能的多样性一直都是软件系统开发的重点。
(2)安全性。
数据是软件的灵魂,如何保证数据的安全性,是系统开发时必须考虑的一个重要问题。
开发者应避免程序出现漏洞,防止黑客进行攻击,及时进行数据备份,建立一个完善的多层次的安全保障体系,保障系统的安全。
(3)可扩展性。
需求变更一直是开发中难以避免的问题。
系统在进行设计时应充分考虑到需求变更的可能性,降低系统扩展功能时的复杂度。
§2.2可行性分析
§2.2.1技术可行性
本系统主要采用Struts2框架开发。
Struts2是一个成熟的MVC框架,它的功能非常强大,包括请求转发、数据校验、文件上传下载等等,再加上jsp作为展示层,完全可以满足本系统的开发需要,因此技术上是可行的。
§2.2.2经济可行性
本系统为自主开发,耗时1周,经济成本低;开发完成后可以在网上找一些免费的应用托管商;当系统部署成功后通过不断更新高质量,增加软件的知名度,通过广告获得收益。
综合来看在经济上是可行的。
§2.2.3社会可行性
该系统为完全独立开发。
开发工具选的是VC6.0及GCC,开发技术多是用的开源的框架和工具,因此不存在侵权问题。
第3章系统设计
在对整个软件系统进行开发之前,要对整个系统进行必要的设计与规划。
包括系统的总体架构、系统的功能结构、系统的运行环境、开发技术与工具的选择等等。
本章主要对这些内容进行详细的介绍。
§3.1系统结构设计
本系统是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
C语言也很适合搭配汇编来使用(往往可以通过内联汇编语言或与汇编语言目标文件一起连接。
对于任何一种操作系统环境,C函数的ABI(ApplicationBinaryInterface)与汇编语言的子过程(routine/procedure)的ABI一定是完全兼容的)。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
图3.1系统结构图
§3.2系统功能模块设计
本软件系统主要可分为8大功能模块,包括了录入学生信息模块、查询学生信息模块,、删除学生信息模块、修改学生信息模块、插入学生信息木块、学生成绩排名模块、学生人数统计模块和显示学生信息模块
功能结构如图3.2所示。
§3.3系统结构体定义
对于一个应用程序而言,结构体的定义好坏尤为重要。
一个设计结构体,可以使系统功能实现变得更加简单,也会使系统的执行速度更快,性能更高更稳定。
studen结构体定义表
列
含义
类型
长度
缺省值
允许空
num
学号
int
4
无
否
name
姓名
char
15
无
是
elec
选修课成绩
double
8
无
是
expe
实验课成绩
double
8
无
是
requ
必修课成绩
double
8
无
是
sum
总分成绩
double
8
无
是
§3.3系统函数定义
列
含义
类型
in()
录入学生成绩信息
void
show()
显示学生信息
void
order()
按总分排序
void
del()
删除学生成绩信息
void
modify()
修改学生成绩信息
void
menu()
主菜单
void
insert()
total()
search()
main()
插入学生信息
计算总人数
查找学生信息
主函数
void
Void
void
int
第4章系统实现
§4.1学生信息管理系统界面展示模块及实现
§4.1.1主界面
主界面列表显示的是各个功能的显示信息,包括退出系统、输入学生信息、查询学生信息、删除学生信息、修改学生信息、插入学生信息、总成绩排名、统计学生人数、显示学生信息。
界面
用户进入列表展示界面后,可以输入选项选择相应的功能
展示功能模块界面
代码实现:
voidmenu()/*自定义函数实现菜单功能*/
{
system("cls");
printf("\n\n\n\n\n");
printf("\t\t|---------------------STUDENT-------------------|\n");
printf("\t\t|\t0.退出|\n");
printf("\t\t|\t1.输入数据|\n");
printf("\t\t|\t2.搜索数据|\n");
printf("\t\t|\t3.删除数据|\n");
printf("\t\t|\t4.修改数据|\n");
printf("\t\t|\t5.插入数据|\n");
printf("\t\t|\t6.总分排序|\n");
printf("\t\t|\t7.学生人数|\n");
printf("\t\t|\t8.查看|\n");
printf("\t\t|-----------------------------------------------|\n\n");
printf("\t\t\t选择(0-8):
");
}
具有输入数字选择功能的代码是写在主函数中的
voidmain()/*主函数*/
{intn;
menu();
scanf("%d",&n);/*输入选择功能的编号*/
while(n)
{switch(n)
{case1:
in();break;
case2:
search();break;
case3:
del();break;
case4:
modify();break;
case5:
insert();break;
case6:
order();break;
case7:
total();break;
case8:
show();break;
default:
break;
}
getch();
menu();/*执行完功能再次显示菜单界面*/
scanf("%d",&n);}}
§4.1.2录入学生信息模块
在主界面中输入数字1,即可进入到录入学生信息状态。
当磁盘文件有存储记录时,可以向文件中添加学生信息,运行效果如图1
当磁盘文件没有学生信息记录时,系统界面会提示没有记录,然后根据提示决定是否输入信息,运行效果如图2
图1
图2
在录入学生信息模块中将学生的信息进行保留,当程序运行结束,关闭程序,下此运行程序时录入的信息任然保留。
因此在该模块中应用文件读写操作,对录入的信息保存到存到磁盘文件中,下次运行程序时,可以从磁盘文件中将存储读出并显示。
代码实现
voidin()/*录入学生信息*/
{inti,m=0;/*m是记录的条数*/
charch[2];
FILE*fp;/*定义文件指针*/
if((fp=fopen("data.txt","a+"))==NULL)/*打开指定文件*/
{
printf("不能打开\n");
return;
}
while(!
feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
m++;/*统计当前记录条数*/
}
fclose(fp);
if(m==0)
printf("没有数据\n");
else
{
system("cls");
show();/*调用show函数,显示原有信息*/
}
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("不能打开\n");
return;
}
for(i=0;ifwrite(&stu[i],LEN,1,fp);/*向指定的磁盘文件写入信息*/
printf("请输入(y/n):
");
scanf("%s",ch);
while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要录入新信息*/
{
printf("number:
");
scanf("%d",&stu[m].num);/*输入学生学号*/
for(i=0;iif(stu[i].num==stu[m].num)
{
printf("thenumber正在运行,按任意键继续");
getch();
fclose(fp);
return;
}
printf("姓名:
");
scanf("%s",stu[m].name);/*输入学生姓名*/
printf("选修课:
");
scanf("%lf",&stu[m].elec);/*输入选修课成绩*/
printf("实验课:
");
scanf("%lf",&stu[m].expe);/*输入实验课成绩*/
printf("必修课:
");
scanf("%lf",&stu[m].requ);/*输入必修课成绩*/
stu[m].sum=stu[m].elec+stu[m].expe+stu[m].requ;/*计算出总成绩*/
if(fwrite(&stu[m],LEN,1,fp)!
=1)/*将新录入的信息写入指定的磁盘文件*/
{printf("不能保存!
");
getch();
}
else{
printf("%s保存\n",stu[m].name);
m++;
}printf("是否继续?
(y/n):
");/*询问是否继续*/
scanf("%s",ch);
}
fclose(fp);
printf("OK!
\n");
}
§4.1.3查询学生信息模块
查询学生信息模块的主要功能时根据输入的学生学号对学生信息进行搜索,若查找到该学生学号对学生信息进行搜索,若查找到该学生,则选择是否显示该学生信息,输入2时,进入查询状态,运行效果如图所示。
图(4.1.3)-1
由于学生信息都及时存储到磁盘文件中,因此想要查找学生的信息首先需要对文件进行操作,打开文件,读取文件中的数据,在关闭文件,根据输入的需要查找学生的学号进行信息匹配,当查找到学生的信息时将其显示出来。
代码实现:
voidsearch()/*自定义查找函数*/
{FILE*fp;
intsnum,i,m=0;
charch[2];
if((fp=fopen("data.txt","rb"))==NULL)
{printf("不能打开\n");return;}
while(!
feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;
fclose(fp);
if(m==0){printf("没有数据!
\n");return;}
printf("请输入学号:
");
scanf("%d",&snum);
for(i=0;iif(snum==stu[i].num)/*查找输入的学号是否在记录中*/
{printf("找到学生,是否显示?
(y/n)");
scanf("%s",ch);
if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
{
printf("学号姓名选修课实验课必修课总分\t\n");
printf(FORMAT,DATA);/*将查找出的结果按指定格式输出*/
break;
}
}
if(i==m)printf("不能找到学生\n");/*未找到要查找的信息*/
}
§4.1.4删除学生信息模块
删除学生信息模块的主要功能是从磁盘文件中将学生信息读取出来,从读出的信息中查找到将要删除的学生的信息,然后将该学生的信息节点与链表断开,即将其所有信息删除,将更改后的信息再写入到磁盘文件。
在主界面中输入3时,调用删除功能函数,运行效果如图
图(4.1.4)-1
功能实现:
(1)将磁盘文件中的学生信息读取出来,以便对其进行查找删除等操作;
(2)根据输入的想要删除的学生学号与读取出来的学生信息进行匹配查找。
当查找到与该学号匹配的学生信息时,根据提示,输入是否对该学生进行删除操作;
(3)若进行删除操作,则使用如下代码对学生信息进行删除,并将删除后的学生信息重新写入磁盘文件中
代码实现:
voiddel()/*自定义删除函数*/
{FILE*fp;
intsnum,i,j,m=0;
charch[2];
if((fp=fopen("data.txt","r+"))==NULL)
{printf("不能打开\n");return;}
while(!
feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;
fclose(fp);
if(m==0)
{
printf("没有数据\n");
return;
}
printf("请输入学号:
");
scanf("%d",&snum);
for(i=0;iif(snum==stu[i].num)
break;
printf("找到学生,是否删除?
(y/n)");
scanf("%s",ch);
if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要进行删除*/
for(j=i;jstu[j]=stu[j+1];/*将后一个记录移到前一个记录的位置*/
m--;/*记录的总个数减1*/
if((fp=fopen("data.txt","wb"))==NULL)
{printf("不能打开\n");return;}
for(j=0;jif(fwrite(&stu[j],LEN,1,fp)!
=1)
{printf("不能保存!
\n");
getch();}
fclose(fp);
printf("成功删除\n");
}
§4.1.5插入学生信息模块
插入学生信息模块的主要功能是在需要的位置插入新的学生信息,输入5时,进入插入学生信息模块,效果如图:
图(4.1.5)-1
功能实现:
(1)因为该系统的学生信息都及时的存储在磁盘文件中,所以每次操作都要先将数据从文件中读取出来。
(2)输入需要插入信息的位置,即可需要插入在哪个学生的学号后面,然后查找该学号,从最后一条信息开始均向后移动一位,为新插入的信息提供位置。
(3)设置好可以要输入的位置后,向该位置录入新学生的信息。
然后该学生的信息写入到磁盘文件中。
代码实现:
voidinsert()/*自定义插入函数*/
{FILE*fp;
inti,j,k,m=0,snum;
if((fp=fopen("data.txt","r+"))==NULL)
{printf("不能打开\n");return;}
while(!
feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)m++;
if(m==0){printf("没有数据!
\n");
fclose(fp);
return;
}
printf("请输入你想插入的位置(输入学号)\n");
scanf("%d",&snum);/*输入要插入的位置*/
for(i=0;iif(snum==stu[i].num)
break;
for(j=m-1;j>i;j--)
stu[j+1]=stu[j];/*从最后一条记录开始均向后移一位*/
printf("现在请输入新的信息\n");
printf("学号:
");
scanf("%d",&stu[i+1].num);
for(k=0;kif(stu[k].num==stu[m].num)
{
printf("学生人数正在退出,按任意键继续");
getch();
fclose(fp);
return;
}
printf("姓名:
");
scanf("%s",stu[i].name);/*输入名字*/
printf("选修课:
");
scanf("%lf",&stu[i].elec);/*输入选修课成绩*/
printf("实验课:
");
scanf("%lf",&stu[i].expe);/*输入实验课成绩*/
printf("必修课:
");
scanf("%lf",&stu[i].requ);/*输入必修课成绩*/
printf("修改成功");
stu[i].sum=stu[i].elec+stu[i].expe+stu[i].requ;
if((fp=fopen("data.txt","wb"))==NULL)
{printf("cannotopen\n");return;}
for(k=0;k<=m;k++)
if(fwrite(&stu[k],LEN,1,fp)!
=1)/*将修改后的记录写入磁盘文件中*/
{printf("不能保存");getch();}
fclose(fp);
}
§4.1.6学生成绩排名模块
根据学生的总成绩将所有学生的信息按照从高到低进行排序,将排序后的信息写入到磁盘文件中保存。
如图所示为排序后现实出来的效果
图(4.1.6)-2
图(4.1.6)-1
再在主界面中输入数字8,就会把保存的排序输出出来如图:
这里应用比较稳定简单的交换发排序对学生的成绩进行比较交换。
学生成绩排名的实现过程是首先需要将录入的学生信息从磁盘文件中读取,然后将读出的学生信息按照成绩进行比较交换,从高到低排序,为学生排名次,然后再将拍好名次的学生信息保存写入到磁盘文件中。
代码实现:
voidorder()/*自定义排序函数*/
{FILE*fp;
structstudentt;
inti=0,j=0,m=0;
if((fp=fopen("data.txt","r+"))==NULL)
{
printf("不能打开!
\n");
return;
}
while(!
feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)
m++;
fclose(fp);
if(m==0)
{
printf("没有数据!
\n");
return;
}
if((fp=fopen("data.txt","wb"))==NULL)
{
pri