数据结构课程设计学生成绩管理系统.docx
- 文档编号:28948618
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:42
- 大小:714.43KB
数据结构课程设计学生成绩管理系统.docx
《数据结构课程设计学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计学生成绩管理系统.docx(42页珍藏版)》请在冰豆网上搜索。
数据结构课程设计学生成绩管理系统
辽宁科技大学
课程设计报告
设计题目:
学生成绩管理
学院、系:
电子与信息工程学院
专业班级:
计算机11-2班
学生姓名:
赵月
指导教师:
龙艳彬
成绩:
2013年1月8日
一、需求分析------------------------------------------------3
二、概要设计------------------------------------------------3
三、详细设计------------------------------------------------5
3.1系统流程图-----------------------------------------------------5
3.2界面设计-------------------------------------------------------6
3.3各功能模块的设计----------------------------------------------7
四、测试与分析---------------------------------------------9
五、总结-----------------------------------------------------15
六、附录(源代码)--------------------------------------16
1.需求分析
1.1问题描述
本系统实现了学生成绩管理的功能,具有学生成绩的输入、读取、查询、修改、插入、删除、排序,统计等功能。
1.2基本要求
(1) 输入的形式和输入值的范围;
首先输入学生个数,按回车键。
按照提示选择,将学生信息保存在文本文档中,具体对学生信息进行插入删除查询操作时,将保存在文本文档中的学生信息提取出来,保存在自己定义的数据结构中,然后再对该数据结构进行操作,所有操作完成,或者在相应的命令后,再将学生信息保存到文本文档中。
输入数据类型主要是char、int、float等数据类型,输入内容包括:
学期、学号、姓名、高等数学成绩,数据机构成绩,大学英语成绩总分,平均分等数据。
(2) 输出的形式;
学期、学号、姓名、高等数学成绩,数据结构成绩,大学英语成绩,总分,平均分等数据。
(3) 程序所能达到的功能;
1.数据输入功能,输入的数据能最终保存在文件中;
2.数据删除功能,能最终从文件中删除;
3.排序功能,根据自己设计的数据结构,设计排序算法
4.多种查询(如按学号查询、按姓名查询、按成绩查询等)及输出功能;
6.学生信息的修改(比如修改学生姓名,修改学生某门课程的成绩)
7.其它功能(如各种统计,统计每个学生所有课程的平均分,统计某门课程所有学生的平均分等等)
2、概要设计
1.数据结构:
数组(顺序存储结构)
2.程序模块:
(1)先编入系统所需的库函数,使程序可运行
#include
#include
#include
#include
#include
(2)主界面的设计
在主界面中包括“
输入学生信息并保存到文件
读取文件并输出学生信息
按学号及学期查询
按姓名及学期查询
按学号及学期修改信息
插入信息
按学号及学期删除信息
按数据结构降序(冒泡)排序
按总分降序(选择)排序
统计各科成绩的总分和平均分
退出”等全部的功能。
每个函数体如下:
voidinput(Student*r);//输入
voidoutput(Student*r);//输出
voidsearchnum(Student*r);//按学号及学期查找
voidsearchname(Student*r);//按姓名及学期查找
voidchange(Student*r);//按学号及学期修改信息
Student*insert(Student*r);//插入信息
voidshanchu(Student*r);//按学号及学期删除信息
voidmaopao(Student*r);//按数据结构降序(冒泡)排序
voidxuanze(Student*r);//按总分降序(选择)排序
voidtongji(Student*r);//统计各科总分和平均分信息
(3)Main()函数的设计
在main()函数中主要运用do-while循环语句和switch()-case选择判断语句来调用相关
功能模块。
系统的运行是在一个循环里进行的,只有在主界面并选择“退出”时,才会跳出循环,并退出程序。
voidmain()
{
cout<<"输入学生的个数:
";
cin>>num;//全局变量
Student*p=(Student*)newStudent[num];//定义指针数组,存放学生个数
intm;
do{
cout< cout< cout<<"\t*----------------------------->菜单栏<-----------------------------*\n"< cout<<"\t*<1>输入学生信息并保存到文件<2>读取文件并输出学生信息*"< cout<<"\t*<3>按学号及学期查询<4>按姓名及学期查询*"< cout<<"\t*<5>按学号及学期修改信息<6>插入信息*"< cout<<"\t*<7>按学号及学期删除信息<8>按数据结构降序(冒泡)排序*"< cout<<"\t*<9>按总分降序(选择)排序<10>统计各科成绩的总分和平均分*"< cout<<"\t*<11>退出*"< cout<<"\t*------------------------------------------------------------------*\n"< cout<<"请选择: "; cin>>m; switch(m) { case1: input(p);//输入 break; case2: output(p); break; case3: searchnum(p); break; case4: searchname(p); break; case5: change(p); break; case6: p=insert(p); break; case7: shanchu(p); break; case8: maopao(p); break; case9: xuanze(p); break; case10: tongji(p); break; case11: //退出 break; } }while(m! =11); } 3、详细设计 1、系统流程图 2、界面设计 在此界面用户可以选择要操作的选项,回车之后即可进入相关的页面进行操作(例如: 选择1,即可进入输入学生信息页面) 3、各功能模块的设计 主函数模块: 用函数voidmain()来实现 主要是来显示主菜单,使用户选择操作。 首先定义一个指针数组(全局使用)Student*p=(Student*)newStudent[num];在此处num是指学生个数,并不是学号,在这里应用了do-while和switch-case语句来进行选择。 最后若选择“11”则是保存记录并退出循环。 输入学生记录模块: 用函数voidinput(Student*r);来实现 主要功能用来对学生的成绩进行输入。 首先会有个提示“输入学生的个数”,之后跳出主菜单,选择"1",进入输入模块输入所需学生个数的学生信息,比如学期,学号,姓名,成绩等。 输完之后会自动跳出主菜单。 期间会有一些提示语,按照提示操作。 根据if和for语句来判定是否有重复学号输入,在本操作中,允许有重复学生姓名出现。 t=1表示找到了与之重复的学号,t=0表示未出现重复学号。 在此期间会根据语句算出总分和平均分,并默认按学号排序保存到文件中去。 之后返回主菜单。 输出学生记录模块: 用函数voidoutput(Student*r);来实现 主要功能是用来输出学生的信息。 在系统已经录入了学生资料的前提下,用该功能可以显示学生的信息资料。 同时也会自动跳出主菜单进行后续操作。 其中stew()指的是两字节之间的间隔,在括号中填入数字就会有相应的间隔。 按学号及学期来查找学生记录模块: 用函数voidsearchnum(Student*r);来实现 主要功能时用来查找学生记录。 首先会有提示输入学号及学期,再用for循环语句和if判断语句来进行查找,if(r[m].num==n&&r[m].term==k)若找到则显示学生记录并跳出循环;if(r[m].num! =n&&r[m].term! =k)若没有则提示“该学号不存在,或没有这个学期的成绩! ”。 按姓名及学期来查找学生记录模块: 用函数voidsearchname(Student*r)来实现 主要功能也是用来查找学生记录的。 首先会有提示输入姓名及学期,再用for循环语句和if判断语句来进行查找,if((r[m].name[0]==n[0])&&(r[m].term==k))若找到则显示学生记录并跳出循环;if(r[m].name[0]! =n[0]&&r[m].term! =k)若没有则提示"该姓名不存在,或没有这个学期的成绩! " 按学号及学期修改信息: 用函数voidchange(Student*r)来实现 主要功能是用来修改学生记录。 首先也要有个判断语句,判断学生是否存在,这个是通过学号及学期来判断的,这里会有提示输入学号及学期,之后是for和if语句,if(r[m].num==n&&r[m].term==k)若存在则先输出修改之前的信息,查看是否正确。 若正确,则修改此学生记录,这里有个while循环语句,和switch-case选择语句,用来选择修改哪科成绩,和是否进行再修改记录(通过选择Y或y来实现)。 最后将修改过后的记录保存到文件中去,并输出提示"文件已修改并写入"。 插入学生资料模块: 用函数Student*insert(Student*r);实现 主要功能是用来添加学生资料,成绩。 若显示没有此学生的信息,就可以使用本模块来进行添加。 在此模块代码中定义了另一个指针数组: Student*y=(Student*)newStudent[num+1];用来存放新添加的学生记录。 再利用for循环进行输入新学生记录,for(m=0;m (继续,输入y,否则输入其他)"< 按学号及学期删除学生记录模块 用函数voidshanchu(Student*r)来实现 主要功能是用来删除学生记录。 首先有个读文件的操作,之后会有判断语句,根据所输入的学号及学期,来显示删除前的信息记录,添加for循环语句,循环把后一位的信息提前一位,整体数量减一,来进行全局变量的修改,之后再把修改过后的信息记录保存到文件中去。 按数据结构成绩(冒泡)降序排序模块 用函数voidmaopao(Student*r)来实现 主要功能时是用来对学生的记录来按单科成绩(这里以数据结构成绩为例)进行排序。 这样方便对某科成绩有个大致的了解。 首先会有一个读文件操作,为排序做基础。 本排序使用冒泡排序。 它有两个优点: 一是很容易写出代码;二是具有稳定性,这里的稳定性是指原序列中相同两元素的相对顺序仍然保持到排序后的序列。 冒泡排序时进过n-1趟子排序完成的,第i趟子排序从第1个数至第n+1个数,若第i个数比后一个数大(则升序,小则降序。 本程序一律采用降序)则交换两数。 排序之后,将排序之后的结果写入文件,再打开文件的时候,里面显示的就是按单科成绩排序后的结果。 按总分(选择)降序排序: 用函数voidxuanze(Student*r)来实现 主要功能时是用来对学生的记录来按总分成绩进行排序。 这样方便对学生总体有个大致的了解。 首先会有一个读文件操作,为排序做基础。 本排序使用选择排序。 其基本思想是: n个记录的文件的直接选择排序可进过n-1趟直接选择排序得到有序结果: 初始状态,无序区为R[1..n],有序区为空。 第一趟排序在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第一个记录R[1]交换,使R[1..n]和R[2..n]分别变为记录个数增加1个的新有序区记录和记录数减少1个的新无序区。 ..... 第i趟排序第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(1≤i≤n-1)。 该趟排序从当前无序区中选出关键字最小的记录R[k],将它与无序区的第一个记录与R交换,使R[1..i]和R分别变成为记录个数增加1个的新有序区和记录个数减少1个的新无序区。 这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。 统计各科总分及平均分模块: 用函数voidtongji(Student*r)来实现 主要功能是计算总分和各科平均分,计算完之后将总分保存到文件中。 4、测试与分析 进入主界面选择<1>输入学生信息 输入结束后的界面: Student.txt: 23赵月89.092.088.03269.089.7 12李丽92.085.088.03265.088.3 31王虎87.079.045.03211.070.3 选择<2>,输出了学生信息: 选择<3>,按学号及学期查询学生信息: 选择<4>,按姓名及学期查询学生信息: 选择<5>,按学号及学期修改学生信息: Student.txt: 23赵月89.092.088.03269.089.7 12李丽92.085.088.03265.088.3 31王虎87.079.085.03211.070.3 选择<6>,插入学生信息: Student.txt: 23赵月89.092.088.03269.089.7 12李丽92.085.088.03265.088.3 31王虎87.079.085.03211.070.3 17王万78.079.086.03243.081.0 选择<7>,按学号及学期删除学生信息: Student.txt: 23赵月89.088.088.03269.089.7 12李丽92.088.088.03265.088.3 17王万78.086.086.03243.081.0 选择<8>,按数据结构降序<冒泡>排序: Student.txt: 23赵月89.088.088.03269.089.7 12李丽92.088.088.03265.088.3 17王万78.086.086.03243.081.0 选择<9>,按总分降序<选择>排序: Student.txt: 23赵月89.088.088.03269.089.7 12李丽92.088.088.03265.088.3 17王万78.086.086.03243.081. 选择<10>,统计各科成绩的总分和平均分: 选择<11>,退出: 5、总结 课程设计终于结束了感觉有很多的收获,通过课程设计我又一次巩固了所学的知识,对学习到的理论知识进行了巩固,真正的理解及体会了。 平时有很多知识都是似懂非懂,通过平时上机操作,自己也了解了一些,但在这次的课设上,之前的困惑也通过这次的课设解决了一些,虽然还是不能够全面的理解,但是有进步就很有成就感。 在课程设计中遇到不少困难,通过查阅资料,询问同学,在应用课本的前提下,拓展课外知识,完成了此次课程设计,虽然还有许多不足之处,但是从中我学到了许多东西。 我懂得了我们不能拘泥于所学知识,应对其灵活运用。 通过此次课程的设计使我认识到对知识的掌握不全面,而且感觉我们在学习专业知识的同时还需要再加强其他方面知识的学习,因为编程有时候涉及到其他方面的知识,只有了解了其他方面的知识才能收集资料,然后编程。 在编程的过程中,又重新复习了课本,从中学到了许多以前未学到的知识,感觉非常有成就感,特别当自己把程序一点点完善时, 让我对自己更加有信心,让我对数据结构这门课程也更感兴趣了,以前我一直感觉枯燥难学的数据结构,在编程的过程中我也愿意去认真研究学习了。 这次数据结构课程设计中,多亏了同学的耐心帮助。 如果没有同学的指导改错,我会花更多的时间去找错误。 在以后的学习过程中,我一定会认真负责地对待课本中的每一个知识点,进一步充实自己,提高自己。 争取在不断的练习中提高自己的层次。 也希望可以在以后的专业课当中多增加一些实践的内容,只有多动手,我们才能不断提高。 6、附录: 源程序清单 #include #include #include #include #include //数组、结构体 structStudent//结构体 { intterm;//学期 intnum;//学号 charname[12];//姓名 floatmark1;//成绩1 floatmark2;//成绩2 floatmark3;//成绩3 floatsum;//总分 floataverage;//平均分 }; intnum=0; //声明 voidinput(Student*r);//输入 voidoutput(Student*r);//输出 voidsearchnum(Student*r);//按学号及学期查找 voidsearchname(Student*r);//按姓名及学期查找 voidchange(Student*r);//按学号及学期修改信息 Student*insert(Student*r);//插入信息 voidshanchu(Student*r);//按学号及学期删除信息 voidmaopao(Student*r);//按数据结构降序(冒泡)排序 voidxuanze(Student*r);//按总分降序(选择)排序 voidtongji(Student*r);//统计各科总分和平均分信息 voidmain() { cout<<"输入学生的个数: "; cin>>num;//全局变量 Student*p=(Student*)newStudent[num];//定义指针数组,存放学生个数 intm; do{ cout< cout< cout<<"\t*----------------------------->菜单栏<-----------------------------*\n"< cout<<"\t*<1>输入学生信息并保存到文件<2>读取文件并输出学生信息*"< cout<<"\t*<3>按学号及学期查询<4>按姓名及学期查询*"< cout<<"\t*<5>按学号及学期修改信息<6>插入信息*"< cout<<"\t*<7>按学号及学期删除信息<8>按数据结构降序(冒泡)排序*"< cout<<"\t*<9>按总分降序(选择)排序<10>统计各科成绩的总分和平均分*"< cout<<"\t*<11>退出*"< cout<<"\t*------------------------------------------------------------------*\n"< cout<<"请选择: "; cin>>m; switch(m) { case1: input(p);//输入 break; case2: output(p); break; case3: searchnum(p); break; case4: searchname(p); break; case5: change(p); break; case6: p=insert(p); break; case7: shanchu(p); break; case8: maopao(p); break; case9: xuanze(p); break; case10: tongji(p); break; case11: //退出 break; } }while(m! =11); } //输入信息 voidinput(Student*r) { FILE*fp; intn=0; inti; intt=0;//t为标志位,1为找到,0为未找到 cout< for(i=0;i { cout<<"请输入学期: "; cin>>r[i].term; cout<<"请输入第"< "; cin>>r[i].num; if(i>=1) { for(n=0;n { if(r[n].num==r[i].num) { cout<<"该学号
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 学生 成绩管理系统