




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河南工程学院高级程序设计语言课程设计成果报告学生成绩管理系统设计与实现学生学号: 学生姓名: 学 院: 计算机学院 专业班级: 软件工程1341 专业课程: 高级程序设计语言 指导教师: 2014 年 6 月 27 日题 目学生成绩管理系统设计与实现考核项目考核内容得分平时考核(30分)出勤情况、态度、效率;知识掌握情况、基本操作技能、知识应用能力、获取知识能力系统设计(20分)分析系统的功能模块编程调试(20分)实现系统的各个功能模块,并完成调试回答问题(15分)回答老师针对课程设计提出的问题课程设计报告撰写(10分)严格按照规范要求完成课程设计报告源代码(5分)按照规范要求完成课程设计源代码的排版总 评 成 绩指导教师评语: 日期: 年 月 日目 录第1章 系统设计目的11.1 课程设计目的11.2课程设计任务1第2章 系统实现思路22.1 类的设计22.2 自定义函数的设计32.3 主函数的设计4第3章 系统详细设计63.1 数据录入、保存功能函数63.2 数据查询功能函数73.3 数据修改功能函数93.4 成绩打印函数10第4章 系统调试运行124.1 系统程序运行过程124.2 系统程序运行结果15课程设计体会17参考文献18附 录19第1章 系统设计目的1.1 课程设计目的本课程设计的目的是培养应用面向对象程序设计设计方法及思想解决实际问题的能力,掌握使用面向对象程序设计语言C+,熟悉面向对象开发平台VisualC+6.0,提高调查研究、查阅技术资料以及编写技术文献的能力。1.2课程设计任务(1)设计四个类,包括学生类(描述学生基本信息);成绩类:班级类;课程类(描述课程信息:课程编号,科目名称,如高等数学,大学英语等);(2)学生成绩及课程信息用文件保存,程序执行时从文件读入;(3)能按学期,按班级完成对学生成绩的录入、修改,能按班级统计学生的成绩;(4)求学生的总分及平均分,并能根据学生的平均成绩进行排序,能查询学生成绩,不及格科目及学生名单;能按班级输出学生的成绩单。 设置学生的成绩信息:学生学号、姓名、所选课程名称、平时成绩、期末成绩、平时成绩所占百分比。 计算学生总评成绩:总评成绩=平时成绩*平时成绩所占百分比+期末成绩*(1-平时成绩所占百分比)。 显示学生的姓名、所选课程名称以及平时成绩、期末成绩和总评成绩信息。分单人显示和以班输出(班成绩单格式输出到文件)。 注意,至少应包含一个班、30人、三门课。 第2章 系统实现思路通过类的封装,将课程类的信息储存在学生类中,学生信息储存在班级类中,程序的所有功能均通过班级类的成员函数实现。2.1 类的设计第一步建立四个类用于描述各个操作对象的基本信息class score /分数信息类public: /各科期末成绩 int s_math; int s_english; int s_c; /各科成绩 int s_total_m; int s_total_e; int s_total_c; int s_average; /综评成绩 int s_sum; /总成绩;class course /课程信息类public: int cou_id; /科目编码 string cou_name; /科目名称;class student:public score /学生信息类public: string name; /学生姓名 string sex; /学生性别 int std_id; /学号 /各科平时成绩 int s_normal_m; int s_normal_e; int s_normal_c; double per; /平时成绩所占百分比 friend bool operator stu2.s_average; ;class grades /班级信息类public: string major; int cla_id; int peop_num; multisetstu; /储存学生信息/包含自定义函数 void fread(int n); /录入学生信息 void seek(int m_std_id); /查找 void revise(int m_std_id); /学生信息修改 void display(void); /按班级输出成绩 void display1(void); /查找成绩不及格同学并输出相关不及格科目;2.2 自定义函数的设计第二步设计功能函数用于操作第一步中所建立的操作对象以实现系统功能的核心步骤void fread(int n); /录入学生信息void seek(int m_std_id); /查找(按学号)void revise(int m_std_id); /学生信息修改(按学号)void display(void); /按班级输出成绩void display1(void); /查找成绩不及格同学并输出相关不及格科目2.3 主函数的设计第三部建立实际操作对象,运用自定义函数实现系统功能int main() /主函数,用来实现系统功能int c; int t; grades cla; /定义操作对象 cout*endl; cout请输入专业cla.major; cout请输入班级cla.cla_id; cout请输入学生人数:cla.peop_num; cla.fread(cla.peop_num); while(1) system(cls); cout1_修改学生信息endl; cout2_打印班级成绩单endl; cout3_打印个人成绩单endl; cout4_打印不及格学生名单endl; cout5_退出c; switch (c) case 1: coutt; cla.revise(t); break; case 2: cla.display(); break; case 3: coutt; cla.seek(t); break; case 4: cla.display1(); break; case 5: return 0; default: cout输入错误!endl; system(pause); return 0;第3章 系统详细设计系统包括查询/修改个人分数,打印班级成绩单及不及格名单,并对学生排序。所有功能均由grades成员函数实现:fread()负责初始化读入信息,display()负责打印班级成绩单,revise()负责修改学生信息,seek()负责查找,failshow()负责打印不及格名单。3.1 数据录入、保存功能函数该函数运用C+面向对象程序设计(谭浩强版)一书中的“文件操作与文件流”章节中所介绍的知识,通过使用VC+编译器中的库函数进行学生信息的录入与保存工作。说明:每一个打开的文件都有一个文件指针,该指针的初始位置是由I/O方式指定,每次读写都从文件指针的当前位置开始。每读入一个字节,指针就后移一个字节。当文件指针移到最后,就会遇到文件结束EOF(文件结束符也占一个字节,其值为-1),此时流对象的成员函数eof的值为非0值(一般设为1),表示文件结束了。这就是该输入方式的运行机制。void grades:fread(int n) /按照学生信息录入成绩 student tem; ifstream infile(f1.txt,ios:in);/录入f1.txt文件中的信息 if(! infile) cerr open error!endl; exit(1); for(int i=0;tem.sextem.std_idtem.pertem.s_normal_mtem.s_normal_etem.s_normal_c;infiletem.s_mathtem.s_englishtem.s_c;tem.s_total_m=tem.s_normal_m*tem.per+tem.s_math*(1-tem.per); tem.s_total_e=tem.s_normal_e*tem.per+tem.s_english*(1-tem.per); tem.s_total_c=tem.s_normal_c*tem.per+tem.s_c*(1-tem.per); tem.s_sum=tem.s_total_m+tem.s_total_e+tem.s_total_c; tem.s_average=(tem.s_sum)/3; stu.insert(tem); infile.close();3.2 数据查询功能函数根据自定义函数设定,在对学生进行成绩录入时唯一不会改变、不会出现错误的就是学生的学号,所以该函数使用学生信息中的学号为操作对象进行学生成绩查询基本不会出现太大的问题。void grades:seek(int m_std_id) /按学号查找学生 student temstu; temstu.std_id=m_std_id; multiset:iterator iter; iter=stu.find(temstu); if(iter!=stu.end() cout姓名:(*iter).nameendl; cout学号:(*iter).std_idendl; cout高等数学1:(*iter).s_normal_m大学英语1:(*iter).s_normal_e程序设计1:(*iter).s_normal_cendl; cout高等数学2:(*iter).s_math大学英语2:(*iter).s_english程序设计2:(*iter).s_cendl; cout高等数学:(*iter).s_total_m大学英语:(*iter).s_total_e程序设计:(*iter).s_total_cendl; cout总成绩:(*iter).s_sumendl; cout综评成绩:(*iter).s_averageendl; else cout找不到该学生!endl;运用条件函数查找学生中成绩不及格的学生同时将这些名单及不及格科目进行打印。void grades:display1(void) /查找各学科不及格学生名单 student stu1; multiset:iterator iter; iter=stu.find(stu1); if(iter!=stu.end() if(*iter).s_total_m60|(*iter).s_total_e60|(*iter).s_total_c) cout姓名:(*iter).nameendl; cout不及格科目:endl; if(*iter).s_total_m60) cout高等数学endl; if(*iter).s_total_e60) cout大学英语endl; if(*iter).s_total_c60) cout程序设计endl; 3.3 数据修改功能函数根据自定义函数设定,在对学生进行成绩录入时唯一不会改变、不会出现错误的就是学生的学号,所以该函数使用学生信息中的学号为操作对象进行学生成绩查询基本不会出现太大的问题。void grades:revise(int m_std_id) /学生信息修改 student temstu; temstu.s_sum=0; temstu.std_id=m_std_id; multiset:iterator iter; iter=stu.find(temstu); if(iter!=stu.end() cout请输入要修改的学生信息endl; cout期末成绩:temstu.s_math; cintemstu.s_english; cintemstu.s_c; cout平时成绩:temstu.s_normal_m; cintemstu.s_normal_e; cintemstu.s_normal_c; cout平时成绩所占百分比temstu.per; temstu.s_total_m=temstu.s_normal_m*temstu.per+temstu.s_math*(1-temstu.per); temstu.s_total_e=temstu.s_normal_e*temstu.per+temstu.s_english*(1-temstu.per); temstu.s_total_c=temstu.s_normal_c*temstu.per+temstu.s_c*(1-temstu.per); temstu.s_sum=temstu.s_total_m+temstu.s_total_e+temstu.s_total_c;temstu.s_average=(temstu.s_sum)/3;cout姓名;cout性别:temstu.sex;stu.erase(iter); /删除旧元素tu.insert(temstu); /插入新元素 else cout找不到该学生endl;3.4 成绩打印函数通过主函数进行控制使该函数运行,从而达到打印班级成绩单的目的,该函数同样运用C+面向对象程序设计(谭浩强版)一书中的“文件操作与文件流”章节中所介绍的知识,具体内容可翻阅查看。 void grades:display(void) /按照班级打印学生成绩单 multiset:iterator iter; /multiset容器,提取fread函数向容器中储存的学生信息 ofstream outfile(f1.txt,ios:out); if(! outfile) cerr open error!endl; exit(1); outfile专业:major班级:cla_id人数peop_numendl; outfile姓名t性别t学号t高等数学1t高等数学t大学英语1t大学英语t程序设计1t程序设计t总成绩tt综评成绩tendl; for(iter=stu.begin();iter!=stu.end();iter+) outfile(*iter).namet(*iter).sext(*iter).std_idt; outfile(*iter).s_math(*iter).s_total_mt; outfile(*iter).s_english(*iter).s_total_et; outfile(*iter).s_c(*iter).s_total_ct; outfile(*iter).s_sum(*iter).s_averageendl; outfile.close();第4章 系统调试运行对已经编码完毕的程序进行调试运行,发现程序错误,更改错误。将代码进一步优化,功能进一步完善。4.1 系统程序运行过程对已经编码完毕的程序进行调试运行,发现程序错误,更改错误。将代码进一步优化,功能进一步完善。输入班级信息,按照班级信息进行下一步操作。图4.1班级信息图按照学生学号对学生信息进行修改并储存到原文件中。图4.2修改信息图按照班级信息将班级成绩单打印并储存到D:王豪杰的程序设计rDebugr.exe文件中。图4.3个人信息储存图按照学生学号单独打印成绩并储存到D:王豪杰的程序设计rDebugr.exe文件中。图4.4学生成绩打印图按照学生基本信息将成绩不及格学生名单进行打印并将结果储存到D:王豪杰的程序设计rDebugr.exe文件中。图4.5成绩不及格图4.2 系统程序运行结果原文件中储存的学生信息。经过“1”操作之后背修改的原文件信息。经过“2”操作之后按照班级信息打印的班级成绩单。课程设计体会学期末的课程设计是一次非常珍贵的机会,这是一次可以让我们所学的理论与实际相结合的机会。老师给我们布置了学生成绩管理系统这一题目。通过这次比较完整的一个程序的设计,我走出了纯理论的学习,从一种全新的角度去学习。理论与实际相结合的设计,锻炼了我综合运用所学的基础知识,解决实际问题的能力,同时也提高我查阅文献资料、对程序整体的把握等其他能力水平。而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,我的各方面经验都得到了极大的丰。当然在程序设计过程中我跟其他同学之间也进行了一定的交流,我们在交流中,迸发出了很多设计灵感,互相建议改进的过程中,从各个方面共同改进着,这个已经不能仅仅称作课程设计的作品。 参考文献1 谭浩强.C+面向对象程序设计.清华大学出版社2 谭浩强.C+面向对象程序设计习题上机指导.清华大学出版社3 Kenneth C.Louden.编译原理及实践.机械工业出版社4H.M.Deitel(美) P.J.Deitel(美).C+大学教程.电子工业出版社5Herbert Schildt.C+编译艺术.清华大学出版社6Al Stevens Clayton Walnum(美).标准C+宝典.电子工业出版社附 录#include #include #include #include #include #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; /平时成绩所占百分比 int m; /该学生选课的门数 vector cour; /该学生所选的课;bool operator stu2.std_id; 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(int t_ID); /查找 void failshow(void); /打印不及格学生名单;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; temstu.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) /输出班级成绩单 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+) 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.insert(tem); infile.close();void grades:revise(int t_ID) student temstu; temstu.std_id=t_ID; temstu.s_sum=0; vector:iterator i; multiset:iterator iter=stu.find(temstu); if(iter!=stu.end() cout请输入要修改的学生信息endl; /*for(i=(*iter).cour.begin();i!=(*iter).cour.end();i+) cout(*iter).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.erase(iter); /删除旧元素 stu.insert(temstu); /插入新元素 cout修改完成endl; else cout找不到该学生endl;int main() system(color d0); int c; int t; grades cla; cout*endl; cout*学生管理系统*endl; cout请输入学生人数:cla.peop_num; cout请输入专业:cla.major; cout请输入班级cla.cla_id; cla.fread(cla.peop_num); while(1) system(cls); cout*endl; cout*endl; 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; case 4: cla.failshow(); break; case 5: return 0; default: cout输入错误!endl; system(pause); return 0;#include #include #include #include #include #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; /平时成绩所占百分比 int m; /该学生选课的门数 vector cour; /该学生所选的课;bool operator stu2.std_id; 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(int t_ID); /查找 void failshow(void); /打印不及格学生名单;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_I
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 白城酒店建筑方案设计方案(3篇)
- 护理不良事件的分析讨论
- 2025年学历类自考专业(小学教育)中小学教育管理-小学班主任参考题库含答案解析(5套)
- 黑龙江省2026届化学高一第一学期期末考试试题含解析
- 骨折石膏固定
- 2025年学历类自考专业(学前教育)学前教育心理学-学前儿童游戏指导参考题库含答案解析(5套)
- (2025年标准)信誉押金协议书
- (2025年标准)股东转让付款协议书
- 寒暑假说课稿-2025-2026学年中职基础课-基础模块2-高教版(2023修订版)-(英语)-52
- 缺血中风课件
- 项目部安全管理组织机构网络图GDAQ20102
- 卫生部《病历书写基本规范》解读(73页)
- 南方332全站仪简易使用手册
- 分汽缸安装施工方案1
- 人民调解员培训讲稿村级人民调解员培训.doc
- 高低压配电安装工程-技术标部分(共41页)
- 开业筹备(西餐厅采购物品)
- 日产700吨平板玻璃电助熔窑炉设计本科毕业论文
- 光缆熔接光纤熔接
- 图画捉迷藏-A4打印版
- 受限空间作业票
评论
0/150
提交评论