You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

182 lines
4.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define N 3
#define M 10
int add = N - 1;
int sum[N] = { 0 }, Max[N], Min[N];
float aver[N] = { 0 };
struct player
{
int num;
char name[8];
int score[M];
};
void c(const unsigned short textColor)
{
if(textColor>=0 && textColor<=15)
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), textColor);
else
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);}
void Inistplayer(struct player a[], int n)
{
int i;
printf("请输入选手的序号和姓名(输入格式:序号 姓名)\n");
for (i = 0; i < n; i++)
scanf("%d %s", &a[i].num, a[i].name);
}
void Inputscore(int score[], int n)
{
int i;
for (i = 0; i < n; i++)
scanf("%d",&score[i]);
}
void sort(struct player a[], float b[], int n)
{
int i, k, j,t;
float temp;
char str[8];
for (i = 0; i < n-1; i++)
{
k = i;
for (j = i + 1; j < n; j++)
if (b[k] > b[j])
k = j;
if (k != i)
{
temp = b[i];
b[i] = b[k];
b[k] = temp;
strcpy(str, a[i].name);
strcpy(a[i].name, a[k].name);
strcpy(a[k].name, str);
t = a[i].num;
a[i].num = a[k].num;
a[k].num = t;
}
}
}
int main()
{
int flag = 1, i, m, j;
char n;
FILE *fp;
struct player a[20];
while(flag)
{
c(4);printf(" 歌手比赛管理系统 \n");
c(4);printf("★★★★★★★★★★★★★★★★★★★★★★★★\n");
c(1);printf(" 1输入选手数据 \n");
c(5);printf(" 2评委打分 \n");
c(6);printf(" 3成绩排序 \n");
c(8);printf(" 4数据查询 \n");
c(9);printf(" 5追加学生数据 \n");
c(10);printf(" 6写入数据文件 \n");
c(13);printf(" 7退出系统 \n");
c(4);printf("★★★★★★★★★★★★★★★★★★★★★★★★\n");
c(15);printf(" \n");
printf("输入序号以选择功能:");
scanf("%d,",&n);
switch(n)
{
case 1:system("cls");
Inistplayer(a,N);printf("Press any key to continue...");
getch();system("cls");
break;
case 2:
system("cls");
for(i=0;i<N;i++)
{
printf("注意事项所有成绩满分为10最低分为0\n");
printf("评委给第%d位选手的分数是",i+1);
Inputscore(a[i].score,M);
printf("第%d位的选手所有成绩\n",i+1);
for(j=0;j<M;j++)
{ printf("%d\t",a[i].score[j]);}
printf("\n") ;
printf("Press any key to continue...");
getch();
system("cls");
}
system("cls");
break;
case 3:
system("cls");
printf("成绩计算规则:去掉最高分,去掉最低分\n");
for(i=0;i<N;i++)
{
Max[i]=a[i].score[0];
Min[i]=a[i].score[0];
for(j=0;j<M;j++)
{
sum[i]+=a[i].score[j];
if(Max[i]<a[i].score[j])
Max[i]=a[i].score[j];
if(Min[i]>a[i].score[j])
Min[i]=a[i].score[j];
}
aver[i]=(float)(sum[i]-Max[i]-Min[i])/(M-2);
}
sort(a,aver,N);
for(i=0;i<N;i++)
{
printf("%s\t%5.2f\n",a[i].name,aver[i]);}printf("Press any key to continue...");
getch();
system("cls"); break;
case 4:
system("cls");
printf("输入序号以查询选手:");
scanf("%d",&m);
for(i=0;i<N;i++)
if(a[i].num==m)
{
printf("第%d号选手%s 总分:%d,最高分%d,最低分%d,平均分%5.2f",a[i].num,a[i].name,sum[i],Max[i],Min[i],aver[i]);
printf("\n");
}printf("Press any key to continue...");
getch();
system("cls"); break;
case 5:
system("cls"); printf("请输入要追加的选手数据:\n");
add=add+1;
scanf("%d %s",&a[add].num,a[add].name);
printf("Press any key to continue...");
getch();
system("cls"); break;
case 6:
system("cls");
printf("将数据写入文件\n");
fp=fopen("歌手比赛数据文件.txt","w");
int i=0;
for(i<add+2;i++;)
{
fprintf(fp,"%d %s %d %d %d %5.2f",a[i].num,a[i].name,sum[i],Max[i],Min[i],aver[i]);
}
fclose(fp);printf("Press any key to continue...");
getch();
system("cls"); break;
case 7:system("cls");exit(0);
system("cls"); break;
default:flag=0;
}
}
return 0;
}