我做过一个类似的程序,看看行不行。
#include
#include
#include
using namespace std;
class StudBase
{
public:
StudBase(){}
void enter();
void show();
protected:
string number;
string name;
char* sex;
int age;
string major;
};
void StudBase::enter()
{
cout<<"请输入学生基本信息:";
cout<
cout<<"name:";
cin>>name;
cout<<"sex:";
sex=new char[10];
cin>>sex;
cout<<"age:";
cin>>age;
cout<<"major:";
cin>>major;
return;
}
void StudBase::show()
{
cout<<"学生基本信息为:"<
}
class Major:virtual public StudBase
{
public:
void gmajsco();
void pmajsco();
float majaverage(){return (majave=(Maj_score[0]+Maj_score[1]+Maj_score[2])/3);} //求主修平均分
protected:
float Maj_score[3];
float majave;
};
void Major::gmajsco()
{
cout<<"请输入主修的三门成绩:";
for(int i=0;i<3;i++){
cin>>Maj_score[i];
}
return;
}
void Major::pmajsco()
{
cout<<"主修三门成绩为:"<
}
class Minor:virtual public StudBase
{
public:
void gminsco();
void pminsco();
float minaverage(){return (minave=(Min_score[0]+Min_score[1])/2);} //求辅修平均分
protected:
float Min_score[2];
float minave;
};
void Minor::gminsco()
{
cout<<"请输入辅修的两门成绩:";
cin>>Min_score[0]>>Min_score[1];
return;
}
void Minor::pminsco()
{
cout<<"辅修的两门成绩为:"<
}
class Student:public Major,public Minor
{
public:
Student(){};
void average(); //求总平均分
void find(string);
void get_from_file(); //从文件提取信息
void save_to_file(); //保存到文件
float reave(){return ave;} //返回总平均值
friend ostream& operator <<(ostream&,Student&);
private:
float ave;
};
ostream& operator <<(ostream& out,Student& obj)
{
obj.show();
obj.pmajsco();
obj.pminsco();
obj.average();
return out;
}
Student stud[10];
Student* ptr[10];
ifstream infile;
void Student::save_to_file()
{
ofstream outfile("file.dat",ios::out|ios::app);
if(!outfile)
{
cerr<<"open file.dat error!"<
}
cout<<"number:"; cin>>number;
outfile<
outfile<
sex=new char[10];
cin>>sex;
outfile<
outfile<
outfile<
for(int s=0;s<3;s++){
cin>>Maj_score[s];
outfile<
outfile<
for(int g=0;g<2;g++){
cin>>Min_score[g];
outfile<
outfile<
return;
}
void Student::get_from_file()
{
if(!infile)
{
cerr<<"open error!"<
}
infile>>number;
infile>>name;
sex=new char[10];
infile>>sex;
infile>>age;
infile>>major;
for(int a=0;a<3;a++){infile>>Maj_score[a];}
for(int b=0;b<2;b++){infile>>Min_score[b];}
return;
}
void Student::average()
{
ave=(Maj_score[0]+Maj_score[1]+Maj_score[2]+Min_score[0]+Min_score[1])/5;
cout<<"平均成绩为:"<
}
int flag=0;
void Student::find(string str)
{
if((str==name)||(str==number)){
cout<<(*this);
flag=1;
}
return;
}
void bubble1(Student* p[],int length)
{
int segment;
int loop;
Student* temp;
for(segment=0;segment<=length-2;segment=segment+1){
for(loop=length-2;loop>=segment;loop=loop-1){
if((*p[loop]).majaverage()<(*p[loop+1]).majaverage()){
temp=p[loop];
p[loop]=p[loop+1];
p[loop+1]=temp;
}
}
}
return;
}
void bubble2(Student* p[],int length)
{
int segment;
int loop;
Student* temp;
for(segment=0;segment<=length-2;segment=segment+1){
for(loop=length-2;loop>=segment;loop=loop-1){
if((*p[loop]).minaverage()<(*p[loop+1]).minaverage()){
temp=p[loop];
p[loop]=p[loop+1];
p[loop+1]=temp;
}
}
}
return;
}
void bubble3(Student* p[],int length)
{
int segment;
int loop;
Student* temp;
for(segment=0;segment<=length-2;segment=segment+1){
for(loop=length-2;loop>=segment;loop=loop-1){
if((*p[loop]).reave()<(*p[loop+1]).reave()){
temp=p[loop];
p[loop]=p[loop+1];
p[loop+1]=temp;
}
}
}
return;
}
int main()
{
int n=0,j=0;
int choice;
for(int r=0;r<10;r++){
ptr[r]=&stud[r];
}
cout<<"选择要进行的操作:"<
{
switch(choice){
case 1:
while(1){
stud[n].enter();
stud[n].gmajsco();
stud[n].gminsco();
n++;
cout<<"输入成功!"<
cout<<"是否继续?(y/n): ";
cin>>flag;
if(flag!='y') break;
}
break;
case 2:
while(1){
for(int i=0;i
stud[i].pmajsco();
stud[i].pminsco();
stud[i].average();
}
char flag;
cout<<"是否继续?(y/n): ";
cin>>flag;
if(flag!='y') break;
}
break;
case 3:
while(1){
stud[j].save_to_file();
j++;
char flag;
cout<<"是否继续?(y/n): ";
cin>>flag;
if(flag!='y') break;
}
break;
case 4:
while(1){
int f;
cout<<"请输入需要从文件输出对象信息的个数: ";
cin>>f;
infile.open("file.dat",ios::in);
for(int k=0;k
cout<
}
infile.close();
char flag;
cout<<"是否继续?(y/n): ";
cin>>flag;
if(flag=='n') break;
}
break;
case 5:
while(1){
cout<<"请输入需要查询的学生姓名或学号:"<
cin>>st;
cout<<"查询结果为:"<
}
if(flag==0){
cout<<"查无此人!"<
char flag;
cout<<"是否继续?(y/n): ";
cin>>flag;
if(flag!='y') break;
}
break;
case 6:
while(1){
float sum=0.0;
cout<<"所有学生平均分为:"<
}
cout<<(sum/n)<
cout<<"是否继续?(y/n): ";
cin>>flag;
if(flag!='y') break;
}
break;
case 7:
while(1){
int choice2;
cout<<"1.按主修平均成绩"<
switch(choice2){
case 1:
bubble1(ptr,n);
for(int b=0;b
break;
case 2:
bubble2(ptr,n);
for(int b=0;b
break;
case 3:
bubble3(ptr,n);
for(int b=0;b
}
char flag;
cout<<"是否继续?(y/n): ";
cin>>flag;
if(flag!='y') break;
}
break;
case 0:
break;
}
cout<
return 0;
}