




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+课程设计报告课程题目:学生成绩统计系统姓名:学号:专业班级: 指导老师:目 录一、课题设计任务分析-二、程序模块设计分析-三、程序的实现思路-四、程序流程图-五、源代码及注释-六、测试情况-七、小结-一、课程设计任务分析:(1)需求分析:能够实现学生学号、姓名、各科成绩的录入;能够实现对学生信息的浏览、查找、删除;弄够实现对学生信息按学号顺序显示,成绩排名;能够对各科成绩统计情况输出。(2)系统功能要求:要求实现如下功能: 成绩的输入(学号、姓名、英语、数学、C+语言)。成绩统计(各科平均成绩、各科成绩“优秀”“良好”“中等”“及格” “不及格”的人数及其所占比例)。总成绩统计(学生的总成绩、平均成绩及成绩排名)。 成绩的统计结果显示。 学生数据的添加、修改、与删除。 学生数据的读取与存储。(3)系统的功能分析:资料维护:系统维护包括对各学生姓名、成绩、学号的录入操作,对数据表中的信息进行浏览。成绩查询:可以对学生成绩进行详细查询及各科成绩的优秀和不及格人数、各科总平均成绩等相关信息的浏览。排序显示:包括统计学生排名成绩、不及格科目情况、各科总平均成绩。二、程序模块设计分析:(1)添加数据: 把用户输入的数据添加到学生类对象数组中,然后再将其入堆,使其有序。 (2)删除数据: 由用户输入要删除的学生的学号,然后将其从学生类对象数组中删除,使数组中的数据仍然有序。(3)查找数据: 由用户输入要查找的学生的学号,然后调用 leo 类中关于查找的函数,将查找结果显示 在屏幕上。(4)显示数据: 调用 leo 类中关于显示数据的函数,把所有的学生数据都显示在屏幕上。 (5)清除数据: 调用 leo 类中关于清除数据的函数,把所有的学生数据都清空。(6)退出程序: 若用户输入了数字 0,则主函数结束循环,同时程序也就结束了。三、程序的实现思路:先创建一个学生元素类,用于存放学生的各种数据。然后创建另一个类,把数据存储, 可便进行各种操作。本程序中比较核心的技术就是用到了堆排序,将学生按优先级(高的排 前面,低的排后面)的大小进行有序排列。堆排序的时间复杂度较一般排序(如:冒泡,选 择等)来得低,可使程序显示数据时效率更高。(1)“成绩录入”模块:序号录入:对各个学生序号录入;数据录入:对学生科目和成绩进行录入。(2)“查询修改”模块:可以对学生数据进行指定查找、修改或查看全部学生信息;选择输出单科成绩统计情况。(3)“排序显示”模块:可自行按学号顺序显示所有学生信息;可选择查看学生总分排名,排序显示到用户屏幕。四、程序流程图:程序中一共包括了六个模块,分别是:添加模块、删除模块、排序模块、统计模块、查找模块、界面模块。 (1)添加信息:(2)删除信息:(3)信息排序:(4)统计信息:(5)查找信息:(6)界面模块:五、源代码及注释:#include#include#include#include#define max 300using namespace std;struct student string num;string name;float english;float math;float cyuyan;/定义c+float geten()return english;float getma()return math;float getcy()return cyuyan;string getnu()return num;string getna()return name;int rank3;int row;/排名int sinto(string,string,float,float,float);/输入数据void output();/输出数据float sum();/ 求和float average();/求平均void subject();/成绩分类; void shows()/普通函数coutsetw(6)排名setw(6)学号setw(10)姓名setw(6)英语setw(6)数学setw(6)c+setw(6)总分setw(10)平均分endl;int student:sinto(string a1,string a2,float b1,float b2,float b3 )num=a1;name=a2;english=b1;math=b2;cyuyan=b3;return 0;void student:output()/输出coutsetw(6)rowsetw(6)numsetw(10)namesetw(6)englishsetw(6)mathsetw(6)cyuyansetw(6)sum()setw(10)setiosflags(ios:fixed)setprecision(1)average()endl;coutsetiosflags(ios:fixed)setprecision(0);float student:sum()/求总分 return english+math+cyuyan;float student:average()/求平均分return sum()/3;void student:subject() int n;rank0=(int)english;rank1=(int)math;rank2=(int)cyuyan;for(int i=0;i3;i+) n=ranki/10;switch(n) case 9:n=1;break;case 8:n=2;break;case 7:n=3;break;case 6:n=4;break;default:n=5;ranki=n;/类student结束/类leo开始class leoprivate:student itemmax;int size;public:leo();void lsize(int);/设置数组大小void lempty();/清空void linsert();/添加void ldelet(string);/删除void lsearch(string);/查找void lmodify(string);/修改void lsort();/成绩分类void lrow();/排序 void obave();/求平均void lview();/显示全部数据void lcin();/从磁盘输出void lcout();/储存到磁盘;leo:leo() student itemmax;lsize(0);void leo:lsize(int i)size=i;void leo:lempty() lsize(0);cout学生数据清除成功endl;cout当前无学生数据。请添加!endl;void leo:ldelet(string a) int k=0;string c;for(int i=0;isize;i+)if(itemi.getn()=a)cout你将要删除的数据如下:endl;shows();itemi.output();coutc;if(c=y|c=Y) itemi=item-size;k=1; if(k!=1)coutn删除失败!endl;else coutn删除成功!max)cout超出范围,不能再添加!endl;else coutn请输入学号、姓名、英语、数学、c+成绩:a1a2b1b2b3;for(int i=0;isize;i+)if(itemi.getnu()=a1) mn+;cout输入的数据与下面的数据重复!endl;shows();/输出重复的学号,姓名,英语,数学,c+成绩itemi.output();if(!mn)itemsize+.sinto(a1,a2,b1,b2,b3);coutn添加成功!;couta;void leo:lsearch(string a)/查找int N=0;for(int i=0;isize;i+)if(itemi.getnu()=a)N+;shows();/输出学号,姓名,英语,数学,c+itemi.output();if(!N)cout输入有误或该学生数据不存在endl;void leo:lmodify(string a)/修改 if(size=0)cout当前学生数据为空,请添加!endl;elseint N=0;for(int i=0;isize;i+)if(itemi.getnu()=a) N+;cout你将要修改的数据如下:endl;shows();itemi.output();cout请输入要修改学生的学号,姓名,英语,数学,c+成绩a1a2b1b2b3;itemi.sinto(a1,a2,b1,b2,b3);cout修改成功!endl;if(!N)cout输入的学号有误!1)for(int i=0;isize-1;i+) temb=itemi;for(int j=i+1;jsize;j+)if(itemi.sum()itemj.sum() itemi=itemj;itemj=temb; item0.row=1;for(int i=0;iitemi+1.sum() itemi+1.row=i+2;else itemi+1.row=i+1;/并列排名else if(size=1) item0.row=1;void leo:lview()/显示if(size=0)cout当前学生数据为空,请添加!endl;else cout共有学生数据size条endlendl;shows();for(int i=0;isize;i+) itemi.output();void leo:obave()/统计科目 if(size!=0)float sum3=0;for(int i=0;isize;i+)sum0+=itemi.geten();sum1+=itemi.getma();sum2+=itemi.getcy();cout英语平均的成绩为:setiosflags(ios:fixed)setprecision(1)sum0/sizen;cout数学平均的成绩为:sum1/sizen;coutc+的平均成绩是:sum2/sizen;coutsetiosflags(ios:fixed)setprecision(0)endl;else cout当前无学生数据,请添加!;void leo:lsort() /成绩分类 int p3300;float tem=100.00/size;string a3=英语,数学,c+;if(size!=0) for(int i=0;isize;i+) itemi.subject();p0i=itemi.rank0;p1i=itemi.rank1;p2i=itemi.rank2;for(int k=0;k3;k+) int b5=0; for(int i=0;isize;i+) switch(pki)case 1: b0+;break;case 2: b1+;break;case 3: b2+;break;case 4: b3+;break;case 5: b4+;break;default:break; coutak成绩分类人数: 优b0人 良b1人 中b2人 及格b3人 不及格b4人endl;coutsetiosflags(ios:fixed)setprecision(1)ak成绩分类比例: 优(float)b0*tem% 良(float)b1*tem% 中(float)b2*tem% 及格(float)b3*tem% 不及格(float)b4*tem%endlendl;coutsetiosflags(ios:fixed)setprecision(0)endl;void leo:lcin() string a300,b300;float c300,d300,e300;int f300;ifstream infile(ok.txt,ios:in);if(! infile) cerr初次使用此系统,请选择先清除所有数据。endl;for(int i=0;iaibicidieifi;itemsize.sinto(ai,bi,ci,di,ei);size+;if(fi=1) break; infile.close();void leo:lcout()ofstream outfile(ok.txt,ios:out);if(! outfile) cerr文件打开失败!endl;for(int i=0;isize;i+)outfileitemi.num itemi.english itemi.math itemi.cyuyan size-iendl;outfile.close();void showmenu()cout ;cout|*|endl;cout ;cout|欢迎使用学生成绩统计管理系统|endl;cout ;cout|*|endl;cout ;cout| 1.显示:显示所有学生数据(按总分排序)|endl;cout ;cout| 2.查看:查看所有统计结果 |endl;cout ;cout| 3.添加:插入一个学生数据 |endl;cout ;cout| 4.删除:删除一个学生数据 |endl;cout ;cout| 5.查找: 查找指定学生数据 |endl;cout ;cout| 6.修改:修改指定学生数据 |endl;cout ;cout| 7.清空:清除所有学生数据 |endl;cout ;cout| 8.帮助:查看系统注意事项 |endl;cout ;cout| 0.退出:将数据保存到磁盘 |endl;cout ;void showtip() coutntt操作完成!endl;couttt选择0-8继续endl;int main()leo leo1;string c=s,a;system(cls);/清屛showmenu();cout正在打开文件,请稍后!endl;leo1.lcin();coutc;while(c!=0)system(cls);showmenu();if(c=1) cout你选择了1,学生数据显示如下:endlendl;leo1.lrow();/排序leo1.lview();if(c=2) cout你选择了2,统计结果如下:endl;leo1.obave();/各科平均成绩,leo1.lsort();/各科分类情况if(c=3) cout你选择了3,请输入学生数据;leo1.linsert();if(c=4) cout你选择了4,请输入要删除的学号:a;leo1.ldelet(a);if(c=5)cout你选择了5,请输入要查找的学号:a;leo1.lsearch(a);if(c=6)cout你选择了6,请输入要修改的学号:a;leo1.lmodify(a);if(c=7) cout你选择了7,全部数据将要清空endl;cout你确定清空吗?输入y确定,n退出a;if(a=y|a=Y)leo1.lempty ();if(c=8) cout1.本系统最多可容纳300个学生数据.endl;cout2.如不能正常添加数据,请检查使用前是否清空了数据.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学班主任学生安全职责
- 社会保障考试题及答案
- 矿业开采安全数字孪生监控系统创新创业项目商业计划书
- 发酵香肠改良创新创业项目商业计划书
- 智能营销社交媒体管理创新创业项目商业计划书
- 小学三年级语文期末复习小组协作计划
- 法语社会调研实习总结范文
- 施工质量事故应急处理措施
- 2025年度深圳法律服务行业简易劳动合同范本
- 2025年户外广告牌防雷安全检测及整改合同
- 消防监控考试题初级及答案
- 2025年湖南湘西自治州州直事业单位招聘考试笔试试卷附答案
- 《小学开学第一课》课件
- 2025-2031年中国有源相控阵雷达行业市场发展形势及投资潜力研判报告
- 大货车货运安全知识培训课件
- 毒理学第三章化学毒物在体内的生物转运和生物转化
- 《小学英语教学研究》近年考试真题参考题库(含答案)
- 网络与信息安全巡检表
- 《路由与交换技术》课程教学大纲
- 北师大版八年级数学上册教案(全册完整版)教学设计含教学反思
- 国家自然科学基金联合申报协议书
评论
0/150
提交评论