面向对象的编程技术成绩管理.docx
《面向对象的编程技术成绩管理.docx》由会员分享,可在线阅读,更多相关《面向对象的编程技术成绩管理.docx(20页珍藏版)》请在冰豆网上搜索。
面向对象的编程技术成绩管理
《面向对象的编程技术》
课程设计实验报告
学号:
班级:
专业:
姓名:
设计时间:
课程设计一、使用c++的面向对象程序设计方法(类机制)设计程序
课程题目:
学生成绩管理系统
1、实验目的
1.在编辑应用程序过程中,逐步加深对C++语言编程的理解;
2.加强实践的能力,动手能力,同时进一步对所学的知识进行巩固;
3.培养初步C++编程的能力,为以后的学习奠定基础。
二、实验内容
学生成绩管理系统
本《学生成绩管理系统》程序是一个具有对学生信息进行录入、添加、删除、根据学号进行学生信息的查询、显示已有学生信息的显示、对学生成绩进行统计(包括总分,平均分等),可以对已有的学生信息进行修改,保存和读取输入的数据等功能。
一切功能都可以在运行的软件中运行。
三、功能要求
(1) 信息维护:
学生信息数据要以文件的形式保存,能实现学生信息数据的维护。
此模块包括子模块有:
增加学
生信息、删除学生信息、修改学生信息
(2) 信息查询:
查询时可实现按姓名查询、按学号查询
(3)成绩统计:
输入任意的一个课程名(如数学)和一个分数段(如60--70),统计出在此分数段的学生情况。
(4) 排序:
能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格的形式显示排序后的输出结果)(使用多种方法排序者)
4、流程图
四、运行环境
VC++6.0。
五、实验代码处理
#include
#include
#include
classstu
{
charname[20];
doublemath,chinese,english,average,sum;
public:
stu()
{
}
stu(charn[20],doublema,doublechin,doubleeng)
{
strcpy(name,n);
math=ma;
chinese=chin;
english=eng;
}
doublegetsum()
{
sum=chinese+english+math;
returnsum;
}
doublegetaver()
{
average=getsum()/3;
returnaverage;
}
friendvoidmain();
};
voidmain()
{
cout<<"*****************欢迎来到学生成绩管理系统*****************"<cout<<"**********************************"<cout<<"******请选择您需要的操作!
*******"<cout<<"***********操作:
***********"<cout<<"***********(0)数据录入***********"<cout<<"***********
(1)增加人员***********"<cout<<"***********
(2)删除人员***********"<cout<<"***********(3)修改数据***********"<cout<<"***********查询:
***********"<cout<<"**********(4)按总成绩查询**********"<cout<<"***********(5)按姓名查询***********"<cout<<"**********(6)输出所有学生的数据****"<cout<<"***********成绩名词***********"<cout<<"*********(7)按总分查询排名*********"<cout<<"*********(8)按语文查询排名*********"<cout<<"*********(9)按数学查询排名*********"<cout<<"*********(y)按英语查询排名*********"<cout<<"选择相关操作请输入相对的括号里的阿拉伯数字!
"<cout<<"**********************************"<charp;charw;
stu*s[50];
ofstream*file[50];
inti=0;
intj=0;
boolflag2=0;
do
{
cin>>p;
if((p>='0'&&p<='10'))
flag2=1;
else
cout<<"指令错误!
请重新输入:
"<}while(flag2==0);
do{
switch(p)
{
case'0':
{
charc;
charname[20];doublemath,chinese,english;
do{
cout<<"请输入姓名"<cin>>name;
cout<<"请输入数学成绩:
"<cin>>math;
cout<<"请输入语文成绩:
"<cin>>chinese;
cout<<"请输入外语成绩:
"<cin>>english;
file[j]=newofstream("d:
\\document",ios:
:
ate);
*file[j]<<"姓名"<j++;
s[i]=newstu(name,math,chinese,english);
i++;
cout<<"数据录入成功,想继续录入吗(y/n)"<cin>>c;
flag2=0;
do
{
if(c!
='y'&&c!
='n')
{
cout<<"指令错误!
请重新输入!
"<cin>>c;
}
else
flag2=1;
}while(flag2==0);
}while(c=='y');
break;
}
case'4':
{
doublet;charc;
do
{
intflag1=0;
cout<<"请输入你要查询学生的总成绩"<cin>>t;
for(intq=0;q
{
if(s[q]->getsum()==t)
{
flag1=1;
cout<<"您要查询的学生是:
"<<(*s[q]).name<}
}
if(flag1==0)
cout<<"对不起!
您要查询的学生不存在!
"<cout<<"您想继续查询吗?
(y/n)"<cin>>c;
if(c!
='y'&&c!
='n')
{
cout<<"指令错误!
请重新输入!
"<cin>>c;
}
}
while(c=='y');
break;
}
case'5':
{
charn[20];intj=0;charc;
do{
intflag=0;
cout<<"请输入你要查询的学生姓名"<cin>>n;
for(intj=0;j
{
if(strcmp(n,(*s[j]).name)==0)
{
flag=1;
cout<<"您要查询的学生是:
"<<(*s[j]).name<cout<<(*s[j]).name<<"的总成绩成绩是"<<(*s[j]).getsum()<"<<(*s[j]).getaver()<}
}
if(flag==0)
cout<<"对不起!
您要查询的学生不存在!
"<cout<<"您想继续查询吗?
(y/n)"<cin>>c;
if(c!
='y'&&c!
='n')
{
cout<<"指令错误!
请重新输入!
"<cin>>c;
}
}
while(c=='y');
break;
}
case'1':
{
charname[20];doublemath,chinese,english;
charc;
do
{
cout<<"请输入您要增加的学生的姓名:
"<cin>>name;
cout<<"请输入数学成绩:
"<cin>>math;
cout<<"请输入语文成绩:
"<cin>>chinese;
cout<<"请输入外语成绩:
"<cin>>english;
file[j]=newofstream("d:
\\document",ios:
:
ate);
*file[j]<<"姓名"<j++;
s[i]=newstu(name,math,chinese,english);
i++;
cout<<"数据录入成功,想继续录入吗(y/n)"<cin>>c;
if(c!
='y'&&c!
='n')
{
cout<<"指令错误!
请重新输入!
"<cin>>c;
}
}while(c=='y');
break;
}
case'2':
{
charname[20];boolflag3=0;charc;
do{
cout<<"请输入您要删除的学生姓名:
"<cin>>name;
for(inth=0;h
{
if(strcmp(name,s[h]->name)==0)
{
flag3=1;
i--;
do{
s[h]=s[h+1];
h++;
}while(h<=i);
}
}
if(flag3==0)
cout<<"您要求删除的对象本来就不存在!
请检查输入的正确性!
";
cout<<"要继续删除吗?
(y/n)"<cin>>c;
if(c!
='y'&&c!
='n')
{
cout<<"指令错误!
请重新输入!
"<cin>>c;
}
}while(c=='y');
break;
}
case'3':
{
charname[20];doublemat,chin,eng;flag2=0;
charc;
do
{
cout<<"请输入您要修改的学生的姓名:
"<cin>>name;
for(inth=0;h
{
if(strcmp(name,s[h]->name)==0)
{
flag2=1;
cout<<"请输入新的数学成绩:
"<cin>>mat;
cout<<"请输入新的语文成绩:
"<cin>>chin;
cout<<"请输入新的外语成绩:
"<cin>>eng;
s[h]->chinese=chin;
s[h]->math=mat;
s[h]->english=eng;
cout<<"数据修改成功!
";
}
}
if(flag2==0)
{
cout<<"您要修改的学生本来就不存在!
请检查重新输入!
"<}
cout<<"想继续修改吗(y/n)"<cin>>c;
if(c!
='y'&&c!
='n')
{
cout<<"指令错误!
请重新输入!
"<cin>>c;
}
}while(c=='y');
break;
}
case'6':
{
cout<<"本系统所有学生数据如下:
"<if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!
"<for(intk=0;k
{
cout<"<<""<name<<
"语文:
"<<""<chinese<<"数学:
"<<""<math
<<"外语:
"<<""<english<<"总分:
"<<""<<(*s[k]).getsum()
<<"平均分:
"<<""<<(*s[k]).getaver()<}
break;
}
case'7':
{
intt;stub;
cout<<"本系统所以学生排名如下:
"<for(intx=0;x{
t=x;
for(inty=x+1;y
{
if((s[t]->getsum())<(s[y]->getsum()))
t=y;
if(t!
=x)
{
b=*s[x];
*s[x]=*s[t];
*s[t]=b;
}
}
}
if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!
";
for(intk=0;k
{
cout<"<<""<name<<
"语文:
"<<""<chinese<<"数学:
"<<""<math
<<"外语:
"<<""<english<<"总分:
"<<""<getsum()
<<"平均分:
"<<""<getaver()<}
break;
}
case'8':
{
intt;stub;
cout<<"本系统所以学生语文排名如下:
"<for(intx=0;x{
t=x;
for(inty=x+1;y
{
if((s[t]->chinese)<(s[y]->chinese))
t=y;
if(t!
=x)
{
b=*s[t];
*s[t]=*s[x];
*s[x]=b;
}
}
}
if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!
";
for(intk=0;k
{
cout<"<<""<name<<
"语文:
"<<""<chinese<<"数学:
"<<""<math
<<"外语:
"<<""<english<<"总分:
"<<""<getsum()
<<"平均分:
"<<""<getaver()<}
break;
}
case'9':
{
intt;stub;
cout<<"本系统所以学生数学排名如下:
"<for(intx=0;x{
t=x;
for(inty=x+1;y
{
if((s[t]->math)<(s[y]->math))
t=y;
if(t!
=x)
{
b=*s[t];
*s[t]=*s[x];
*s[x]=b;
}
}
}
if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!
";
for(intk=0;k
{
cout<"<<""<name<<
"语文:
"<<""<chinese<<"数学:
"<<""<math
<<"外语:
"<<""<english<<"总分:
"<<""<getsum()
<<"平均分:
"<<""<getaver()<}
break;
}
case'y':
{
intt;stub;
cout<<"本系统所以学生英语排名如下:
"<for(intx=0;x{
t=x;
for(inty=x+1;y
{
if((s[t]->english)<(s[y]->english))
t=y;
if(t!
=x)
{
b=*s[t];
*s[t]=*s[x];
*s[x]=b;
}
}
}
if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!
";
for(intk=0;k
{
cout<"<<""<name<<
"语文:
"<<""<chinese<<"数学:
"<<""<math
<<"外语:
"<<""<english<<"总分:
"<<""<getsum()
<<"平均分:
"<<""<getaver()<}
}
break;
}
cout<<"您想继续进行其他操作吗?
(y/n)"<boolflag4=0;
do
{
cin>>w;
if(w!
='y'&&w!
='n')
cout<<"指令错误!
请重新输入!
"<else
flag4=1;
}while(flag4==0);
if(w=='y')
cout<<"请输入操作代码(0录入/4按总分查询/5按姓名查询/1增加人员/2删除人员/3修改数据/6显示所有成员数据/7按总分排名/8按语文排名/9按数学排名/y按英语排名)"<cin>>p;
}while(w=='y');
for(intx=0;x
{
deletes[x];
cout<<"deleteallmembers!
"<}
}
6、程序运行结果
1主菜单界面
2添加学生记录
3显示学生记录
4按姓名查找学生成绩
5按总分排名
6增加成员
7删除成员
8修改成员数据
四、
课程设计总结
这是一个综合性较强,很实际的一个编程实例。
刚学C++时候,感觉类和对象还挺有意思的,刚接触到这个题目时,觉得应该没什么大问题吧,我自认为一些基本知识点都已经掌握了。
可是,真的当我动手编程的时候,才发现并没有想象中的那么简单。
单个知识点是弄清了,但是,将所有的知识点综合起来运用时,就碰到了各种各样的问题了。
有时候,一个错误得找好久,才能发现。
本系统的重点就是要会建立两个类。
一个是学生类,用来存放一个学生的成绩记录,相当于一个结构体的功能吧。
另一个类是学生成绩记录系统类,该类用来存放多个学生的成绩记录。
难点就是学生类里各个功能的实现。
总的来说,添加,显示,查找,这三个功能比较容易,但是,删除,保存,加载这三个功能就需要花点心思了,可能是平时用的比较少吧,生疏了。
可见只有通过平时多加练习,才能有助于自己巩固知识点。
最后想说的是,调试程序真的很关键。
调试程序需要较大的耐心。
可能调试程序的时间比自己编写整个程序的时间还要长,下的工夫还要深,但这是一个程序员必须了解,也必须接受的事实。
有好几次,几个错误让我很是头疼啊,很想删了,重新来过,可是最后发现,还是得有耐心去调试程序。
通过这个实验的练习,我也学到了很多东西,特别是加深了对类和对象理解和应用方面,也很谢谢老师给我的帮助。