学生管理系统设计报告.docx
- 文档编号:29077974
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:14
- 大小:75.62KB
学生管理系统设计报告.docx
《学生管理系统设计报告.docx》由会员分享,可在线阅读,更多相关《学生管理系统设计报告.docx(14页珍藏版)》请在冰豆网上搜索。
学生管理系统设计报告
学生管理系统
设计报告
2019年5月
一、系统概述----------------------------------------------2
二、总体设计-----------------------------------------------4
三、运行结果---------------------------------------------11
四、所遇到的问题和分析解决-------------------------14
五、结论及心得体会-------------------------------------16
一、
系统概述
1、课程设计应完成的工作
(1)编写算法
(2)算法测试,并有具体的测试结果和结果分析
(3)撰写课程报告,内容包括:
封面
课程设计报告正文
2、总体设计工作(包含几大功能模块)
(1)输入学生信息并保存到文件。
输入信息保存主要完成将数据存入文件中的工作。
此程序中,记录可以从键盘逐个输入记录。
记录有与联系人有关的基本信息字段构成。
当从数据文件中读入记录时,它就是在以记录为单位储存的数据文件中,将记录逐条复制到结构体类型的数组元素中。
(2)读取文件并输出学生信息。
由之前输入的文件进行读取,显示在屏幕上。
以表格的形式显示
(3)按学号查询。
主要完成在文件中查找满足相关条件的纪录。
用户可以按照学号在数组中进行查询,与数组中的学号进行对比,值相等则存在。
若找到记录,则以表格形式打印出文件中的字段信息;否则,反回一个-1的值,并打印出提示信息。
(4)按学号删除信息,按学号修改信息,插入学生信息,按成绩排序。
完成记录的维护。
将文件修改后会存入源数据文件。
(5)学生人数统计。
将输入的学生信息按文件中的字段数统计然后保存到文件,也可以打印到屏幕。
按字段数统计可以准确显示文件中学生个数,防止被删除学生被统计总数。
(6)数出记录。
主要两个任务。
一,实现对记录的存盘操作,即将数组中的个元素储存的记录信息写入数据文件中。
二,将数组中存储的记录信息一表格的形式在屏幕上打印出来。
(7)退出系统。
系统流程图
二、总体设计
1、大概设计模块
(1)先编入系统所需的库函数,从而使程序可运行。
#include
#include
#include
#include
#include
#include
(2)Main()函数的设计
在main()函数中主要运用while循环语句和switch()-case选择判断语句来调用相关
功能模块。
系统的运行是在一个永真的循环里进行的,只有在主界面并选择“退出”时,才会跳出永真循环,并退出程序。
(3)主界面的设计和函数功能
在主界面中包括“1输入学生信息并保存到文件2读取文件并输出学生信息3按学号查询4按学号修改信息5插入信息6按学号删除信息7按总分降序排序8统计各科成绩的总分0退出”等全部的功能,之所以设计这麽一个主界面,一是因为能使用户对程序操作的流程更加清晰简明,二是保证了用户同时只能对一个文件进行操作系统的要求,保证了系统不会打开文件紊乱或者出现致命的错误。
每个函数体如下:
structstudentstu[50];/*定义结构体数组*/
voidLuruchengji();/*录入学生成绩信息*/
voidXianshixinxi();/*显示学生信息*/
voidXianshixinxi(char[]id)
.voidXianshixinxi(char[]banId)
voidZongfenpaixu();/*按总分排序*/
voidShanchuchengji();/*删除学生成绩信息*/
voidXiugaixinxi();/*修改学生成绩信息*/
voidZhucaidan();/*主菜单*/
voidCharu();/*插入学生信息*/
voidZongrenshu();/*计算总人数*/
voidChazhao();/*查找学生信息*/
voidmain()/*主函数*/
2、详细设计思想
1)确定程序主要功能模块
这个就比较简单了,主要是根据系统设计的说明及要求来设计,从而设计了八大功能模块,有文件操作,有系统维护功能,排序和统计功能,有输入输出等基本功能,比较人性化,添加了较多的提示语。
这个程序的主要功能时输入学生的学号,姓名和三科成绩来对其进行存储,在存储后可以对学生的成绩按学号来进行查询,同时输出此同学总分,之后可以对某个同学的成绩进行各种操作,例如修改,删除等,同时还可以对学生们的成绩按照总分成绩排序,在整个过程中所做的操作都会保存到"student.txt"文件中并显示。
2)系统结构体的设计
structstudent/*定义学生成绩结构体*/
{
intnXueHao;/*学号*/
charcXingMing[15];/*姓名*/
doublefXuanxiuKe;/*选修课*/
doublefShiyanKe;/*实验课*/
doublefBixiuKe;/*必修课*/
doublefZongFen;/*总分*/
};
Student结构体说明表
名称
属性
说明
nXueHao
数据成员
说明学生学号
XingMing
数据成员
说明学生名字
fXuanxiuKe
数据成员
说明学生选修课成绩
fShiyanKe
数据成员
说明学生实验课成绩
fBixiuKe
数据成员
说明学生必修课成绩
fZongFen
数据成员
说明学生总成绩
3)各功能模块的设计
******主函数模块
用函数voidmain()来实现
主要是来显示主菜单,使用户选择操作。
首先定义一个结构体数组(全局使用)structstudentstu[50];在这里应用了while和switch-case语句来进行选择,是个比较简单实现的模块。
在每次操作前会有选择(y/n)进行询问是否继续,操作后对操作结果进行存盘。
最后若选择“0”则是保存记录并退出永真循环。
******输入学生记录模块
用函数voidLuruchengji();来实现
主要功能用来对学生的成绩进行收集和输入。
首先会有主菜单,选择"1",进入输入模块输入所需学生的学生信息,比如学号,姓名,成绩等。
输完之后会自动跳出主菜单,根据主菜单来在此基础上进行操作。
期间会有一些提示语,按此操作即可。
根据if和for语句来判定期间是否有重复学号输入,在本操作中,允许有重复学生姓名出现。
在此模块中,用到了文件操作的指针FILE*fp;同时也用到了一个控制变量i,它是用if语句来判定的条,if语句为真表示找到了与之重复的学号,为假表示未出现重复学号。
在此期间会根据语句算出总分,并默认按学号排序保存到文件中去。
之后返回主菜单。
写文件操作代码:
if(fwrite(&stu[m],LEN,1,fp)!
=1)/*将新录入的信息写入指定的磁盘文件*/
{
printf("不能保存信息!
");
getch();
}
else
{
printf("%s保存!
\n",stu[m].cXingMing);
m++;
}
printf("是否继续?
(y/n):
");/*询问是否继续*/
scanf("%s",ch);
}
fclose(fp);
printf("OK!
\n");
}
******显示学生记录模块
用函数voidXianshixinxi();来实现
主要功能是用来显示学生的信息进行输出。
在系统已经录入了学生资料的前提下,只用该功能可以显示学生的信息资料等等。
同时也会自动跳出主菜单进行后续操作。
主要的程序代码就是从文件的读操作和界面显示操作。
读文件操作代码:
if((fp=fopen("data","wb"))==NULL)
{
printf("不能打开\n");
return;
}
for(i=0;i if(fwrite(&stu[i],LEN,1,fp)! =1) { printf("%s不能保存! \n"); getch(); } fclose(fp); printf("保存成功\n"); } ******插入学生资料模块 用函数voidCharu();来实现 主要功能是用来添加学生资料,成绩。 在此模块代码中定义了另一个数组: stu[i+1].nXueHao;用来存放新添加的学生记录。 再利用for循环进行输入新学生记录,for(j=m-1;j>i;j--),这样可以将新输入的记录保存到文件中去。 输入学号后若重复会有一个提示语句"此学号已存在,请输入其他学号! ";然后再次输入新的学号,本模块功能到此结束。 ******按学号来查找学生记录模块 用函数voidChazhao();来实现 主要功能时用来查找学生记录。 首先会有提示输入学号及学期,再用for循环语句和if判断语句来进行查找,if(nXueHao==stu[i].nXueHao)若找到则显示"找到学生,是否显示? (y/n)";选择y显示学生记录并跳出循环;if(i==m)若没有则提示"该学号不存在,或没有这个学期的成绩! "。 *****查找输出语句实现的代码如下: printf("学号姓名选修课成绩实验课成绩必修课成绩总成绩\t\n"); printf(FORMAT,DATA);/*将查找出的结果按指定格式输出*/ break; ******修改学生记录模块 用函数voidchange(Student*r)来实现 主要功能是用来修改学生记录。 首先也要有个判断语句,来看看要修给的学生是否存在,这个是通过学号来判断的(学号是不会有重复的),这里会有提示输入学号,之后是for和if语句,if(nXueHao==stu[i].nXueHao)来判断是否存在记录,若存在则可进行修改此学生记录。 最后将修改过后的记录保存到文件中去,并输出提示"信息已保存"。 ******按学号删除学生记录 用函数voidShanchuchengji()来实现 主要功能是用来删除学生记录。 首先有个文件的操作,之后会有判断语句,根据所输入的学号,来显示删除前的信息记录,添加for循环语句,循环把后一位的信息提前一位,整体数量减一,来进行全局变量的修改,之后再把修改过后的信息记录保存到文件中去。 在现实中会有由于某些原因而不在学校的同学的记录,这时候就要对其记录进行删除操作,这样可以使系统及时更新并得到优化。 ******按总分排序 用函数voidZongfenpaixu()来实现 主要功能时是用来对学生的记录来按总分成绩进行排序。 这样方便对学生总体有个大致的了解。 首先会有一个读文件操作,为排序做基础。 本排序使用选择排序。 其基本思想是: n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果: 1、第一趟将第一个元素和其后进行比较有更大的则交换两数位置从N个元素中找出最大放到第一个元素中。 2、第二趟用同样的方法,在剩下的N-1个元素中找出第二大调换到第二个元素中。 3、第i趟用同样的方法,在剩下的N—i+1个元素中找出第i大调换到第i个元素中。 重复此过程直至最后一个元素。 本程序中选择排序代码如下: for(i=0;i for(j=i+1;j if(stu[i].fZongFen { t=stu[i]; stu[i]=stu[j]; stu[j]=t; 排序之后,将排序之后的结果写入文件,再打开文件的时候,里面显示的就是按总成绩排序后的结果。 ******统计人数模块 用函数voidZongrenshu()来实现 主要功能是统计总人数。 使用fread()函数读取数文件,利用返回值为实际读取字段数统计学生人数,一个字段为一个学生信息,计算完之后将总人数打印到主界面中即可。 *****以上就是本程序的详细设计及基本思想***** 三、运行结果 1、主界面 用户进入成绩管理系统时,主界面如图所示。 此时,系统已经将文件打开,若不为空,则将数据从文件逐条记录读出,并写入单链表中。 用户可以选择0~8之间的数值,调用相应的操作。 2、成绩录入 用户输入1按Enter键后,即可进入输入界面。 输入过程如图, 3、成绩显示 当用户执行了输入记录或已经从文件中读取学生记录后,即可输入2按Enter键,查看情况。 4、成绩查找 用户输入3按Enter键,进入查找记录界面,按学号查找。 如图: 5、成绩删除 用户输入4按Enter键,进入删除记录界面,过程如图。 6、成绩修改 用户输入5按Enter键,进入修改记录界面,过程如图。 7、成绩插入 用户输入6按Enter键,进入插入记录界面,过程如图。 8、成绩排序 用户输入7按Enter键,排序完成,再按2显示排序结果,如图。 9、学生人数 用户输入8按Enter键后,显示本班学生人数。 按0退出系统,且本系统每次的操作结果都会保存。 四、所遇到的问题和分析解决 1、存在的不足 本学生成绩管理系统由八大模块组成,每个模块相互联系又相互独立。 这个学生成绩管理系统存在着很多不足之处,由于自己本身编程能力的问题,这个系统可以实现的功能非常有限。 只能实现学生管理系统最基本的功能,可以进行简单的输入、输出学生资料,查询和修改学生信息,能直接从文件中读入数据,能对系统所作的修改、操作进行保存等。 而且在每个模块也有不足的地方,比如在输入学生资料时,对每个信息项没有严格的规定,可以输入任何的字符。 这有待以后努力,更详尽的实现模块的功能。 2、while语句的位置问题 在修改学生记录此模块中,若循环语句的位置不对那么这个循环就会自动跳出,或变为乱码,不能实现原有的功能。 所以要想清楚到底是在哪安放,按照逻辑思路找到相应的语句正确添加就行了。 3、细节方面 其实在有些细节方面还是要特别注意啊,比如分号的添加,函数的返回值等问题,虽然容易改掉,但是很容易养成不好的习惯,而且还会浪费时间,所以在一开始写的时候就要很仔细,这样才能保证程序编的精细,同时若出现很多这样的错误的话,在编写程序的时候也会心里烦的,所以在编程的时候要认真仔细。 4、文件的写入与读出 刚开始时对文件的操作不是很明白,一直不能很好的操作文件,直到最后验收的时候,仍旧出现了严重的问题,就是对已经存在的文件读取问题,通过"读取文件并输出学生信息",将数据从文件中读取,但是不能够正常的读出,最后把读文件的操作语句进行仔细检查后,发现语句的顺序有点问题,把fscanf()语句进行再修改后就能够正常的读取文件了。 5、内存的分配问题 对于初学者的话对内存的分配和释放问题是比较抽象的和模糊的问题,在排序是之前就出现了交换数据困难的问题,以及内存分配空间繁琐释放空间不及时的问题,造成空间的浪费,使得程序运行时效率较低,因此最后采用了顺序存储记录的方式,这就能改变前面所出现的问题。 6、较小的问题方面 其余的就没什么比较大的问题了,基本上只要细心一点的话就可以正确调试了。 五、结论及心得体会 一周多的课程设计,终于成功的验收了,虽然有些疲惫,但还是有很多的收获的,像计算机组成原理的课设一样,我又一次巩固了所学到的知识,之前的学习只是停留在理论基础上,现在自己动手操作试验后,才是真正的理解及体会。 C语言也学了近一年,有很多知识都是似懂非懂,通过平时上机操作,自己也了解了一些,但让我有了更深的理解和更好的认识,则是在这次的课设上,之前的困惑也通过这次的课设解决了一些,虽然还是不能够全面的理解,但是有进步就很高兴。 在课程设计之前,因为有了综合实验的经验与教训,明白了写代码这一步是非常重要的,因为当你把代码输进去之后,并编译让其运行,发现通过不了,再来检查出问题,是很费费力的事情,因此分析和规划代码是很重要的,最重要的是要把逻辑结构写好,这样就不会出现大问题,写代码就要先找出核心的内容,用多种方法来实现核心部分,这样可以尽可能的避免发现逻辑或编译不支持的错误。 通过本次论文设计,我初步学会了论文设计的基本方法,学会了怎样去借鉴别人的方法和经验,知道了如何整合资料和处理这些资料的能力,这位以后做毕设的论文打下了基础,使我感觉比较好的是有一种成功的喜悦,虽然在编译的时候会经常因为一些小的错误而心烦意乱,但是也不失为一件好事,失败的越多积累的经验越丰富,对人的考验也比较多,那么在最后编译成功时的喜悦就越浓烈,也是自己的能力有了进一步的提高。 由于知识和经验的不足,这个程序编写的不是很尽如人意,但是融合了自己的心血,就觉得是最好的,所以在以后还是需要较多的努力的,还是会在以后的学习过程中不断地提高和改进的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 管理 系统 设计 报告