C++实现歌手比赛评分系统

yizhihongxing

C++实现歌手比赛评分系统攻略

1. 系统概述

歌手比赛评分系统是通过为参赛歌手评分,来评选出优胜者的系统。系统主要由以下功能模块组成:

  • 参赛选手管理
  • 评委管理
  • 评分操作
  • 成绩计算
  • 排名显示

2. 系统设计

2.1 参赛选手管理

参赛选手信息包含选手编号、选手姓名等字段,可通过键盘输入或从文件中读取。可以使用结构体或类来表示选手信息,并使用数组、链表等数据结构对选手信息进行存储和管理。

示例:

struct Singer {
    int id;    // 选手编号
    string name;    // 选手姓名
    ...
};
Singer singers[MAX_SINGERS];    // 存储选手信息的数组

2.2 评委管理

评委的信息包含评委编号、评委姓名等字段,同样可以使用结构体或类来表示。

评分时一般需要多个评委给出分数,因此需要进行评委的信息管理和取得评委的评分。可以使用数组或链表等数据结构对评委信息进行存储和管理,在评分操作中通过遍历评委信息数组取得分数值。

示例:

struct Judge {
    int id;    // 评委编号
    string name;    // 评委姓名
    ...
};
Judge judges[MAX_JUDGES];    // 存储评委信息的数组

2.3 评分操作

对于每个选手,需要多个评委对其进行打分,可以通过键盘输入或从文件中读取评委给出的分数并计算平均分。

示例:

float GetAverageScore(float scores[], int length) {
    float sum = 0;
    for(int i=0; i<length; i++) {
        sum += scores[i];
    }
    return (float)(sum / length);
}
...
float scores[MAX_JUDGES];    // 存储评委分数的数组
for(int i=0; i<MAX_JUDGES; i++) {
    cin >> scores[i];
}
float avgScore = GetAverageScore(scores, MAX_JUDGES);

根据选手的得分情况,进行成绩计算和排名处理。

2.4 成绩计算和排名显示

根据选手的得分情况,计算选手的总分和平均分,然后根据总分或平均分进行排名,并将排名结果输出。

示例:

struct Result {
    int rank;    // 排名
    float totalScore;    // 总分
    ...
};
Result results[MAX_SINGERS];    // 每个选手的成绩信息
...
void CalculateResult() {
    for(int i=0; i<MAX_SINGERS; i++) {
        float avgScore = GetAverageScore(singers[i].scores, MAX_JUDGES);
        results[i].totalScore = 0.5 * singers[i].popularity + 0.5 * avgScore;
    }
    SortResultsByTotalScore(results);
    SetRankForResults(results);
}
...
void ShowResults() {
    for(int i=0; i<MAX_SINGERS; i++) {
        cout << results[i].rank << "\t" << 
                singers[results[i].id].id << "\t" << 
                singers[results[i].id].name << "\t" << 
                results[i].popularity << "\t" <<
                results[i].avgScore << "\t" <<
                results[i].totalScore << endl;
    }
}

3. 程序实现

程序实现要根据具体需求进行细节的设计和实现,可以根据系统设计中的模块进行功能实现。

例如,可以参考以下示例代码实现一个简单的“歌手比赛评分系统”:

#include <iostream>
#include <cstring>
using namespace std;

const int MAX_SINGERS = 100;
const int MAX_JUDGES = 5;

struct Singer {
    int id;
    string name;
    float scores[MAX_JUDGES];
    float popularity;
};
Singer singers[MAX_SINGERS];

struct Judge {
    int id;
    string name;
};
Judge judges[MAX_JUDGES];

struct Result {
    int id;
    int rank;
    float totalScore;
    float avgScore;
};
Result results[MAX_SINGERS];

int nSingers = 0;
int nJudges = 0;

float GetAverageScore(float scores[], int length) {
    float sum = 0;
    for(int i=0; i<length; i++) {
        sum += scores[i];
    }
    return (float)(sum / length);
}

void InputSingers() {
    cout << "Input number of singers: ";
    cin >> nSingers;
    for(int i=0; i<nSingers; i++) {
        cout << "Input singer name: ";
        cin >> singers[i].name;
        singers[i].id = i + 1;
        for(int j=0; j<MAX_JUDGES; j++) {
            cout << "Input score of judge " << j+1 << ": ";
            cin >> singers[i].scores[j];
        }
        cout << "Input popularity: ";
        cin >> singers[i].popularity;
    }
}

void InputJudges() {
    cout << "Input number of judges: ";
    cin >> nJudges;
    for(int i=0; i<nJudges; i++) {
        cout << "Input judge name: ";
        cin >> judges[i].name;
        judges[i].id = i + 1;
    }
}

void CalculateResult() {
    for(int i=0; i<nSingers; i++) {
        float avgScore = GetAverageScore(singers[i].scores, nJudges);
        results[i].id = singers[i].id;
        results[i].avgScore = avgScore;
        results[i].totalScore = 0.5 * singers[i].popularity + 0.5 * avgScore;
    }
    for(int i=0; i<nSingers-1; i++) {
        for(int j=0; j<nSingers-(i+1); j++) {
            if(results[j].totalScore < results[j+1].totalScore) {
                swap(results[j], results[j+1]);
            }
        }
    }
    results[0].rank = 1;
    for(int i=1; i<nSingers; i++) {
        if(results[i].totalScore == results[i-1].totalScore) {
            results[i].rank = results[i-1].rank;
        }
        else {
            results[i].rank = i + 1;
        }
    }
}

void ShowResults() {
    cout << "Rank\tID\tName\tScore\tPopularity\tTotal\n";
    for(int i=0; i<nSingers; i++) {
        cout << results[i].rank << "\t" << 
                singers[results[i].id-1].id << "\t" << 
                singers[results[i].id-1].name << "\t" << 
                results[i].avgScore << "\t" << 
                singers[results[i].id-1].popularity << "\t" <<
                results[i].totalScore << endl;
    }
}

int main() {
    InputSingers();
    InputJudges();
    CalculateResult();
    ShowResults();
    return 0;
}

该程序通过键盘输入选手和评委信息,然后计算选手得分并进行排名,最终输出排名结果。

4. 总结

本文详细讲解了“C++实现歌手比赛评分系统”的完整攻略,包括系统设计和程序实现两个部分。通过参考本文内容,读者可以自行实现一个歌手比赛评分系统,并进行适当的功能扩展。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现歌手比赛评分系统 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言 字符串指针详解及示例代码

    C语言 字符串指针详解及示例代码 什么是字符串指针? 在C语言中,字符串指针通常用来存储字符串的地址,字符串指针变量以及字符串变量有所不同:字符串变量是进行字符串内容及长度操作的,而字符串指针变量不同,它仅存储字符串的地址,这意味着字符串指针变量可以指向不同的字符串。 字符串指针变量的声明方式: char *stringPointer; 字符串指针的赋值 字…

    C 2023年5月24日
    00
  • C++如何实现二叉树链表

    C++可以通过定义结构体来表示二叉树链表节点,结构体中包含左右子节点指针和数据域。通过指针来实现二叉树的构建和遍历。 以下是具体的实现步骤: 1. 定义结构体 首先我们需要定义一个结构体来表示二叉树链表节点,结构体定义如下: struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNod…

    C 2023年5月23日
    00
  • C++继承的定义与注意事项

    C++继承的定义 C++中的继承是指一个类可以从另一个类中继承属性和行为。被继承的类称为父类或基类,继承的类称为派生类或子类。 在C++中,使用冒号符号来进行继承,语法如下: class 子类名 : 访问修饰符 基类 { //子类的其他内容 }; 其中,访问修饰符可以是public、protected或private,用来决定派生类继承来的基类成员的访问权限…

    C 2023年5月22日
    00
  • js操作两个json数组合并、去重,以及删除某一项元素

    合并两个 JSON 数组 合并两个 JSON 数组可以通过 concat() 方法来实现,该方法将两个数组合并,并返回一个新的数组,同时保留原数组的数据不变。示例代码如下: const arr1 = [{ id: 1, name: ‘John’ }, { id: 2, name: ‘Jane’ }]; const arr2 = [{ id: 3, name:…

    C 2023年5月23日
    00
  • 怎么解决应用程序发生异常 未知的软件异常 (0xc0000409),位置为0x00409b14的问题

    解决应用程序发生异常未知的软件异常(0xc0000409)是一个比较常见的问题,下面详细讲解解决这个问题的完整攻略。 问题原因分析 应用程序发生异常未知的软件异常(0xc0000409)是由于应用程序所调用的未知的软件异常导致的。这个异常通常是由于应用程序错误、病毒或者不兼容的驱动程序引起的。 解决方案 方案一:升级应用程序 如果出现了应用程序发生异常未知的…

    C 2023年5月23日
    00
  • C语言实现三子棋的示例代码

    以下是“C语言实现三子棋的示例代码”的完整攻略: C语言实现三子棋的示例代码 简介 三子棋是一种简单的两人游戏,游戏过程中两个选手分别执黑白两色棋子,轮流落子于棋盘上,先将自己的棋子在横、竖、斜方向上连成三个直线即获胜。 本篇文章将以C语言编写三子棋游戏为例,为大家详细讲解示例代码和相关思路。 示例代码实现思路 本示例代码中,我们将采用控制台输出的方式进行界…

    C 2023年5月23日
    00
  • Swift Json实例详细解析

    Swift Json实例详细解析 在 Swift 中,使用 JSON 数据是很常见的操作之一。本篇文章将带领大家学习如何在 Swift 中处理 JSON 数据。 1. 获取 JSON 数据 通常情况下,我们需要将服务端返回的 JSON 数据进行处理和解析,以方便在客户端呈现。我们可以使用 URLSession、Alamofire、SwiftyJSON 等工具…

    C 2023年5月23日
    00
  • C++文件读写代码分享

    C++文件读写代码分享 在C++中,可以通过文件读写来实现将程序处理过的数据存储起来,或者是从外部文件读取数据。本文将介绍C++中文件读写的相关内容,包括文件的打开、读写、关闭等操作,同时提供两个示例供参考。 文件的打开与关闭 文件的打开与关闭是文件读写操作的前提,只有先打开文件,才能够进行文件的读写,读写完成后,还要关闭文件,以释放文件系统资源。 打开文件…

    C 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部