C++课程设计报告模板.docx
- 文档编号:5769241
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:19
- 大小:149.22KB
C++课程设计报告模板.docx
《C++课程设计报告模板.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告模板.docx(19页珍藏版)》请在冰豆网上搜索。
C++课程设计报告模板
课程设计题目:
学生成绩管理
参考文献:
(1)谭浩强.《C++程序设计实践指导》清华大学出版社
(2)谭浩强.《C++程序设计》清华大学出版社
(3)http:
//
目录
课程设计题目:
学生成绩管理-1-
第1章系统概要-2-
1.1系统介绍-2-
1.2基本功能要求-2-
第2章设计思路与算法-2-
I、成绩录入模块-3-
II、成绩统计模块-3-
III、成绩排名模块-3-
IV、成绩查询模块-3-
V、输出模块-3-
第3章源程序代码-3-
第4章运行结果及分析-8-
I、成绩录入模块-8-
II、成绩统计模块-9-
III、成绩排名模块-11-
IV、成绩查询模块-13-
V、输出模块-15-
第5章心得体会-16-
参考文献-17-
第1章系统概要
1.1系统介绍
设计一个Student(学生类)类,用制作学生成绩管理系统。
1.2基本功能要求
从键盘输入某班级若干个学生的学号、姓名、三门课(语文、数学、英语)的成绩,分别实现如下功能:
(1)统计每个学生的总分和平均分;
(2)按总分由大到小排出名次;
(3)打印出成绩在全班平均分以上的学生名单和数据信息。
(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试成绩。
要求:
设计一个学生类,数据成员包括:
学号、姓名、三门课成绩、总分、平均分、名次等信息。
各功能要求分别用成员函数来实现,在主函数中通过菜单选择来实现各个功能。
第2章设计思路与算法
算法:
I、成绩录入模块
成绩录入就是对前面定义的类Student中的成员进行赋值。
其中,用户需要输入的是学生的学号、姓名两个基本信息和语文、数学和英语三门成绩,其余总成绩、平均成绩和排名由后续的计算函数来实现。
II、成绩统计模块
成绩统计模块需要建立在成绩录入模块的基础之上,当系统中已经包含一些数据记录后才能对这些成绩求总分、平均分等操作。
本模块包含对输入的数据计算总分和计算平均分,其中,cout()函数用于计算一个同学的总分和平均分,而getAverage()函数则求出整个班级所有的三门课程的平均成绩
III、成绩排名模块
在获得整个班级的总分和平均分之后,就可以对该班级中的同学按照某个参数进行排名了。
在该系统中,使用每位同学的平均成绩对其进行排名,此处使用插入排序来实现。
插入排序的基本思想是:
每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止
IV、成绩查询模块
该系统中的成绩查询工是根据用户输入的学生的学号作为关键字,在数据结构中进行查询,并将查询结果即该记录的位置返回
V、输出模块
事实上,如果对该系统内的成绩做了排序、统计和查询等功能后,都需要将结果输出函数中,输出了学生成绩管理系统中所有的成员值。
在主函数main()中调用成绩查询、统计等函数后都需要调用该函数,以输出结果到屏幕上。
第3章源程序代码
//调用头文件
#include
#include
#include
//使用标准命名空间
usingnamespacestd;
//定义全局变量
constintMax=30;//字符串最大长度
classStudent;//类声明
voidsetData(Student&s);//设置对象s的数据
voidcount(Student&s);//计算对象s的总分,平均分
voidsort(StudentS[],intN);//把长度为N的对象数组S,按平均分排序
doublegetAverage(StudentS[],intN);//计算全班的平均分
voidprint(Student&s);//打印信息
intsearch(StudentS[],intN,char*n);//从长度为M的对象数组中,查找学号n的位置
//定义一个学生类
classStudent{
public:
charnumber[Max];
charname[Max];
charbanji[Max];
doublechinese;
doublemath;
doubleenglish;
doubletotal;
doubleaverage;
intrank;//只有比较才不为了0
};
//录入数据函数
voidsetData(Student&s)
{
cout<<"输入学号:
"< cin>>s.number; cout<<"姓名: "< cin>>s.name; cout<<"班级: "< cin>>s.banji; cout<<"语文: "< cin>>s.chinese; cout<<"数学: "< cin>>s.math; cout<<"英语: "< cin>>s.english; s.total=0;//初始化 s.average=0; s.rank=0; } //计算总分与平均分 voidcount(Student&s) { s.total=s.chinese+s.math+s.english; s.average=s.total/3; } //排序函数 voidsort(StudentS[],intN)//插入法排序 { intindex; Studentinserter; for(inti=1;i { inserter=S[i]; index=i-1; while(index>=0&&inserter.average>S[index].average) { S[index+1]=S[index]; index--; } S[index+1]=inserter; } for(intj=0;j S[j].rank=j+1;//设置排名 } //获取平均值函数 doublegetAverage(StudentS[],intN) { doubleAverage=0; for(inti=0;i Average+=(S[i].chinese+S[i].math+S[i].english); Average/=(N*3); returnAverage; } //输出学生信息 voidprint(Student&s) { cout<<"排名"<<"\t"<<"学号"<<"\t"<<"姓名"<<"\t"<<"语文: "<<"\t" <<"数学: "<<"\t"<<"英语: "<<"\t"<<"总分"<<"\t"<<"平均分"< cout< < } //输出学生信息 voidprint1(Student&s) { cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"语文: "<<"\t" <<"数学: "<<"\t"<<"英语: "<<"\t"<<"总分"<<"\t"<<"平均分"< cout< < } //搜索函数 intsearch(StudentS[],intN,char*n) { for(inti=0;i { if(strcmp(S[i].number,n)==0) returni; } return-1; } //主函数(mian方法) intmain() { system("colorF5");/*颜色属性由两个十六进制数字指定--第一个为背景,第二个则为 前景。 每个数字可以为以下任何值之一: 0=黑色8=灰色 1=蓝色9=淡蓝色 2=绿色A=淡绿色 3=湖蓝色B=淡浅绿色 4=红色C=淡红色 5=紫色D=淡紫色 6=黄色E=淡黄色 7=白色F=亮白色 */ constintM=5;//定义学生数量,一共5位学生 StudentS[M];//实例化一个学生S[M],使该学生聚会有众多属性 for(inti=0;i { cout<<"下面输入第"< "< setData(S[i]); count(S[i]); cout< } intorder=1; while(order! =5)//命令5为退出命令 { cout<<"以下是命令菜单: "< cout<<"1.统计平均分和总分"< cout<<"2.排序"< cout<<"3.打印出成绩在全班平均分以上的学生名单和数据信息"< cout<<"4.任意输入一个学号,查找出该学生在班级中的排名及其考试成绩"< cout<<"5.退出系统"< cout<<"输入命令选择: "; cin>>order;//等待输入 switch(order)//判断输入的值 { case1: { for(intj=0;j print1(S[j]);//打印输出 } break;//跳出当前switch case2: //排序 { sort(S,M); for(intj=0;j print(S[j]); } break; case3: //平均分 { doublecompare=getAverage(S,M); for(intk=0;k if(S[k].average>compare) print(S[k]); } break; case4: //查找 { charcode[Max]; cout<<"输入您要查找的学号: "; cin>>code; intresult=search(S,M,code); if(result==-1) cout<<"您输入的学号不存在! ! ! "< else sort(S,M); print(S[result]); } break; case5: break;//退出 default: cout<<"输入的命令不存在! ! ! "< } } return0; } 第4章运行结果及分析 I、成绩录入模块 成绩录入就是对前面定义的类Student中的成员进行赋值。 其中,用户需要输入的是学生的学号、姓名两个基本信息和语文、数学和英语三门成绩,其余总成绩、平均成绩和排名由后续的计算函数来实现。 实现成绩录入模块的函数代码如下: voidsetData(Student&s)//成绩录入模块 { cout<<"输入学号,姓名,语文,数学,英语成绩: ";//录入数据 cin>>s.number>>s.name>>s.chinese>>s.math>>s.english; s.total=0;//初始化 s.average=0; s.rank=0; } 该函数运行时其结果如下图所示: 图4-1输入3位学生成绩 输入学生信息的个数可在主函数用修改相应数值。 II、成绩统计模块 成绩统计模块需要建立在成绩录入模块的基础之上,当系统中已经包含一些数据记录后才能对这些成绩求总分、平均分等操作。 本模块包含对输入的数据计算总分和计算平均分,其中,cout()函数用于计算一个同学的总分和平均分,而getAverage()函数则求出整个班级所有的三门课程的平均成绩,其函数代码如下: voidcount(Student&s)//成绩统计 { s.total=s.chinese+s.math+s.english;//求三门课程的总分 s.average=s.total/3;//求三门课程的平均分 } doublegetAverage(StudentS[],intN)//求平均分函数 { doubleAverage=0;//变量定义并初始化 for(inti=0;i Average+=(S[i].chinese+S[i].math+S[i].english); //求所有学生的所有成绩和 Average/=(N*3);//求所有学生的成绩平均值 returnAverage;//返回该平均值 } 其中,计算整个班级所有的三门课程的成绩getAverage()函数的实现流程图如下: 注意: 该统计模块中,需要统计一个班级同学的总分和平均分,就需要确定班上同学的人数,这个人数就放在常量N中。 图4-3统计平均分和总分 III、成绩排名模块 在获得整个班级的总分和平均分之后,就可以对该班级中的同学按照某个参数进行排名了。 在该系统中,使用每位同学的平均成绩对其进行排名,此处使用插入排序来实现。 插入排序的基本思想是: 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止,其算法流程图如下: 根据上述的算法流程图,则乘机排名模块的实现代码如下: voidsort(StudentS[],intN)//插入法排序(成绩排名) { intindex;//定义变量 Studentinserter;//创建对象 for(inti=1;i { inserter=S[i];//对象初始化 index=i-1;//变量初始化 while(index>=0&&inserter.average>S[index].average)//比较 { S[index+1]=S[index];//元素后移 index--; } S[index+1]=inserter;//插入该元素 } for(intj=0;j S[j].rank=j+1;//设置排名 } 图4-4排序 图4-5打印出成绩在全班平均分以上的学生名单和数据信息 IV、成绩查询模块 该系统中的成绩查询工嫩嫩个是根据用户输入的学生的学号作为关键字,在数据结构中进行查询,并将查询结果即该记录的位置返回,其实现代码如下: intsearch(StudentS[],intN,char*n)//成绩查询模块 { for(inti=0;i { if(strcmp(S[i].number,n)==0)//找到 returni;//返回结果所在的位置 } return-1;//没有找到 } 上述代码,第一行代码函数的生命中,参数字符串n即为用户输入的需要查询的学生学号,将该学号与所有数据元素进行比较,找到则返回该元素的位置,否则返回-1。 该函数执行的流程图如下图: 警告: 在上述第五行代码中,使用了字符串比较函数strcmp()来实现两个学号的比较,因此在预处理中必须加上 图4-6查找 图4-7退出 V、输出模块 事实上,如果对该系统内的成绩做了排序、统计和查询等功能后,都需要将结果输出。 下面给出输出学生信息的函数print(),代码如下: voidprint(Student&s)//输出结果 { cout<<"排名"<<"\t"<<"学号"<<"\t"<<"姓名"<<"\t"<<"语文: "<<"\t" //定义输出格式 <<"数学: "<<"\t"<<"英语: "<<"\t"<<"总分"<<"\t"<<"平均分"< cout< //输出成员的值 < } 提示: 该函数中,输出了学生成绩管理系统中所有的成员值。 在主函数main()中调用成绩查询、统计等函数后都需要调用该函数,以输出结果到屏幕上。 图4-2命令菜单 第5章心得体会 遇到的主要问题,怎样解决的。 在程序开发阶段,main函数定义、输出模块及数据结构方面存在一定难点,而后参考部分文献解决该问题。 系统还需完善的地方。 为系统实现简单,并没有对班级进行分类,而且仅仅以三门学科进行数据统计。 课程设计感想 在学习C++以前,我认为C++只是在C语言的基础上的一种延伸,认为只要学过C语言,就可以用C语言的那种设计思想来学习C++、设计C++程序。 正是由于抱了这种错误的思想,使我在一开始学习C++的时候遇到了很大的困难,我没有办法体会面向对象的设计思想,我在学习这门课的时候老是想着实现这个函数功能的具体过程,而没太注意对象分类的重要性。 随着课程学习的深入,我感觉到了利用类和对象、继承、封装等一系列知识可以把我们程序中很多繁杂、重复的部分省略掉,还可以解决一些利用面向过程的设计思想无法解决的问题,我自己也试着编写一些小的C++程序,当然在这个过程中遇到了很多困难,其中调试带来的困难让我无法忘记,在调试程序的同时,我也总结出来了一些调试的小技巧,让我在C语言课程设计中也受用匪浅。 在学习这门课的过程中,我感受到了自己亲自动手编程序、调程序的重要性,我们要熟悉C++的语法、体会调试的思想,最好的一个手段就是自己动手编程、调试,这会比我们一味的看书效果好得多。 另外,我还感觉到一个好的程序编出来需要很多人的团结合作。 我在检查自己编写的程序是否有BUG未被找出的时候,我会让我的同学作为一个程序使用者来找出未发现的BUG并提出改进意见,这让我们的工作更加高效。 很高兴能够了解到C++的神奇魅力和面向对象程序设计的独特思想,它为我今后的程序设计奠定了基础。 感谢老师对我们的悉心教授! 参考文献 柴欣,张红梅.VisualC++程序设计基础(第二版) [M].中国铁道出版社.2007.8 吕凤翥.C++语言基础教程[M].清华大学出版社.2007.2 [4]徐慧民.C++大学基础教程.人民邮电出版社.2009.1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 报告 模板
![提示](https://static.bdocx.com/images/bang_tan.gif)