数据结构(运动会分数统计)

任务:参加运动会有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];

        }
        
  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值