版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、河南工程学院高级程序设计语言课程设计成果报告学生成绩管理系统设计与实现学生学号: 学生姓名: 学 院: 计算机学院 专业班级: 软件工程 1342 专业课程: 高级程序设计语言指导教师: 2014 年 6 月 27 日题 目学生成绩管理系统设计与实现考核项目考核内容得分平时考核(30分)出勤情况、态度、效率;知识掌握情况、基本操作技能、知识应用能力、获取知识能力系统设计(20分)分析系统的功能模块编程调试(20分)实现系统的各个功能模块,并完成调试回答问题(15分)回答老师针对课程设计提出的问题课程设计报告撰写(10分)严格按照规范要求完成课程设计报告源代码(5分)按照规范要求完成课程设计源代
2、码的排版总 评 成 绩指导教师评语: 日期: 年 月 日目录第1章 课程设计目的及任务11.1 课程设计目的11.2 课程设计任务1第2章 系统实现思路22.1 各个类基本功能22.2 系统需求分析22.2.1信息操作功能22.2.2查询功能32.2.3统计功能32.2.4分析功能32.3.系统的功能模块图3第3章 系统详细设计53.1分数类的设计(class score)53.2课程类的设计(class course)53.3学生类的设计(class student)63.4班级类的设计(class grades)63.4.1 有关学生信息的成员函数设计73.4.2 班级成绩单的函数设计83
3、.4.3 根据学号作为索引的函数设计103.4.4 查找和输出学生信息的函数设计113.4.5 输出不及格学生名单的函数设计123.5 主函数的设计13第4章 系统调试运行164.1输入文件格式164.2调试运行结果17课程设计体会20参考文献21附 录22第1章 课程设计目的及任务1.1 课程设计目的本课程设计的目的是培养应用面向对象程序设计设计方法及思想解决实际问题的能力,掌握使用面向对象程序设计语言C+,熟悉面向对象开发平台VisualC+6.0,提高调查研究、查阅技术资料以及编写技术文献的能力。1.2 课程设计任务为了实现对学生的成绩便于统计与查找,特制作学生成绩管理系统。设计内容如下
4、:(1)设计四个类,包括学生类(描述学生基本信息);成绩类:班级类;课程类(描述课程信息:课程编号,科目名称,如高等数学,大学英语等);(2)学生成绩及课程信息用文件保存,程序执行时从文件读入;(3)能按学期,按班级完成对学生成绩的录入、修改,能按班级统计学生的成绩;(4)求学生的总分及平均分,并能根据学生的平均成绩进行排序,能查询学生成绩,不及格科目及学生名单;能按班级输出学生的成绩单。 设置学生的成绩信息:学生学号、姓名、所选课程名称、平时成绩、期末成绩、平时成绩所占百分比。 计算学生总评成绩:总评成绩=平时成绩*平时成绩所占百分比+期末成绩*(1-平时成绩所占百分比)。 显示学生的姓名、
5、所选课程名称以及平时成绩、期末成绩和总评成绩信息。分单人显示和以班输出(班成绩单格式输出到文件)。第2章 系统实现思路通过类的封装,将课程类的信息储存在学生类中,学生信息储存在班级类中,程序的所有功能均通过班级类的成员函数实现。2.1 各个类基本功能各个类的数据成员用于储存其相关信息:分数类用于综合成绩的储存,学生类用于储存学生基本信息,班级类用于存放专业,编号等信息,课程类用于存放科目信息,具体内容见表2.1。表2.1 类及其数据成员类名成员分数类score总评成绩(s_total),平均分(s_ave)总分(s_sum)学生类student学生相关信息:姓名(name),性别(sex),学
6、号(std_id),平时成绩(s_normal),课程类容器(vector)等.班级类grades专业(major),班级(cla_id),人数(peop_num),学生类容器(multiset)课程类course相关课程信息:科目编号(cou_id),科目名称(cou_name)以及分数(mark)2.2 系统需求分析系统功能系统的主要功能包括:信息的操作功能、查询功能、统计功能和打印能。2.2.1信息操作功能(1)学生基本信息的添加、修改和删除。学生基本信息包括:学好(学号的6位为班级号)、姓名、性别、出生日期和所在的专业。(2)课程信息的添加、修改和删除。课程信息包括:课程号、所属专业、
7、课程名称、课程类型(专修、选修、方向、通修、公修)、开课学期、学时数和学分。(3)学生成绩信息的添加、修改和删除。学生成绩信息包括:学好、课程号、成绩和学分。2.2.2查询功能可以通过学号来查学生基本信息,通过学号和学期号查询学生的成绩,通过课程号查询该课程的信息。2.2.3统计功能统计当前信息所显示的信息数以及学生某个学期或所有学期课程的总学分。2.2.4分析功能对某一个班级的某一门课程的成绩分布进行分析,并以直方图的形式显示出来。数据库用Microsoft Access2003创建一个数据库main.mdb,含有3个主要数据表:学生基本信息表student、课程信息表course和学生成绩
8、表score。这3个表的结构如表13所示。这几个表中,学号studentno和课程号courseno内容都是唯一的,分别是student和course表中的主关键字。score表中的studentno和student表中的同名字段相对应,字段course和course表中的courseno字段相对应。该数据字典也作为数据库main.mdb的一格数据表special2.3.系统的功能模块图一、根据期末课程设计要求,本组统划分成七个主功能模块:录入学生信息及成绩模块、修改学生信息模块、删除学生信息模块、查询信息模块、输出模块和系统退出和保存模块,具体内容见如下系统功能模块图:学生成绩管理系统主函数
9、及主菜单添加学生退除系统保存信息显示学生成绩删除学生信息按照姓名查找按照学号查找 图2.3功能模块图第3章 系统详细设计系统包括查询/修改个人分数,打印班级成绩单及不及格名单,并对学生排序;所有功能均由grades成员函数实现:fread()负责初始化读入信息,display()负责打印班级成绩单,revise()负责修改学生信息,seek()负责查找,failshow()负责打印不及格名单。需求分析有如下几点:(1)能对学生各科成绩进行录入;(2)能对学生的成绩进行增加;(3)能对学生的成绩进行删除;(4)能对学生的成绩进行修改;(5)能对学生的成绩按总成绩,姓名,进行查询;(6)能输出学生
10、的所有数据;(7)能进行成绩统计;(8)能进行总分查询排名3.1分数类的设计(class score)Class score 负责储存学生的平均成绩,总成绩,综评成绩。其中:总成绩=各科成绩合,平均成绩=总成绩/科目数,总评成绩=平时成绩*平时成绩所占百分比+期末成绩*(1-平时成绩所占百分比)。class score /分数public: int s_total; int s_ave; int s_sum;3.2课程类的设计(class course)class course 负责储存课程的编号,名称,及分数代码实现:class course /课程信息 public: int cou_id
11、;string cou_name;int mark; /分数;3.3学生类的设计(class student)class student 为class score的子类。其新增的数据成员为:学生姓名(name),性别(sex),学号(std_id),平时成绩(s_normal),平时成绩所占百分比(per),该学生选的科目数m,以及一个class course的vector容器用来储存该学生选的科目。class student:public score /学生信息public: string name; string sex; int std_id; int s_normal; /平时成绩 d
12、ouble per; /平时成绩所占百分比 int m; /该学生选课的门数 vector cour; /该学生所选的课;3.4班级类的设计(class grades)class grades储存班级的基本信息,包括专业(major),班级编号(sla_id),学生人数(peop_num),以及一个class student的multiset容器,class grades包含5个成员函数,分别实现程序的查找/修改等功能,具体内容见表3.2。表3.2 班级里成员函数功能成员函数名参数类型功能描述fread()int n(学生数)从文件读入n个学生信息revise()int t_id(学号) 修改
13、学号为t_id的学生信息display()void将班级成绩单打印到文件seek() int t_id(学号)查找学号为t_id的学生,并输入个人成绩单failshow()void将不及格的学生姓名,学号打印到文件实现代码如下:class grades /班级public: string major; int cla_id; int peop_num; multiset stu; void fread(int n); /对成绩的录入,n个学生 void revise(int t_ID); /根据学号修改学生信息 void display(void); /打印班级成绩单 void seek(in
14、t t_ID); /查找 void failshow(void); /打印不及格学生名单;3.4.1 有关学生信息的成员函数设计该函数实现从文件读入学生信息,根据公式计算总成绩,平均成绩,总评成绩.并将结果储存在grade:multisetstu 容器中。代码实现:void grades:fread(int n) student tem; course t; ifstream infile(in.dat,ios:in); if(!infile) coutopen error !endl; exit (1); for(int i=0;tem.sextem.std_id tem.
15、pertem.s_normal; /设置学生信息 infiletem.m; tem.s_sum=0; for(int j=0;jt.cou_idt.cou_namet.mark; tem.s_sum+=t.mark; /总分 tem.cour.push_back(t); tem.s_ave=(tem.s_sum)/tem.m; /平均分 tem.s_total=tem.s_normal*tem.per+ tem.s_sum*(1-tem.per); /总评成绩 stu.insert(tem); infile.close();3.4.2 班级成绩单的函数设计grades:display()负责向
16、文件中打印班级成绩单。grades:multisetstu中的所有内容。代码实现:void grades:display(void) /输出班级成绩单 multiset:iterator iter; ofstream outfile(out.dat,ios:out); if(!outfile) coutopen errorendl; exit(1); outfile专业:majord班级:cla_id人数peop_numendl; outfile姓名t性别t学号t各科成绩t总成绩tt综评成绩tendl; for(iter=stu.begin();iter!=stu.end();iter+) o
17、utfile(*iter).namet(*iter).sext(*iter).std_id ; for(int i=0;i(*iter).m;i+) outfile(*iter).cour.at(i).cou_name (*iter).cour.at(i).mark ; outfilet(*iter).s_sumt(*iter).s_totaltendl; outfile.close(); cout完成endl;3.4.3 根据学号作为索引的函数设计grades:revise()负责根据学号作为索引修改学生信息,由于用到了multiset容器,所以需要重载运算符:bool operator s
18、tu2.std_id;先根据std_id查找到要修改学生的迭带器,将旧信息用multiset:erase()删除,同时插入(multiset:insert()修改过的信息。具体代码实现如下:void grades:revise(int t_ID) student temstu; temstu.std_id=t_ID; temstu.s_sum=0; multiset:iterator iter; iter=stu.find(temstu); temstu.m=(*iter).m; if(iter!=stu.end() cout请输入要修改的学生信息endl; for(int i=0;items
19、tu.m;i+) couttemstu.cour.at(i).cou_name:temstu.cour.at(i).mark; temstu.s_sum+=temstu.cour.at(i).mark; cout平时成绩temstu.s_normal; cout平时成绩所占百分比temstu.per; temstu.s_ave=temstu.s_sum/temstu.m; temstu.s_total=temstu.s_normal*temstu.per+temstu.s_sum*(1-temstu.per); cout姓名; cout性别:temstu.sex; stu
20、.erase(iter); /删除旧元素 stu.insert(temstu); /插入新元素 cout修改完成endl; else cout找不到该学生endl;3.4.4 查找和输出学生信息的函数设计grades:seek()根据学号查找出学生,并输出该学生的个人成绩单,与grades:revise()相似。代码实现:void grades:seek(int t_ID) /查找学号为t_ID的学生 student temstu; temstu.std_id=t_ID; multiset:iterator iter=stu.find(temstu); if(iter!=stu.end() c
21、out姓名: (*iter).name学号:(*iter).std_idendl; for(int i=0;i(*iter).m;i+) cout(*iter).cour.at(i).cou_name: (*iter).cour.at(i).mark; cout总成绩:(*iter).s_sum综评成 绩:(*iter).s_totalendl; else cout找不到该学生endl;3.4.5 输出不及格学生名单的函数设计grades:failshow()是根据平均分找出不及格的学生名单,并输出到文件:代码实现:void grades:failshow() ofstream outfile
22、(outn.dat,ios:out); multiset:iterator iter; for(iter=stu.begin();iter!=stu.end();iter+) if(*iter).s_ave60) outfile(*iter).name (*iter).std_id endl; outfile.close(); cout完成:输出到:./outn.datendl;3.5 主函数的设计主函数负责调用类中的成员函数,来完成一系列的功能。代码如下:int main() system(color d0); int c,t; grades cla; cout请输入学生人数:cla.peo
23、p_num; cout请输入专业:cla.major; cout请输入班级cla.cla_id; cla.fread(cla.peop_num); while(1) system(cls); cout 1_修改学生信息endl; cout 2_打印班级成绩单endl; cout 3_打印个人成绩单endl; cout 4_打印不及格学生名单endl; cout 5_退出c; switch (c) case 1: coutt; cla.revise(t); break; case 2: cla.display(); break; case 3: coutt; cla.seek(t); break
24、; case 4: cla.failshow(); break; case 5: return 0; default: cout输入错误!endl; system(pause); return 0;第4章 系统调试运行对已经编码完毕的程序进行调试运行,发现程序错误,更改错误。将代码进一步优化,功能进一步完善。4.1输入文件格式输入文件应放于./in.dat中,其中in.dat的格式如下:姓名 性别 学号 平时成绩所在百分比 平时分选的科目数课程编号 课程名称 分数输入样例:Frank M 13 0.7 303142 高数 89242 英语 85234 程序 95TOM M 13 0.7 303
25、142 高数 89242 英语 78234 程序 90Mary W 13 0.7 303142 高数 89242 英语 85234 程序 90Bob M 13 0.7 302142 高数 89242 英语 854.2调试运行结果打开程序后,会提示键入要读入班级的基本信息,包括人数,专业,班级编号,如图4.1所示。图4.1 程序初始页面在输入完班级的基本信息后,程序会自动从./in.dat下读入学生的相关信息,若文件不存在或其他原因导致文件打开失败,程序会有”open error”提示,并退出。如果成功打开了文件./in.dat,程序会从中读入学生信息,并显示出主页面,这时可以根据标号选择需要执
26、行的功能,或者选择5退出程序,见图4.2。图4.2 程序主界面若选择2打印班级成绩单后,程序为将班级成绩单输出到./out.dat中,并输出打印成功的提示,如图4.3。图4.3打印班级成绩单成功 打开文件./out.dat,可以看到如图4.5的结果即打印的班级成绩单。(4)删除学生数据可以进行一下操作(如下例图),能够使已存入数据的学生信息得以永久删除,使用者可以按照要求进行规范操作,如果想继续删除(或停止操作),输入y(或n)便可以进行。图4.4删除学生数据(5)如果想对学生查询个人平均分,可以选择菜单的选项7,按进enter键,桌面会谈跳出下图所示窗口,则其显示的是使用者所需要的部分。图4
27、.4 程序将成绩单打印到./out.dat课程设计体会从确定了题目,一直到完成整个大作业,在整整一周的日子里,我学到很多的东西。不仅可以巩固了以前所学过的知识,并且发掘了很多在已有的书本上所拥有的知识。在设计的过程中遇到问题很平常,从没见过的,没有任何头绪解决的,这毕竟第一次做的,问题就肯定难免。而解决这些问题的过程,给我带来了极大的收获。除去知识上的自我完善,同时在设计的过程中发现了自己的不足之处,完善自身的不足,也是这次课程设计给我带来的很大的收获。在这过程中我也掌握了许多以前不太熟悉的知识,这让我很是欣慰。软件开发,是一项细致,慢慢摸索的过程,在开发中我明白了,要想熟练的写出可运行且实用
28、的程序,就应该具有坚实基本功,平时应多联系一些感兴趣的题目。熟悉基本函数,掌握一些功能实用、强大的函数。在程序开发过程中要细心,要坚持。戒骄戒躁,多总结,勤思考。每天做出详细的计划。尽可能的完成任务,在不断的失败中总结教训,切勿灰心丧气。参考文献1C+语言程序设计(第二版).科学出版社2C+程序设计基础(第二版).清华大学出版社3C+大学基础教程(第六版).电子工业出版社4C+语言导学(第四版).机械工业出版社5C+语言程序设计基础篇(第六版).机械工业出版社6HeadFirstC+(第二版).东南大学出版社附 录#include #include #include #include #inc
29、lude #include #include #include using namespace std;class score /分数public: int s_total; int s_ave; int s_sum;class course /课程信息 public: int cou_id; string cou_name; int mark; /分数;class student:public score /学生信息public: string name; string sex; int std_id; int s_normal; /平时成绩 double per; /平时成绩所占百分比 i
30、nt m; /该学生选课的门数 vector cour; /该学生所选的课;bool operator stu2.std_id; class grades /班级public: string major; int cla_id; int peop_num; multiset st744444444444u; void fread(int n); /对成绩的录入,n个学生 void revise(int t_ID); /根据学号修改学生信息 void display(void); /打印班级成绩单 void seek(int t_ID); /查找 void failshow(void); /打印
31、不及格学生名单;void grades:failshow() ofstream outfile(outn.dat,ios:out); multiset:iterator iter; for(iter=stu.begin();iter!=stu.end();iter+) if(*iter).s_ave60) outfile(*iter).name (*iter).std_id endl; outfile.close(); cout完成:输出到:./outn.datendl;void grades:seek(int t_ID) /查找学号为t_ID的学生 student temstu; temst
32、u.std_id=t_ID; multiset:iterator iter=stu.find(temstu); if(iter!=stu.end() cout姓名: (*iter).name学号:(*iter).std_idendl; for(int i=0;i(*iter).m;i+) cout(*iter).cour.at(i).cou_name: (*iter).cour.at(i).mark; cout总成绩:(*iter).s_sum综评成绩:(*iter).s_totalendl; else cout找不到该学生endl;void grades:display(void) /输出班
33、级成绩单 multiset:iterator iter; ofstream outfile(out.dat,ios:out); if(!outfile) coutopen errorendl; exit(1); outfile专业:major班级:cla_id人数peop_numendl; outfile姓名t性别t学号t各科成绩t总成绩tt综评成绩tendl; for(iter=stu.begin();iter!=stu.end();iter+) outfile(*iter).namet(*iter).sext(*iter).std_id ; for(int i=0;i(*iter).m;i
34、+) outfile(*iter).cour.at(i).cou_name (*iter).cour.at(i).mark ; outfilet(*iter).s_sumt(*iter).s_totaltendl; outfile.close(); cout完成,输出到:./out.datendl;void grades:fread(int n) student tem; course t; ifstream infile(in.dat,ios:in); if(!infile) coutopen error !endl; exit (1); for(int i=0;tem.sextem.std_idtem.pertem.s_normal; /设置学生信息 infiletem.m; tem.s_sum=0; for(int j=0;jt.cou_idt.cou_namet.mark; tem.s_sum+=t.mark; /总分 tem.cour.push_back(t); tem.s_ave=(tem.s_sum)/tem.m; /平均分 tem.s_total=tem.s_normal*tem.per+tem.s_sum*(1-tem.per); /总评成绩 stu.i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Photoshop中级职业技能考试试题及详细答案
- 铁路桥隧工高级技师操作技能试题库及答案
- 石材板材装卸搬运安全规程
- 2026年自然保护区管理局公务员招聘考试试题及答案
- 电动葫芦安全操作规程
- 2025-2026学年辽宁省盘锦市初中政治七年级期末下册深度自测思维拓展题(详细参考解析)
- OCA认证(Oracle数据库助理工程师)全真考试题目及详细答案解析
- 除灰、除渣、电除尘考试-电除尘值班员(初级工)考试试题及答案
- 饲料除尘系统运维工规程
- 材料员考试试题及答案
- 医学影像学神经系统疾病课件
- 英语-全国天域名校协作体2027届高三10月联考
- 教师日常心理滋养 守护长期职业健康课件
- 山地光伏电站集电线路施工方案
- 2.5 口腔里的消化 课件(内嵌视频)2026-2027学年科学四年级上册教科版
- 小学三年级劳动教育《交通指挥有学问》教学设计
- 云南省2026年中考地理试题(附答案)
- 统编版八年级语文上册第三单元《课外古诗词诵读》学习任务单
- AI在网络舆情智能监测与分析中的应用
- 注册消防工程师继续教育2025年部分题目与答案(126题)
- AI在不良资产处置智能化中的应用探索
评论
0/150
提交评论