#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>
#define space printf("\t\t\t\t");
#define enter printf("\n\n\n\n\n\n");
#define pause space;printf("请回车键继续");getchar();getchar();
struct athlete
{
char name[40];
char sex;
double score;
int x;
athlete *next;
};
struct kind
{
char s[40];
athlete *head;
kind *next;
}*K,*KE;
void recorde(athlete *head) //根据类别录入信息
{
athlete *NEW=(athlete *)malloc(sizeof(athlete));
NEW->next=NULL;
NEW->score=0;
space;
printf("请输入姓名:");
scanf("%s",NEW->name);
space
getchar();
printf("请输入性别(M/F/O):");
scanf("%c",&NEW->sex);
space;
printf("请输入运动员编号:");
scanf("%d",&NEW->x);
athlete *p=head->next;
if(p==NULL)
{
head->next=NEW;
}
else
{
while(p!=NULL)
{
if(p->x<=NEW->x&&(p->next==NULL||p->next->x>=NEW->x))
{
NEW->next=p->next;
p->next=NEW;
break;
}
if(p->x>NEW->x&&p->next==NULL)
{
head->next=NEW;
NEW->next=p;
}
p=p->next;
}
}
space;
printf("创建完毕\n");
}
void creat_kind(char s[40]) //创建新类别
{
kind *p=(kind *)malloc(sizeof(kind));
p->next=NULL;
p->head=(athlete *)malloc(sizeof(athlete));
p->head->next=NULL;
strcpy(p->s,s);
KE->next=p;
KE=KE->next;
}
kind *find_kind(char s[40]) //查找类别,返回类别指针
{
kind *p=K->next;
while(p!=NULL)
{
if(!strcmp(p->s,s))
return p;
p=p->next;
}
space
printf("not found\n");
space
printf("please enter again\n");
pause
return K;
}
athlete *find_name(athlete *head,char name[]) //在类别中按姓名查找
{
athlete *p=head->next;
while(p!=NULL)
{
if(!strcmp(p->name,name))
{
return p;
}
p=p->next;
}
if(p == NULL)
{
printf("No such name.\n");
pause
return head;
}
}
athlete *find_x(athlete *head,int x) //在类别中按编号查找
{
athlete *p=head->next;
while(p!=NULL)
{
if(p->x == x)
{
return p;
}
p=p->next;
}
if(p == NULL)
{
printf("No such name.\n");
pause
return head;
}
}
void change(athlete *head) //在类别中修改
{
printf("请选择:\n");
printf("1、按姓名修改\n");
printf("2、编号修改\n");
int c;
scanf("%d",&c);
switch(c)
{
case 1:
{
char name[40];
scanf("%s",name);
athlete *p=find_name(head,name);
if(p!=head)
{
space
printf("请输入姓名:");
scanf("%s",p->name);
getchar();
space
printf("请输入性别(M/F/O):");
scanf("%c",&p->sex);
space
printf("请输入运动员编号:");
scanf("%d",&p->x);
}
}
break;
case 2:
{
char kind[40],x;
scanf("%s %c",kind,&x);
athlete *p=find_x(head,x);
if(p!=head)
{
space
printf("请输入姓名:");
scanf("%s",p->name);
getchar();
space
printf("请输入性别(M/F/O):");
scanf("%c",&p->sex);
space
printf("请输入运动员编号:");
scanf("%d",&p->x);
}
}
break;
default:
space
printf("输入错误\n");
}
}
void print(athlete *head) //按类别输出
{
athlete *p=head->next;
while(p!=NULL)
{
printf("姓名:");
printf("%s",p->name);
printf("性别:");
printf("%c",&p->sex);
printf("编号:");
printf("%d",&p->x);
}
}
void prints(athlete *p)
{
space;
printf("姓名:");
printf("%s\n",p->name);
space;
printf("性别:");
printf("%c\n",p->sex);
space;
printf("编号:");
printf("%d\n",p->x);
pause;
}
void put_kind(athlete *head)
{
athlete *p=head->next;
while(p!=NULL)
{
space;
printf("编号:");
printf("%d\n",p->x);
space;
printf("姓名:");
printf("%s\n",p->name);
space;
printf("性别:");
printf("%c\n",p->sex);
space
printf("成绩:");
printf("%.2lf\n",p->score);
p=p->next;
printf("\n\n");
}
}
void all_put()
{
kind *p=K->next;
if(p==NULL)
{
space
printf("数据为空\n");
pause
return ;
}
while(p!=NULL)
{
space
printf("%s\n",p->s);
put_kind(p->head);
p=p->next;
printf("================================================================================\n");
}
pause
}
void set_score(athlete *head)
{
athlete *p=head->next;
if(p==NULL)
{
space
printf("此类中运动员信息为空\n");
pause
return ;
}
while(p!=NULL)
{
prints(p);
printf("请核对信息是否正确,无语后再进行成绩录入,成绩一旦录入,将无法进行更改\n");
getchar();
printf("是否正确?(Y/N)");
char ok;
scanf("%c",&ok);
if(ok=='Y'||ok=='y')
{
printf("请输入该运动员成绩:");
scanf("%lf",&p->score);
}
else
{
printf("返回主界面,请对该运动员信息进行修改后再录入成绩\n");
return ;
}
p=p->next;
}
}
void kind_3(athlete *head,char *name) //文件处理部分
{
FILE *fp;
int m=0,f=0,o=0;
char *s=(char *)malloc(sizeof(name)+2);
strcpy(s,name);
strcat(s,"m");
printf("%s\n",s);
fp=fopen(s,"wb");
if(fp==NULL)
printf("fuck\n");
athlete *p=head->next;
while(p!=NULL)
{
if(p->sex=='M')
{
m++;
fwrite(p,sizeof(athlete),1,fp);
}
p=p->next;
}
fclose(fp);
strcpy(s,name);
strcat(s,"f");
fp=fopen(s,"wb");
if(fp==NULL)
printf("fuck\n");
p=head->next;
while(p!=NULL)
{
if(p->sex=='F')
{
f++;
fwrite(p,sizeof(athlete),1,fp);
}
p=p->next;
}
fclose(fp);
strcpy(s,name);
strcat(s,"o");
fp=fopen(s,"wb");
if(fp==NULL)
printf("fuck\n");
p=head->next;
while(p!=NULL)
{
if(p->sex=='O')
{
o++;
fwrite(p,sizeof(athlete),1,fp);
}
p=p->next;
}
fclose(fp);
space
printf("在%s项目中,共有%d人参赛",name,m+f+o);
space
printf("其中男性%d 女性%d 其他%d\n",m,f,o);
space
printf("是否需要查看详细数据?(Y/N)");
char ok;
getchar();
scanf("%c",&ok);
if(ok=='N'||ok=='n')
return ;
else
{
athlete temp;
strcpy(s,name);
strcat(s,"m");
space
printf("男运动员信息:\n");
fp=fopen(s,"rb");
while(fread(&temp,sizeof(temp),1,fp)==1)
{
space
printf("姓名:%s\n",temp.name);
space
printf("编号:%d\n",temp.x);
space
printf("成绩:%.2lf\n",temp.score);
}
fclose(fp);
strcpy(s,name);
strcat(s,"f");
printf("\n\n");
space
printf("女性运动员信息:\n");
fp=fopen(s,"rb");
while(fread(&temp,sizeof(temp),1,fp)==1)
{
space
printf("姓名:%s\n",temp.name);
space
printf("编号:%d\n",temp.x);
space
printf("成绩:%.2lf\n",temp.score);
}
fclose(fp);
strcpy(s,name);
strcat(s,"o");
printf("\n\n");
space
printf("其他运动员信息:\n");
fp=fopen(s,"rb");
while(fread(&temp,sizeof(temp),1,fp)==1)
{
space
printf("姓名:%s\n",temp.name);
space
printf("编号:%d\n",temp.x);
space
printf("成绩:%.2lf\n",temp.score);
printf("\n\n");
}
fclose(fp);
}
}
void Rank(char *s)
{
FILE *fp;
fp=fopen(s,"rb");
athlete *head=(athlete *)malloc(sizeof(athlete));
head->next=NULL;
athlete t,*p;
while(fread(&t,sizeof(athlete),1,fp)==1)
{
athlete *temp=(athlete *)malloc(sizeof(athlete));
strcpy(temp->name,t.name);
temp->score=t.score;
temp->sex=t.sex;
temp->x=t.x;
temp->next=NULL;
p=head->next;
if(p==NULL)
{
head->next=temp;
}
else
{
while(p!=NULL)
{
if(p->score<=temp->score&&(p->next==NULL||p->next->score>=temp->score))
{
temp->next=p->next;
p->next=temp;
break;
}
if(p->score>temp->score&&p->next==NULL)
{
head->next=temp;
temp->next=p;
}
p=p->next;
}
}
}
put_kind(head);
pause
}
void get_athlete(athlete *head,char *name)
{
FILE *fp;
athlete t;
char *s=(char *)malloc(sizeof(name)+2);
strcpy(s,name);
strcat(s,"m");
fp=fopen(s,"rb");
if(fp==NULL)
printf("fuck\n");
while(fread(&t,sizeof(t),1,fp)==1)
{
athlete *temp=(athlete *)malloc(sizeof(athlete));
strcpy(temp->name,t.name);
temp->score=t.score;
temp->sex=t.sex;
temp->x=t.x;
temp->next=NULL;
athlete *p=head->next;
if(p==NULL)
{
head->next=temp;
}
else
{
while(p!=NULL)
{
if(p->x<=temp->x&&(p->next==NULL||p->next->x>=temp->x))
{
temp->next=p->next;
p->next=temp;
break;
}
if(p->x>temp->x&&p->next==NULL)
{
head->next=temp;
temp->next=p;
}
p=p->next;
}
}
}
athlete *x=head->next;
// while(x!=NULL)
// {printf("%s\n",x->name);x=x->next;}
// pause
fclose(fp);
strcpy(s,name);
strcat(s,"f");
fp=fopen(s,"rb");
while(fread(&t,sizeof(t),1,fp)==1)
{
athlete *temp=(athlete *)malloc(sizeof(athlete));
strcpy(temp->name,t.name);
temp->score=t.score;
temp->sex=t.sex;
temp->x=t.x;
temp->next=NULL;
athlete *p=head->next;
if(p==NULL)
{
head->next=temp;
}
else
{
while(p!=NULL)
{
if(p->x<=temp->x&&(p->next==NULL||p->next->x>=temp->x))
{
temp->next=p->next;
p->next=temp;
break;
}
if(p->x>temp->x&&p->next==NULL)
{
head->next=temp;
temp->next=p;
}
p=p->next;
}
}
}
fclose(fp);
strcpy(s,name);
strcat(s,"o");
fp=fopen(s,"rb");
while(fread(&t,sizeof(t),1,fp)==1)
{
athlete *temp=(athlete *)malloc(sizeof(athlete));
strcpy(temp->name,t.name);
temp->score=t.score;
temp->sex=t.sex;
temp->x=t.x;
temp->next=NULL;
athlete *p=head->next;
if(p==NULL)
{
head->next=temp;
}
else
{
while(p!=NULL)
{
if(p->x<=temp->x&&(p->next==NULL||p->next->x>=temp->x))
{
temp->next=p->next;
p->next=temp;
break;
}
if(p->x>temp->x&&p->next==NULL)
{
head->next=temp;
temp->next=p;
}
p=p->next;
}
}
}
fclose(fp);
}
void get_data()
{
char f[]="data";
FILE *fp=fopen(f,"rb");
if(fp==NULL)
printf("new\n");
kind tt;
while(fread(&tt,sizeof(tt),1,fp)==1)
{
kind *p=(kind *)malloc(sizeof(kind));
p->head=(athlete *)malloc(sizeof(athlete));
p->head->next=NULL;
p->next=NULL;
strcpy(p->s,tt.s);
printf("ok\n");
get_athlete(p->head,p->s);
KE->next=p;
KE=KE->next;
}
}
void put_athlete(athlete *head,char *name) //文件处理部分
{
FILE *fp;
int m=0,f=0,o=0;
char *s=(char *)malloc(sizeof(name)+5);
strcpy(s,name);
strcat(s,"m");
printf("%s\n",s);
fp=fopen(s,"wb");
if(fp==NULL)
printf("fuck\n");
athlete *p=head->next;
while(p!=NULL)
{
if(p->sex=='M')
{
m++;
fwrite(p,sizeof(athlete),1,fp);
}
p=p->next;
}
fclose(fp);
strcpy(s,name);
strcat(s,"f");
fp=fopen(s,"wb");
if(fp==NULL)
printf("fuck\n");
p=head->next;
while(p!=NULL)
{
if(p->sex=='F')
{
f++;
fwrite(p,sizeof(athlete),1,fp);
}
p=p->next;
}
fclose(fp);
strcpy(s,name);
strcat(s,"o");
fp=fopen(s,"wb");
if(fp==NULL)
printf("fuck\n");
p=head->next;
while(p!=NULL)
{
if(p->sex=='O')
{
o++;
fwrite(p,sizeof(athlete),1,fp);
}
p=p->next;
}
fclose(fp);
}
void put_data()
{
kind *p=K->next;
FILE *fp=fopen("data","wb");
if(fp==NULL)
printf("fuck\n");
if(p!=NULL)
{
fwrite(p,sizeof(kind),1,fp);
put_athlete(p->head,p->s);
p=p->next;
}
}
int main()
{
K=(kind *)malloc(sizeof(kind));
K->next=NULL;
KE=K;
get_data();
system("color 5F");
while(1)
{
system("cls");
enter;
printf("ΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖ\n\n\n");
space
printf("请选择功能\n");
space
printf("1.创建新类别\n");
space
printf("2.对类别中进行操作\n");
space
printf("3.成绩录入\n");
space
printf("4.输出全部数据\n");
space
printf("5.运动员信息分类查看\n");
space
printf("6.成绩排名\n");
space
printf("0.退出\n");
printf("\n\n\n");
printf("ΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖ");
space;
COORD loc;
loc.X=32;
loc.Y=19;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), loc);
int c;
scanf("%d",&c);
system("cls");
enter
switch(c)
{
case 1:
{
char s[40];
space;
printf("请输入要创建的比赛项目名称:");
scanf("%s",s);
creat_kind(s);
space;
printf("创建成功\n");
pause;
}
break;
case 2:
{
char s[40];
space;
printf("请输入要进行操作的比赛项目名称:\n");
space;
scanf("%s",s);
kind *p=find_kind(s);
if(p==K)
break;
athlete *pa=p->head;
int x;
space;
printf("请选择:\n");
space;
printf("1.增加新运动员\n");
space;
printf("2.查找运动员\n");
space;
printf("3.修改运动员信息\n");
space;
printf("0.退出\n");
space;
scanf("%d",&x);
switch(x)
{
case 1:
space
printf("请输入要录入的运动员数量:");
int n;
scanf("%d",&n);
while(n--)
recorde(pa);
space
printf("创建完毕\n");
pause
break;
case 2:
space;
printf("1.按姓名查找\n");
space;
printf("2.按号码查找\n");
space;
printf("0.退出\n");
int z;
space
scanf("%d",&z);
if(z==1)
{
char ss[40];
scanf("%s",ss);
athlete *a=find_name(pa,ss);
if(a!=pa)
prints(a);
}
else if(z==2)
{
int t;
scanf("%d",&t);
athlete *a=find_x(pa,t);
if(a!=pa)
prints(a);
}
else
break;
break;
case 3:
change(pa);
default :
break;
}
}
break;
case 3:
{
space
printf("请输入要录入成绩的运动项目:");
char s[40];
scanf("%s",s);
kind *p=find_kind(s);
if(p==K)
{
printf("没有此类项目,若需要创建,请按回车返回主界面后进行创建\n");
getchar();
break;
}
athlete *pa=p->head;
set_score(pa);
}
break;
case 4:
all_put();
break;
case 5:
{
space
printf("请输入要查看的运动项目:");
char s[40];
scanf("%s",s);
kind *p=find_kind(s);
if(p==K)
{
printf("没有此类项目,若需要创建,请按回车返回主界面后进行创建\n");
getchar();
break;
}
athlete *pa=p->head;
kind_3(pa,s);
pause
}
break;
case 6:
printf("请输入要查看的运动项目加上要查看的性别(例:basketballm为男篮)\n");
char s[50];
scanf("%s",s);
Rank(s);
break;
default :
put_data();
exit(0);
}
}
}
我曾经向着那轮一起看过的月亮许愿 你要过的幸福。。。
ZY