您的位置:首页 > 理论基础 > 数据结构算法

数据结构 运动会分数统计

2010-01-09 21:34 429 查看
#include<iostream> 
#include<string> 
#include<iomanip> 
#include<fstream>
using namespace std; 
int n; //n个学校 
int m; //m个男子项目 
int w; //w个女子项目 
struct pro //表示项目的结构体 

string name; //项目名称 
int snum[6]; //前3或5名学校的编号 
}p[21]; 
struct school //表示学校的结构体 

int num; 
string name; //学校名称 
int score; //学校总分 
int male; //男子总分 
int female; //女子总分 
}sch[21]; 
int qianwu[5]={7,5,3,2,1};//前五名得分 
int qiansan[3]={5,3,2}; //前三名得分
void input()  //输入前三或前五成绩

int i,j,y,x; 
printf("输入学校数目:"); 
y=0; 
while(1) 

scanf("%d",&n); 
if(n>=1&&n<=20)y=1; 
if(y)break; 
else printf("输入数据有误,请重新输入:"); 

for(i=1;i<=n;i++) 

printf("输入第%d个学校的名称:",i); 
cin>>sch[i].name; 
sch[i].score=0; 
sch[i].female=0; 
sch[i].male=0; 
sch[i].num=i; 

printf("输入男子项目数和女子项目数:"); 
y=0; 
while(1) 

scanf("%d,%d",&m,&w); 
if(m<=20&&m>=1&&w<=20&&w>=1)y=1; 
if(y)break; 
else printf("输入数据有误,请重新输入:"); 

for(i=1;i<=m;i++) 

printf("输入第%d个项目的名称:/n",i); 
cin>>p[i].name; 
printf("输入第%d个项目(男子)的前5名的学校编号:/n",i); 
for(j=1;j<=5;j++) 

y=0; 
while(1) 

scanf("%d",&x); 
if(x>=1&&x<=20)y=1; 
if(y)break; 
else printf("输入数据有误,请重新输入:"); 

p[i].snum[j]=x; 
sch[x].score+=qianwu[j-1]; 
sch[x].male+=qianwu[j-1]; 

}
for(i=m+1;i<=m+w;i++)

printf("输入第%d个项目(女子)的编号:/n",i); 
cin>>p[i].name;
printf("输入第%d个项目的前3名的学校编号:/n",i); 
for(j=1;j<=3;j++) 

y=0; 
while(1) 

scanf("%d",&x); 
if(x>=1&&x<=20)y=1; 
if(y)break; 
else printf("输入数据有误,请重新输入:"); 

p[i].snum[j]=x; 
sch[x].score+=qiansan[j-1]; 
sch[x].female+=qiansan[j-1]; 

}
 

void print(int i) 

cout<<sch[i].num<<setw(10)<<sch[i].name<<setw(8)<<sch[i].score<<setw(9) 
<<sch[i].male<<setw(10)<<sch[i].female<<endl; 

void bianhao() //按编号排序 

int i,j; 
school t; 
for(i=1;i<n;i++) 

for(j=i;j<=n;j++) 
if(sch[i].num>sch[j].num) 
{t=sch[i];sch[i]=sch[j];sch[j]=t;} 

printf("/n按编号排列:/n"); 
printf("编号 学校名称 总分 男子总分 女子总分/n"); 
for(i=1;i<=n;i++) 
print(i); 

void zongfen() //按学校总分排序 

int i,j; 
school t; 
for(i=1;i<n;i++) 

for(j=i;j<=n;j++) 
if(sch[i].score<sch[j].score) 
{t=sch[i];sch[i]=sch[j];sch[j]=t;} 

printf("/n按学校总分排列:/n"); 
printf("编号 学校名称 总分 男子总分 女子总分/n"); 
for(i=1;i<=n;i++) 
print(i); 
ofstream fout;
fout.open("运动会分数统计.txt"); 
fout<<"编号 学校名称 总分 男子总分 女子总分"<<endl;
for(i=1;i<=n;i++) 
{fout<<sch[i].num<<setw(13)<<sch[i].name<<setw(8)<<sch[i].score<<setw(9) 
<<sch[i].male<<setw(10)<<sch[i].female<<endl; }
fout.close();

void malezf() //按学校男总分排序 

int i,j; 
school t; 
for(i=1;i<n;i++) 

for(j=i;j<=n;j++) 
if(sch[i].male<sch[j].male) 
{t=sch[i];sch[i]=sch[j];sch[j]=t;} 

printf("/n按学校男子总分排列:/n"); 
printf("编号 学校名称 总分 男子总分 女子总分/n"); 
for(i=1;i<=n;i++) 
print(i); 

void femalezf() //按学校女总分排序 

int i,j; 
school t; 
for(i=1;i<n;i++) 

for(j=i;j<=n;j++) 
if(sch[i].female<sch[j].female) 
{t=sch[i];sch[i]=sch[j];sch[j]=t;} 

printf("/n按学校女子总分排列:/n"); 
printf("编号 学校名称 总分 男子总分 女子总分/n"); 
for(i=1;i<=n;i++) 
print(i); 
cout<<endl; 

void cxsch() //查询学校信息 

int i,y,s; 
printf("输入需要查询的学校编号:"); 
y=0; 
while(1) 

scanf("%d",&s); 
if(s>=1&&s<=n)y=1; 
if(y)break; 
else printf("输入数据有误,请重新输入:"); 

printf("该学校相关信息:/n"); 
printf("编号 学校名称 总分 男子总分 女子总分/n"); 
for(i=1;i<=n;i++) 

if(sch[i].num==s) 

print(i); 
break; 


cout<<endl; 

void cxxm() //查询项目信息 

int i,y,s; 
printf("输入需要查询的项目编号:"); 
y=0; 
while(1) 

scanf("%d",&s); 
if(s>=1&&s<=n)y=1; 
if(y)break; 
else printf("输入数据有误,请重新输入:"); 

cout<<p[s].name<<"前5名学校编号及名称为:"<<endl; 
printf("名次 编号 学校名称/n"); 
for(i=1;i<=5;i++) 
cout<<" "<<i<<" "<<p[s].snum[i]<<setw(12)<<sch[ p[s].snum[i] ].name<<endl; 
cout<<endl; 


void solve() //菜单函数

int z; 
while(1) 

printf("/n选择您需要的操作(选择序号):/n"); 
printf("1.按学校编号排序输出/n"); 
printf("2.按学校总分排序输出/n"); 
printf("3.按学校男总分排序输出/n"); 
printf("4.按学校女总分排序输出/n"); 
printf("5.查询某个学校成绩/n"); 
printf("6.查询某个项目成绩/n"); 
printf("7.结束/n/n"); 
scanf("%d",&z); 
if(z==1)bianhao(); 
if(z==2)zongfen(); 
if(z==3)malezf(); 
if(z==4)femalezf(); 
if(z==5)cxsch(); 
if(z==6)cxxm(); 
if(z==7)break; 


int main() //主函数

input(); 
solve(); 
return 0; 
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 ini input