大一c语言程序设计任务

要挂科了,各位高抬贵手帮帮忙吧😭
班级里经常举行各类评比、比赛,先要求实现一个通用的班级竞赛系统,功能要求:
数据输入包括输入每位竞赛选手的数据,例如编号、姓名、个人特长和简介,然后由N个评委的对该选手进行打分。成绩计算的方法:需要计算出总成绩和平均成绩(去掉最高分和最低分)。
显示的主菜单如下:
1)输入选手信息;
2)评委打分;
3)成绩排序(按平均分、总分);
4)成绩统计(统计不同分数段的选手信息);
5)数据查询;
6)添加和删除学生数据;

#include <stdio.h>
#include <string.h>
#include <conio.h> 
#include <stdlib.h>

struct Data
{
    char num[20];//编号
    char name[20];//姓名
    float playerScore[10];//十个评委的成绩 
    float sumScore;//总成绩
    float aveScore;//平均成绩 
}data;

void getContext()// 输入选手数据
{
    printf("请输入选手数据:(编号 姓名 )\n");
    printf("按999结束\n");
    getchar();
    while(1)
    {
        gets(data.num);
        if(strcmp(data.num,"999") == 0)//相等返回0 
        {
            break;
        }
        gets(data.name);
            
        FILE *p = fopen("xinxi.txt", "a+");    
        if(p == NULL)
        {
            printf("open error!\n");
        }   
        fputs(data.num,p);
        fputs("\t",p);
        fputs(data.name,p);
        fputs("\n",p);
                
        fclose(p);        
    }
}

void teachScore()//评委打分
{
    FILE *p1 = fopen("xinxi.txt","r");
    FILE *p2 = fopen("tmp.txt","w");
    if(p1 == NULL)    
    {
        printf("read error!\n");
    }
    if(p2 == NULL)    
    {
        printf("open error!\n");
    }
    char buf[999]; //定义缓冲区,用于暂时存储数据 
    while(fgets(buf, 100, p1) != NULL)
    {
        sscanf(buf,"%s%s", &data.num,&data.name);
        printf("请十位老师输入编号为%s的同学的成绩:\n",data.num);
        float sum = 0; 
        float min = 999, max = 0;
        
        for(int k = 0; k < 10; k++)
        {
            scanf("%f",&data.playerScore[k]);
            if(min > data.playerScore[k])
            {
                min = data.playerScore[k];
            }
            if(max < data.playerScore[k])
            {
                max = data.playerScore[k];
            }
            sum += data.playerScore[k];
        }
        data.sumScore = sum;
        int sum1 = 0;
        for(int t = 0; t < 10; t++)
        {
            if(data.playerScore[t] != max && data.playerScore[t] != min)
            {
                sum1 += data.playerScore[t];
            }
        }
        data.aveScore = sum1/8;
        fputs(data.num,p2);
        fputs("\t",p2); 
        fputs(data.name,p2);
        fputs("\t",p2); 
        for(int k = 0; k < 10; k++)
        {
            fprintf(p2, "%.2f", data.playerScore[k]);
            fputs("\t",p2);     
        }
        fprintf(p2, "%.2f", data.sumScore);
        fputs("\t",p2); 
        fprintf(p2, "%.2f", data.aveScore);
        fputs("\n",p2);
    }
    fclose(p1);
    fclose(p2);
    remove("xinxi.txt");
    rename("tmp.txt","xinxi.txt");
}

void scoreSeque()//成绩排序(按平均分)
{
    printf("编号\t姓名\t\t\t\t\t十位评委的成绩\t\t\t\t\t总成绩\t平均成绩\n") ;
    Data data2[999];
    FILE *p1 = fopen("xinxi.txt","r");
    if(p1 == NULL)    
    {
        printf("read error!\n");
    }
    int i = 0;
    while(!feof(p1))
    {
        fscanf(p1,"%s%s%f%f%f%f%f%f%f%f%f%f%f%f", &data2[i].num, &data2[i].name, &data2[i].playerScore[0], &data2[i].playerScore[1], &data2[i].playerScore[2], &data2[i].playerScore[3], &data2[i].playerScore[4], &data2[i].playerScore[5], &data2[i].playerScore[6], &data2[i].playerScore[7], &data2[i].playerScore[8], &data2[i].playerScore[9], &data2[i].sumScore, &data2[i].aveScore);
        i++;
    }
    i--;
    for(int n = 0; n < i-1; n++)
    {
        for(int m = 0; m < i-n-1; m++)
        {
            if(data2[m].aveScore > data2[m+1].aveScore)
            {
                float tmp = data2[m].aveScore;
                data2[m].aveScore = data2[m+1].aveScore;
                data2[m+1].aveScore = tmp;
            }
        }
    }

    FILE *p2 = fopen("tmp.txt","w");
    if(p2 == NULL)    
    {
        printf("open error!\n");
    }
    for(int n = 0; n < i; n++)
    {
        fputs(data2[n].num,p2);
        fputs("\t",p2); 
        fputs(data2[n].name,p2);  
        fputs("\t",p2); 
        printf("%s\t%s\t",data2[n].num,data2[n].name);
        for(int k = 0; k < 10; k++)
        {
            fprintf(p2, "%.2f", data2[n].playerScore[k]); 
            printf("%.2f\t", data2[n].playerScore[k]);
            fputs("\t",p2); 
        }      
        fprintf(p2, "%.2f", data2[n].sumScore);
        fputs("\t",p2); 
        fprintf(p2, "%.2f", data2[n].aveScore);
        fputs("\n",p2);
        printf("%.2f\t%.2f\n",data2[n].sumScore,data2[n].aveScore);
    }
    fclose(p1);
    fclose(p2);
    remove("xinxi.txt");
    rename("tmp.txt","xinxi.txt");
}

void findData()//数据查询
{
    printf("请输入要查询的学生的编号:\n");
    char my_num[20];
    getchar();
    gets(my_num);
     
    FILE *p1 = fopen("xinxi.txt","r");
    if(p1 == NULL)    
    {
        printf("read error!\n");
    }
    while(!feof(p1))
    {
        fscanf(p1,"%s%s%f%f%f%f%f%f%f%f%f%f%f%f", &data.num, &data.name, &data.playerScore[0], &data.playerScore[1], &data.playerScore[2], &data.playerScore[3], &data.playerScore[4], &data.playerScore[5], &data.playerScore[6], &data.playerScore[7], &data.playerScore[8], &data.playerScore[9], &data.sumScore, &data.aveScore);

        if(strcmp(data.num, my_num) == 0)//找到了 
        {
            printf("%s\t%s\t",data.num,data.name);    
            for(int j = 0; j < 10; j++)
            {
                printf("%.2f\t", data.playerScore[j]);
            }
            printf("%.2f\t%.2f", data.sumScore, data.aveScore);
            break;
        }
    }
    fclose(p1);
}

void addData()//追加选手数据
{
    printf("请输入要追加的选手数据:(编号 姓名 )\n");

    printf("按888结束\n");
    getchar();
    while(1)
    {
        gets(data.num);
        if(strcmp(data.num,"888") == 0)//相等返回0 
        {
            break;
        }
        gets(data.name);
            
        FILE *p = fopen("xinxi.txt", "a+");    
        if(p == NULL)
        {
            printf("open error!\n");
        }   
        fputs(data.num,p);
        fputs("\t",p);
        fputs(data.name,p);
        fputs("\n",p);
                
        fclose(p);        
    }
}

void fileSever()//写入数据文件
{
    printf("已存档\n"); 
}
    
void exitSys()//退出系统
{
    exit(0);
}
 
void Display()//菜单界面
{
    int choice = 0; 
    printf("\t\t========歌手比赛系统=======\t\t\n\n");
    printf("\t\t1、输入选手数据\t\t\n\n");
    printf("\t\t2、评委打分\t\t\n\n");
    printf("\t\t3、成绩排序(按平均分)\t\t\n\n");
    printf("\t\t4、数据查询\t\t\n\n");
    printf("\t\t5、追加选手数据\t\t\n\n");
    printf("\t\t6、写入数据文件\t\t\n\n");
    printf("\t\t7、退出系统\t\t\n\n");
    scanf("%d", &choice);
    switch(choice)
    {
        case 1:
            {
                getContext();// 输入选手数据
                break; 
            }
        case 2:
            {
                teachScore();//评委打分
                break;
            }
        case 3:
            {
                scoreSeque();//成绩排序(按平均分)
                break;
            }
        case 4:
            {
                findData();//数据查询
                break;
            }
        case 5:
            {
                addData();//追加选手数据
                break;
            }
        case 6:
            {
                fileSever();//写入数据文件
                break;
            }
        case 7:
            {
                exitSys();//退出系统
                break;
            }
    }
} 

int main()
{
    Display(); 
    return 0;
}


参考:


#include <stdio.h>

/*
    设计一个“卡拉OK大赛评分系统”
    本程序启动后,会提示“卡拉OK大赛正式开始”,然后请10位裁判分别打分,
    最后去掉一个最高分和一个最低分,将其余分数的平均分作为选手的最后得分
*/ 
void main(){
    float a[10]; //保存10个评委的分数 
    int i;
    float max;//保存最高分
    float min;//保存最低分
    float avg=0;//保存10个评委的平均分
    //显示界面
    printf("\t\t\t*****************************************************\n");
    printf("\t\t\t*                                                   *\n");
    printf("\t\t\t*               卡拉OK大赛评分系统                  *\n");
    printf("\t\t\t*                                                   *\n");
    printf("\t\t\t*****************************************************\n");
     
    //1.输入10个评委的分数
    for(i=0;i<10;i++){
        printf("\t\t\t请输入第%d个评委的打分:",i+1);
        //获取从键盘输入的分数 
        scanf("%f",&a[i]);
    } 
    //2.对max,min赋初值
    max = a[0];
    min = a[0]; 
    avg = a[0];
    //3.求最高分,最低分,总分
    for(i=1;i<10;i++){
        //求最高分
        if(max<a[i]){
            max = a[i];
        } 
        //求最低分
        if(min>a[i]){
            min = a[i];
        } 
        //求总分
        avg += a[i]; 
    } 
    //求平均分 = (总分-最高分-最低分 )/8
    avg = (avg - max - min)/8;
    //4.输出结果
    printf("去掉一个最高分%0.2f,去掉一个最低分%0.2f,最后得分是:%0.2f",max,min,avg); 
     
}