问题描述:参加运动会有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) 可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校; 5) 数据存入文件并能随时查询; 6) 规定:输入数据形式和范围:可以输
入学校的名称,运动项目的名称
源代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <cstdlib>
#define n0 20 /*学校最大数目*/
#define m0 20 /*男子项目最大数目*/
#define w0 20 /*女子项目最大数目*/
typedef struct itemnode
{
int item[m0+w0+5][n0+1];
//item[1][0]-item[m0+w0][0] 存放项目编号
//item[0][1]-item[0][n] 存放学校编号
//item[1][]-item[m0][] 存放男子各项目成绩
//item[m0+1][]-item[m0+w0][]存放女子各项目成绩
//item[m0+w0+1][]存放男子各项目总成绩
//item[m0+w0+2][]存放女子各项目总成绩
//item[m0+w0+3][]存放学校各项目总成绩
//item[m0+w0+4][]存放学校按总分排序的名次
}itemnode; /*存放信息*/
int main()
{
int n,m,w;
printf(" 北京信息科技大学运动会分数统计系统 \n");
printf("\t\t\t欢迎使用\t\t\t\t\n\n");
printf("该系统实现的功能有:\n");
printf(" 1.可以输入各个项目的前三名或前五名的成绩;\n");
printf(" 2.能统计各学校总分;\n");
printf(" 3.可以按学校编号、学校总分、男女团体总分排序输出;\n");
printf(" 4.可以按学校编号查询取得前三或者前五名的学校。\n");
printf("实现功能2、3、4的前提是先录入信息!\n");
printf("请先输入运动会主要信息\n"); /*设计运动会主要数据个数*/
printf("输入学校个数:");
scanf("%d",&n);
printf("输入男子项目个数:");
scanf("%d",&m);
printf("输入女子项目个数:");
scanf("%d",&w);
int c;
int i,j;
struct itemnode a;
for(i=1;i<n+1;i++)
{
printf("请输入第%d个学校编号:",i);
scanf("%d",&a.item[0][i]);
printf("\n");
}
for(j=1;j<m+1;j++)
{
printf("请输入第%d个男子项目编号:",j);
scanf("%d",&a.item[j][0]);
printf("\n");
}
for(j=m+1;j<m+w+1;j++)
{
printf("请输入第%d个女子项目编号:",j-m);
scanf("%d",&a.item[j][0]);
printf("\n");
}
for(i=1;i<n+1;i++)
{
for(j=1;j<m+1;j++)
{
printf("请输入第%d个学校第%d个男子项目成绩:",i,j);
scanf("%d",&a.item[j][i]);
printf("\n");
}
for(j=m+1;j<m+w+1;j++)
{
printf("请输入第%d个学校第%d个女子项目成绩:",i,j-m);
scanf("%d",&a.item[j][i]);
printf("\n");
}
}
for(i=1;i<n+1;i++)
{
a.item[m+w+1][i]=0;
a.item[m+w+2][i]=0;
a.item[m+w+3][i]=0;
a.item[m+w+4][i]=0;
}
//下面计算各学校、各学校男子、女子项目总分
for(i=1;i<n+1;i++)
{
for(j=1;j<m+w+1;j++)
{
a.item[m+w+3][i]+=a.item[j][i];//学校项目总分
}
}
for(i=1;i<n+1;i++)
{
for(j=1;j<m+1;j++)
{
a.item[m+w+1][i]+=a.item[j][i];//男子项目总分
}
}
for(i=1;i<n+1;i++)
{
for(j=m+1;j<m+w+1;j++)
{
a.item[m+w+2][i]+=a.item[j][i];//女子项目总分
}
}
printf("****************************************排序输出*************************************\n");
//插入排序啦 很简单的
int temp,temp1;
int xu;
for(i=2;i<n+1;i++)
{
temp=a.item[m+w+3][i];
for(j=i-1;j>=1&&temp>a.item[m+w+3][j];j--)//寻找插入位置
{
a.item[m+w+3][j+1]=a.item[m+w+3][j];//交换总分列
for(xu=0;xu<m+w+4;xu++)
{
if(xu!=m+w+3)//除了总分那一列不交换 其他的都交换 因为总分的那一列在上面交换
{
temp1=a.item[xu][j+1];
a.item[xu][j+1]=a.item[xu][j];
a.item[xu][j]=temp1;
}
}
}
a.item[m+w+3][j+1]=temp;//小鱼于当前值的,插到当前值后面
}
//赋值名次
for(i=1;i<n+1;i++)
{
a.item[m+w+4][i]=i;
}
for(i=0;i<n+1;i++)
{
for(j=0;j<w+m+5;j++)
{
if(i==0)
{
if(j==0)
{
printf("\t");
}
else if(j>=1&&j<m+1)
{
printf("男子项目%d\t",a.item[j][i]);
}
else if(j>=m+1&&j<m+w+1)
{
printf("女子项目%d\t",a.item[j][i]);
}
else if(j==m+w+1)
{
printf("男子项目总成绩\t");
}
else if(j==m+w+2)
{
printf("女子项目总成绩\t");
}
else if(j==m+w+3)
{
printf("学校总成绩\t");
}
else if(j==m+w+4)
{
printf(" 名次\t");
}
}
else if(j==0)
{
if(i!=0)
{
printf("学校%d\t",a.item[j][i]);
}
}
else
{
printf(" %d\t\t",a.item[j][i]);
}
}
printf("\n");
}
int s;
printf("\t\t*******1.按学校总分排序输出*******\n");
printf("\t\t*******2.按学校编号输出*******\n");
printf("\t\t*******3.按男团总分排序输出*******\n");
printf("\t\t*******4.按女团总分排序输出*******\n");
printf("\n\n");
printf("请选择要实现输出功能的编号(1——4):");
scanf("%d",&s);
switch(s)
{
case 1:
{
for(i=0;i<n+1;i++)
{
for(j=0;j<w+m+5;j++)
{
if(i==0)
{
if(j==0)
{
printf("\t");
}
else if(j>=1&&j<m+1)
{
printf("男子项目%d\t",a.item[j][i]);
}
else if(j>=m+1&&j<m+w+1)
{
printf("女子项目%d\t",a.item[j][i]);
}
else if(j==m+w+1)
{
printf("男子项目总成绩\t");
}
else if(j==m+w+2)
{
printf("女子项目总成绩\t");
}
else if(j==m+w+3)
{
printf("学校总成绩\t");
}
else if(j==m+w+4)
{
printf(" 名次\t");
}
}
else if(j==0)
{
if(i!=0)
{
printf("学校%d\t",a.item[j][i]);
}
}
else
{
printf(" %d\t\t",a.item[j][i]);
}
}
printf("\n");
}
}break;
case 2:
{ //学校编号排序
for(i=2;i<n+1;i++)
{
temp=a.item[0][i];
for(j=i-1;j>=1&&temp<a.item[0][j];j--)//寻找插入位置
{
a.item[0][j+1]=a.item[0][j];//交换学校列
for(xu=0;xu<m+w+5;xu++)
{
if(xu!=0)//除了学校那一列不交换 其他的都交换 因为学校的那一列在上面交换
{
temp1=a.item[xu][j+1];
a.item[xu][j+1]=a.item[xu][j];
a.item[xu][j]=temp1;
}
}
}
a.item[0][j+1]=temp;//小鱼于当前值的,插到当前值后面
}
for(i=0;i<n+1;i++)
{
for(j=0;j<w+m+5;j++)
{
if(i==0)
{
if(j==0)
{
printf("\t");
}
else if(j>=1&&j<m+1)
{
printf("男子项目%d\t",a.item[j][i]);
}
else if(j>=m+1&&j<m+w+1)
{
printf("女子项目%d\t",a.item[j][i]);
}
else if(j==m+w+1)
{
printf("男子项目总成绩\t");
}
else if(j==m+w+2)
{
printf("女子项目总成绩\t");
}
else if(j==m+w+3)
{
printf("学校总成绩\t");
}
else if(j==m+w+4)
{
printf(" 名次\t");
}
}
else if(j==0)
{
if(i!=0)
{
printf("学校%d\t",a.item[j][i]);
}
}
else
{
printf(" %d\t\t",a.item[j][i]);
}
}
printf("\n");
}
};break;
case 3:
{
for(i=2;i<n+1;i++)
{
temp=a.item[m+w+1][i];
for(j=i-1;j>=1&&temp>a.item[m+w+1][j];j--)//寻找插入位置
{
a.item[m+w+1][j+1]=a.item[m+w+1][j];//交换男子总分列
for(xu=0;xu<m+w+5;xu++)
{
if(xu!=m+w+1)//除了男子总分那一列不交换 其他的都交换 因为男子总分的那一列在上面交换
{
temp1=a.item[xu][j+1];
a.item[xu][j+1]=a.item[xu][j];
a.item[xu][j]=temp1;
}
}
}
a.item[m+w+1][j+1]=temp;//小鱼于当前值的,插到当前值后面
}
for(i=0;i<n+1;i++)
{
for(j=0;j<w+m+5;j++)
{
if(i==0)
{
if(j==0)
{
printf("\t");
}
else if(j>=1&&j<m+1)
{
printf("男子项目%d\t",a.item[j][i]);
}
else if(j>=m+1&&j<m+w+1)
{
printf("女子项目%d\t",a.item[j][i]);
}
else if(j==m+w+1)
{
printf("男子项目总成绩\t");
}
else if(j==m+w+2)
{
printf("女子项目总成绩\t");
}
else if(j==m+w+3)
{
printf("学校总成绩\t");
}
else if(j==m+w+4)
{
printf(" 名次\t");
}
}
else if(j==0)
{
if(i!=0)
{
printf("学校%d\t",a.item[j][i]);
}
}
else
{
printf(" %d\t\t",a.item[j][i]);
}
}
printf("\n");
}
}break;
case 4:
{
for(i=2;i<n+1;i++)
{
temp=a.item[m+w+2][i];
for(j=i-1;j>=1&&temp>a.item[m+w+2][j];j--)//寻找插入位置
{
a.item[m+w+2][j+1]=a.item[m+w+2][j];//交换女子总分列
for(xu=0;xu<m+w+5;xu++)
{
if(xu!=m+w+2)//除了女子总分那一列不交换 其他的都交换 因为女子总分的那一列在上面交换
{
temp1=a.item[xu][j+1];
a.item[xu][j+1]=a.item[xu][j];
a.item[xu][j]=temp1;
}
}
}
a.item[m+w+2][j+1]=temp;//小鱼于当前值的,插到当前值后面
}
for(i=0;i<n+1;i++)
{
for(j=0;j<w+m+5;j++)
{
if(i==0)
{
if(j==0)
{
printf("\t");
}
else if(j>=1&&j<m+1)
{
printf("男子项目%d\t",a.item[j][i]);
}
else if(j>=m+1&&j<m+w+1)
{
printf("女子项目%d\t",a.item[j][i]);
}
else if(j==m+w+1)
{
printf("男子项目总成绩\t");
}
else if(j==m+w+2)
{
printf("女子项目总成绩\t");
}
else if(j==m+w+3)
{
printf("学校总成绩\t");
}
else if(j==m+w+4)
{
printf(" 名次\t");
}
}
else if(j==0)
{
if(i!=0)
{
printf("学校%d\t",a.item[j][i]);
}
}
else
{
printf(" %d\t\t",a.item[j][i]);
}
}
printf("\n");
}
}break;
}
//下面为查询模块
printf("**************************************查询模块***********************************\n");
int bianhao;
printf("请输入要查询的学校编号:");
scanf("%d",&bianhao);
printf("\n");
for(i=1;i<n+1;i++)
{
if(a.item[0][i]==bianhao)
{
printf("该学校的各项成绩及各项总分和名次如下:\n");
for(j=0;j<m+w+5;j++)
{
if(j==0)
{
printf("\t");
}
else if(j>=1&&j<m+1)
{
printf("男子项目%d\t",a.item[j][0]);
}
else if(j>=m+1&&j<m+w+1)
{
printf("女子项目%d\t",a.item[j][0]);
}
else if(j==m+w+1)
{
printf("男子项目总成绩\t");
}
else if(j==m+w+2)
{
printf("女子项目总成绩\t");
}
else if(j==m+w+3)
{
printf("学校总成绩\t");
}
else if(j==m+w+4)
{
printf(" 名次\t");
}
}
printf("\n");
for(j=0;j<w+m+5;j++)
{
if(j==0)
{
printf("学校%d\t",a.item[0][i]);
}
else
{
printf(" %d\t\t",a.item[j][i]);
}
}
}
}
printf("\n");
int bianhao1;
printf("请输入要查询的项目编号:");
scanf("%d",&bianhao1);
printf("\n");
for(i=2;i<n+1;i++)
{
temp=a.item[m+w+3][i];
for(j=i-1;j>=1&&temp>a.item[m+w+3][j];j--)//寻找插入位置
{
a.item[m+w+3][j+1]=a.item[m+w+3][j];//交换总分列
for(xu=0;xu<m+w+5;xu++)
{
if(xu!=m+w+3)//除了总分那一列不交换 其他的都交换 因为总分的那一列在上面交换
{
temp1=a.item[xu][j+1];
a.item[xu][j+1]=a.item[xu][j];
a.item[xu][j]=temp1;
}
}
}
a.item[m+w+3][j+1]=temp;//小鱼于当前值的,插到当前值后面
}
int s2;
printf("请输入要查询该项目名次的个数(3或5):");
scanf("%d",&s2);
switch(s2)
{
case 3:
{
for(j=1;j<m+w+1;j++)
{
if(a.item[j][0]==bianhao1)
{
for(i=1;i<4;i++)
{
printf("学校%d\t",a.item[0][i]);
printf("项目%d 成绩:%d\t",a.item[j][0],a.item[j][i]);
printf("\n");
}
}
}
}break;
case 5:
{
for(j=1;j<m+w+1;j++)
{
if(a.item[j][0]==bianhao1)
{
for(i=1;i<6;i++)
{
printf("学校%d\t",a.item[0][i]);
printf("项目%d 成绩:%d\t",a.item[j][0],a.item[j][i]);
printf("\n");
}
}
}
}break;
}
return 0;
}