主题:高手们帮忙修改个程序吧
请大家帮忙修改一下这个程序 使用输入输出流将数据写入文件,使得在以后每次启动程序后不必重新输入数据,程序设计马上到时间了,麻烦大家快点帮忙改改,本人将不胜感激!麻烦各位大家了
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
class Base
{
protected:
int id;//本科生,研究生识别
int num;
char name[20];
char sex[5];
double ch,en,ma;//成绩
int birth;
public:
Base();
virtual int getid()=0;//本科生,研究生识别
virtual void set()=0;//纯虚函数,在派生类中调用
virtual void display()=0;
double getsum();//取总成绩
char * getsex();//取性别
double getch();//取各科成绩
double geten();
double getma();
int getbirth();
int getnum();//取学号
char* getname();//取姓名
};
Base::Base()//基类构造
{
num=0;
ch=0;en=0;ma=0;
birth=1900;
}
int Base::getbirth()
{return birth;}
double Base::getsum()
{return ch+en+ma;}
double Base::getch()
{return ch;}
double Base::geten()
{return en;}
double Base::getma()
{return ma;}
int Base::getnum()
{return num;}
char *Base::getsex()
{return sex;}
char * Base::getname()
{return name;}
class College:public Base//本科生类
{
private:
int id;//本科生识别
char subject[20];//专业
public:
College();//College构造
int getid();//本科生识别
char* getsub();
void set();
void display();
friend ostream& operator<<(ostream&,const College&);
friend istream& operator>>(istream&,College&);
};
void College::set()
{
cout<<"输入本科生信息\n"<<"学号 姓名 性别(man/woman) 专业 三科成绩 出生年\n";
cin>>num>>name>>sex>>subject>>ch>>en>>ma>>birth;
}
College::College():Base()//College构造
{
id=0;
}
char*College::getsub()
{return subject;}
int College::getid()
{return id;}
void College::display()//打印
{
cout<<"\n本科生:\n"<<num<<" "<<name<<" "<<sex<<" "<<subject<<" "<<(ch+en+ma)/3<<" "<<(2011-birth)<<endl;
}
//本科生类中重载输入输出符
ostream& operator<<(ostream& out,const College& right)
{
out<<right.num<<" "<<right.name<<" "<<right.sex<<" "<<right.subject<<" "<<(right.ch+right.en+right.ma)/3<<" "<<(2011-right.birth)<<endl;
return out;
}
istream& operator>>(istream& in,College& right)
{
in>>right.num>>right.name>>right.sex>>right.subject>>right.ch>>right.en>>right.ma>>right.birth;
return in;
}
//研究生类
class Graduate:public Base
{
private:
int id;//研究生识别
char instruct[20];//导师
public:
Graduate();//Graduate构造
int getid();
void set();
void display();
char*getins();
friend ostream& operator<<(ostream&,const Graduate&);
friend istream& operator>>(istream&,Graduate&);
};
void Graduate::set()
{
cout<<"输入研究生信息\n"<<"学号 姓名 性别(man/woman) 导师 三科成绩 出生年\n";
cin>>num>>name>>sex>>instruct>>ch>>en>>ma>>birth;
}
int Graduate::getid()
{return id;}
char*Graduate::getins()
{return instruct;}
Graduate::Graduate():Base()
{
id=1;
}
void Graduate::display()
{
cout<<"\n研究生:\n"<<num<<" "<<name<<" "<<sex<<" "<<instruct<<" "<<(ch+en+ma)/3<<" "<<(2011-birth)<<endl;
}
//研究生类中重载输入输出符
ostream& operator<<(ostream& out,const Graduate& right)
{
out<<right.num<<" "<<right.name<<" "<<right.sex<<" "<<right.instruct<<" "<<(right.ch+right.en+right.ma)/3<<" "<<(2011-right.birth)<<endl;
return out;
}
istream& operator>>(istream& in,Graduate& right)
{
in>>right.num>>right.name>>right.sex>>right.instruct>>right.ch>>right.en>>right.ma>>right.birth;
return in;
}
//主函数
int main()
{
int getin,j;//主菜单中接受选择
int c1,c2,c3,c4,c5,c6,c7,c8;//case中用来接收选择
Base * p[100];
int hao[100],htp;// case 8
int m,n;//case 8
double zong[100],ztp;//case 8
static int i=0;//静态,用来统计对象创建的个数
ofstream out("com.txt");
ifstream in("com.txt");
lab2:system("cls");
cout<<"\n\n\n";
cout<<" *----------学生信息管理系统----------*\n\n";
cout<<" 1.录入信息\n";
cout<<" 2.显示全部学生\n";
cout<<" 3.计算平均成绩\n";
cout<<" 4.删除一个学生\n";
cout<<" 5.按年级输出学生信息\n";
cout<<" 6.按性别输出学生信息\n";
cout<<" 7.按姓名检索学生\n";
cout<<" 8.按总分排序\n";
cout<<" 9.结束程序运行\n\n";
cout<<"输入您的选择(1~8):";
cin>>getin;
switch(getin)
{
case 1://录入信息
lab1: system("cls");
cout<<"1.录入本科生信息"<<endl;
cout<<"2.录入研究生信息"<<endl;
cout<<"3.保存所有信息"<<endl;
cout<<"4.返回上一级菜单"<<endl;
cout<<"选择:";
cin>>c1;
cout<<endl;
switch(c1)
{
case 1:{
p[i]=new College;
p[i]->set();
i++;
goto lab1;
}
case 2:{
p[i]=new Graduate;
p[i]->set();
i++;
goto lab1;
}
case 3://输出文件
for(j=0;j<i;j++)
{
if(p[j]->getid()==1)
out<<p[j]->getnum()<<" "<<p[j]->getname()<<" "<<p[j]->getsex()<<" "<<p[j]->getch()<<" "<<p[j]->geten()<<" "<<p[j]->getma()<<" "<<2011-p[j]->getbirth()<<endl;
if(p[j]->getid()==0)
out<<p[j]->getnum()<<" "<<p[j]->getname()<<" "<<p[j]->getsex()<<" "<<p[j]->getch()<<" "<<p[j]->geten()<<" "<<p[j]->getma()<<" "<<2011-p[j]->getbirth()<<endl;
}
cout<<" 保存成功!";
goto lab1;
default:
goto lab2;
}
break;
case 2: //显示全部信息
system("cls");
cout<<"学生信息\n"<<"学号 姓名 性别(man/woman) 专业/导师 平均成绩 年龄\n";
for(j=0;j<i;j++)
p[j]->display();
cout<<"\n\n输入任意数字返回主菜单:";
cin>>c2;
switch(c2)
{
case 1:case 2:case 3:default: goto lab2;
}
case 3://计算平均成绩
system("cls");
cout<<endl<<endl;
cout<<" ------计算平均成绩-----\n";
cout<<" 1. 语文平均成绩\n";
cout<<" 2. 英语平均成绩\n";
cout<<" 3. 数学平均成绩\n";
cout<<" -----------------------\n";
cout<<" 你的选择:";
cin>>c3;
switch(c3)
{
case 1:{
double sumy=0;
for(j=0;j<i;j++)
{
sumy=sumy+p[j]->getch();
}
cout<<"\n语文平均成绩:"<<(sumy/i)<<endl;
break;
}
case 2:{
double sume=0;
for(j=0;j<i;j++)
{
sume=sume+p[j]->getch();
}
cout<<"\n英语平均成绩:"<<(sume/i)<<endl;
break;
}
case 3:{
double summ=0;
for(j=0;j<i;j++)
{
summ=summ+p[j]->getch();
}
cout<<"\n数学平均成绩:"<<(summ/i)<<endl;
break;
}
default :
goto lab2;
}
cout<<"\n\n输入任意数字返回主菜单:";
cin>>c3;
switch(c3)
{
case 1:case 2:case 3:default: goto lab2;
}
case 4://删除一个学生
system("cls");
cout<<endl<<endl;
cout<<" ------删除一个学生-----\n";
cout<<" 1. 按学号删除\n";
cout<<" 2. 按姓名删除\n";
cout<<" 3. 返回上级\n";
cout<<" -----------------------\n";
cout<<" 你的选择:";
cin>>c4;
switch(c4)
{
case 1:
int xuehao;
cout<<"输入学生的学号:";
cin>>xuehao;
for(j=0;j<i;j++)
{
if(p[j]->getnum()==xuehao)
{
for(int del=j;del<i;del++)
p[del]=p[del+1];
i--;
}
}
cout<<" \n成功删除.......!\n";
cout<<"\n\n输入任意数字返回主菜单:";
cin>>c3;
switch(c3)
{
case 1:case 2:case 3:default: goto lab2;
}
case 2:
char ming[20];
cout<<"输入学生的姓名:";
cin>>ming;
for(j=0;j<i;j++)
{
if(p[j]->getname()==ming)
{
for(int del=j;del<i;del++)
p[del]=p[del+1];
i--;
}
}
cout<<" \n成功删除........!\n";
cout<<"\n\n输入任意数字返回主菜单:";
cin>>c3;
switch(c3)
{
case 1:case 2:case 3:default: goto lab2;
}
default:goto lab2;
}
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
class Base
{
protected:
int id;//本科生,研究生识别
int num;
char name[20];
char sex[5];
double ch,en,ma;//成绩
int birth;
public:
Base();
virtual int getid()=0;//本科生,研究生识别
virtual void set()=0;//纯虚函数,在派生类中调用
virtual void display()=0;
double getsum();//取总成绩
char * getsex();//取性别
double getch();//取各科成绩
double geten();
double getma();
int getbirth();
int getnum();//取学号
char* getname();//取姓名
};
Base::Base()//基类构造
{
num=0;
ch=0;en=0;ma=0;
birth=1900;
}
int Base::getbirth()
{return birth;}
double Base::getsum()
{return ch+en+ma;}
double Base::getch()
{return ch;}
double Base::geten()
{return en;}
double Base::getma()
{return ma;}
int Base::getnum()
{return num;}
char *Base::getsex()
{return sex;}
char * Base::getname()
{return name;}
class College:public Base//本科生类
{
private:
int id;//本科生识别
char subject[20];//专业
public:
College();//College构造
int getid();//本科生识别
char* getsub();
void set();
void display();
friend ostream& operator<<(ostream&,const College&);
friend istream& operator>>(istream&,College&);
};
void College::set()
{
cout<<"输入本科生信息\n"<<"学号 姓名 性别(man/woman) 专业 三科成绩 出生年\n";
cin>>num>>name>>sex>>subject>>ch>>en>>ma>>birth;
}
College::College():Base()//College构造
{
id=0;
}
char*College::getsub()
{return subject;}
int College::getid()
{return id;}
void College::display()//打印
{
cout<<"\n本科生:\n"<<num<<" "<<name<<" "<<sex<<" "<<subject<<" "<<(ch+en+ma)/3<<" "<<(2011-birth)<<endl;
}
//本科生类中重载输入输出符
ostream& operator<<(ostream& out,const College& right)
{
out<<right.num<<" "<<right.name<<" "<<right.sex<<" "<<right.subject<<" "<<(right.ch+right.en+right.ma)/3<<" "<<(2011-right.birth)<<endl;
return out;
}
istream& operator>>(istream& in,College& right)
{
in>>right.num>>right.name>>right.sex>>right.subject>>right.ch>>right.en>>right.ma>>right.birth;
return in;
}
//研究生类
class Graduate:public Base
{
private:
int id;//研究生识别
char instruct[20];//导师
public:
Graduate();//Graduate构造
int getid();
void set();
void display();
char*getins();
friend ostream& operator<<(ostream&,const Graduate&);
friend istream& operator>>(istream&,Graduate&);
};
void Graduate::set()
{
cout<<"输入研究生信息\n"<<"学号 姓名 性别(man/woman) 导师 三科成绩 出生年\n";
cin>>num>>name>>sex>>instruct>>ch>>en>>ma>>birth;
}
int Graduate::getid()
{return id;}
char*Graduate::getins()
{return instruct;}
Graduate::Graduate():Base()
{
id=1;
}
void Graduate::display()
{
cout<<"\n研究生:\n"<<num<<" "<<name<<" "<<sex<<" "<<instruct<<" "<<(ch+en+ma)/3<<" "<<(2011-birth)<<endl;
}
//研究生类中重载输入输出符
ostream& operator<<(ostream& out,const Graduate& right)
{
out<<right.num<<" "<<right.name<<" "<<right.sex<<" "<<right.instruct<<" "<<(right.ch+right.en+right.ma)/3<<" "<<(2011-right.birth)<<endl;
return out;
}
istream& operator>>(istream& in,Graduate& right)
{
in>>right.num>>right.name>>right.sex>>right.instruct>>right.ch>>right.en>>right.ma>>right.birth;
return in;
}
//主函数
int main()
{
int getin,j;//主菜单中接受选择
int c1,c2,c3,c4,c5,c6,c7,c8;//case中用来接收选择
Base * p[100];
int hao[100],htp;// case 8
int m,n;//case 8
double zong[100],ztp;//case 8
static int i=0;//静态,用来统计对象创建的个数
ofstream out("com.txt");
ifstream in("com.txt");
lab2:system("cls");
cout<<"\n\n\n";
cout<<" *----------学生信息管理系统----------*\n\n";
cout<<" 1.录入信息\n";
cout<<" 2.显示全部学生\n";
cout<<" 3.计算平均成绩\n";
cout<<" 4.删除一个学生\n";
cout<<" 5.按年级输出学生信息\n";
cout<<" 6.按性别输出学生信息\n";
cout<<" 7.按姓名检索学生\n";
cout<<" 8.按总分排序\n";
cout<<" 9.结束程序运行\n\n";
cout<<"输入您的选择(1~8):";
cin>>getin;
switch(getin)
{
case 1://录入信息
lab1: system("cls");
cout<<"1.录入本科生信息"<<endl;
cout<<"2.录入研究生信息"<<endl;
cout<<"3.保存所有信息"<<endl;
cout<<"4.返回上一级菜单"<<endl;
cout<<"选择:";
cin>>c1;
cout<<endl;
switch(c1)
{
case 1:{
p[i]=new College;
p[i]->set();
i++;
goto lab1;
}
case 2:{
p[i]=new Graduate;
p[i]->set();
i++;
goto lab1;
}
case 3://输出文件
for(j=0;j<i;j++)
{
if(p[j]->getid()==1)
out<<p[j]->getnum()<<" "<<p[j]->getname()<<" "<<p[j]->getsex()<<" "<<p[j]->getch()<<" "<<p[j]->geten()<<" "<<p[j]->getma()<<" "<<2011-p[j]->getbirth()<<endl;
if(p[j]->getid()==0)
out<<p[j]->getnum()<<" "<<p[j]->getname()<<" "<<p[j]->getsex()<<" "<<p[j]->getch()<<" "<<p[j]->geten()<<" "<<p[j]->getma()<<" "<<2011-p[j]->getbirth()<<endl;
}
cout<<" 保存成功!";
goto lab1;
default:
goto lab2;
}
break;
case 2: //显示全部信息
system("cls");
cout<<"学生信息\n"<<"学号 姓名 性别(man/woman) 专业/导师 平均成绩 年龄\n";
for(j=0;j<i;j++)
p[j]->display();
cout<<"\n\n输入任意数字返回主菜单:";
cin>>c2;
switch(c2)
{
case 1:case 2:case 3:default: goto lab2;
}
case 3://计算平均成绩
system("cls");
cout<<endl<<endl;
cout<<" ------计算平均成绩-----\n";
cout<<" 1. 语文平均成绩\n";
cout<<" 2. 英语平均成绩\n";
cout<<" 3. 数学平均成绩\n";
cout<<" -----------------------\n";
cout<<" 你的选择:";
cin>>c3;
switch(c3)
{
case 1:{
double sumy=0;
for(j=0;j<i;j++)
{
sumy=sumy+p[j]->getch();
}
cout<<"\n语文平均成绩:"<<(sumy/i)<<endl;
break;
}
case 2:{
double sume=0;
for(j=0;j<i;j++)
{
sume=sume+p[j]->getch();
}
cout<<"\n英语平均成绩:"<<(sume/i)<<endl;
break;
}
case 3:{
double summ=0;
for(j=0;j<i;j++)
{
summ=summ+p[j]->getch();
}
cout<<"\n数学平均成绩:"<<(summ/i)<<endl;
break;
}
default :
goto lab2;
}
cout<<"\n\n输入任意数字返回主菜单:";
cin>>c3;
switch(c3)
{
case 1:case 2:case 3:default: goto lab2;
}
case 4://删除一个学生
system("cls");
cout<<endl<<endl;
cout<<" ------删除一个学生-----\n";
cout<<" 1. 按学号删除\n";
cout<<" 2. 按姓名删除\n";
cout<<" 3. 返回上级\n";
cout<<" -----------------------\n";
cout<<" 你的选择:";
cin>>c4;
switch(c4)
{
case 1:
int xuehao;
cout<<"输入学生的学号:";
cin>>xuehao;
for(j=0;j<i;j++)
{
if(p[j]->getnum()==xuehao)
{
for(int del=j;del<i;del++)
p[del]=p[del+1];
i--;
}
}
cout<<" \n成功删除.......!\n";
cout<<"\n\n输入任意数字返回主菜单:";
cin>>c3;
switch(c3)
{
case 1:case 2:case 3:default: goto lab2;
}
case 2:
char ming[20];
cout<<"输入学生的姓名:";
cin>>ming;
for(j=0;j<i;j++)
{
if(p[j]->getname()==ming)
{
for(int del=j;del<i;del++)
p[del]=p[del+1];
i--;
}
}
cout<<" \n成功删除........!\n";
cout<<"\n\n输入任意数字返回主菜单:";
cin>>c3;
switch(c3)
{
case 1:case 2:case 3:default: goto lab2;
}
default:goto lab2;
}