学生成绩管理系统报告.docx
《学生成绩管理系统报告.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统报告.docx(39页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统报告
***********************
(微电子技术系)
实验报告书
课程名称:
学生成绩管理系统
学号:
---------------
姓名:
------------
教师:
---------
2011年06月10日
实验一学生成绩管理系统
实验时间:
2010年06月08日同组人员:
******
一、实验目的
为了熟练地利用VC环境执行一些初等的函数的运算,从而向生活实际靠拢,解决实际问题,并从中总结经验,为程序开发做铺垫。
二、实验仪器设备
电脑
VC6.0开发平台
三、实验原理和内容
原理:
C的编译功能调用库函数,使其执行所需功能,从而满足我们的实际需要开发一些具有强大运算功能软件或可视化程序。
内容:
见本报告第02~25页。
四、实验步骤
1.需求分析
2.架构设计
3.程序编写
4.调试及总结
五、实验数据
见本报告第07页调试数据
六、结果及分析
本实验基本达到了学习要求,无论是在程序编写上还是在调试上,都达到了预期目的。
不过在整体思路上还不够成熟,很多地方都存在不足,程序也不够完善。
(备注:
以上条目不得更改,务必严格执行,否则成绩为零。
实验报告全部用A4纸打印,并装订成册。
不能手写(若部分图片无法截取和电脑绘制,可以手绘)。
文字部分全部用宋体小四号字体。
目录
一、设计任务书---------------------------------------------3
二、需求分析------------------------------------------------3
1、系统和功能需求----------------------------------3
2、开发环境-------------------------------------------4
一、架构设计-----------------------------------------------4
二、详细设计-----------------------------------------------6
三、所遇到的问题和分析解决--------------------------11
四、系统特色及关键技术--------------------------------12
五、结论及心得体会--------------------------------------12
六、附录(源代码)--------------------------------------13
参考文献-----------------------------------------------------25
液晶显示程序课程设计任务书
一、题目:
学生成绩管理系统设计
二、内容与要求
学生成绩信息包括:
学期,学号,姓名,三门课程成绩(C语、数学、英语)等。
主要功能:
(1)能按学期、按学号、按姓名完成对学生成绩的录入、修改、存储
(2)能按班级统计学生的成绩,求学生的总分及平均分
(3)能按按学号及学期删除信息
(4)能选择单科成绩对学生排序
三、地点:
实验楼6层609室
四、时间安排:
每周三、四晚
五、班级与指导老师:
10307101班、杨泽光老师
六、参考资料
(1)谭浩强.C程序设计(第三版).北京:
清华大学出版社,2005
(2)《C++程序设计》钱能清华大学出版社
(3)网上相关资料
二、需求分析
1、系统需求
(1)问题描述:
该系统实现对若干个大学生的学习成绩进行管理。
至少包括以下信息:
学期、学号、姓名、C语成绩、数学成绩、英语成绩。
(2)功能要求:
1.使用中文菜单,界面设计和用户输入输出要人性化些;
2.将学生信息保存在文本文档中,具体对学生信息进行插入删除查询操作时,将保存在文本文档中的学生信息提取出来,保存在自己定义的数据结构中,然后再对该数据结构进行操作,所有操作完成,或者在相应的命令后,再将学生信息保存到文本文档中。
3.具有数据输入功能,输入的数据能最终保存在文件中;
4.具有数据删除功能,能最终从文件中删除;
5.排序功能,根据自己设计的数据结构,设计排序算法
6.具有查询(如按学号查询、按姓名查询、按成绩查询等)及输出功能;
7.其它功能
(3)说明:
1、功能各方面越完善越好
2、自定义的数据结构可以使用数组,链表,树等,然后根据不同的数据结构,设计不同的排序,查找算法。
其中,排序算法至少有两种,可以使用多种数据结构来存放数据,然后在其上使用不同的排序算法。
3、若用数组,必须动态分配空间
(4)、输入输出的形式
本系统是一个学生成绩管理系统,采用VC6.0编译器作为开发环境,这个环境是我们在学习C++的平台。
输入数据类型主要是char、int、float等数据类型,输入内容包括:
学期、学号、姓名、C语成绩、数学成绩、英语成绩、总分、平均分等数据。
用户在输入学生数据时要保证输入数据格式的正确性,系统不会自动检测输入的数据是否正确,输出形式与输入形式类似,根据需要可以选择显示输入的各项内容,还可以选择显示计算好平均分,显示内容包括:
学期、学号、姓名、、C语成绩、数学成绩、英语成绩、总分、平均分等数据。
2、开发环境
VisualC++不仅仅是是一个C++编译器,而是一个基于Windows操作系统的可视化集成开发环境IDE,这种环境开发出来的软件稳定性好、可移植性强,可以编制各种各样的Windows应用程序。
一、架构设计
架构代码:
#include//引用库函数
#include
#include
#include
typedefstructStudent//定义结构体数组
{
intterm;//学期
charnum[12];//保存学号
charname[20];//保存姓名
intcgrade;//保存C语言成绩
intmgrade;//保存数学成绩
integrade;//保存英语成绩
intsum;//总分
intcsum,msum,esum;
floataverage;//平均分
structStudent*next;
}Student;
Studentscore[1000];//结构体数组变量
//////////子函数,功能函数//////////
intmenu_select()//菜单函数
{
intc;
do{
system("cls");//运行前清屏
system("color70");//白底黑字
printf("\t**********************★欢迎使用学生成绩管理系统★********************\n\n");//菜单选择
printf("\t******************************★菜单栏★******************************\n\n");
printf("\t1.输入学生信息2.输出学生信息\n");
printf("\t3.按姓名、学号及学期查找学生信息4.按姓名、学号及学期修改学生信息\n");
printf("\t5.插入学生信息6.按学号及学期删除信息\n");
printf("\t7.按单科降序(选择)排序8.按总分降序(选择)排序\n");
printf("\t9.统计各科总分和平均分信息10.内存数据写入磁盘中\n");
printf("\t11.磁盘中数据读入内存0.结束程序§\n");
printf("\t********************☆Andrewchan09制作,版权所有!
☆********************\n\n");
printf("\t请选择您要运行的选项按(0-11):
");
scanf("%d",&c);//读入选择
}while(c<0||c>11);
return(c);//返回选择
}intInput(Studentgrade[],intn)//输入若干条记录
{}
voidDisp(Studentgrade[],intn)//输出学生信息及数据{}
voidQur_info(Studentgrade[],intn)//按姓名、学号及学期查找学生信息
{}
voidModify_info(Studentgrade[],intn)//按姓名、学号及学期修改学生信息
{}
intInsert(Studentgrade[],intn)//插入学生信息
{}
intDel_info(Studentgrade[],intn)//按学号及学期删除信息
{}
intSort_sub(Studentgrade[],intn)//按单科降序(选择)排序
{}
voidSort_sum(Studentgrade[],intn)//按总分降序排序
{}
voidAverage(Studentgrade[],intn)//统计各科总分和平均分信息
{}
voidSave(Studentgrade[],intn)//内存数据写入磁盘中
{}
intRead(Studentgrade[],intn)//磁盘中数据读入内存
{}
intmain()/*主函数*/
{
intn=0;
while
(1)
{switch(menu())/*选择判断*/
{
case1:
break;
case2:
break;
case3:
break;
case4break;
case5:
break;
case6:
break;
case7:
break;
case8:
break;
case9:
break;
case10:
break;
case11:
break;
case0:
return0
}
}
}
二、详细设计
1、系统流程图
2、界面设计
主界面:
在此界面用户可以选择要操作的选项,回车之后即可进入相关的页面进行操作(例如:
选择1,即可进入输入学生数据页面)
在本界面里用户可以输入学生相关的信息数据,按照提示进行操作即可,例如:
所有操作均有提示语,比较人性化的管理,易懂,简单
3、大概设计模块
(1)先编入系统所需的库函数,从而使程序可运行。
(2)#include/*引用库函数*/
(3)#include
(4)#include
(5)#include
(6)main()函数的设计
在main()函数中主要运用do-while循环语句和switch()-case选择判断语句来调用相关功能模块。
系统的运行是在一个永真的循环里进行的,只有在主界面选择“退出”时,才会跳出永真循环,并退出程序。
(7)主界面的设计
在主界面中包括“输入学生信息,显示记录,按姓名、学号及学期查找学生信息,按姓名、学号及学期修改学生信息,插入一条记录,按单科降序(选择)排序,按总分降序排序,统计各科总分和平均分信息,内存数据写入磁盘,磁盘中数据读入内存,结束程序”等全部的功能,之所以设计这麽一个主界面,一是因为能使用户对程序操作的流程更加清晰简明,二是保证了用户同时只能对一个文件进行操作系统的要求,保证了系统不会打开文件紊乱或者出现致命的错误。
每个函数体如下:
voidmain();//主函数
intmenu()/*菜单函数*/
intInput(Studentgrade[],intn)//输入若干条记录
voidDisp(Studentgrade[],intn)//输出学生信息及数据
voidQur_info(Studentgrade[],intn)//按姓名、学号及学期查找学生信息
voidModify_info(Studentgrade[],intn)//按姓名、学号及学期修改学生信息
intInsert(Studentgrade[],intn)//插入学生信息
intDel_info(Studentgrade[],intn)//按学号及学期删除信息
voidSort_sub(Studentgrade[],intn)//按单科降序(选择)排序
voidSort_sum(Studentgrade[],intn)//按总分降序排序
voidAverage(Studentgrade[],intn)//统计各科总分和平均分信息
voidSave(Studentgrade[],intn)//内存数据写入磁盘中
intRead(Studentgrade[],intn)//磁盘中数据读入内存
4、详细设计思想
(1)确定语言算法
由于之前都没有做过类似的设计,所以一时间不能够确定到底使用何种语言来设计本系统,所以在网上看了一些其他人设计的程序,链表的、数组的,C++的,各种各样的,也不知如何选择,但是仔细地看了其中的设计思想,最终还是用C++和指针数组的来做,一是觉得本人对链表掌握的不是很熟练,那么在设计过程中容易产生不能理解的错误,耽误时间,二是想运用C++,可以巩固一下所学的数据结构的知识,之前做实验的时候一直用C来做,都没怎么用所学的知识,这时候想练练。
就这样确定了整体的结构算法。
(2)确定程序主要功能模块
这个就比较简单了,主要是根据系统设计的说明及要求来设计,从而设计了十大功能模块,有文件操作,有系统维护功能,排序,有输入输出等基本功能,比较人性化,添加了较多的提示语。
这个程序的主要功能时输入学生的学期,学号,姓名来对其进行存储,在存储后可以对学生进行查询,同时输出此同学情况,之后可以对某个同学进行各种操作,例如修改,删除等,同时还可以排序,在整个过程中所做的操作都会保存到"学生成绩管理系统"文件中并显示。
(3)系统结构体的设计
typedefstruct/*定义结构体数组*/
{
charterm[6];//学期
charnum[10];//保存学号
charname[20];//保存姓名
charcgrade[4];//保存C语言成绩
charmgrade[4];//保存数学成绩
charegrade[4];//保存英语成绩
intsum;//总分
floataverage;//平均分
}Student;
Studentrecord[1000];/*结构体数组变量*/
Student结构体说明表
名称
属性
说明
term
数据成员
说明学生学期
num
数据成员
说明学生学号
name
数据成员
说明学生姓名
cgrade
数据成员
说明学生C语成绩
mgrade
数据成员
说明学生数学成绩
egrade
数据成员
说明学生英语成绩
(4)各功能模块的设计
******主函数模块
用函数voidmain()来实现
主要是来显示主菜单,使用户选择操作。
******菜单显示模块
用函数intmenu()/*菜单函数*/来实现
主要功能用来对学生的成绩进行收集和输入。
首先会有个提示“输入最初要求的学生数”,之后跳出主菜单,选择"1",进入输入模块输入所需学生个数的学生信息,比如学期,学号,姓名,成绩等。
输完之后会自动跳出主菜单,根据主菜单来在此基础上进行操作。
期间会有一些提示语,按此操作即可。
******显示学生记录模块
用函数voidDisp(Studentgrade[]intn);来实现
主要功能是用来显示学生的信息进行输出。
在系统已经录入了学生资料的前提下,只用该功能可以显示学生的信息资料等等。
同时也会自动跳出主菜单进行后续操作。
主要的程序代码就是从文件的读操作和界面显示操作。
******按姓名、学号及学期来查找学生记录模块
用函数voidQur_info(Studentgrade[],intn);来实现
主要功能时用来查找学生记录。
首先会有提示输入学号及学期,再用if判断语句来进行查找。
******修改学生记录模块
用函数voidmodify_info(Studentgrade[],intn)来实现
主要功能是用来修改学生记录。
首先也要有个判断语句,来看看要修给的学生是否存在,这个是通过学号,学期及姓名来判断的,这里会有提示输入学号及学期,之后for和if语句来实现修改学生成绩.
******插入学生信息模块
用函数intinsert(Studentgrade[],intn);来实现
主要功能是用来添加学生资料,成绩。
可以在已有信息的基础上再增加新的学生资料,采用指针的插入方式,将新增的学生信息插入到程序中,本模块功能到此结束。
******按学号及学期删除学生记录
用函数voidDel_info(Studentgrade[],intn)来实现
主要功能是用来删除学生记录。
首先输入学号和学期,之后会有判断语句,根据所输入的学号及学期,来删除以前的信息记录,添加for循环语句,循环把后一位的信息提前一位,整体数量减一,来进行全局变量的修改,之后再把修改过后的信息记录保存到文件中去。
******按单科成绩降序排序模块
用函数intSort_sub(Studentgrade[],intn)来实现
主要功能时是用来对学生的记录来按单科进行排序。
这样方便对某科成绩有个大致的了解。
首先会有一个读文件操作,为排序做基础。
本排序使用冒泡排序的方法,代码比较繁杂,但是简单易懂。
排序之后,将排序之后的结果写入文件,再打开文件的时候,里面显示的就是按单科成绩排序后的结果。
******按总分降序排序
用函数voidSort_sum(Studentgrade[],intn)来实现
主要功能是用来对学生成绩按总分成绩进行排序这样方便对对学生的总分有个大致的了解。
******统计各科总分及平均分模块
用函数voidAverage(Studentgrade[],intn)来实现
主要功能是计算总分和各科平均分。
代码比较容易实现,计算完之后将总分保存到文件中即可。
*****以上就是本程序的详细设计及基本思想*****
三、所遇到的问题和分析解决
1、存在的不足
本学生成绩管理系统由十大模块组成,每个模块相互联系又相互独立。
这个学生成绩管理系统存在着很多不足之处,由于自己本身编程能力的问题,这个系统可以实现的功能非常有限。
只能实现学生管理系统最基本的功能,可以进行简单的输入、输出学生资料,查询和修改学生信息,能直接从文件中读入数据,能对系统所作的修改、操作进行保存等。
而且在每个模块也有不足的地方,比如在输入学生资料时,对每个信息项没有严格的规定,可以输入任何的字符,在删除信息时没有加以必要的提示。
这有待以后努力,更详尽的实现模块的功能。
2、do-while语句的位置问题
在修改学生记录此模块中,若循环语句的位置不对那么这个循环就会自动跳出,或变为乱码,不能实现原有的功能。
所以要想清楚到底是在哪安放,按照逻辑思路找到相应的语句正确添加就行了。
3、system('cls')的使用问题
刚开始时对菜单的切换不是很了解,编写的程序运行的时候是一竖行向下的,很影响使用者的视觉范围,通过查询一些资料得知了system('cls')的作用,能够把一些暂时不用或不相关的信息通过清屏来处理。
5、细节方面
其实在有些细节方面还是要特别注意啊,比如分号的添加,函数的返回值等问题,虽然容易改掉,但是很容易养成不好的习惯,而且还会浪费时间,所以在一开始写的时候就要很仔细,这样才能保证程序编的精细,同时若出现很多这样的错误的话,在编写程序的时候也会心里烦的,所以在编程的时候要认真仔细。
6数据的写入与读出
刚开始时对文件的操作不是很明白,一直不能很好的操作文件,直到最后验收的时候,仍旧出现了严重的问题,就是对已经存在的文件读取问题,通过"读取文件并输出学生信息",将数据从文件中读取,但是不能够正常的读出,最后把读文件的操作语句进行仔细检查后,发现是动态内存的分配问题。
7、较小的问题方面
其余的就没什么比较大的问题了,基本上只要细心一点的话就可以正确调试了
四、系统特色及关键技术
其实在本程序的设计过程当中,没有很吸引人的关键技术,因为本人的C语言或C++语言都不是学的很好,所以当初设计的时候就只是想把功能都实现就好了,尽可能的把所要求的功能都编进程序,这样就觉得很满足了。
所以都是设计的比较简单易懂的语言,这样自己能够更明白一些,所以就没有时间去细细地去设计自己的程序。
本程序要说有什么值得说的,那就只有人性化这点了,在设计成学的时候,因为自己怕弄混了,所以添加了很详尽的提示,这样在编程的过程中或调试的时候都能够比较快的运行。
还有就是尽可能的应用了do-while语句和switch-case语句,这两个语句在之前不是很常用,所以在这个程序中试炼了一下,虽然在编写的过程中总是出错,但还是成功的用好了,也是程序有条理一些。
我也知道这些东西别人可能比我弄得还要好,但是我在我所学的知识中成功的应用了这些,我觉得就是好事,就是进步。
五、结论及心得体会
一周多的课程设计,终于成功的验收了,工作量虽说不是很大,但还是很辛苦的,不过收获很大,像计算机组成原理的课设一样,我又一次巩固了所学到的知识,之前的学习只是停留在理论基础上,现在自己动手操作试验后,才是真正的理解及体会。
C++也学了近一年,有很多知识都是似懂非懂,通过平时上机操作,自己也了解了一些,但让我有了更深的理解和更好的认识,则是在这次的课设上,之前的困惑也通过这次的课设解决了一些,虽然还是不能够全面的理解,但是有进步就很高兴。
在课程设计之前,因为有了综合实验的经验与教训,明白了写代码这一步是非常重要的,当编码在,再来检查出问题,是很费费力的事情,因此分析和规编译出错时,再找出原因很费时,因而,对程序的规划显得尤为重要,关键是要把逻辑结构写好,这样就不会出现大问题,写代码就要先找出核心的内容,用多种方法来实现核心部分,这样可以尽可能的避免发现逻辑或编译不支持的错误。
通过本次论文设计,我初步学会了论文设计的基本方法,学会了怎样去借鉴别人的方法和经验,知道了如何整合资料和处理这些资料的能力,这位以后做毕设的论文打下了基础,使我感觉比较好的是有一种成功的喜悦,虽然在编译的时候会经常因为一些小的错误而心烦意乱,但是也不失为一件好事,失败的越多积累的经验越丰富,对人的考验也比较多,那么在最后编译成功时的喜悦就越浓烈,也是自己的能力有了进一步的提高。
由于知识和经验的不足,这个程序编