C语言实现歌手比赛系统

C语言实现歌手比赛系统

系统概述

歌手比赛系统是一款使用C语言实现的命令行程序,旨在为歌手比赛场次提供后台管理功能。该系统可以添加、删除、修改歌手信息,查询歌手列表和评分,并且可以实现对歌手评分的计算和排名。

实现步骤

步骤一:创建数据结构

首先需要定义一个数据结构来存储歌手的信息,数据结构可以用结构体来进行描述。以下是一个示例结构体:

typedef struct{
    char name[20];          // 名称
    int id;                 // 编号
    char gender[10];        // 性别
    char type[10];          // 流派
    float score[10];        // 评分
    float sumscore;         // 总分
} Singer;

步骤二:实现基本功能

在实现系统的基本功能时,包括添加、删除、修改歌手信息,查询歌手列表和评分等操作。以下是具体实现步骤:

添加歌手

添加歌手需要用户输入歌手信息,包括姓名、编号、性别、流派等,输入完成后将歌手信息添加到系统中。

以下是一个示例代码:

void add_singer(Singer s[], int size){
    printf("请输入歌手姓名:");
    scanf("%s", s[size].name);
    printf("请输入歌手编号:");
    scanf("%d", &s[size].id);
    printf("请输入歌手性别:");
    scanf("%s", s[size].gender);
    printf("请输入歌手流派:");
    scanf("%s", s[size].type);   

    size++;    // 添加成功后,更新歌手数量
    printf("添加成功!\n");
}

删除歌手

删除歌手需要用户输入要删除歌手的编号,在系统中查找该歌手并删除其信息。

以下是一个示例代码:

void delete_singer(Singer s[], int size, int id){
    int flag = 0;
    for(int i=0;i<size;i++){
        if(s[i].id == id){
            for(int j=i;j<size;j++){
                s[j] = s[j+1];  // 删除歌手信息
            }
            flag = 1;
            break;
        }
    }
    if(flag == 1){
        size--;    // 删除成功后,更新歌手数量
        printf("删除成功!\n");
    }
    else{
        printf("未找到该歌手!\n");
    }
}

修改歌手信息

修改歌手信息需要用户输入要修改歌手的编号,然后可以选择要修改的信息,如姓名、性别、流派等。

以下是一个示例代码:

void modify_singer(Singer s[], int size, int id){
    int i;
    for(i=0;i<size;i++){
        if(s[i].id == id){
            printf("请选择要修改的信息:\n");
            printf("1.姓名\t2.编号\t3.性别\t4.流派\n");
            int num;
            scanf("%d", &num);
            switch(num){
                case 1:
                    printf("请输入新姓名:");
                    scanf("%s", s[i].name);
                    printf("修改成功!\n");
                    break;
                case 2:
                    printf("请输入新编号:");
                    scanf("%d", &s[i].id);
                    printf("修改成功!\n");
                    break;
                case 3:
                    printf("请输入新性别:");
                    scanf("%s", s[i].gender);
                    printf("修改成功!\n");
                    break;
                case 4:
                    printf("请输入新流派:");
                    scanf("%s", s[i].type);
                    printf("修改成功!\n");
                    break;
                default:
                    printf("无效操作!\n");
            }
            break;
        }
    }
    if(i == size){
        printf("未找到该歌手!\n");
    }
}

查询歌手列表

系统可以显示所有歌手的列表,以供用户查看。

以下是一个示例代码:

void show_singer_list(Singer s[], int size){
    printf("姓名\t编号\t性别\t流派\n");
    for(int i=0;i<size;i++){
        printf("%s\t%d\t%s\t%s\n", s[i].name, s[i].id, s[i].gender, s[i].type);
    }
}

歌手评分

用户可以为某个歌手进行评分,评分完成后,会计算出该歌手的总分并保存到系统中。

以下是一个示例代码:

void rate_singer(Singer s[], int size, int id){
    for(int i=0;i<size;i++){
        if(s[i].id == id){
            printf("请输入评分:");
            scanf("%f", &s[i].score[s[i].sumscore]);  // 将用户输入的评分保存到数组中
            s[i].sumscore += s[i].score[s[i].sumscore];  // 计算总分
            printf("评分成功!\n");
            break;
        }
    }
}

步骤三:实现排名功能

在完成基本功能后,可以根据歌手的总分来实现排名功能。以下是具体实现步骤:

计算总分

在每次评分完成后,更新歌手的总分。

以下是一个示例代码:

void calculate_total_score(Singer s[], int size){
    for(int i=0;i<size;i++){
        s[i].sumscore = 0.0;
        for(int j=0;j<10;j++){
            s[i].sumscore += s[i].score[j];
        }
    }
}

排名

根据歌手的总分来进行排名,可以使用冒泡排序来实现。

以下是一个示例代码:

void sort_singer(Singer s[], int size){
    for(int i=0;i<size-1;i++){
        for(int j=0;j<size-i-1;j++){
            if(s[i].sumscore > s[j].sumscore){
                Singer temp = s[i];
                s[i] = s[j];
                s[j] = temp;
            }
        }
    }
}

示例说明

以下是具体使用示例:

示例一:添加歌手

Singer singers[10];
int size = 0;

add_singer(singers, size);

示例二:评分并显示排名

Singer singers[10];
int size = 0;

// 添加歌手
add_singer(singers, size);
add_singer(singers, size);

// 评分
rate_singer(singers, size, 1);
rate_singer(singers, size, 2);

// 排名
calculate_total_score(singers, size);
sort_singer(singers, size);

// 显示排名
show_singer_list(singers, size);

结论

通过以上步骤,我们可以实现一个基本的歌手比赛系统,并且可以根据总分来进行排名,具有一定实用价值。

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

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

相关文章

  • C调用C++代码的方法步骤

    C语言是一款面向过程的语言,而C++语言是一款面向对象的语言。虽然二者有着许多相似之处,但仍然会存在一些不兼容的情况,在C中调用C++代码时也是如此。下面介绍一下C调用C++代码的方法步骤。 步骤 在C++文件中,声明被调用的函数为extern “C” #ifdef __cplusplus extern "C" { #endif // y…

    C 2023年5月23日
    00
  • 深入浅出分析C++ string底层原理

    深入浅出分析C++ string底层原理 前言 在 C++ 中,string 类型是经常使用的字符串类型。了解 string 类的底层实现原理可以更好地理解其各种方法的行为,从而在编写程序时更加得心应手。本文将从以下几个方面对 string 类的底层实现进行说明: string 类的结构 string 类的构造函数 string 类的拷贝构造函数 strin…

    C 2023年5月23日
    00
  • oaptt搭建http服务的过程详解

    下面是“oaptt搭建http服务的过程详解”的完整攻略。 什么是oaptt? oaptt是一款优秀的Python Web框架,它基于Tornado实现,提供更加灵活和高效的Web应用程序搭建方式。oaptt支持多种模板引擎,集成对象关系映射(ORM)库,支持静态文件服务等功能。它的代码简洁易懂,上手门槛较低,适合初学者和中级开发者快速搭建Web应用程序。 …

    C 2023年5月23日
    00
  • C++实现两个日期间差多少天的解决方法

    下面是“C++实现两个日期间差多少天的解决方法”的完整攻略。 一、问题描述 假设有两个日期,分别为 start_date 和 end_date,请实现一个函数,计算两个日期间相隔的天数。 二、解决思路 我们可以将日期转化为距离某个固定日期的天数,然后求两个日期距离固定日期的天数之差。这里我们取 1900年1月1日 作为固定日期。 将日期转化为天数的方法:假设…

    C 2023年5月23日
    00
  • 超详细JavaScript深浅拷贝的实现教程

    让我来为您详细讲解“超详细JavaScript深浅拷贝的实现教程”的完整攻略。 深拷贝和浅拷贝 浅拷贝 浅拷贝指复制对象的引用,而不是它的值。当原始对象中的值改变时,被拷贝的对象中的相应值也会改变。常用的浅拷贝方法有对象展开符…和Object.assign()。 // 对象展开符 const obj = {a: 1, b: 2}; const newOb…

    C 2023年5月23日
    00
  • 如何统计在一篇文章中某个单词出现了几次,以及第一次出现的位置

    以下是一个完整的攻略,用于统计一篇文章中某个单词出现的次数和第一次出现的位置。 1. 获取文本数据 首先,需要从文章中获取文本数据。如果文章已经存储在文件中,可以使用文件读取函数来获取文本数据。如果文章存储在数据库中,可以使用数据库查询功能来获取文本数据。在这里,我们假设文本数据已经被保存到一个字符串变量中,并且该变量名为text。 2. 统计单词出现次数 …

    C 2023年5月23日
    00
  • C++ 中assert()函数用法总结

    C++ 中assert()函数用法总结 1. assert()函数的概述 assert()函数是C++标准库中的一个宏定义,它用于在程序运行时检查某个表达式的值是否为true,如果其值为false,则会在控制台打印一个出错信息,并使程序终止。这个宏定义通常在代码调试和测试阶段使用。 assert()函数的定义如下: void assert (int expr…

    C 2023年5月23日
    00
  • 基于C语言实现简易的扫雷游戏

    基于C语言实现简易的扫雷游戏攻略 一、游戏规则 扫雷游戏中,玩家需要揭开地图上的方块,并判断它们是否隐藏着地雷。如果某个地块中有地雷,玩家就输了;如果所有不带地雷的方块都被揭开,玩家就赢了。玩家可以通过揭开每个方块,利用周围方块中的数字来推断出哪些方块是安全的。数字表示方块周围八个方块中有多少个带地雷的方块。如果某方块周围没有带地雷的方块,则系统会自动揭开周…

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