C++高级语言程序设计综合实验报告.docx
《C++高级语言程序设计综合实验报告.docx》由会员分享,可在线阅读,更多相关《C++高级语言程序设计综合实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
C++高级语言程序设计综合实验报告
一、综合实验的目的与要求
1实验的目的
通过用C++编写一个学生考试成绩信息系统,强化面向对象程序设计思想,使学生能够将C++程序设计中的面向对象、重载、模板、文件等各种概念,灵活的运用到实际的程序设计中去。
2实验要求
1)录入课程和选课学生的信息;
2)录入成绩
3)学生信息和成绩的修改;
4)统计学生成绩;
5)成绩排序;按成绩排序
6)统计成绩分布功能:
即各成绩段学生的数量:
“优”:
90~100;“良”:
80~90;“中”:
70~80;“及格”:
60~70;“不及格”60。
并输出统计分布结果;
7)查找:
能够查找指定学生的各门成绩和平均分及其名次;
3实验原理
实验使用面向对象的设计思想,在学生成绩考试系统中,主要涉及的是学生和课程,对于所有的学生,都具有共性,因此可以抽象为一个学生类,同理可以得到课程类。
二、设计正文
1.正文为宋体,五号字行间距为21
1.1------------
1.2------------
三、综合实验总结或结论
1.正文为宋体,五号字行间距为21
1.1------------
1.2------------
四、参考文献
[1]作者1,作者2书名.出版单位,版本.出版日期
附录(设计流程图、程序、表格、数据等)
一、综合实验的目的与要求
1.1实验目的
通过用C++编写一个学生考试成绩信息系统,强化面向对象程序设计思想,使学生能够将C++程序设计中的面向对象、重载、模板、文件等各种概念,灵活的运用到实际的程序设计中去。
1.2实验要求
1)录入课程和选课学生的信息;
2)录入成绩
3)学生信息和成绩的修改;
4)统计学生成绩;
5)成绩排序;按成绩排序
6)统计成绩分布功能:
即各成绩段学生的数量:
“优”:
90~100;“良”:
80~90;“中”:
70~80;“及格”:
60~70;“不及格”60。
并输出统计分布结果;
7)查找:
能够查找指定学生的各门成绩和平均分及其名次;
二、实验正文
2.1实验原理
实验使用面向对象的设计思想,在学生成绩考试系统中,主要涉及的是学生和课程,对于所有的学生,都具有共性,因此可以抽象为一个学生类,同理可以得到课程类。
2.2类的设计
实验首先设计两个类:
学生类和课程类,并根据面向对象的信息隐蔽原则,设置相应的类成员的访问属性。
(1)学生类
(a)属性:
主要包括学生的个人信息,包括学号、姓名、班级、成绩等。
(b)操作:
学生信息的输入、输入函数,学生成绩(以高数、大英、大物、体育四门课为例)的设置和获取函数,学生信息的修改函数等等。
(2)课程类
(a)属性:
主要包括课程号、课序号、学分、任课教师、选课人数、学生成绩表。
(b)操作:
包括课程信息的录入、录入选课学生信息、录入选课学生的成绩,成绩统计、成绩分析、成绩排序等。
2.3系统功能模块
学生成绩查询系统有:
录入学生信息、查询学生信息、录入学生成绩、查询学生成绩、统计学生成绩、各科成绩排名、修改学生信息
2.4实验所需仪器、设备
本实验基于window平台,使用VC++为开发工具。
三、综合实验总结或结论
通过这次的实验,我对C++的应用有了更深的体会,同时也加深了对类的认识。
这次程序设计实习我最大的收获并不仅是对书本知识的巩固,而是通过实验我的自学能力得到了很好的锻炼,实践能力也提高了不少。
由于之前对类的掌握不牢固,在实验的开始阶段进展很慢。
但是通过网上查资料,与同学讨论,互相学习渐渐的有了思路。
后来的实验也就没有那么摸不着门路了。
当然,在这次程序设计中我还有没有解决的问题:
题目中要求的类模板没有实现,根本原因是对这块知识的不熟悉,通过阅读书籍和查找资料,我逐渐了解了有关类模板内容,并尝试着往程序里加入,可是加入此段程序后出现了一些BUG导致程序不能执行,我向周围的同学求助仍然未能得到解决,最后为了以大局为重也是因为时间不够的原因我最终没有加入类模板,对于这一点我有很大的遗憾。
本系统具有传输可靠,操作简单,安全可靠等优点。
由于时间问题,以及我个人所学知识有限,本系统还未能做到十全十美,有很多方面的实际问题没有考虑完全,对于课程类的设计相对粗糙,对此我会再接再厉,努力学习充实自己,进而完善本系统。
四、参考文献
作者:
吕凤翥书名:
《c++语言基础教程》
出版社:
清华大学出版社版本:
第二版出版日期:
2007年2月
附录(设计流程图、程序、表格、数据等)
流程图:
程序源代码:
#include
#include
classStudent
{
private:
staticintlessencount;//学生选课数量
intsum1;//总成绩
intxuehao;//设置学号
intmclass;//设置班级
inti;
public:
staticintcount;//学生计数
charname[8];//学生姓名
intgrades[100];//成绩数组
intstuave;//平均成绩
voidsetstudent()
{
cout<<"请输入学生的信息;信息包括学生的学号,姓名,班级:
"<cin>>xuehao>>name>>mclass;
}
voidgetstudent()
{
cout<<"学号:
"<"<"<}
voidchangestudent(intxuehao,char*name,intmclass)
{
this->xuehao=xuehao;
strcpy(this->name,name);
this->mclass=mclass;
}
voidsetgrades(intv)
{
cout<<"请输入学生十门课成绩,若未选择输入-1,若缺考输入0:
"<for(i=0;i{
cout<<"课程"<
cin>>grades[i];
}
}
voidgetgrades(intb)
{
for(i=0;i
{
cout<<"该学生第"<
cout<<"注:
若未选该门课程成绩为-1";
}
}
voidchangegrade(intgrade,intbianhao)
{
this->grades[bianhao]=grade;
}
intsum()
{
sum1=0;
for(intj=0;j{
if(grades[j]>=0)
{
sum1+=grades[j];
lessencount++;
}
else
sum1+=0;
}
cout<<"此学生各门课程的总分为:
"<returnsum1;
}
intaverage()
{
intave=sum1/lessencount;
cout<<"此学生各科的平均成绩为:
"<stuave=ave;
returnave;
}
};
intStudent:
:
count=0;
intStudent:
:
lessencount=0;
classSubject:
publicStudent
{
private:
intbianhao;//课程编号
intkexuhao;//课序号
intxuefen;//学分
charteacher[8];//教师名字
staticints1,s2,s3,s4,s5;//优良中及格不及格人数
staticinti;
public:
staticintsubjectcount;//课程计数
longkechenghao;//课程号
voidsetsubject()
{
cout<<"请输入此学科的课程号,课序号,学分,任课教师:
"<bianhao=count+1;
cin>>kechenghao>>kexuhao>>xuefen>>teacher;
}
voidgetsubject()
{
cout<<"该科目的课序号为:
"<"<"该科目的任课教师为:
"<}
staticvoidbubble(Studentstudent[],intm);
staticvoidfenduan(Studentstudent[],intm);
staticvoidbubble1(Studentstudent[],intm,intn);
staticvoidfenduan1(Studentstudent[],intm,intn);
voidchangesubject(intmkexuhao,intmkechenghao,intmxuefen,charteaname[])
{
kexuhao=mkexuhao;
kechenghao=mkechenghao;
xuefen=mxuefen;
strcpy(teacher,teaname);
}
};
intSubject:
:
subjectcount=0;
intSubject:
:
s1=0;
intSubject:
:
s2=0;
intSubject:
:
s3=0;
intSubject:
:
s4=0;
intSubject:
:
s5=0;
intSubject:
:
i=0;
voidSubject:
:
bubble(Studentstudent[],intm)
{
intt=0,j=0;
for(i=1;ifor(j=m-1;j>=i;j--)
if(student[j].stuave>student[i].stuave)
{
t=student[j].stuave;
student[j].stuave=student[i].stuave;
student[i].stuave=t;
}
cout<<"所有同学的平均成绩由小到大排序为:
"<for(i=0;i{
cout<}
}
voidSubject:
:
fenduan(Studentstudent[],intm)
{
for(i=0;i{
if(student[i].stuave>=90&&student[i].stuave<=100)
s1++;
elseif(student[i].stuave>=80)
s2++;
elseif(student[i].stuave>=70)
s3++;
elseif(student[i].stuave>=60)
s4++;
else
s5++;
cout<<"此课程分布结果为:
优:
"<"<"<"<"<}
}
voidSubject:
:
bubble1(Studentstudent[],intm,intn)
{
intt=0,j=0;
for(i=1;ifor(j=m-1;j>=i;j--)
if(student[j].grades[n]>student[i].grades[n])
{
t=student[j].grades[n];
student[j].grades[n]=student[i].grades[n];
student[i].grades[n]=t;
}
cout<<"所有同学的本科成绩由小到大排序为:
"<for(i=0;i{
cout<}
}
voidSubject:
:
fenduan1(Studentstudent[],intm,intn)
{
for(i=0;i{
if(student[i].grades[n]>=90&&student[i].grades[n]<=100)
s1++;
elseif(student[i].grades[n]>=80)
s2++;
elseif(student[i].grades[n]>=70)
s3++;
elseif(student[i].grades[n]>=60)
s4++;
else
s5++;
cout<<"此课程分布结果为:
优:
"<"<"<"<"<}
}
voidmain()
{
inti;
again:
cout<<"这里是华北电力大学学生教务系统,很高兴为您服务!
"<cout<<"您想实现的功能是?
"<cout<<"录入信息,请按1."<cout<<"查找学生或课程信息,请按2."<cout<<"修改信息,请按3."<cout<<"查找成绩及排名,请按4."<intop;
cin>>op;
switch(op)
{
Studentstudent[100];
Subjectsubject[100];
case1:
cout<<"输入学生信息,请按1."<cout<<"输入课程信息,请按2"<cout<<"输入新添课程学生成绩,请按3"<cout<<"录入学生成绩:
请按4"<intcase1;
cin>>case1;
switch(case1)
{
case1:
intm;
cout<<"请输入您要录入的学生总人数:
"<cin>>m;
intp;
p=Student:
:
count;
Student:
:
count+=m;
for(i=p;i<(Student:
:
count);i++)
{
student[i].setstudent();
}
break;
case2:
intn;
cout<<"请输入您要录入的课程数"<cin>>n;
intc;
c=Subject:
:
subjectcount;
Subject:
:
subjectcount+=n;
for(i=c;i<(Subject:
:
subjectcount);i++)
subject[i].setsubject();
break;
case3:
inty;
cout<<"请输入您要输入学生成绩的课程名"<cin>>y;
intmgrade;
cout<<"请输入学生成绩:
"<for(i=0;i:
count;i++)
{
cout<"<cin>>mgrade;
student[i].grades[y]=mgrade;
}
break;
case4:
cout<<"请输入您想录入的学生姓名:
"<charnewstu[8];
cin>>newstu;
for(i=0;i:
count;i++)
{
if(strcmp(student[i].name,newstu)==0)
student[i].setgrades(Subject:
:
subjectcount);
}
break;
}
break;
case2:
cout<<"通过学生姓名查找学生成绩,请按1."<cout<<"通过姓名查找学生个人信息,请按2."<cout<<"查找课程信息,请按3."<intcase2;
cin>>case2;
switch(case2)
{
case1:
cout<<"请输入您要查找的学生姓名:
"<charna[8];
for(i=0;i:
count;i++)
{
if(strcmp(student[i].name,na)==0)
student[i].getgrades(Subject:
:
subjectcount);
}
break;
case2:
cout<<"请输入您要查找的学生姓名:
"<charnamee[8];
cin>>namee;
for(i=0;i:
count;i++)
{
if(strcmp(student[i].name,namee)==0)
student[i].getstudent();
}
break;
case3:
cout<<"请输入您要查找的课程号:
"<longke;
cin>>ke;
for(i=0;i:
subjectcount;i++)
{
if(ke==subject[i].kechenghao)
subject[i].getsubject();
}
break;
}
break;
case3:
cout<<"修改学生信息,请按1"<cout<<"修改学生成绩,请按2"<cout<<"修改课程信息,请按3"<intcase3;
cin>>case3;
switch(case3)
{
case1:
cout<<"请输入您要修改学生信息的学生姓名:
"<charmname[8];
cin>>mname;
cout<<"请输入您要修改的学生信息,包括学号,班级:
"<intmxuefen;
charnewname[8];
intmmclass;
cin>>mxuefen>>newname[8]>>mmclass;
for(i=0;i:
count;i++)
{
if(strcmp(student[i].name,newname)==0)
student[i].changestudent(mxuefen,newname,mmclass);
}
break;
case2:
cout<<"请输入要修改成绩的学生姓名:
"<charstuname[8];
intr,newgrade;
cin>>stuname;
cout<<"\n请输入要修改的课程编号:
"<cin>>r;
cout<<"请输入要修改的成绩:
"<cin>>newgrade;
for(i=0;i:
count;i++)
{
if(strcmp(student[i].name,stuname)==0)
student[i].changegrade(newgrade,r);
}
break;
case3:
cout<<"请输入您要修改课程信息的课程号:
"<intmsubject;
cin>>msubject;
cout<<"请输入您要修改的课程信息,包括课序号,课程号,学分,任课教师"<intmkexuhao;
intmkechenghao;
intmmxuefen;
charteaname[8];
cin>>mkexuhao>>mkechenghao>>mmxuefen>>teaname;
for(i=0;i:
subjectcount;i++)
{
if(subject[i].kechenghao==msubject)
subject[i].changesubject(mkexuhao,mkechenghao,mmxuefen,teaname);
}
break;
}
break;
case4:
cout<<"查找课程下各位选课同学成绩,请按1."<cout<<"查找平均成绩分布结果,请按2."<cout<<"查找学生平均成绩排名,请按3."<cout<<"输出某门课程学生排名,请按4"<cout<<"输出某门课程下成绩分布结果,请按5:
"<intcase4;
cin>>case4;
switch(case4)
{
case1:
into;
cout<<"请输入您要查找的课程编号:
"<cin>>o;
for(i=o;i:
count;i++)
cout<-1为该学生未选此课程。
"<break;
case2:
Subject:
:
fenduan(student,Student:
:
count);
break;
case3:
Subject:
:
bubble(student,Student:
:
count);
break;
case4:
cout<<"请输入您想输出的课程编号:
"<inth;
cin>>h;
Subject:
:
bubble1(student,Student:
:
count,h);
break;
c