任务:参加运动会有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)规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称
输出形式:有合理的提示,各学校分数为整形 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;
比赛编号 | 获奖前(3/5)名 | 比赛名称 | 第一名 | 获奖人 | 第二名 | 获奖人 | 第三名 | 获奖人 | 第四名 | 获奖人 | 第五名 | 获奖人 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 3 | 篮球 | 清华大学 | 小华 | 北京大学 | 小明 | 中山大学 | 小韩 | ||||
2 | 3 | 足球 | 中山大学 | 小张 | 浙江大学 | 小周 | 清华大学 | 小华 | ||||
3 | 5 | 网球 | 北京大学 | 小明 | 山东大学 | 小李 | 上海大学 | 小赵 | 清华大学 | 小江 | 中山大学 | 小钱 |
4 | 5 | 体操 | 浙江大学 | 小孙 | 武汉大学 | 小常 | 清华大学 | 小花 | 北京大学 | 小丽 | 北理工 | 小龙 |
5 | 5 | 啦啦操 | 北理工 | 小龙 | 南京大学 | 小高 | 北理工 | 小刘 | 中山大学 | 小张 | 浙江大学 | 小何 |
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<map>
using namespace std;
int mark[6][7],n,m,w,per_num;
struct SCHOOL
{
char name[50];//学校名
int mark;//学校编号
int scores;//学校总成绩
int score_man;//男团总成绩
int score_woman;//女团总成绩
int rank_num[30][30];//在某项目中获得哪些名次
} school[105];
struct TEST
{
int top_num;//该项目取前几名
int mark;//项目编号
char name[50];//项目名称
char test_rank[6][50];//项目前几名是哪几个学校
char rank_name[6][50];//获奖人姓名
} test[105];
struct Person
{
char name[50];
char school_name[50];
int rank_honor[105][6];
} person[105];
map<string,int>mp,mp1;
int cmp1(struct SCHOOL aaa,struct SCHOOL bbb)
{
return aaa.mark<bbb.mark;
}
int cmp2(struct SCHOOL aaa,struct SCHOOL bbb)
{
return aaa.scores>bbb.scores;
}
int cmp3(struct SCHOOL aaa,struct SCHOOL bbb)
{
return aaa.score_man>bbb.score_man;
}
int cmp4(struct SCHOOL aaa,struct SCHOOL bbb)
{
return aaa.score_woman>bbb.score_woman;
}
void Sum()
{
for(int i=1; i<=n; i++)
{
school[i].scores=school[i].score_man+school[i].score_woman;
}
}
void Input()
{
int cnt=0,k,x,cnt1=0,k1;
char testname[50];
mp.clear();
mp1.clear();
for(int i=1; i<=w+m; i++)
{
printf("项目编号%d:%s:\n",test[i].mark,test[i].name);
for(int j=1; j<=test[i].top_num; j++)
{
printf(" 获得该项目第%d名的学校名:",j);
scanf("%s",test[i].test_rank[j]);
printf(" 获奖人姓名:");
scanf("%s",test[i].rank_name[j]);
if(mp1[test[i].rank_name[j]]==0)//新人名
{
mp1[test[i].rank_name[j]]=++cnt1;
k1=cnt1;
strcpy(person[k1].name,test[i].rank_name[j]);
strcpy(person[k1].school_name,test[i].test_rank[j]);
}
else
{
k1=mp1[test[i].rank_name[j]];
if(strcmp(person[k1].school_name,test[i].rank_name[j]))//重名
{
cnt1++;
int flag=0;
for(int ii=1; ii<cnt; ii++)//所有人
{
if(strcmp(person[ii].name,test[i].rank_name[j])==0&&strcmp(person[ii].school_name,test[i].test_rank[j])==0)
{
flag=1;
k1=mp1[test[i].rank_name[j]];
break;
}
}
if(flag==0)
{
cnt1++;
k1=cnt1;
strcpy(person[k1].name,test[i].rank_name[j]);
strcpy(person[k1].school_name,test[i].test_rank[j]);
}
}
}
person[k1].rank_honor[i][j]=1;
if(mp[test[i].test_rank[j]]==0)
{
mp[test[i].test_rank[j]]=++cnt;
strcpy(school[cnt].name,test[i].test_rank[j]);
school[cnt].mark=cnt;
k=cnt;
}
else
k=mp[test[i].test_rank[j]];
school[k].rank_num[i][j]=1;
if(i<=m)
school[k].score_man+=mark[test[i].top_num][j];
else
school[k].score_woman+=mark[test[i].top_num][j];
}