调试除了错误改不掉 涉及算法 求大神指点。
代码如下 一个评分系统 就是 三个歌手 7个评委评分,去掉最低分,去掉最高分,然后求平均分为最后成绩,然后把最后成绩再排下叩谢!!!1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"conio.h"
#define N 4
#define P 8
struct singer
{
char num[20];
char name[10];
float grades[P];
double ave[10];
};
void menu();
int reads(struct singer sin[N]);
void save(struct singer sin[N],int n);
void add();
void del();/*shan chu*/
void sort();/*排序*/
void query();/*查询*/
void change();
void show();
void main()
{
int n;
while(1)
{
menu();
printf("\n 请输入您要选择的操作序号,按回车键确认:");
scanf("%d",&n);
switch(n)
{
case 1: add();break;
case 2: del();break;
case 3: query();break;
case 4: show();break;
case 5: sort();break;
case 6: change();break;
case 7: save();break;
case 8: exit(0);
default: printf("输入错误,请输入列表中存在的序号!\n");
}
}
}
void menu()
{
printf(" ************************* 评分管理系统************************ ");
printf("\n 1 添加选手数据");
printf("\n 2 删除选手数据");
printf("\n 3 查询选手数据");
printf("\n 4 显示选手数据");
printf("\n 5 总成绩排序");
printf("\n 6 更改选手数据");
printf("\n 7 保存选手数据");
printf("\n 8 退出");
}
int reads(struct singer sin[N])
{
FILE *fp;
int i=0;
if((fp=fopen("H:\\file22.txt","r"))==NULL)
{
printf("文件打开失败!\n");
return 0;
}
else
{
for(i=0;!feof(fp);i++)
fscanf(fp,"%s \n",sin[i].name,&sin[i].name);
}
fclose(fp);
return i;
}
void save(struct singer sin[N],int n) // 学生信息改变后更新文件
{
FILE *fp;
int i=0;
if((fp=fopen("H:\\file.txt","w"))==NULL)
{
printf("文件打开失败!\n");
return ;
}
else
{
for(i=0;i<n;i++)
fprintf(fp,"%s %s %f %f %f %f %f %f %f\n",sin[i].num,sin[i].name,sin[i].grades[P]);
}
fclose(fp);
}
void add()
{
FILE *fp;
int n,i;
struct singer sin;
if((fp=fopen("H:\\file.txt","a"))==NULL) //如果文件已经存在,可以追加信息
{
if((fp=fopen("H:\\file.txt","w"))==NULL) // 文件不存在时,创建新文件,输入信息
{
printf("文件打开失败!\n");
return;
}
}
printf("请输入要添加的选手数量,按回车键确认:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("\n请输入第%d个学生的序号、姓名,用空格分开,并按回车键确认:\n",i);
scanf("%s%s",sin.num,sin.name);
printf("\n请输入第%d个学生的七个评委成绩,用空格分开,并按回车键确认:\n",i);
scanf("%f %f %f %f %f %f %f\n",sin.grades[P]);
fprintf(fp,"%s %s %f %f %f %f %f %f %f\n",sin.num,sin.name,sin.grades[P]);
}
fclose(fp);
}
void show()
{
struct singer sin[N];
int i,n;
n=reads(sin);
printf(" *********************所有的选手信息如下**********************\n\n");
printf(" 序号 姓名 评委1 评委2 评委3 评委4 评委5 评委6 评委7 \n");
printf(" *************************************************************\n");
for(i=0;i<n;i++)
printf("\n%3d%12s%11.2f%11.2f%11.2f%11.2%f11.2%f11.2%f11.2%f\n",i+1,sin[i].num,sin[i].name,sin[i].grades[P]);
getch();
}
void del() /*信息删除函数*/
{
struct singer sin[N];
char number[20];
int n,i,j;
n=reads(sin);
printf("\n请输入要删除信息的选手序号,按回车键确认:");
scanf("%s",number);
for(i=0;i<n;i++)
if(strcmp(number,sin[i].num)==0) break;
if(i>=n)
{
printf("没有找到该选手信息!\n");
return;
}
else
{
for(j=i+1;j<n;j++)
sin[j-1]=sin[j];
}
save(sin,n-1);
printf("删除成功!\n");
}
void change() //学生信息更改
{
struct singer sin[N];
int n,i;
char number[20];
printf("\n请输入要更改信息的学生学号,按回车键确认:");
scanf("%s",number);
n=reads(sin);
for(i=0;i<n;i++)
if(strcmp(number,sin[i].num)==0)
break;
if(i>=n)
{
printf("无此学生信息!");
return;
}
printf("\n请输入更改后选手的序号,姓名,七个评委成绩,按回车键确认:\n");
scanf("%s\t%s\t%f\t%f\t%f\t%f\t%f\t%f\t%f",sin[i].num,sin[i].name,sin[i].grades[P],&sin[i].num,&sin[i].name,&sin[i].grades[P]);
save(sin,n);
}
void sort()
{ int min,max;
struct singer sin[N],sin.ave;
float sum=0;
int i;
printf("input 7 grades:\n");
for(i=0;i<7;i++);
scanf("%f %f %f %f %f %f %f",&sin.grades[P]);
printf("\n");
min=sin.grades[0];
max=sin.grades[0];
for(i=0;i<10;i++)
{
sum=sum+sin.grades[P];
if(sin.grades[i]>max)
max=sin.grades[i];
if(sin.grades[i]<min)
min=sin.grades[i];
}
sin.ave =(sum-max-min)/5;
struct singer sin[N],temp;
int i,j,n;
n=reads(sin);
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
{
if(sin[j].ave<sin[j+1].ave)
{
temp=sin[j];
sin[j].ave=sin[j+1].ave;
sin[j+1].ave=temp;
}
}
save(sin,n);
j=1;
printf("*********************总成绩排序结果如下**********************************\n\n");
printf(" 名次 序号 姓名 评委1 评委2 评委3 评委4 评委5 评委6 评委7 总成绩\n");
printf("*************************************************************************\n");
for(i=0;i<n;i++) // 输出结果并排名
{
if(sin[j].ave==sin[j+1].ave)
printf("\n%3d%12s%11s%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f\n",j,sin[i].num,sin[i].name,sin.grades[P],sin[i].ave);
else
printf("\n%3d%12s%11s%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f\n",j++,sin[i].num,sin[i].name,sin,grades[P],sin[i].ave);
}
getch();
void query() // 按学号对学生信息查询
{
struct singer sin[N];
char number[20];
int i,n;
n=reads(sin);
printf("\n请输入待查询的选手序号,按回车键确认:\n");
scanf("%s",number);
for(i=0;i<n;i++)
if(strcmp(number,sin[i].num)==0) break;
if(i>=n)
{
printf("没有找到该选手信息!\n");
return;
}
else
printf(\n%12s%11s%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f\n",j++,sin[i].num,sin[i].name,a,b,c,d,e,f,g,sin[i].ave);
}