📄 yundongyuan.cpp
字号:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<math.h>
#include<process.h>
typedef struct collegenode{
char name[10];
int number;
int ms;
int ws;
}collegenode,*collegelist;
typedef struct marknode{
int number;
int score;
struct marknode *next;
}marknode,*marklist;
typedef struct itemnode{
char name[10];
int number;
marklist head;
}itemnode,*itemlist;
typedef struct playernode{
char name[10];
int number;
int score;
int collegenumber;
char collegename[10];
struct playernode *next;
}playernode,*playerlist;
void display()
{
printf("\n******请给出你的选择 ************\n");
printf("0************请输入报名表 ************\n");
printf("1************请输入各运动员信息 ************\n");
printf("2************请输入参赛后的成绩信息 ************\n");
printf("3************统计各学院团体总分并排序***********\n");
printf("4************统计运动员个人得分名次************\n");
printf("5************查询各单项成绩运动员姓名,名次及所属院校;\n");
printf("6************查询参加各单项的运动员信息************\n");
printf("7************退出 ************\n");
printf(" (0,1,2,3,4,5,6,7)\n");
}
void createitem(int a,int b,char s[20])
{
int i,total;
FILE *fp;
marknode mark;
itemnode item;
total=a+b;
if((fp=fopen(s,"w+"))==NULL){
printf("打不开此文件\n");
exit(0);
}
for(i=1;i<=total;i++)
{
printf("\n项目名:");
scanf("%s",item.name);
item.number=i;
item.head=NULL;
fprintf(fp,"%s %d",item.name,item.number );
printf("\n运动员编号:");
scanf("%d",&mark.number);
while(mark.number)
{
mark.next=NULL;
fprintf(fp," %d",mark.number);
printf("\n运动员编号:");
scanf("%d",&mark.number);
}
fprintf(fp,"\n---------------------------------------------");
fprintf(fp," %d\n",0);
}
fclose(fp);
}
void createplayer(char s[20])
{
FILE *fp;
playernode player;
if((fp=fopen(s,"w+"))==NULL){
printf("打不开此文件\n");
exit(0);
}
printf("\n运动员编号:");
scanf("%d",&player.number);
while(player.number)
{
player.score=0;
printf("\n运动员姓名:");
scanf("%s",player.name);
printf("\n学院编号:");
scanf("%d",&player.collegenumber);
printf("\n学院名:");
scanf("%s",player.collegename);
player.next=NULL;
fprintf(fp,"%s %d %d %d %s \n",player.name ,player.number ,player.score ,player.collegenumber ,player.collegename );
printf("\n运动员编号:");
scanf("%d",&player.number);
}
fclose(fp);
}
itemlist modifyitem( itemlist ih,int n,int m)
{
marklist mp,mq;
int i,j,a;
a=n+m;
printf("\n请输入项目信息:");
for(i=1;i<=a;i++)
{
printf("\n第 %d 项目名: ",i);
scanf("%s",ih[i].name);
ih[i].number=i;
ih[i].head=NULL;
if(i%2==0){
printf("\n改项目取前3名");
for(j=1;j<=3;j++)
{
mp=(marklist)malloc(sizeof(marknode));
printf("\n第 %d 名运动员编号: ",j);
scanf("%d",&mp->number);
mp->score=j;
if(j==1)
{
ih[i].head=mp;
mq=mp;
}
else
{
mq->next=mp;
mq=mq->next;
}
}
mq->next=NULL;
}
else
{
printf("\n改项目取前5名");
for(j=1;j<=5;j++)
{
mp=(marklist)malloc(sizeof(marknode));
printf("\n第 %d 名运动员编号: ",j);
scanf("%d",&mp->number);
mp->score=j;
if(j==1)
{
ih[i].head=mp;
mq=mp;
}
else
{
mq->next=mp;
mq=mq->next;
}
}
mq->next=NULL;
}
}
return ih;
}
collegelist createcollege(int n)
{
int i;
collegelist ch;
ch=(collegelist)malloc(n*sizeof(collegenode));
for(i=1;i<=n;i++)
{
printf("\n学院名:");
scanf("%s",ch[i].name);
ch[i].number=i;
ch[i].ms=ch[i].ws=0;
}
return ch;
}
void search(int number,char s[20])
{
FILE *fp;
playernode player;
int i;
if((fp=fopen(s,"r"))==NULL)
{
printf("\n打不开文件");
exit(0);
}
fscanf(fp,"%s %d %d %d %s ",player.name ,&player.number ,&player.score ,&player.collegenumber ,player.collegename );
for(i=0;i<20;i++){
if(player.number==number){
printf("\n%s %s",player.name,player.collegename);
break;
}
fscanf(fp,"%s %d %d %d %s ",player.name ,&player.number ,&player.score ,&player.collegenumber ,player.collegename );
}
fclose(fp);
}
void search1(int number,char s[20])
{
FILE *fp;
playernode player;
int i;
if((fp=fopen(s,"r"))==NULL)
{
printf("\n打不开文件");
exit(0);
}
fscanf(fp,"%s %d %d %d %s ",player.name ,&player.number ,&player.score ,&player.collegenumber ,player.collegename );
for(i=0;i<20;i++){
if(player.number==number){
printf(" %s %s",player.name,player.collegename);
break;
}
fscanf(fp,"%s %d %d %d %s ",player.name ,&player.number ,&player.score ,&player.collegenumber ,player.collegename );
}
fclose(fp);
}
void inquireitem(char s[20],int n,char str[20])
{
int i,flag=0;
FILE *fp;
char string[10];
itemnode inode;
marknode mark;
printf("\n请输入要查询的项目 :");
scanf("%s",string);
if((fp=fopen(s,"r"))==NULL){
printf("打不开此文件\n");
exit(0);
}
for(i=1;i<=n;i++)
{
fscanf(fp,"%s %d",inode.name,&inode.number);
fscanf(fp," %d",&mark.number);
if(strcmp(inode.name,string)==0)
{
flag=1;
printf("运动员姓名 学院名\n");
while(mark.number )
{
printf("\n---------------------------------------------");
search(mark.number ,str);
fscanf(fp," %d",&mark.number);
}
}
else
while(mark.number)
{
fscanf(fp," %d",&mark.number);
}
}
fclose(fp);
if(!flag)
printf("\n对不起没有找到请重输!\n");
}
playerlist erect(char s[20])
{
FILE *fp;
int flag=0;
playerlist head,p,q;
if((fp=fopen(s,"r"))==NULL){
printf("\n打不开此文件");
exit(0);
}
p=(playerlist)malloc(sizeof(playernode));
fscanf(fp,"%s %d %d %d %s ",p->name ,&p->number ,&p->score ,&p->collegenumber ,p->collegename );
while(!feof(fp))
{
flag++;
if(flag==1)
{
head=p;
q=p;
q->next=NULL;
}
else
{
p->next=q->next;
q->next=p;
q=q->next;
}
p=(playerlist)malloc(sizeof(playernode));
fscanf(fp,"%s %d %d %d %s ",p->name ,&p->number ,&p->score ,&p->collegenumber ,p->collegename );
}
fclose(fp);
return head;
}
void statisticplayer(itemlist item,char s[20],int m,int w,int ming)
{
playerlist head,p,q,midstr;
marklist mh;
int i,mid;
printf("\n男子前%d名:",ming);
head=erect(s);
p=head;
while(p)
{
for(i=1;i<=m;i++)
{
mh=item[i].head;
while(mh)
{
//count(p,mh,i);
if(mh->number==p->number)
{
if(i%2==0)
{
switch(mh->score)
{
case 1: p->score=p->score+5;break;
case 2: p->score=p->score+3;break;
case 3: p->score=p->score+2;break;
}
}
else
{
switch(mh->score)
{
case 1: p->score=p->score+7;break;
case 2: p->score=p->score+5;break;
case 3: p->score=p->score+3;break;
case 4: p->score=p->score+2;break;
case 5: p->score=p->score+1;break;
}
}
}
mh=mh->next;
}
}
p=p->next;
}
for(i=1;i<=ming;i++)
{
q=head;
mid=q->score;
midstr=q;
q=q->next;
while(q)
{
if(q->score>mid)
{
mid=q->score;
midstr=q;
}
q=q->next;
}
printf("\n---------------------------------------------");
printf("\n第 %d 名是 %s 得分 %d 学院 %s ",i,midstr->name,midstr->score,midstr->collegename);
midstr->score=0;
midstr=midstr->next;
while(midstr)
{
if(midstr->score==mid)
{
printf("\n---------------------------------------------");
printf("\n第 %d 名是 %s 得分 %d 学院 %s ",i,midstr->name,midstr->score,midstr->collegename);
midstr->score =0;
}
midstr=midstr->next;
}
printf("\n");
}
printf("\n女子前%d名:",ming);
head=erect(s);
p=head;
while(p)
{
for(i=m+1;i<=m+w;i++)
{
mh=item[i].head;
while(mh)
{
//count(p,mh,i);
if(mh->number==p->number)
{
if(i%2==0)
{
switch(mh->score)
{
case 1: p->score=p->score+5;break;
case 2: p->score=p->score+3;break;
case 3: p->score=p->score+2;break;
}
}
else
{
switch(mh->score)
{
case 1: p->score=p->score+7;break;
case 2: p->score=p->score+5;break;
case 3: p->score=p->score+3;break;
case 4: p->score=p->score+2;break;
case 5: p->score=p->score+1;break;
}
}
}
mh=mh->next;
}
}
p=p->next;
}
for(i=1;i<=ming;i++)
{
q=head;
mid=q->score;
midstr=q;
q=q->next;
while(q)
{
if(q->score>mid)
{
mid=q->score;
midstr=q;
}
q=q->next;
}
printf("\n---------------------------------------------");
printf("\n第 %d 名是 %s 得分 %d 学院 %s ",i,midstr->name,midstr->score,midstr->collegename);
midstr->score=0;
midstr=midstr->next;
while(midstr)
{
if(midstr->score==mid)
{
printf("\n---------------------------------------------");
printf("\n第 %d 名是 %s 得分 %d 学院 %s ",i,midstr->name,midstr->score,midstr->collegename);
midstr->score =0;
}
midstr=midstr->next;
}
}
printf("\n");
}
void inquireplayer(itemlist item,int n,char s[20])
{
marklist q;
int i,num,flag=0;
char itemname[10];
printf("\n请输入要查询的项目名:");
scanf("%s",itemname);
for(i=1;i<=n;i++)
{
if(strcmp(itemname,item[i].name)==0)
{
printf("项目名 ");
printf("\n%s\n",itemname);
printf("名次 运动员姓名 学院");
flag=1;
q=item[i].head;
while(q)
{
printf("\n---------------------------------------------");
printf("\n %d ",q->score);
num=q->number;
search1(num,s);
q=q->next;
}
}
}
printf("\n");
if(!flag)
printf("\n对不起没有找到请重输!\n");
}
void erectcollege(collegelist college,int n,char s[10])
{
FILE *fp;
int i;
if((fp=fopen(s,"w+"))==NULL){
printf("\n打不开此文件");
exit(0);
}
fprintf(fp,"学院名 男团总分 女团总分 团体总分");
for(i=1;i<=n;i++)
{
fprintf(fp,"\n---------------------------------------------");
fprintf(fp,"\n%s %d %d %d",college[i].name ,college[i].ms,college[i].ws,college[i].ms+college[i].ws );
}
fclose(fp);
}
char *statisticcollege(itemlist item,char s[20],int m,int w,int n,collegelist college)
{
playerlist head,p;
int i,j,t;
marklist mh,nh;
collegenode cnode;
collegelist cp,cq;
char str[20];
head=erect(s);
p=head;
while(p)
{
for(i=1;i<=m;i++)
{
mh=item[i].head;
while(mh)
{
if(mh->number==p->number)
{
if(i%2==0)
{
switch(mh->score)
{
case 1: p->score=p->score+5;break;
case 2: p->score=p->score+3;break;
case 3: p->score=p->score+2;break;
}
}
else
{
switch(mh->score)
{
case 1: p->score=p->score+7;break;
case 2: p->score=p->score+5;break;
case 3: p->score=p->score+3;break;
case 4: p->score=p->score+2;break;
case 5: p->score=p->score+1;break;
}
}
}
mh=mh->next;
}
}
p=p->next;
}
p=head;
while(p)
{
for(i=1;i<=n;i++)
if(college[i].number==p->collegenumber)
college[i].ms=college[i].ms+p->score;
p=p->next;
}
printf("\n男团总分");
for(i=1;i<n;i++)
for(j=1;j<n-i;j++)
{
cp=&college[j];
cq=&college[j+1];
if(cp->ms<cq->ms)
{
t=cp->ms;
cp->ws =cq->ws ;
cq->ws =t ;
}
}
printf("\n 学院名 男子总分");
for(i=1;i<=n;i++)
{
printf("\n---------------------------------------------");
printf("\n%s %d",college[i].name,college[i].ms);
}
head=erect(s);
p=head;
while(p)
{
for(i=m+1;i<=m+w;i++)
{
nh=item[i].head;
while(nh)
{
if(nh->number==p->number)
{
if(i%2==0)
{
switch(nh->score)
{
case 1: p->score=p->score+5;break;
case 2: p->score=p->score+3;break;
case 3: p->score=p->score+2;break;
}
}
else
{
switch(nh->score)
{
case 1: p->score=p->score+7;break;
case 2: p->score=p->score+5;break;
case 3: p->score=p->score+3;break;
case 4: p->score=p->score+2;break;
case 5: p->score=p->score+1;break;
}
}
}
nh=nh->next;
}
}
p=p->next;
}
p=head;
while(p)
{
for(i=1;i<=n;i++)
if(college[i].number==p->collegenumber)
college[i].ws=college[i].ws+p->score;
p=p->next;
}
printf("\n女团总分");
for(i=1;i<n;i++)
for(j=1;j<n-i;j++)
{
cp=&college[j];
cq=&college[j+1];
if(cp->ws <cq->ws )
{
t=cp->ms;
cp->ws =cq->ws ;
cq->ws =t ;
}
}
printf("\n 学院名 女子总分");
for(i=1;i<=n;i++)
{
printf("\n---------------------------------------------");
printf("\n%s %d",college[i].name,college[i].ws);
}
printf("\n学院团体总分");
printf("\n 学院名 团体总分");
for(i=1;i<=n;i++)
{
printf("\n---------------------------------------------");
printf("\n%s %d",college[i].name,college[i].ms+college[i].ws);
}
printf("\n请给出存放学院信息的文件名:");
scanf("%s",str);
erectcollege(college,n,str);
return str;
}
void main()
{
int id,no,mo,wo,mingci;
char fn1[20],fn2[20],*fn3;
collegelist collegeo;
itemlist itemo;
display();
printf("\n请输入男子项目数M和女子项目数W:");
scanf("%d,%d",&mo,&wo);
printf("\n请给出报名表文件名:");
scanf("%s",fn1);
printf("\n请给出运动员表文件名:");
scanf("%s",fn2);
display();
while(1)
{
scanf("%d",&id);
switch(id)
{
case 0:
printf("\n请按以下格式输入报名表:");
createitem(mo,wo,fn1);
break;
case 1:
printf("\n请输入运动员信息:");
createplayer(fn2);
break;
case 2:
printf("\n请按以下格式输入参赛成绩表:");
printf("\n项目名 名次 运动员编号 分数:");
itemo=(itemlist) malloc ((mo+wo+1)*sizeof(itemnode));
itemo=modifyitem(itemo,mo,wo);
printf("\n请输入学院个数 n:");
scanf("%d",&no);
collegeo=createcollege(no);
break;
case 3:
fn3=statisticcollege(itemo,fn2,mo,wo,no,collegeo);
break;
case 4:
printf("\n请输入统计的名次:");
scanf("%d",&mingci);
statisticplayer(itemo,fn2,mo,wo,mingci);
break;
case 5:
inquireplayer(itemo,mo+wo,fn2);
break;
case 6:
inquireitem(fn1,mo+wo,fn2);
break;
case 7:
exit(0);
}
display();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -