C语言如何实现歌手比赛系统

发布时间:2022-05-30 13:44:13 作者:iii
来源:亿速云 阅读:345

C语言如何实现歌手比赛系统

歌手比赛系统是一个用于管理歌手比赛信息的应用程序,它可以帮助评委、选手和观众更好地参与比赛。本文将介绍如何使用C语言实现一个简单的歌手比赛系统。

1. 系统功能需求

在开始编写代码之前,我们需要明确系统的基本功能需求。一个简单的歌手比赛系统通常包括以下功能:

  1. 选手信息管理:包括选手的姓名、编号、年龄、性别等基本信息。
  2. 评委打分:评委可以为每位选手打分,通常会有多个评委,最终得分为去掉最高分和最低分后的平均分。
  3. 成绩排名:根据选手的得分进行排名,并显示排名结果。
  4. 数据存储与读取:可以将选手信息和比赛结果保存到文件中,并可以从文件中读取数据。

2. 数据结构设计

为了实现上述功能,我们需要设计合适的数据结构来存储选手信息和评委打分。

#define MAX_JUDGES 5  // 假设有5位评委
#define MAX_CONTESTANTS 100  // 假设最多有100位选手

typedef struct {
    int id;
    char name[50];
    int age;
    char gender;
    float scores[MAX_JUDGES];
    float finalScore;
} Contestant;

3. 主要功能实现

3.1 选手信息录入

首先,我们需要实现一个函数来录入选手的基本信息。

void inputContestantInfo(Contestant *contestant) {
    printf("Enter contestant ID: ");
    scanf("%d", &contestant->id);
    printf("Enter contestant name: ");
    scanf("%s", contestant->name);
    printf("Enter contestant age: ");
    scanf("%d", &contestant->age);
    printf("Enter contestant gender (M/F): ");
    scanf(" %c", &contestant->gender);
}

3.2 评委打分

接下来,我们需要实现一个函数来录入评委的打分。

void inputScores(Contestant *contestant) {
    printf("Enter scores for contestant %s:\n", contestant->name);
    for (int i = 0; i < MAX_JUDGES; i++) {
        printf("Judge %d: ", i + 1);
        scanf("%f", &contestant->scores[i]);
    }
}

3.3 计算最终得分

为了计算选手的最终得分,我们需要去掉一个最高分和一个最低分,然后计算剩余分数的平均值。

void calculateFinalScore(Contestant *contestant) {
    float sum = 0;
    float min = contestant->scores[0];
    float max = contestant->scores[0];

    for (int i = 0; i < MAX_JUDGES; i++) {
        sum += contestant->scores[i];
        if (contestant->scores[i] < min) min = contestant->scores[i];
        if (contestant->scores[i] > max) max = contestant->scores[i];
    }

    contestant->finalScore = (sum - min - max) / (MAX_JUDGES - 2);
}

3.4 成绩排名

为了对选手进行排名,我们可以使用简单的排序算法(如冒泡排序)来根据最终得分对选手进行排序。

void sortContestants(Contestant contestants[], int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (contestants[j].finalScore < contestants[j + 1].finalScore) {
                Contestant temp = contestants[j];
                contestants[j] = contestants[j + 1];
                contestants[j + 1] = temp;
            }
        }
    }
}

3.5 数据存储与读取

最后,我们需要实现将选手信息和比赛结果保存到文件中,并可以从文件中读取数据。

void saveToFile(Contestant contestants[], int n, const char *filename) {
    FILE *file = fopen(filename, "w");
    if (file == NULL) {
        printf("Error opening file!\n");
        return;
    }

    for (int i = 0; i < n; i++) {
        fprintf(file, "%d %s %d %c ", contestants[i].id, contestants[i].name, contestants[i].age, contestants[i].gender);
        for (int j = 0; j < MAX_JUDGES; j++) {
            fprintf(file, "%.2f ", contestants[i].scores[j]);
        }
        fprintf(file, "%.2f\n", contestants[i].finalScore);
    }

    fclose(file);
}

void loadFromFile(Contestant contestants[], int *n, const char *filename) {
    FILE *file = fopen(filename, "r");
    if (file == NULL) {
        printf("Error opening file!\n");
        return;
    }

    *n = 0;
    while (fscanf(file, "%d %s %d %c", &contestants[*n].id, contestants[*n].name, &contestants[*n].age, &contestants[*n].gender) != EOF) {
        for (int j = 0; j < MAX_JUDGES; j++) {
            fscanf(file, "%f", &contestants[*n].scores[j]);
        }
        fscanf(file, "%f", &contestants[*n].finalScore);
        (*n)++;
    }

    fclose(file);
}

4. 主程序流程

在主程序中,我们可以将这些功能组合起来,实现一个完整的歌手比赛系统。

int main() {
    Contestant contestants[MAX_CONTESTANTS];
    int n = 0;
    int choice;

    do {
        printf("\n1. Add Contestant\n");
        printf("2. Input Scores\n");
        printf("3. Calculate Final Scores\n");
        printf("4. Display Rankings\n");
        printf("5. Save to File\n");
        printf("6. Load from File\n");
        printf("0. Exit\n");
        printf("Enter your choice: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                inputContestantInfo(&contestants[n]);
                n++;
                break;
            case 2:
                for (int i = 0; i < n; i++) {
                    inputScores(&contestants[i]);
                }
                break;
            case 3:
                for (int i = 0; i < n; i++) {
                    calculateFinalScore(&contestants[i]);
                }
                break;
            case 4:
                sortContestants(contestants, n);
                for (int i = 0; i < n; i++) {
                    printf("%d. %s - %.2f\n", i + 1, contestants[i].name, contestants[i].finalScore);
                }
                break;
            case 5:
                saveToFile(contestants, n, "contestants.txt");
                break;
            case 6:
                loadFromFile(contestants, &n, "contestants.txt");
                break;
            case 0:
                printf("Exiting...\n");
                break;
            default:
                printf("Invalid choice!\n");
        }
    } while (choice != 0);

    return 0;
}

5. 总结

通过以上步骤,我们实现了一个简单的歌手比赛系统。这个系统可以管理选手信息、录入评委打分、计算最终得分、进行成绩排名,并且可以将数据保存到文件中或从文件中读取数据。虽然这个系统相对简单,但它展示了如何使用C语言来实现一个基本的应用程序。你可以在此基础上进一步扩展功能,例如增加更多的评委、支持更多的选手、添加更多的比赛规则等。

推荐阅读:
  1. C++教程:竞技比赛打分系统源码
  2. 通过Timer和UpdatePanel控件实现NBA比赛的文字直播

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c语言

上一篇:Vue项目报错:parseComponent怎么解决

下一篇:C++图的拓扑排序是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》