C++学生信息管理.docx
《C++学生信息管理.docx》由会员分享,可在线阅读,更多相关《C++学生信息管理.docx(21页珍藏版)》请在冰豆网上搜索。
C++学生信息管理
7.学生信息管理
设计要求:
设计要求实现如下功能:
(1)建立学生信息数据,包括学号、姓名、性别、三科成绩、出生时间、年龄(必须计算得到)。
(2)使用继承的方法构造至少3个类,(即学生类——基类,一年级学生和二年级学生类——派生类)类中使用相应的对象放置10个学生信息。
(3)编写同名display()成员函数,用来输出数组的内容。
(4)按不同类别输出学生信息,比如按性别。
(5)要求对“<<”和“>>”运算符进行重载。
考虑到输人学号时,也会因不小心引人空格,而且名字中也需要有空格,所以重载“>>”运算符时,需要满足这个要求。
(6)抽取并计算学生的平均成绩。
(7)按照至少一科成绩进行排序。
(8)检索(查找)指定信息。
(如按姓名检索、按年龄检索)
(9)参考界面如下:
1-增加一位学生(1年级2年级)
2-显示全部学生(1年级2年级)
3-计算平均成绩(1年级2年级)
4-删除一个学生(1年级2年级)
5-按性别输出学生信息
6-按姓名检索学生
7-按照至少一科成绩进行排序。
8-结束程序运行
本程设计思路:
1定义基类
classstudent{
public:
intxuehao;
charxingming[20];
charxingbie;
floatyuwen,shuxue,yinyu;
intshengri;
virtualintgetnianji()=0;
virtualvoidset()=0;
virtualvoiddisplay()=0;
intgetxuehao(){returnxuehao;}
char*getxingming(){returnxingming;}
chargetxingbie(){returnxingbie;}
floatgetyuwen(){returnyuwen;}
floatgetshuxue(){returnshuxue;}
floatgetyinyu(){returnyinyu;}
floatgetsum(){
return(yuwen+shuxue+yinyu);}
intgetshengri(){returnshengri;}
};
};
2定义一二年级继承类
classostudent:
publicstudent
classostudent:
publicstudent
3重载函数
riendostream&operator<<(ostream&out,ostudent&right){
out< < <<(2009-right.shengri)< returnout;
}
friendistream&operator>>(istream&in,ostudent&right){
in>>right.xuehao>>right.xingming>>right.xingbie>>right.zhuanye>>right.yuwen
>>right.shuxue>>right.yinyu>>right.shengri;
returnin;
}
};
4功能选择函数
switch()
case1:
case2:
……
分别实现
输入函数
打印函数
查找函数
删除函数
排序函数
5主函数
实现整合
3详细设计与编码:
#include
#include
usingnamespacestd;
classstudent//基类
{
public:
intxuehao;
charxingming[20];
char xingbie;
floatyuwen,shuxue,yinyu;
intshengri;
virtualint getnianji()=0;
virtualvoid set()=0;
virtualvoid display()=0;
intgetxuehao(){returnxuehao;}
char*getxingming(){returnxingming;}
char getxingbie(){returnxingbie;}
float getyuwen(){returnyuwen;}
float getshuxue(){return shuxue;}
float getyinyu(){return yinyu;}
float getsum(){
return(yuwen+shuxue+yinyu);}
intgetshengri(){returnshengri;}
};
classostudent:
publicstudent//一年级继承类
{
public:
intnianji;
charzhuanye[25];
ostudent(){nianji=0;}
intgetnianji(){returnnianji;}
char*getzhuanye(){returnzhuanye;}
voidset()//输入函数
{cout<<"输入一年级学生信息\n"
<<"学号 姓名 性别(m/w) 专业 语文 数学英语 出生年\n";
cin>>xuehao>>xingming>>xingbie>>zhuanye>>yuwen>>shuxue>>yinyu>>shengri;
}
voiddisplay()//显示函数
{
cout<<"\n一年级学生:
\n"< <}
friendostream&operator<<(ostream&out,ostudent&right){
out< < <<(2009-right.shengri)< returnout;
}
friendistream&operator>>(istream&in,ostudent&right){
in>>right.xuehao>>right.xingming>>right.xingbie>>right.zhuanye>>right.yuwen
>>right.shuxue>>right.yinyu>>right.shengri;
returnin;
}
};
clasststudent:
publicstudent//二年级继承类
{
public:
int nianji;
char teacher[25];
tstudent(){nianji=1;}
char*getteacher()
{returnteacher;}
intgetnianji(){returnnianji;}
voidset()
{
cout<<"输入二年级学生信息\n"
<<"学号 姓名 性别(m/w) 老师 语文 数学 英语 出生年\n";
cin>>xuehao>>xingming>>xingbie>>teacher>>yuwen>>shuxue>>yinyu>>shengri;
}
voiddisplay(){
cout<<"\n二年级学生:
\n"< <}
friendostream&operator<<(ostream&out,tstudent&right){
out< < <<(2009-right.shengri)< returnout;
}
friendistream&operator>>(istream&in,tstudent&right)//重载运算符
{
in>>right.xuehao>>right.xingming>>right.xingbie>>right.teacher>>right.yuwen
>>right.shuxue>>right.yinyu>>right.shengri;
returnin;
}
};
intmain()
{
intgetin,j;
intc1,c2,c3,c4,c5,c6,c7;
student*p[100];
inthao[100],htp;
intm,n;
doublezong[100],ztp;
staticinti=0;
lab2:
cout<<" 1.录入信息\n";
cout<<" 2.显示全部学生\n";
cout<<" 3.计算平均成绩\n";
cout<<" 4.删除一个学生\n";
cout<<" 5.按年级输出学生信息\n";
cout<<" 6.按姓名检索学生\n";
cout<<" 7.按总分排序\n";
cout<<"\n\n输入您的选择(1to7):
";
cin>>getin;
switch(getin)//功能选择函数
{
case1:
lab1:
//录入
cout<<"1.录入一年级学生信息"< cout<<"2.录入二年级学生信息"< cout<<"3.保存所有信息"< cout<<"4.返回上一级菜单"< cout<<"选择:
";
cin>>c1;
cout< switch(c1)
{
case1:
{
p[i]=newostudent;
p[i]->set();
i++;
gotolab1;
}
case2:
{
p[i]=newtstudent;
p[i]->set();
i++;
gotolab1;
}
case3:
for(j=0;j
{
if(p[j]->getnianji()==1)
cout<
getxuehao()<<""<
getxingming()<<""
<
getxingbie()<<""<
getyuwen()<<""<
getshuxue()
<<""<
getyinyu()<<""<<2009-p[j]->getshengri()< if(p[j]->getnianji()==0)
cout<
getxuehao()<<""<
getxingming()<<""
<
getxingbie()<<""<
getyuwen()<<""<
getshuxue()
<<""<
getyinyu()<<""<<2009-p[j]->getshengri()< }
cout<<" 保存成功!
\n";
gotolab1;
default:
gotolab2;
}
break;
case2:
//输出数据
cout<<"学生信息\n"
<<"学号 姓名 性别(m/w) 专业/老师 平均成绩 年龄\n";
for(j=0;j
{
p[j]->display();
}
cout<<"\n\n输入任意数字返回主菜单:
";
cin>>c2;
switch(c2)
{
case1:
case2:
case3:
default:
gotolab2;
}
case3:
//平均成绩输出
cout< cout<<" ------计算平均成绩-----\n";
cout<<" 1.语文平均成绩\n";
cout<<" 2.数学平均成绩\n";
cout<<" 3.英语平均成绩\n";
cout<<" -----------------------\n";
cout<<" 你的选择:
";
cin>>c3;
switch(c3)
{
case1:
{
doublesumy=0;
for(j=0;j
{
sumy=sumy+p[j]->getyuwen();
}
cout<<"\n语文平均成绩:
"<<(sumy/i)< break;
}
case2:
{
doublesume=0;
for(j=0;j
{
sume=sume+p[j]->getshuxue();
}
cout<<"\n数学平均成绩:
"<<(sume/i)< break;
}
case3:
{
doublesumm=0;
for(j=0;j
{
summ=summ+p[j]->getyinyu();
}
cout<<"\n英语平均成绩:
"<<(summ/i)< break;
}
default:
gotolab2;
}
cout<<"\n\n输入任意数字返回主菜单:
";
cin>>c3;
switch(c3)
{
case1:
case2:
case3:
default:
gotolab2;
}
case4:
//删除操作
cout< cout<<" ------删除一个学生-----\n";
cout<<" 1.按学号删除\n";
cout<<" 2.按姓名删除\n";
cout<<" 3.返回上级\n";
cout<<" -----------------------\n";
cout<<" 你的选择:
";
cin>>c4;
switch(c4)
{
case1:
intxuehao;
cout<<"输入学生的学号:
";
cin>>xuehao;
for(j=0;j
{
if(p[j]->getxuehao()==xuehao)
{
for(intdel=j;del
p[del]=p[del+1];
i--;
}
}
cout<<"\n成功删除.......!
\n";
cout<<"\n\n输入任意数字返回主菜单:
";
cin>>c3;
switch(c3)
{
case1:
case2:
case3:
default:
gotolab2;
}
case2:
charming[20];
cout<<"输入学生的姓名:
";
cin>>ming;
for(j=0;j
{
if(strcmp(p[j]->getxingming(),ming)==0)