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