C++课程设计之大赛评分系统

#include <iostream>
#include<iomanip>
#include<cmath>
using namespace std;
#define ATHLETE 40
#define JUDGE 20 
//全局
int j,n,m;
int sh[ATHLETE];
int ph[JUDGE];
float sf[ATHLETE];
float pf[JUDGE];
float f[ATHLETE][JUDGE];
class mark {

   

public:
    
    void menu();//显示菜单函数
    void add();//录入选手,评委人数
    void CountAthleteScore(int sh[], float sf[], int n, float f[], int m);
    void Sort(int h[], float f[], int n);
    void Print(int h[], float f[], int n);
    void CountJudgeScore(int ph[], float pf[], int m, float sf[], float f[], int n);

};

void mark::menu() {
    cout << "---------欢迎使用评委评分系统---------" << endl;
    cout << "-------1.录入参赛选手评委人数-------" << endl;
    cout << "-------2.统计参赛选手得分数据-------" << endl;
    cout << "-------3.显示评委打分情况数据-------" << endl;
    cout << "-------4.显示选手最终成绩排名-------" << endl;
    cout << "-------0.退出评委评分系统程序-------" << endl;
}


int main() {
   
    int select;//定义选择变量

    mark M;
    while (true)
    {
        M.menu();
        cout << "请选择菜单序号:" << endl;
        cin >> select;

        switch (select)
        {
        case 1:  //录入参赛选手评委人数
            M.add();
            break;
        case 2:  //统计参赛选手得分数据
            M.CountAthleteScore(sh, sf,n, *f, m);
            break;
        case 3:  //显示评委打分情况数据
            M.Sort(sh, sf, n);
            M.Print(sh, sf, n);
            break;
        case 4:  //显示选手最终成绩排名
            M.CountJudgeScore(ph, pf, m, sf, *f, n);
            break;
        case 0:
            cout << "欢迎使用评委评分系统" << endl;
            system("pause");
            return 0;
            break;
        default:
            break;
        }
    }

    return 0;
   
}
void mark::add() {
    mark M;
    cout << "请输入选手的人数"; 
    cin >> n;
    cout << "请输入评委人数数(大于等于3人)";
    cin >> m;
    for (int j = 1; j <= m; j++)
    {
        ph[j] = j;
    }
}
void mark::CountAthleteScore(int sh[], float sf[], int n, float f[], int m)
{
    int i, j; float max, min;
    mark M;
    for (i = 1; i <= n; i++)
    {
        cout << "\n选手" << i << "正在参赛中";
        cout << "\n";
        cout << "\n请输入这个选手的编号:";
        cin >> sh[i]; sf[i] = 0;
        max = 0; min = 100;
        for (j = 1; j <= m; j++)
        {
            cout << "评委 " << j << " 给分:";
            cin >> f[i * m + j];
            sf[i] = sf[i] + f[i * m + j];
            if (max < f[i * m + j])
            {               
                max = f[i * m + j];
            }               
            if (min > f[i * m + j])
            {               
                min = f[i * m + j];
            }
        }
        cout << "去掉一个最高分:" << max << endl;
        cout << "去掉一个最低分:" << min << endl;
        sf[i] = (sf[i] - max - min) / (m - 2);
        cout << "选手" << sh[i] << "最后得分是" << sf[i] << endl;
    }
}
void mark::Sort(int h[], float f[], int n)
{
    int i, j, k, temp2;
    float temp1;
    mark M;
    for (i = 1; i <= n - 1; i++)
    {
        k = i;
        for (j = i + 1; j <= n; j++)
        {
            if (f[j] > f[k])
                k = j;
        }
        if (k != i)
        {
            temp1 = f[k];
            f[k] = f[i];
            f[i] = temp1;
            temp2 = h[k];
            h[k] = h[i];
            h[i] = temp2;
        }
    }
}
void mark::Print(int h[], float f[], int n)
{
    int i;
    mark M;
    cout << "编号\t最后得分\t名次\n";
    for (i = 1; i <= n; i++)
    {
        cout << std::left << setw(6) << h[i] << "\t" << setw(11) << f[i] << "\t" << setw(5) << i << endl;
    }
}
void mark::CountJudgeScore(int ph[], float pf[], int m, float sf[], float f[], int n)
{
    int i, j;
    mark M;
    for (j = 1; j <= m; j++)
    {
        pf[j] = 0;
        for (i = 1; i <= n; i++)
        {
            pf[j] = pf[j] + (f[i * m + j] - sf[i]) * (f[i * m + j] - sf[i]);
        }
        pf[j] = 10 - sqrt(pf[j] / n);
        cout << "评委" << j << "打分:" << pf[j] << endl;
    }
}

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值