#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <string.h>
#include <iomanip.h>
#define N 15
class Test{
char name[20];
char sex[2];
int age;
char num[15];
char school[20];
float chinese,math,english;
char chooseone[3];
char choosetwo[2];
public:
Test(fstream in)
{
in>>name;
in>>sex;
in>>age;
in>>num;
in>>school;
in>>chinese;
in>>math;
in>>english;
in>>chooseone;
in>>choosetwo;
}
float sumnum;
char *getname(){return name;}
float getchinese(){return chinese;}
float getmath(){return math;}
float getenglish(){ return english;}
char getchooseone(){return chooseone[0];
return chooseone[1];return chooseone[2];}
char getchoosetwo(){return choosetwo[0];return choosetwo[1];}
void sum() {sumnum=chinese+math+english;}
void out(fstream in)
{
in<<name;
in<<setw(10)<<sex;
in<<setw(10)<<age;
in<<setw(25)<<num;
in<<setw(25)<<school;
in<<setw(8)<<chinese;
in<<setw(8)<<math;
in<<setw(8)<<english;
in<<setw(8)<<chooseone;
in<<setw(8)<<choosetwo;
in<<setw(20)<<"总分为:"<<sumnum<<endl;
}
};
int tishi(){
int m,s;
char str[80];
cout<<"欢迎使用高考成绩模拟管理系统!"<<endl;
cout<<"******************************************************* "<<endl;
cout<<"1.计算总分并排序,并计算5分段的人数,结果在1.txt中查找"<<endl;
cout<<"2.语数外分别排序,并计算平均成绩及最高分,结果在2.txt中查找"<<endl;
cout<<"3.按照一定的录取标准统计达到标准的人数,结果在3.txt中查找"<<endl;
cout<<"4.退出"<<endl;
cout<<"请选择1-4的数字"<<endl;
cout<<"*******************************************************"<<endl;
cin>>m;
s=cin.rdstate();
while(s){
cin.clear();
cin.getline(str,80);
cout<<"输入错误,请重新输入\n";
cin>>m;
s=cin.rdstate();
}
return m;
}
void paixu(Test *b[]){
Test *n;
for(int i=0;i<N;i++)
for(int j=0;j<N-i;j++)
if(b[j]->sumnum<b[j+1]->sumnum){n=b[j+1];b[j+1]=b[j];b[j]=n;
}
}
void print(fstream out,Test *a[]){
float temp=a[N-1]->sumnum;
la: int c=0;
for(int k=N-1;k>=0;k--){
if(((a[k]->sumnum)>=temp)&&((a[k]->sumnum)<(temp+5))) c++;
}
out<<temp<<"--"<<temp+4<<"的人数为:"<<c<<endl;
if(a[0]->sumnum>temp+5) {
temp=temp+5;
goto la;
}
}
void fenbiepaixuc(fstream out,Test *b[]){
float array1[N];
char *c[N];
float temp1;
char *name1;
for(int i=0;i<N;i++){
array1[i]=b[i]->getchinese();
c[i]=b[i]->getname();
}
for(i=0;i<N;i++)
for(int j=0;j<N-i;j++)
if(array1[j]<array1[j+1]){
temp1=array1[j+1];
array1[j+1]=array1[j];
array1[j]=temp1;
name1=c[j+1];
c[j+1]=c[j];
c[j]=name1;}
out<<"语文成绩排序:"<<" "<<endl;
for(i=0;i<N;i++)
out<<"第"<<(i+1)<<"名"<<"为:"<<c[i]<<':'<<array1[i]<<setw(15)<<endl;
out<<"最高分为:"<<array1[0]<<" ";
for( i=0;i<N;i++)
temp1+=array1[i];
out<<"语文平均成绩为"<<temp1/N<<endl<<endl;
}
void fenbiepaixum(fstream out,Test *b[]){
float array2[N];
char *name1;
char *c[N];
float temp2;
for(int i=0;i<N;i++){
c[i]=b[i]->getname();
array2[i]=b[i]->getmath();
}
for(i=0;i<N;i++)
for(int j=0;j<N-i;j++)
if(array2[j]<array2[j+1]){
temp2=array2[j+1];
array2[j+1]=array2[j];
array2[j]=temp2;
name1=c[j+1];
c[j+1]=c[j];
c[j]=name1;
}
out<<"数学成绩排序:"<<" "<<endl;
for(i=0;i<N;i++)
out<<"第"<<(i+1)<<"名"<<"为:"<<c[i]<<':'<<array2[i]<<setw(15)<<endl;
out<<"最高分为:"<<array2[0]<<" ";
for( i=0;i<N;i++)
temp2+=array2[i];
out<<"数学平均成绩为"<<temp2/N<<endl<<endl;
}
void fenbiepaixue(fstream out,Test *b[]){
float array3[N];
float temp3;
char *name1;
char *c[N];
for(int i=0;i<N;i++){
c[i]=b[i]->getname();
array3[i]=b[i]->getenglish();
}
for(i=0;i<N;i++)
for(int j=0;j<N-i;j++)
if(array3[j]<array3[j+1]){
temp3=array3[j+1];
array3[j+1]=array3[j];
array3[j]=temp3;
name1=c[j+1];
c[j+1]=c[j];
c[j]=name1;
}
out<<"英语成绩排序:"<<" "<<endl;
for(i=0;i<N;i++)
out<<"第"<<(i+1)<<"名"<<"为:"<<c[i]<<':'<<array3[i]<<setw(15)<<endl;
out<<"最高分为:"<<array3[0]<<" ";
for( i=0;i<N;i++)
temp3+=array3[i];
out<<"英语平均成绩为"<<temp3/N<<endl;
}
void panduan(fstream outfile,Test *a[]){
int b[6]={0,0,0,0,0,0};
for(int i=0;i<N;i++)
{ if((a[i]->sumnum>=400)&&(a[i]->getchooseone()=='a'||a[i]->getchooseone()=='a+')&&(a[i]->getchoosetwo()=='a'||a[i]->getchoosetwo()=='a+'))
{ b[0]+=1;a[i]->out(outfile);outfile<<"达到了211重点大学分数线!!!"<<endl;}
if((a[i]->sumnum>=400)&&(a[i]->getchooseone()=='b'||a[i]->getchooseone()=='b+')&&(a[i]->getchoosetwo()=='b'||a[i]->getchoosetwo()=='b+'))
{ b[1]+=1;a[i]->out(outfile);outfile<<"达到了一本分数线!!!"<<endl;}
if((a[i]->sumnum>=350&&a[i]->sumnum<400)&&(a[i]->getchooseone()=='a'||a[i]->getchooseone()=='a+')&&(a[i]->getchoosetwo()=='a'||a[i]->getchoosetwo()=='a+'))
{b[2]+=1; a[i]->out(outfile);outfile<<"达到了市级二本分数线!!!"<<endl;}
if((a[i]->sumnum>=300&&a[i]->sumnum<350)&&(a[i]->getchooseone()=='a'||a[i]->getchooseone()=='a+')&&(a[i]->getchoosetwo()=='a'||a[i]->getchoosetwo()=='a+'))
{b[3]+=1; a[i]->out(outfile);outfile<<"达到了县级二本分数线!!!"<<endl;}
if((a[i]->sumnum>=300&&a[i]->sumnum<400)&&(a[i]->getchooseone()=='b'||a[i]->getchooseone()=='b+')&&(a[i]->getchoosetwo()=='b'||a[i]->getchoosetwo()=='b+'))
{b[4]+=1; a[i]->out(outfile);outfile<<"达到了三本分数线!!!"<<endl;}
if((a[i]->sumnum<=200)||(a[i]->getchooseone()=='c')||a[i]->getchooseone()=='d'||a[i]->getchoosetwo()=='c'||a[i]->getchoosetwo()=='d')
{b[5]+=1; a[i]->out(outfile);outfile<<"您落选了!很遗憾!!!"<<endl;}
}
outfile<<"达到211重点大学分数线的人数为:"<<b[0]<<endl;
outfile<<"达到了一本分数线的人数为:"<<b[1]<<endl;
outfile<<"达到了市级二本分数线的人数为:"<<b[2]<<endl;
outfile<<"达到了县级二本分数线的人数为:"<<b[3]<<endl;
outfile<<"达到了三本分数线的人数为:"<<b[4]<<endl;
outfile<<"落选的人数为:"<<b[5]<<endl;
}
void main()
{
fstream infile("8.txt",ios::in|ios::nocreate);
if(!infile){
cout<<"can't!"<<endl;
exit(1);
}
Test *a[N];
for(int i=0;i<N;i++)
a[i]=new Test(infile);
for(i=0;i<N;i++)
a[i]->sum();
paixu(a);
infile.close();
fstream outfile1("1.txt",ios::out);
if(!outfile1){
cout<<"can't!"<<endl;
exit(2);
}
fstream outfile2("2.txt",ios::out);
if(!outfile2){
cout<<"can't!"<<endl;
exit(2);
}
fstream outfile3("3.txt",ios::out);
if(!outfile3){
cout<<"can't!"<<endl;
exit(2);
}
lb:int t=tishi();
if(t>=0&&t<=9)
switch(t){
case 1:outfile1<<"姓名"<<setw(10)<<"性别"<<setw(10)<<"年龄"<<setw(25)<<"学号"<<setw(25)<<"学校"<<setw(8)<<"语文"<<setw(8)<<"数学"<<setw(8)<<"英语"<<setw(8)<<"选测1"<<setw(10)<<"选测2"<<setw(10)<<endl;
for(i=0;i<N;i++) a[i]->out(outfile1);
print(outfile1,a);
cout<<"谢谢你的使用!!!"<<endl;
break;
case 2:
fenbiepaixuc(outfile2,a);
fenbiepaixum(outfile2,a);
fenbiepaixue(outfile2,a);
cout<<"谢谢你的使用!!!"<<endl;
break;
case 3:
panduan(outfile3,a);
cout<<"谢谢你的使用!!!"<<endl;
break;
case 4:
cout<<"你选择了退出!"<<endl;
break;
default:cout<<"输入错误!请重新输入!\n";goto lb;
}
outfile1.close();
outfile2.close();
outfile3.close();
}