c++上机实习报告07512213司路尧.docx
- 文档编号:17279170
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:67
- 大小:716.25KB
c++上机实习报告07512213司路尧.docx
《c++上机实习报告07512213司路尧.docx》由会员分享,可在线阅读,更多相关《c++上机实习报告07512213司路尧.docx(67页珍藏版)》请在冰点文库上搜索。
c++上机实习报告07512213司路尧
计算机高级语言(C++)实习报告
实验一成绩管理系统
实验二MyString类定义和应用
学生姓名:
班学号:
指导老师:
马丽
中国地质大学(武汉)机械与电子信息学院
2014年4月
实验一成绩管理系统
一、需求规格说明
1、设计三个结构体:
学生类(存储学生的基本信息,如学生姓名Stu_Name、学生学号Stu_ID、学生性别Stu_Sex等,采用结构体);课程科目Course(存储课程名称Cou_Name,课程编号Cou_ID,开课学期Cou_Term,授课老师Cou_Teacher等,采用结构体);选课情况Sel_Course(课程编号Cou_ID,学生学号Stu_ID,成绩Score等,采用结构体)。
2、实现功能:
a、计算平均值Avg:
包括每门课程的平均值,和每个学生所有课程的平均值。
b、计算最高分Max:
包括每门课程的最高分,和学生平均分的最高分,并给出最高分对应的学生姓名和学号。
c、计算最低分Min:
包括每门课程的最低分,和学生平均分的最低分,并给出最低分对应的学生姓名和学号。
d、计算每门课程成绩不及格(<60分)以及优秀(大于90分)的学生个数Count。
e、计算每门课程的标准方差Variance。
f、查询功能Query:
可以根据输入的学生姓名或者学号,查询该学生的所有课程的成绩。
g、排序功能Sort:
按照从高到低的顺序,对每门课程的成绩进行排序,对学生平均分进行排序,并给出排序后成绩所对应的学生姓名和学号。
提示:
把初始化部分和7个功能设置为可以选择的菜单方式,也就是每次运行程序,可以让用户选择实现某个功能,各个功能用函数来实现,有些函数需要重载。
每个功能的输出可以输出到屏幕,也可以输出到文件。
二、算法设计
1、设计思想:
(1)结构体的设计
表3-1structStudent成员列表
structStudent
charname[10];
charid[20];
表3-2structSel_Course成员列表
structSel_Course
doublescore[3];
表3-3structCoursee成员列表
structCourse
charname[8];
(2)系统包含的类库
#include
#include
#include
#include
#include
#include
(3)各个变量的定义和作用
charname[10];学生姓名
charid[20];学生学号
doublescore[3];科目成绩
charname[8];课程名称
2、设计表示:
主函数voidmain()
调用菜单操作函数ShowMenu()实现菜单的输出和操作。
菜单函数voidShowMenu()
这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择。
输入操作函数voidinput()
这是一个无参的函数,通过调用输入函数input1()实现数据的输入,利用while()语句和switch()语句实现函数的调用,系统根据输入的字符选项来调用相应的实参,进行相应的操作。
输入函数intinput1()
这是一个整形无参函数,主要功能是输入相关信息。
该函数可将用户输入的学生的信息保存到文件"nistudent.dat","nisel_course.dat","nicourse.dat",输入完成后会提示用户是否要继续录入。
平均函数值函数voidaverage()
这是一个无参的函数,利用while()语句和switch()语句实现avg1()和avg2()函数的调用,系统根据输入的字符选项来调用相应的实参,进行相应的操作。
计算所有课程平均值函数voidavg1()
这是无参函数,主要目的是实现各课课程成绩的平均值。
该函数可将最终结果保存到文件"average1.dat"。
计算每门课程的平均值函数voidavg2()
这是无参函数,主要目的是实现各门课程成绩的平均值。
该函数可将最终结果保存到文件"average2.dat"。
最大值函数voidmaxinum()
这是一个无参的函数,利用while()语句和switch()语句实现max1()和max2()函数的调用,系统根据输入的字符选项来调用相应的实参,进行相应的操作。
计算每个学生平均分最高分的函数voidmax1()
这是无参函数,主要目的是实现每个学生的平均值的最高分的呈现。
计算每门课程的最高分的函数voidmax2()
这是无参函数,主要目的是实现每门课程的平均值的最高分的呈现。
最大值函数voidmininum()
这是一个无参的函数,利用while()语句和switch()语句实现min1()和min2()函数的调用,系统根据输入的字符选项来调用相应的实参,进行相应的操作。
计算每个学生平均分最低分的函数voidmin1()
这是无参函数,主要目的是实现每个学生的平均值的最低分的呈现。
计算每门课程的最低分的函数voidmin2()
这是无参函数,主要目的是实现每门课程的平均值的最低分的呈现。
计算每门课程成绩不及格的函数voidunpass()
这是无参函数,主要目的是实现每门课程成绩不及格与及格的人数呈现。
计算方差的函数voidvariance()
这是无参函数,主要目的是实现每门课程成绩方差的呈现。
查询功能函数voidquery()
这是一个无参的函数,利用while()语句和switch()语句实现Namesearch()和IdSearch()函数的调用,系统根据输入的字符选项来调用相应的实参,进行相应的操作。
按姓名查询函数voidNamesearch()
这是一个无参函数,进入后系统会提示用户输入需要查询的学生姓名,然后输出该学生的成绩。
按姓名查询函数voidIdSearch()
这是一个无参函数,进入后系统会提示用户输入需要查询的学生学号,然后输出该学生的成绩。
排序功能函数voidsort()
这是一个无参函数,进入后系统将自动排序输出该系统下所有学生的成绩,包括课程成绩排序和学生课程平均分排序。
3、详细设计表示:
三、调试报告
调试过程中遇到的问题:
问题一:
在一开始时读取文件不成功。
解决:
在一开始,我本想直接从文件中读取信息和数据,但发现不行,要么是报错,要么就只能读出一行数据下一行就读不出来了。
后来与同学讨论,采用for循环读取数据,就顺利多了。
问题二:
写入的信息和数据,全部在一行。
解决:
一开始想把所有的数据和信息都写在一个文件里,当时写入是可以的,但当读取数据的时候就出现了问题,于是就不得不改变策略。
将一个文件改为三个文件,虽然写入和读取数据的时候会将语句增多,但保持了稳定性。
问题三:
按平均成绩排序的时候出现问题。
解决:
本来吧想把平均成绩写到课程成绩的文件里,但在读数据时出现了问题,不得不单独存在一个文件里。
不过这样也有好处,在以后的排序中省了不少事。
问题四:
对于方差公式和标准差公式不够熟练。
在一开始时,先是将方差公式弄错,后又忘记将方差开方得到标准差,最后也没有将cmath写入预指令里,导致报错不断。
对设计与实现的回顾讨论与分析:
通过主窗体调用其他窗体,具体实现可以参照系统分析相关内容。
应用系统主控界面包括记录编辑和记录查询等功能模块。
记录编辑功能完成学生成绩记录编辑和记录查询功能。
记录查询功能可以对数据各分类的记录进行查询。
四、用户手册
使用说明:
1、通过主函数显示程序的主界面,通过输入的数字不同,函数会进入不同功能的函数继续运行。
2、输入1时,进行学生资料的录入功能,同时进行选择,以防止误操作导致数据的改变。
3、输入学生信息以及学生考试科目及成绩。
4、输入2,计算平均值,会提示有两个选项:
输入1会输出所有科目的平均成绩,输入2会输出单项科目的平均成绩。
5、输入3,计算最高分,会提示有两个选项:
输入1会输出每个学生平均成绩的最高分,输入2会输出单项科目的最高分。
6、输入4,计算最低分,会提示有两个选项:
输入1会输出每个学生平均成绩的最低分,输入2会输出单项科目的最低分。
7、输入5,计算优秀及不及格人数,输出优秀及不及格人数。
。
8、输入6,计算每门课程成绩的方差,输出每门课程成绩的方差。
9、输入7,进入查询功能,会提示有两个选项:
输入1会按姓名查询,输入2会按学号查询。
10、输入8,进入排序功能,输出每门课程成绩由大到小排列以及平均成绩由大到小排列。
五、附录
源程序清单:
#include
#include
#include
#include
#include
#include
usingnamespacestd;
voidShowMenu();
structStudent//定义结构体
{
charname[10];//学生姓名
charid[20];//学生学号
};
structSel_Course
{
doublescore[3];//学科成绩
};
structCourse
{
charname[10];//学科名称
};
intinput1()//输入函数
{
ofstreamfout1;
fout1.open("nistudent.dat");
ofstreamfout2;
ofstreamfout3;
fout2.open("nisel_course.dat");
fout3.open("nicourse.dat");
if(fout1.fail())
{
cout<<"Outputfileopeningfailed.\n";
exit
(1);
}
Studentstudent[5];
for(inti=0;i<5;i++)
{
fout1<
cout<<"请输入学生"<
";
cin>>student[i].name;
fout1< cout<<"请输入学生"< "; cin>>student[i].id; fout1< } fout1.close(); Sel_Courses[5]; Coursec[3]; for(intj=0;j<3;j++) { fout2< cout<<"请输入科目"< "< cin>>c[j].name; fout2< cout<<"输入科目"< for(intk=0;k<5;k++) { cout<<"学生姓名"< "; cin>>s[k].score[j]; if(s[k].score[j]<0||s[k].score[j]>100) { cout<<"请重新输入学生成绩! "< cout<<"请输入科目"< "< cin>>s[k].score[j]; fout3< } else { fout3< } } } cout< \n"; fout2.close(); fout3.close(); return0; } voidinput()//输入数据调用函数 { inta,b=1; cout<<"=======学生成绩信息输入模块=======\n\n"; while(b) { cout<<"1.输入学生信息"< cout<<"0.返回上一级目录"< cout<<"请输入你的选择(0-1): "< cin>>a; while(a<0||a>2)//限制输入的取值范围 { cout<<"请重新输入你的选择(0-1): "< cin>>a; } switch(a) { case1: b=input1();break; case0: ShowMenu();break; default: cout<<"请正确输入你的选择! \n"; } } } voidavg1()//计算所有课程平均值 { ifstreamfin;//学生 ifstreamin;//科目 ifstreamin_stream;//成绩 ofstreamfout; fin.open("nistudent.dat"); in.open("nisel_course.dat"); in_stream.open("nicourse.dat"); fout.open("average1.dat"); Studentstudent[5]; Sel_Courses[5]; Coursec[3]; intx,i,j,k,p; for(i=0;i<5;i++) { fin>>x>>student[i].name>>student[i].id; } for(j=0;j<3;j++) { in>>x>>c[j].name; } for(k=0;k<3;k++) { for(p=0;p<5;p++) { in_stream>>s[k].score[p]; } } doublea=0.00; for(j=0;j<5;j++) { a=s[0].score[j]+s[1].score[j]+s[2].score[j]; a=a/3.00; cout<<"学生"< fout< } fin.close(); in.close(); in_stream.close(); fout.close(); } voidavg2()//计算每门课程的平均值 { ifstreamfin;//学生 ifstreamin;//科目 ifstreamin_stream;//成绩 ofstreamfout; fout.open("average2.dat"); fin.open("nistudent.dat"); in.open("nisel_course.dat"); in_stream.open("nicourse.dat"); Studentstudent[5]; Sel_Courses[5]; Coursec[3]; intx; inti,j,k,p; for(i=0;i<5;i++) { fin>>x>>student[i].name>>student[i].id; } for(j=0;j<3;j++) { in>>x>>c[j].name; } for(k=0;k<5;k++) for(p=0;p<3;p++) { in_stream>>s[k].score[p]; } doublea=0.00; for(i=0;i<3;i++) { for(j=0;j<5;j++) a+=s[j].score[i]; a=a/5.00;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 上机 实习 报告 07512213 司路尧