#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#define null 0
#define maxsize 20
#define LEN sizeof(struct classroom)
typedef struct athlete
{ char name[20]; /*姓名*/
int item; /*运动员参加的项目号*/
int rank; /*排名*/
long banji;/*所属班级*/
int score;
} ATH;
typedef struct classroom
{ int number; /*班级编号*/
int count; /*参赛运动员人数*/
int menscore;
int womenscore;
int totalscore;
ATH a[maxsize]; /*参赛运动员数组*/
struct classroom *next;
}cls;
int m; /*参赛班级数*/
int n,l; /*男子项目个数,女子项目个数*/
int k; /*项目总个数*/
cls *head,*p1,*p2;
void create( ) /*采用前插法建立链表*/
{
p1=(cls *)malloc(LEN);
p1->next=head->next;
head->next=p1;
p1->count=1;
p1->menscore=0;
p1->womenscore=0;
p1->totalscore=0;
}
void input()
{ int b[25] ;
int i=0,j;
int x,y;
int p=1;
head=(cls*)malloc(LEN);
head->next=null;
while(p!=0)
{
again:
printf("\n");
printf("\n");
printf("\t****项目编号为奇数取前三名*****");
printf("项目编号为偶数取前五名!****\n");
printf("\n");
printf("\t请输入运动项目编号 (<=%d):",k);
scanf("%d",&x);
printf("\n");
if (x>0&&x<=k)
{for (j=0;j<=i;j++)
{ if (x==b[j] )
{ printf("\t项目已经存在,请选择其他的数字\n");
goto again; }
}
b[i++]=x;
}
else
{ printf("\t项目不存在,请重新输入\n");
goto again;
}
if(x%2)
j=3;
else
j=5;
for ( i = 1 ; i <=j ; i++ ) /*开始输入运动员的信息*/
{
back:
printf("\t NO.%d 运动员(不超过%d个)--- ",i,j);
printf("班级号:");
scanf("%d",&y);
if ( y > m )
{ printf("\t超出班级数目,请重新输入\n");
goto back;
}
if ( head->next == NULL ) /*空表就直接创建结点*/
{ create();
goto Store_Data;
}
p2= head->next ;
while ( p2 != NULL ) /*非空链表查询到有相同编号的班级结点*/
{ if ( p2->number==y)
{ p1 = p2;
p1->count=p1->count+1;
goto Store_Data;
}
else
p2 = p2->next;
}
create(); /*没有相同编号的班级结点就建一个*/
Store_Data:
p1->number=y;
p1->a[p1->count].item = x;
p1->a[p1->count].rank = i;
p1->a[p1->count].banji= y;
printf("\t\t\t\t 运动员姓名:");
scanf("%s",p1->a[p1->count].name);
printf("\n");
}
printf("\t是否继续输入项目成绩?(1/0):");
scanf("%d",&p);
getchar();
}
}
void freeall()
{cls *p1,*p2;
p2=head;
while(p2!=null)
{p1=p2;
p2=p2->next;
free(p1);
}
}
void calculate() /*计算各类总分*/
{int i;
p1= head->next;
while ( p1!= NULL )
{
for (i=1;i<=p1->count;i++)
{
if ( p1->a[i].item % 2)
{
switch (p1->a[i].rank)
{
case 1:p1->a[i].score = 5;break;
case 2:p1->a[i].score = 3;break;
case 3:p1->a[i].score = 2;break;
}
}
else
{
switch (p1->a[i].rank)
{
case 1:p1->a[i].score = 7;break;
case 2:p1->a[i].score = 5;break;
case 3:p1->a[i].score = 3;break;
case 4:p1->a[i].score = 2;break;
case 5:p1->a[i].score = 1;break;
}
}
if ( p1->a[i].item <=n)
{
p1->menscore+= p1->a[i].score;
}
else
{
p1->womenscore += p1->a[i].score;
}
}
p1->totalscore = p1->menscore + p1->womenscore;
p1 = p1->next;
}
}
void output()
{ printf("\n");
p1=head->next;
while(p1!=null)
{printf("\t|| 班级 || 男团总分 || 女团总分 || 总分 || \n");
printf("\t %2d %4d %4d %d \n",p1->number,p1->menscore,p1->womenscore,p1->totalscore);
p1=p1->next;
}
printf("\n");
}
void search1()
{ int p;
int num1,num2;
int i;
while(p!=0)
{ printf("\n");
printf("\t请输入班级编号:");
scanf("%d",&num1);
printf("\t请输入项目编号:");
scanf("%d",&num2);
p1=head->next;
while((p1!=null)&&(p1->number!=num1))
p1=p1->next;
if(p1==null)
{ printf("\n");
printf("\t无法查到该成绩!");
}
else
{for(i=1;i<=p1->count;i++)
{if(p1->a[i].item==num2)
{ printf("\n");
printf("\t特定项目成绩如下:\n");
printf("\t运动员姓名: %s 成绩排名:%5d 得分:%5d\n",p1->a[i].name,p1->a[i].rank,p1->a[i].score);
break;
}
}
if(i==p1->count+1)
{ printf("\n");
printf("\t无法查到该成绩!\n");
}
}
printf("\n");
printf("\t是否继续查询项目成绩?(1/0):");
scanf("%d",&p);
getchar();
}
}
void search2()
{ int num1;
int i;
int p;
int flag;
while( p!=0)
{ printf("\n");
printf("\t请输入项目编号:");
scanf("%d",&num1);
printf("\n");
p1=head->next;
flag=0;
while(p1!=null)
{
for(i=1;i<=p1->count;i++)
if(p1->a[i].item==num1)
{
printf("\t班级 %d 运动员姓名:%s 成绩排名:%5d 得分:%5d\n",p1->a[i].banji,p1->a[i].name,p1->a[i].rank,p1->a[i].score);
flag=1;
continue;
}
p1=p1->next;
}
if(flag==0)
printf("\t该成绩无法查询\n");
printf("\n");
printf("\t是否继续查询项目成绩?(1/0):");
scanf("%d",&p);
getchar();
}
}
void order1()
{cls *p,*q,*r,*h;
int i;
q=head->next->next;
head->next->next=null;
p=q;
while(p)
{q=q->next;
h=head;
r=h->next;
if(p->number<r->number)
{p->next=r;
h->next=p;
}
else
{
while(r&&p->number>r->number)
{
h=r;
r=r->next;
}
if(r)
{p->next=r;
h->next=p;
h=p;
}
else
{p->next=null;
h->next=p;
r=p;
}
}
p=q ;
}
printf("\n");
p=head->next;
while(p!=null)
{ for(i=1;i<=p->count;i++)
{ printf(" 班级 || 参赛运动员 || 项目编号 || 成绩排名 || 得分 || \n");
printf(" %d %s %d %d %d \n",p->a[i].banji,p->a[i].name,p->a[i].item,p->a[i].rank,p->a[i].score);
}
p=p->next;
}
getchar();
}
void order2()
{cls *p,*q,*r,*h;
q=head->next->next;
head->next->next=null;
p=q;
while(p)
{q=q->next;
h=head;
r=h->next;
if(p->menscore>r->menscore)
{p->next=r;
h->next=p;
}
else
{
while(r&&p->menscore<r->menscore)
{
h=r;
r=r->next;
}
if(r)
{p->next=r;
h->next=p;
h=p;
}
else
{p->next=null;
h->next=p;
r=p;
}
}
p=q ;
}
printf("\n");
p=head->next;
while(p!=null)
{ { printf(" 班级 || 男团总分 || \n");
printf(" %d %d \n",p->number,p->menscore);
}
p=p->next;
}
getchar();
}
void order3()
{cls *p,*q,*r,*h;
q=head->next->next;
head->next->next=null;
p=q;
while(p)
{q=q->next;
h=head;
r=h->next;
if(p->womenscore>r->womenscore)
{p->next=r;
h->next=p;
}
else
{while(r&&p->womenscore<r->womenscore)
{h=r;
r=r->next;
}
if(r)
{p->next=r;
h->next=p;
h=p;
}
else
{p->next=null;
h->next=p;
r=p;
}
}
p=q ;
}
printf("\n");
p=head->next;
while(p!=null)
{
{ printf(" 班级 || 女团总分 || \n");
printf(" %d %d \n