歌手比赛系统

  • 题目
  • 结果图
  • 实现代码
  • 感悟

题目

歌手比赛系统

功能:

对一次歌手比赛的成绩进行管理,功能要求:
1、输入每个选手的数据包括编号、姓 名、十个评委的成绩,根据输入计算出总成绩和平均成绩(去掉最高分,去掉最低分)。
2、显示主菜单如下:1)输入选手数据2)评委打分3)成绩排序(按平均 分) 4)数据查询5) 追加选手数据6)写入数据文件7)退出系统。

结果图


实现代码

#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;
}

感悟

题目有些地方不太明白,例如输入数据和写入数据文件为什么要分开来,怎么实现分开

C语言作业——歌手比赛系统相关推荐

  1. C语言 校园歌手比赛系统

    源码点这里 运行环境:codeblocks 1.引言... 1.1 问题提出... 1.2 本系统涉及的知识点... 1.3 功能要求... 2.总体设计... 2.1 功能模块设计... 2.2 主 ...

  2. C语言 校园歌手比赛系统源码

    详情点此处 /*实验:校园歌手比赛系统 作者:多庸 学号: 实验要求:输入输出 增添删除 导入储存 */ #include<stdio.h> #include<stdlib.h> ...

  3. 歌手比赛系统c语言程序注释,C语言程序课程设计—歌手比赛系统(20页)-原创力文档...

    淮南师范学院 课程设计报告 歌手比赛系统 姓 名:胡欢欢 学号: 1008010109 专 业:计算机科学与技术 班 级: 10 级( 1)班 指导教师:彭飞 职称: XXX 2013 年 3 月 7 ...

  4. c语言链表做歌手比赛系统,大型实验报告(歌手比赛系统)

    <大型实验报告(歌手比赛系统)>由会员分享,可在线阅读,更多相关<大型实验报告(歌手比赛系统)(5页珍藏版)>请在人人文库网上搜索. 1.呀歩垂不主邂目蜃轨运(Z)SIO乙/讥 ...

  5. 期末C语言作业--家庭理财系统

    期末C语言作业--家庭理财系统 比较简单 直接上代码: #include <stdio.h> #include <stdlib.h> #include <string.h ...

  6. 万维c语言作业,万维考试系统-C语言题库.doc

    万维考试系统-C语言题库.doc 第 1 题 (10.0 分) 题号390 功能编写函数求 1100 中奇数的平方和. 结果为 166650.000000. 答案 float s0; int i; f ...

  7. C语言作业银行ATM系统,C语言银行存取款管理系统

    <C语言银行存取款管理系统>由会员分享,可在线阅读,更多相关<C语言银行存取款管理系统(16页珍藏版)>请在人人文库网上搜索. 1.高级语言程序设计 课程设计报告得分:信电工程 ...

  8. c语言作业 -教师评价系统

    题目:用结构体数组存放教师信息,包括工号,姓名,职称,所带班级数,每个班级给教师的打分等信息,可对教师信息进行添加,修改,删除,查找,统计等操作. 功能要求: 1.系统以菜单的方式工作 2.添加教师信 ...

  9. 万维c语言作业,万维考试系统C语言题库.pdf

    第1题 (分) 题号:390 功能:编写函数求 1~100 中奇数的平方和. 结果为. 答案: float s=0; int i; for(i=1;i<=n;i=i+2) s=s+i*i; re ...

最新文章

  1. 大数据中心周边辐射大吗_PETCT有辐射,PETCT对陪同人员的影响大吗?
  2. TCP通讯处理粘包详解
  3. mongoDB3.0.2 升级操作
  4. CentOS Linux防火墙配置及关闭
  5. python基本数据类型包括哪些_python入门3——基本数据类型
  6. 压缩感知高斯测量矩阵matlab,浅谈压缩感知(十七):测量矩阵之有限等距常数RIC的计算...
  7. javasript --- 一个日期规范(x秒前,x分前...)
  8. IdentityServer4-前后端分离之Vue
  9. 数据库原理及应用【二】数据模型
  10. 7.中文输入验证-原生JS
  11. 解析nextTick---vue3任务调度
  12. Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7)
  13. 微信/qq/防撤回插件
  14. Magisk如何针对性隐藏Root避免被检测
  15. 多啦a梦的python代码_80行代码!用Python做一个哆来A梦分身
  16. 210413赛后总结
  17. 微信小程序-------全局通信方案mobx
  18. Salem and Sticks-萨鲁曼的棍子 CodeForce#1105A 暴力
  19. 我大121321321321321
  20. 腾讯云互动直播SDK集成综述

热门文章

  1. ISIS Neighbor Net Type DIS
  2. TypeError: Cannot read property 'gizmo' of null 的解决方案
  3. Fractal Streets (POJ3889)(分形图、递归)
  4. UR机器人(一):坐标系及位姿表示方法
  5. 人工智能换脸python_Python史诗级P图换脸小程序,AI换脸的简易版
  6. 推特Twitter高级搜索
  7. 谈谈论文的发表(电光与控制,IEEE ACCESS)
  8. PHP ob缓冲浅析与理解
  9. c语言二级考试知识点,2016年计算机二级考试C语言知识点大全
  10. 快速上手 Token 登录认证