📄 新建 文本文档 (3).txt
字号:
# define LEN sizeof (SC)
# include"stdio.h”
# include"stdlib.h”
Typedef struct scoredetail
{ int score;
Char programer;
Char school;
}SC;
Typedef struct scoredef1
{ int score;
Char programer;
Char school;
Struct scoredef1 *next;
}SC1;
Void input() /*输入函数,完成将键盘输入的学生数据写入磁盘*/
{ SC a1; char I; /*结构体变量a1用来存放一个运动员的数据*/
FILE *fp;
Clrslr(); /*清屏*/
If (fp=fopen("e:\\file1”, "wb”)= =NULL)
{printf("error!\n”);exit(0);}
While(i=’1’;i<=(‘m’+’w’-2*’1’)*(‘n’-‘1’+1);i++) /*以循环方式输入每个运动员的数据*/
{printf("\tschool:”);
Scanf("%c”,&a1.school);
while(a.school<’1’||a.school>’n’)
{Printf(“\terror! Input school again.”);scanf(“\%c”,&a1.school);}
Printf("\tprogramer:”);
Scanf("%c”,&a1.programer);
while(a.programer<’1’||a.programer>’m’+’w’)
{printf(“\teror! Input programer again.”);scanf(“\%c”,&a1.programer);}
Printf("\tscore:”);
Scanf("%d”,&a1.score);
While(a.score<0)
{printf(“\terror! Input score again.”);scanf(“\%d”,&a1.score);}
Fwrite(&a1,sizeof(SC),1,fp);
}
Fclose(fp);
}
SC1 creat () /*建立链表函数,完成用链表来存放从文件中读取的运动员数据*/
{SC1 *head1,*p1,*p2;
FILE *fp;
Clrslr();
P1=p2=(SC1*)malloc(LEN);
Head1=NULL;
If(fp=fopen("e:\\file1”, "rb”))= =NULL)
{printf("error!\n”);exit(0);}
While(fread(*p1,sizeof(SC),1,fp)!=0)
{if(head1= =NULL) head=p1;
Else p2->next=p1;
P2=p1;
P1=(SC1*)malloc(LEN);}
Free(p1);
P2->next=NULL;
Return head1;
}
SC thirdfifth(SC *p3,char a) /*本函数实现找出运动项目a的前三(五)名的成绩*/
{ SC t,a[20],b[5];int i=0,j;
While(p3!=NULL) /*通过循环把各个学校的项目a的成绩放在数组a[20]中*/
{if(p3->programmer=a)
{a[i]=*p3;i++;}
P3=p3->next;
}
For(i=0;i<5;i++) /*对a[20]中的数进行排序*/
For(j=i+1;j<=20;j++)
If(a[i].score<a[j].score)
{t=a[i];a[i]=a[j];a[j]=t;}
Printf("%d,%d,%d”,a[0].score,a[1].score,a[2].score); /*输出前三名的成绩*/
If(a>=('m'-'1')/2+'1'&&a<'m'+'1'||a>=('w'-‘1’)/2+'m')
Printf(“%d,%d”,a[3].score,a[4].score); /*输出第四、五名的成绩*/
For(i=0;i<5;i++)
B[i]=a[i];
Return b[5];
}
void Athirdfifth() /*本函数实现输出各个项目的前三(五)名的成绩*/
{char I;
For(i='1';i<='m'+'w';i++)
{printf(“\t The scores of the top 3 or 5 of the programmer %c are:\n”,i);
Thirdfifth(head,i);
}
}
Int statistic(int *k,char b) /*本函数实现统计学校b的总成绩*/
{SC a[5];int ,j,s1,s2,s3,s4,s;char i;
For(i='1';i<('m'-'1')/2+'1';i++) /*统计学校b男子团体的总分*/
{a[5]=thirdfifth(head,i);
For(j=0;j<3;j++)
If(a[j].school=b)
Switch(j)
{case 0:s1+=5;break;
Case 1:s1+=3;break;
Case 2:s1+=2;break;
}
}
For(i=('m'-'1')/2+'1';i<='m';i++)
{a[5]thirdfifth(head,i);
For(j=0;j<5;j++)
If(a[j].school=b)
Switch(j)
{case 0:s2+=7;break;
Case 1:s2+=5;break;
Case 2:s2+=3;break;
Case 3:s2+=2;break;
Case 4:s2+=1;break;
}
}
For(i='m’+’1';i<('w'-‘1’)/2+'m';i++) /*统计学校b女子团体的总*/
{a[5]=thirdfifth(head,i);
For(j=0;j<3;j++)
If(a[j].school=b)
Switch(j)
{case 0:s3+=5;break;
Case 1:s3+=3;break;
Case 2:s3+=2;break;
}
}
For(i=('w'-‘1’)/2+'m';i<='m'+'w';i++)
{a[5]=thirdfifth(head,i);
For(j=0;j<5;j++)
If(a[j].school=b)
Switch(j)
{case 0:s4+=7;break;
Case 1:s4=5;break;
case 2:s4+=3;break;
case 3:s4+=2;break;
case 4:s4+=1;break;
}
}
*k=s1+s2;
Return s=s1+s2+s3+s4;
}
void Astatistic() /*本函数实现输出各个学校的总分*/
{int sum,k1=0;char I;
For(i='1';i<='n';i++)
{sum=statistic(&k1;i);
Printf(“school\t%cscore\t%d\n”,I,sum)
}
}
void sort() /*本函数实现按学校编号.学校总分.男女团体总分排序输出*/
{struct schoolscore
{char school;
int score;
}ss[20],ssb[20],ssw[20],t; /*ss[20],ssb[20],ssw[20]分别存放各个学校的总分.男生团体总分.女生团体总分*/
int a1=0;char i;int a,j,d;
for(i='1',a=0;i<='n';i++,a++)
{ss[a].score=statistic(&a1,i);
ss[a].school=i;
ssb[a].score=a1;
ssb[a].school=i;
ssw[a].school=ss[a].score-a1;
ssw[a].school=i;
}
a--;
for(d=0;d<a;d++) /*对各个学校的总分.男生团体总分.女生团体总分进行排序*/
for(j=d+1;j<a+1;j++)
{if(ss[d].score<ss[j].score)
{t=ss[d];ss[d]=ss[j];ss[j]=t;}
if(ssb[d].score<ssb[j].score)
{t=ssb[d];ss[d]=ss[j];ss[j]=t;}
if(ssw[d].score<ssw[j].score)
{t=ssw[d];ssw[d]=ssw[j];ssw[j]=t;}
printf("\tassort by the sum of a school and output the result:\n"); /*输出按学校总分排序的结果*/
for(d=0;d<=a;d++)
printf("school\t%cscore\t%d",ss[d].school,ss[d].score);
printf("\tassort by the sum of the boys of a school and output the result:\n");
/*输出按学校男生团体总分排序的结果*/
for(d=0;d<a+1;d++)
printf("\tschool\t%cboy score\t%d",ssb[d].school,ssb[d].score);
printf("\tassort on the sum of the girls of a school and output the result :\n");
/*输出按学校女生团体总分排序的结果*/
for(d=0;d<a+1;d++)
printf("\tschool\t%cgirl score\t%d",ssw{d].school.ssw[d].score);
}
void inquire1() /*本函数实现按学校编号查询学校某个项目的情况*/
{SC a[5];char a1,a2;
int i;
printf("\tinput the school code you want to inquire\n");
scanf("%c\n",&a1);
printf("\tinput the programmer code you want to inquire\n");
scanf("%c\n",&a2);
a[5]=thirdfifth(head,a2); /*找出项目a2的前五名*/
for(i=0;i<5;i++) /*通过循环找出学校a1的项目a2的成绩*/
if(a[i].school=a1)
break;
if(i<3)
printf("\tschool\t%c\tprogrammer \t%c\tranking\t%d",a1,a2,i+1);
if(i>2&&(a[i].school>=('w'-‘1’)/2+'m'||a[i].school>=('m'-‘1’)/2+'1'&&a[i].school<'m’+1))
printf("\tschool\t%c\tprogrammer\t%c\tranking\t%d".a1,a2.i+1);
if(i=6)
printf(“\tthe programmer gets no score\n”);
}
void inquire2() /*本函数实现按项目编号查询取得前三(五)名的学校*/
{SC a[5];char a1;int i;
printf("\tinput the programmer code you want to inquire\n");
scanf("%c\n",&a1);
a[5]=thirdfifth(head,a1);
printf("\tthe top 3 or 5 schools of the programmer are\n");
for(i=0;i<3;i++)
printf("%c\t",a[i].school);
if(a1>=('m'-‘1’)/2+'1'&&a[i].school<'m’+1||a1>=('w'-‘1’)/2+'m')
for(i=3;i<5;i++)
printf("%c",a[i].school);
}
main()
{int x,m1,n1,w1;char m,n,w;
SC head;
head=creat(); /* 将链表的首地址赋给head*/
printf("\tinput the NO. of the school \n");
scanf("%d",&n1);
printf("\tinput the NO. of the boy programmer\n");
scanf("%d",&m1);
printf(“\tinput the NO. of the girl programmer\n");
scanf(“%d”,&w1);
m=(char)m1; /*对m1个学校进行编码*/
n=(char)n1; /*对n1个项目进行编码*/
w=(char)w1; /*对 w1个项目进行编码*/
do
{clrscr();
printf("\n\n\n\n\n\t\tplayer score management system\n");
printf("\t\t************************************************************************************************\n");
printf("\t\t\t1-------input\n"); /*当输入为1时,将调用input函数*/
printf("\t\t\t2-------Athirdfifth\n");
printf("\t\t\t3-------Astatistic\n");
printf("\t\t\t4-------sort\n");
printf("\t\t\t5-------inquire1\n");
printf("\t\t\t6-------inquire2\n");
printf("\t\t\t0-------exit\n");
printf("\t\t************************************************************************************************\n");
printf("\t\tplease choose:");
scanf("%d",&a);
switch(x)
{case 1:input();break;
case 2:Athirdfifth();break;
case 3:Astatistic();break;
case 4:sort();break;
case 5:inquire1();break;
case 6:inquire2();break;
case 0;exit(0);
}
}while(a!=0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -