任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)
功能要求:1).可以输入各个项目的前三名或前五名的成绩;
2).能统计各学校总分,
3).可以按学校编号、学校总分、男女团体总分排序输出;
4).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)
输出形式:有中文提示,各学校分数为整形
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
#include<iostream>
#include<iomanip>
#include<string>
#include<fstream>
using namespace std;
int m=0,w=0,n=0;
struct Game
{
int gnumber;
char gname[20];//比赛名称
int gscore;//该比赛分数
int grank;//该比赛的排名
};
struct Totalscore
{
int all;
int male;//男生比赛的积分
int female;//女生比赛的积分
};
struct School
{
Game game[40];
int snumber;
char sname[20];//学校名称
Totalscore totalscore;
};
void write_to(int &n,int &m,int &w,School school[])//写入文件
{
ofstream outfile("score.dat",ios::binary);
if(!outfile) cerr<<"文件写入错误,请重试!"<<endl;
else
{
outfile.write(reinterpret_cast<char *>(&n),sizeof(n));
outfile.write(reinterpret_cast<char *>(&m),sizeof(m));
outfile.write(reinterpret_cast<char *>(&w),sizeof(w));
for(int i=0;i<n;i++)
{
outfile.write((char*)&school[i],sizeof(school[i]));
}
outfile.close();
cout<<"文件写入成功!"<<endl<<endl;
}
}
void read_from(int &n,int &m,int &w,int &test,School school[])//读取文件
{
ifstream infile("score.dat",ios::binary);
if(!infile) cerr<<"文件读取错误,请重试!"<<endl;
else
{
infile.read(reinterpret_cast<char *>(&n),sizeof(n));
infile.read(reinterpret_cast<char *>(&m),sizeof(m));
infile.read(reinterpret_cast<char *>(&w),sizeof(w));
for(int i=0;i<n;i++)
{
infile.read((char*)&school[i],sizeof(school[i]));
}
infile.close();
if(n==0) test=1;
cout<<"文件读取成功!当前共有"<<m+w<<"个项目,"<<n<<"个学校的数据。"<<endl<<endl;
}
}
void Imput_score(School school[])
{
int q,s1,s2,s3,i,k;
cout<<"请输入项目编号:";
leap2:
cin>>q;
if(q<1||q>m+w)
{
cout<<"请输入有效数字:";
goto leap2;
}
cout<<"请输入第1名的学校编号:";
leap3:
cin>>s1;
if(s1<1||s1>n)
{
cout<<"无该学校编号,请重新输入:";
goto leap3;
}
school[s1-1].game[q-1].grank=1;
if(q<=m)
{
school[s1-1].totalscore.male+=5;
school[s1-1].totalscore.all+=5;
}
else
{
school[s1-1].totalscore.female+=5;
school[s1-1].totalscore.all+=5;
}
cout<<"请输入该项目成绩:";
cin>>school[s1-1].game[q-1].gscore;
cout<<"请输入第2名的学校编号:";
leap4:
cin>>s2;
if(s2<1||s2>n)
{
cout<<"无该学校编号,请重新输入:";
goto leap4;
}
school[s2-1].game[q-1].grank=2;
if(q<=m)
{
school[s2-1].totalscore.male+=3;
school[s2-1].totalscore.all+=3;
}
else
{
school[s2-1].totalscore.female+=3;
school[s2-1].totalscore.all+=3;
}
cout<<"请输入该项目成绩:";
cin>>school[s2-1].game[q-1].gscore;
cout<<"请输入第3名的学校编号:";
leap5:
cin>>s3;
if(s3<1||s3>n)
{
cout<<"无该学校编号,请重新输入:";
goto leap5;
}
school[s3-1].game[q-1].grank=3;
if(q<=m)
{
school[s3-1].totalscore.male+=2;
school[s3-1].totalscore.all+=2;
}
else
{
school[s3-1].totalscore.female+=2;
school[s3-1].totalscore.all+=2;
}
cout<<"请输入该项目成绩:";
cin>>school[s3-1].game[q-1].gscore;
cout<<"是否写入文件(写入请输入1):";
cin>>k;
if(k==1) write_to(n,m,w,school);
}
void Output_by_schoolnumber(School school[])
{
int i,j;
for(i=0;i<n;i++)
{
cout<<"*********************************************************"<<endl;
cout<<"学校编号:"<<school[i].snumber<<setw(15)
<<"学校名称:"<<school[i].sname<<setw(15)
<<"总分:"<<school[i].totalscore.all<<endl;
if(school[i].totalscore.all!=0)
{
cout<<"获前三名的项目:"<<endl;
for(j=0;j<m+w;j++)
{
if(school[i].game[j].grank!=0)
{
cout<<"编号"<<school[i].game[j].gnumber<<setw(14)<<"项目名称:"<<school[i].game[j].gname<<setw(10)
<<school[i].game[j].gscore<<"分"<<setw(8)<<"第"
<<school[i].game[j].grank<<"名"<<endl;
}
}
cout<<endl;
}
}
cout<<"*********************************************************"<<endl;
cout<<endl;
}
void Output_by_schoolscore(School school[])
{
int i,j;
School t;
School sch2[n];
for(i=0;i<n;i++) sch2[i]=school[i];
for(i=0;i<n;i++)
{
for(j=n-1;j>i;j--)
{
if(sch2[j].totalscore.all<sch2[j-1].totalscore.all)
{t=sch2[j];sch2[j]=sch2[j-1];sch2[j-1]=t;}
}
}
for(i=n-1;i>=0;i--)
{
cout<<"*********************************************************"<<endl;
cout<<"学校编号:"<<sch2[i].snumber<<setw(15)
<<"学校名称:"<<sch2[i].sname<<setw(15)
<<"总分:"<<sch2[i].totalscore.all<<endl;
if(sch2[i].totalscore.all!=0)
{
cout<<"获前三名的项目:"<<endl;
for(j=0;j<m+w;j++)
{
if(sch2[i].game[j].grank!=0)
{
cout<<"编号"<<school[i].game[j].gnumber<<setw(14)<<"项目名称:"<<sch2[i].game[j].gname<<setw(10)
<<sch2[i].game[j].gscore<<"分"<<setw(8)<<"第"
<<sch2[i].game[j].grank<<"名"<<endl;
}
}
cout<<endl;
}
cout<<"*********************************************************"<<endl;
cout<<endl;
}
}
void Output_by_malescore(School school[])
{
int i,j;
School t;
School sch2[n];
for(i=0;i<n;i++) sch2[i]=school[i];
for(i=0;i<n;i++)
for(j=n-1;j>i;j--)
if(sch2[j].totalscore.male<sch2[j-1].totalscore.male)
{t=sch2[j];sch2[j]=sch2[j-1];sch2[j-1]=t;}
for(i=n-1;i>=0;i--)
{
cout<<"*********************************************************"<<endl;
cout<<"学校编号:"<<sch2[i].snumber<<setw(15)
<<"学校名称:"<<sch2[i].sname<<setw(15)
<<"男子总分:"<<sch2[i].totalscore.male<<endl;
if(sch2[i].totalscore.all!=0)
{
cout<<"获前三名的项目:"<<endl;
for(j=0;j<m+w;j++)
{
if(sch2[i].game[j].grank!=0)
{
cout<<"编号"<<school[i].game[j].gnumber<<setw(14)<<"项目名称:"<<sch2[i].game[j].gname<<setw(10)
<<sch2[i].game[j].gscore<<"分"<<setw(8)<<"第"
<<sch2[i].game[j].grank<<"名"<<endl;
}
}
cout<<endl;
}
cout<<"*********************************************************"<<endl;
cout<<endl;
}
}
void Output_by_femalescore(School school[])
{
int i,j;
School t;
School sch2[n];
for(i=0;i<n;i++) sch2[i]=school[i];
for(i=0;i<n;i++)
for(j=n-1;j>i;j--)
if(sch2[j].totalscore.female<sch2[j-1].totalscore.female)
{t=sch2[j];sch2[j]=sch2[j-1];sch2[j-1]=t;}
for(i=n-1;i>=0;i--)
{
cout<<"*********************************************************"<<endl;
cout<<"学校编号:"<<sch2[i].snumber<<setw(15)
<<"学校名称:"<<sch2[i].sname<<setw(15)
<<"女子总分:"<<sch2[i].totalscore.female<<endl;
if(sch2[i].totalscore.all!=0)
{
cout<<"获前三名的项目:"<<endl;
for(j=0;j<m+w;j++)
{
if(sch2[i].game[j].grank!=0)
{
cout<<"编号"<<school[i].game[j].gnumber<<setw(14)<<"项目名称:"<<sch2[i].game[j].gname<<setw(10)
<<sch2[i].game[j].gscore<<"分"<<setw(8)<<"第"
<<sch2[i].game[j].grank<<"名"<<endl;
}
}
cout<<endl;
}
cout<<"*********************************************************"<<endl;
cout<<endl;
}
}
void Search_by_schoolnumber(School school[])
{
int i,j,num1,num2,k=0;
cout<<"请输入要查询的学校编号:";
leap6:
cin>>num1;
for(i=0;i<n;i++)
{ if(school[i].snumber==num1)
{
k++;
cout<<"该学校为:"<<school[i].sname<<",请输入要查询的项目编号:";
cin>>num2;
for(j=0;j<m+w;j++)
{ if(school[i].game[j].gnumber==num2)
{
if(school[i].game[j].grank!=0)
{
cout<<"学校"<<school[i].sname<<"在项目"<<school[i].game[j].gname
<<"中分数为"<<school[i].game[j].gscore<<",获得第"<<school[i].game[j].grank<<"名。"<<endl;
}
else cout<<school[i].sname<<"在项目"<<school[i].game[j].gname<<"中没有获奖。"<<endl;
break;
}
}
break;
}
}
if(k==0)
{
cout<<"暂无该学校信息,请重新输入:";
goto leap6;
}
cout<<endl;
}
void Search_by_gamenumber(School school[])
{
int i,j,num1;
cout<<"请输入要查询的项目编号:";
leap7:
cin>>num1;
if(num1<1||num1>m+w)
{
cout<<"请输入有效编号:";
goto leap7;
}
for(i=0;i<n;i++)
{
for(j=0;j<m+w;j++)
{
if(school[i].game[j].gnumber==num1&&school[i].game[j].grank==1)
{ cout<<"第1名:"<<school[i].sname<<setw(12)<<"分数:"<<school[i].game[j].gscore<<endl;
break;
}
}
for(j=0;j<m+w;j++)
{
if(school[i].game[j].gnumber==num1&&school[i].game[j].grank==2)
{ cout<<"第2名:"<<school[i].sname<<setw(12)<<"分数:"<<school[i].game[j].gscore<<endl;
break;
}
}
for(j=0;j<m+w;j++)
{
if(school[i].game[j].gnumber==num1&&school[i].game[j].grank==3)
{ cout<<"第3名:"<<school[i].sname<<setw(12)<<"分数:"<<school[i].game[j].gscore<<endl;
break;
}
}
}
cout<<endl;
}
int main()
{
int choose,test=0;
School school[20];
read_from(n,m,w,test,school);
if(test==1)
{
cout<<"请输入男子比赛项目个数:";
cin>>m;
cout<<"请输入女子比赛项目个数:";
cin>>w;
cout<<"请输入学校个数:";
cin>>n;
int i,j;
for(i=0;i<n;i++)
{
cout<<"预设学校名称:";
cin>>school[i].sname;
school[i].snumber=i+1;
school[i].totalscore.all=0;
school[i].totalscore.female=0;
school[i].totalscore.male=0;
for(j=0;j<m+w;j++)
{
cout<<"预设项目名称:";
cin>>school[i].game[j].gname;
school[i].game[j].gnumber=j+1;
school[i].game[j].grank=0;
school[i].game[j].gscore=0;
}
}
test=0;
write_to(n,m,w,school);
}
while(1)
{
cout<<"***************************************************************"<<endl;
cout<<"-------------------------运动会分数统计------------------------"<<endl;
cout<<"----------------------1.输入项目前三名成绩---------------------"<<endl;
cout<<"----------------------2.按学校编号排序输出---------------------"<<endl;
cout<<"----------------------3.按学校总分排序输出---------------------"<<endl;
cout<<"----------------------4.按男子团体总分排序输出-----------------"<<endl;
cout<<"----------------------5.按女子团体总分排序输出-----------------"<<endl;
cout<<"----------------------6.查询学校情况---------------------------"<<endl;
cout<<"----------------------7.查询项目情况---------------------------"<<endl;
cout<<"----------------------0.返回上一级-----------------------------"<<endl;
cout<<"++++++++++++++++++++++请选择:";
leap1:
cin>>choose;
if(choose<0||choose>7)
{
cout<<"请输入0-7的数字:";
goto leap1;
}
else
{
switch(choose)
{
case 1:Imput_score(school);break;
case 2:Output_by_schoolnumber(school);break;
case 3:Output_by_schoolscore(school);break;
case 4:Output_by_malescore(school);break;
case 5:Output_by_femalescore(school);break;
case 6:Search_by_schoolnumber(school);break;
case 7:Search_by_gamenumber(school);break;
case 0:
default:cout<<"输入有误,请重新输入:"<<endl;goto leap1;
}
}
}
return 0;
}
仅作留档。