爱笑的一方通行(눈_눈) 2022-01-07 15:21 采纳率: 50%
浏览 72
已结题

大一c语言程序设计任务

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

  • 写回答

2条回答 默认 最新

  • 神仙别闹 2022-01-07 15:48
    关注
    #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;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月8日
  • 已采纳回答 1月8日
  • 创建了问题 1月7日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分