运动会分数统计——C语言数据结构题目

C语言数据结构题目
1、问题描述
参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)
2、 要求
(1) 可以输入各个项目的前三名或前五名的成绩;
(2) 能统计各学校总分;
(3) 可以按学校编号、学校总分、男女团体总分排序输出;
(4) 可以按学校编号查询学校某个项目的情况;
(5) 可以按项目编号查询取得前三或前五名的学校。
规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)
输出形式:有中文提示,各学校分数为整数
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。

代码如下↓
|
|
|
|
|
|
|
|

#include<iostream> 
#include<string> 
#include<iomanip> 
#include<fstream>

using namespace std;

int n; //学校 
int m; //男子项目 
int w; //女子项目 

struct pro
{
    string name; //学校名称 
    int schoolnum[5]; //前5名学校的编号
    int schoolnumy[3]; //前3名学校的编号
}p[21];

struct school     //表示学校的结构体 
{
    int num;
    string name; //学校名称 
    int score;   //学校总分 
    int male;    //男子总分 
    int female;  //女子总分 
}sch[21];
//前五得分、前三得分
int integral[5] = { 7,5,3,2,1 };
int integraly[3] = { 7,5,3 };

void input()
{
    int i, j, y, x, q;
    printf("输入学校数目:");
    y = 0;
    while (1)
    {
        scanf_s("%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_s("%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;
        printf("该项目取前三名选0,取前5名选1:");
        scanf_s("%d", &q);
        if (q == 1)
        {
            printf("输入第%d个项目的前5名的学校编号:\n", i);
            for (j = 1; j <= 5; j++)
            {
                y = 0;
                while (1)
                {
                    scanf_s("%d", &x); //学校编号 
                    if (x >= 1 && x <= 20)y = 1;
                    if (y)break;
                    else printf("输入数据有误,请重新输入:");
                }
                p[i].schoolnum[j] = x; //给项目结构体的成员赋值 
                sch[x].score += integral[j - 1]; //给学校结构体成员赋值 
                if (i <= m)sch[x].male += integral[j - 1]; //学校结构体赋值,男子总分
                else sch[x].female += integral[j - 1]; //学校结构体赋值,女子总分 
            }
        }
        if (q == 0)
        {
            printf("输入第%d个项目的前3名的学校编号:\n", i);
            for (j = 1; j <= 3; j++)
            {
                y = 0;
                while (1)
                {
                    scanf_s("%d", &x); //学校编号 
                    if (x >= 1 && x <= 20)y = 1;
                    if (y)break;
                    else printf("输入数据错误,请重新输入:");
                }
                p[i].schoolnumy[j] = x;                //给项目结构体的成员赋值 
                sch[x].score += integraly[j - 1]; //给学校结构体成员赋值 
                if (i <= m)sch[x].male += integraly[j - 1]; //学校结构体赋值 
                else sch[x].female += integraly[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_s("%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, v;
    printf("输入需要查询的项目编号:");
    y = 0;
    while (1)
    {
        scanf_s("%d", &s);
        if (s >= 1 && s <= n)y = 1;
        if (y)break;
        else printf("输入数据有误,请重新输入:");
    }
    printf("该项目取的前三名选0,取的前5名选1: ");
    scanf_s("%d", &v);
    if (v == 1)
    {
        cout << p[s].name << "前5名学校编号及名称为:" << endl;
        printf("名次 编号 学校名称\n");
        for (i = 1; i <= 5; i++)
            cout << " " << i << "    " << p[s].schoolnum[i] << setw(12) << sch[p[s].schoolnum[i]].name << endl;
    }
    if (v == 0)
    {
        cout << p[s].name << "前3名学校编号及名称为:" << endl;
        printf("名次 编号 学校名称\n");
        for (i = 1; i <= 3; i++)
            cout << " " << i << "    " << p[s].schoolnumy[i] << setw(12) << sch[p[s].schoolnumy[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_s("%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;
}

[问题描述] 参加运动会有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)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称) 输出形式:有中文提示,各学校分数为整形   界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构; 测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值