1、概述
任务:参加运动会有 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) 规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称
输出形式:有中文提示,各学校分数为整形
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相
关的功能要求。
存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数
据要存储在数据文件中。
1
2、概要设计
首先定义结构体 struct pro、struct school,将学校和项目的信息,如项目名称、
前 5 名学校的编号、学校名称、学校总分、男子总分、女子总分等信息分别定义
进结构体中。再定义输出函数,分别按学校编号、学校总分、男子总分、女子总
分顺序输出。之后定义菜单函数,选择序号执行需要的操作,从而查询各项信息。
开始
主函数
输入信息
统计分数
根据菜单实
现选择操作
输出信息
排 序
具体操作
2
主要函数:
void input() 输入学校数目、学校名称、男子项目数和女子项目数、项目的
名称以及每个项目前 5 名的学校编号
流程图:
开 始
输入学校数目
输入数据有误,
请重新输入
n>=1&&n<=20
输入第 i 个学校的名称
输入男子项目数和女子项目数
输入数据有误,
请重新输入
m<=20&&m>=1&&w<=20
&&w>=1)
i=1;i<=m+w;i++
输入第 i 个项目的名称
输入第 i 个项目的
前 5 名的学校编号
结束
3
定义菜单函数,根据菜单提示,可以完成相关的功
void solve()
能要求
流程图:
开始
Z=1
按学校编号顺序输出
Z=2
按学校总分顺序输出
Z=3
按男子总分顺序输出
Z=4
按女子总分顺序输出
Z=5
Z=6
输入学校编号,
查询学校信息
输入项目编号,
查询项目信息
Z=7
BREAK
4
3、程序代码:
#include
#include
#include
#include
using namespace std;
int n; //n 个学校
int m; //m 个男子项目
int w; //w 个女子项目
struct pro //表示项目的结构体
{
string name; //项目名称
int snum[6]; //前 5 名学校的编号
}p[21];
struct school //表示学校的结构体
{
int num;
string name; //学校名称
int score; //学校总分
int male; //男子总分
int female; //女子总分
}sch[21];
int integral[5]={7,5,3,2,1};//前五名得分
void input()
{
int i,j,y,x;
printf("输入学校数目:");
y=0;
5
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+w;i++)
{
printf("输入第%d 个项目的名称:\n",i);
cin>>p[i].name;
6
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+=integral[j-1];
if(i<=m)sch[x].male+=integral[j-1];
else sch[x].female+=integral[j-1];
}
}
}
void print(int i)
{
cout<
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