运动员分数统计系统.docx
- 文档编号:3811737
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:33
- 大小:23.78KB
运动员分数统计系统.docx
《运动员分数统计系统.docx》由会员分享,可在线阅读,更多相关《运动员分数统计系统.docx(33页珍藏版)》请在冰豆网上搜索。
运动员分数统计系统
#include
#include
#include
#include
#include
#defineR5/*每项目最多获奖人数*/
#defineN20/*学校最多个数*/
#defineM30/*最多男子项目*/
#defineW20/*最多女子项目*/
typedefstructsport{
charath_num[R][20];/*运动员编号*/
charsex[R][10];/*运动员性别*/
charsch_num[R][20];/*学校编号*/
charitem_num[20];/*项目编号*/
chartype[20];/*项目类型*/
intscore[R];/*运动员成绩*/
intrank[R];/*运动员排名*/
structsport*next;
}Sport;
typedefstructschool{
charsch_num[20];/*学校编号*/
intsum1;/*团体总分*/
intsum2;/*男子团体总分*/
intsum3;/*女子团体总分*/
structschool*next;
}School;
typedefstructsch_num_name{
charsch_num[20];/*学校编号*/
charsch_name[20];/*学校名*/
}Sch_num_name;
typedefstructath_num_name{
charath_num[20];/*运动员编号*/
charath_name[20];/*运动员名*/
}Ath_num_name;
typedefstructite_num_name{
charite_num[20];/*项目编号*/
charite_name[20];/*项目名*/
}Ite_num_name;
typedefstructnum_name{/*编号与名称结构体*/
Sch_num_namesch[N];
Ath_num_nameath[(M+W)*R];
Ite_num_nameite[M+W];
}Num_name;
intmenu_selection()/*菜单函数*/
{
charsel;
do{
system("COLOR5");/*设置字体颜色*/
system("cls");/*清屏*/
printf("\t\t.oO欢迎使用运动会分数统计系统Oo.\n");
printf("\t\t〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");
printf("\t\t〓|1.从文件读入信息|〓\n");
printf("\t\t〓|2.输入项目信息|〓\n");
printf("\t\t〓|3.查找项目信息|〓\n");
printf("\t\t〓|4.修改项目信息|〓\n");
printf("\t\t〓|5.删除项目信息|〓\n");
printf("\t\t〓|6.输出学校成绩报表及团体报表|〓\n");
printf("\t\t〓|7.向文件写入信息|〓\n");
printf("\t\t〓|8.退出系统|〓\n");
printf("\t\t〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");
printf("\t\t\t请选择(0-8):
");
scanf("%c",&sel);
getchar();/*吃掉回车符*/
}while(sel>'8'||sel<'0');
returnsel-'0';
}
Sport*init_link_sport(void)/*初始化项目链表*/
{
Sport*head1;
head1=(Sport*)malloc(sizeof(Sport));
head1->next=NULL;
returnhead1;
}
School*init_link_school(void)/*初始化学校链表*/
{
School*head2;
head2=(School*)malloc(sizeof(School));
head2->next=NULL;
returnhead2;
}
voidMyfree_link_sport(Sport*head1)/*释放项目结构体*/
{
Sport*p=NULL;
while(head1!
=NULL)
{
p=head1->next;
free(head1);
head1=p;
}
}
voidMyfree_link_school(School*head2)/*释放学校结构体*/
{
School*p=NULL;
while(head2!
=NULL)
{
p=head2->next;
free(head2);
head2=p;
}
}
char*Search_ite_num_name(Num_name*nn,char*search)/*查找项目编号对应的项目名或项目名对应的编号*/
{
inti;
for(i=0;nn->ite[i].ite_num[0]!
=0&&strcmp(nn->ite[i].ite_num,search)!
=0;i++);/*在项目编号中查找*/
if(nn->ite[i].ite_num[0]==0)
{
for(i=0;nn->ite[i].ite_name[0]!
=0&&strcmp(nn->ite[i].ite_name,search)!
=0;i++);/*在项目名中查找*/
if(nn->ite[i].ite_name[0]!
=0)
returnnn->ite[i].ite_num;/*返回项目编号*/
else
{
printf("\t\t没有该项目名或编号\n");
returnNULL;
}
}
else
returnnn->ite[i].ite_name;/*返回项目名字*/
}
char*Search_sch_num_name(Num_name*nn,char*search)//查找学校编号对应的型学校名或学校名对应的学校编号
{
inti;
for(i=0;nn->sch[i].sch_num[0]!
=0&&strcmp(nn->sch[i].sch_num,search)!
=0;i++);/*在学校编号中查找*/
if(nn->sch[i].sch_num[0]==0)
{
for(i=0;nn->sch[i].sch_name[0]!
=0&&strcmp(nn->sch[i].sch_name,search)!
=0;i++);/*在项目名中查找*/
if(nn->sch[i].sch_name[0]!
=0)
returnnn->sch[i].sch_num;/*返回项目编号*/
else
{
printf("\t\t没有该学校名或编号\n");
returnNULL;
}
}
else
returnnn->sch[i].sch_name;/*返回项目名字*/
}
char*Search_ath_num_name(Num_name*nn,char*search)//查找运动员编号对应的运动员姓名或运动员姓名对应的运动员编号
{
inti;
for(i=0;nn->ath[i].ath_num[0]!
=0&&strcmp(nn->ath[i].ath_num,search)!
=0;i++);/*在学校编号中查找*/
if(nn->ath[i].ath_num[0]==0)
{
for(i=0;nn->ath[i].ath_name[0]!
=0&&strcmp(nn->ath[i].ath_name,search)!
=0;i++);/*在项目名中查找*/
if(nn->ath[i].ath_name[0]!
=0)
returnnn->ath[i].ath_num;/*返回项目编号*/
else
{
printf("\t\t没有该运动员名或编号\n");
returnNULL;
}
}
else
returnnn->ath[i].ath_name;
}
intLen_link_sport(Sport*head1)/*计算项目链表的长度*/
{
intn=0;
for(;head1!
=NULL;n++,head1=head1->next);
returnn;
}
intLen_link_school(School*head2)/*计算学校链表长度*/
{
intn=0;
for(;head2!
=NULL;n++,head2=head2->next);
returnn;
}
voidSwap_pointer(School**ptr1,School**ptr2)/*交换School型指针函数*/
{
School*temp;
temp=*ptr1;
*ptr1=*ptr2;
*ptr2=temp;
}
voidSwap_interger(int*a,int*b)
{
inttemp;
temp=*a;
*a=*b;
*b=temp;
}
voidSwap_string(char*str1,char*str2)
{
chartemp[20];
strcpy(temp,str1);
strcpy(str1,str2);
strcpy(str2,temp);
}
voidSort_athlete_rank(Sport*head1)
{
inti,j;
for(;head1!
=NULL;head1=head1->next)
{
if(atoi(head1->item_num)%2==0)/*如果是偶数项项目--取前三*/
{
for(i=0;i<3;i++)
for(j=0;j<3-i-1;j++)
if(head1->rank[j]>head1->rank[j+1])
{
Swap_interger(&head1->rank[j],&head1->rank[j+1]);/*交换排名*/
Swap_interger(&head1->score[j],&head1->score[j+1]);/*交换成绩*/
Swap_string(head1->ath_num[j],head1->ath_num[j+1]);/*交换运动员编号*/
Swap_string(head1->sch_num[j],head1->sch_num[j+1]);/*交换学校编号*/
Swap_string(head1->sex[j],head1->sex[j+1]);/*交换性别*/
}
}//"一定要注意悬挂if——else”
else/*是奇数--去前五*/
for(i=0;i<5;i++)
for(j=0;j<5-i-1;j++)
if(head1->rank[j]>head1->rank[j+1])
{
Swap_interger(&head1->rank[j],&head1->rank[j+1]);/*交换排名*/
Swap_interger(&head1->score[j],&head1->score[j+1]);/*交换成绩*/
Swap_string(head1->ath_num[j],head1->ath_num[j+1]);/*交换运动员编号*/
Swap_string(head1->sch_num[j],head1->sch_num[j+1]);/*交换学校编号*/
Swap_string(head1->sex[j],head1->sex[j+1]);/*交换性别*/
}
}
}
voidSearch_item_info(Num_name*nn,Sport*head1)/*查找项目信息*/
{
intsel,i;
charsear[20];
Sport*p=NULL;
Sort_athlete_rank(head1);/*一开始就对运动员按成绩排序或说按名次排序*/
printf("\t\t查找项目信息\n");
printf("\t\t按项目名查找(0),按项目编号查找
(1):
");
scanf("%d",&sel);
if(0==sel)/*按项目名查找*/
{
printf("\t\t请输入项目名:
");
scanf("%s",sear);
getchar();/*吃掉回车符*/
for(p=head1;p!
=NULL;p=p->next)
if(strcmp(p->item_num,Search_ite_num_name(nn,sear))==0)
{
if(strcmp(p->item_num,"2")==0)
{
FILE*fp=fopen("e:
\\gg.txt","w");
fprintf(fp,"\t\t%d\t%s\t%s\t%d\n",p->rank[1],Search_ath_num_name(nn,p->ath_num[1]),Search_sch_num_name(nn,p->sch_num[1]),p->score[1]);////
fprintf(fp,"\t\t%d\t%s\t%s\t%d\n",p->rank[2],Search_ath_num_name(nn,p->ath_num[2]),Search_sch_num_name(nn,p->sch_num[2]),p->score[2]);////
fprintf(fp,"\t\t%d\t%s\t%s\t%d\n",p->rank[3],Search_ath_num_name(nn,p->ath_num[3]),Search_sch_num_name(nn,p->sch_num[3]),p->score[3]);////
fclose(fp);
}
printf("\t\t-------------%s------------\n",p->type);
printf("\t\t名次\t姓名\t学校\t成绩\n");
if(atoi(p->item_num)%2==0)/*如果是偶数项项目--取前三*/
for(i=0;i<3;i++)
printf("\t\t%d\t%s\t%s\t%d\n",p->rank[i],Search_ath_num_name(nn,p->ath_num[i]),Search_sch_num_name(nn,p->sch_num[i]),p->score[i]);
else/*是奇数--取前五*/
for(i=0;i<5;i++)
printf("\t\t%d\t%s\t%s\t%d\n",p->rank[i],Search_ath_num_name(nn,p->ath_num[i]),Search_sch_num_name(nn,p->sch_num[i]),p->score[i]);
printf("\t\t----------------------------------------\n");
break;/*找到及时退出循环*/
}
if(p==NULL)/*没找到相应项目*/
printf("\t\t输入项目名错误!
\n");
}
elseif(1==sel)/*按项目编号查找*/
{
printf("\t\t请输入项目编号:
");
scanf("%s",sear);
getchar();/*吃掉回车符*/
for(p=head1;p!
=NULL;p=p->next)
if(strcmp(p->item_num,sear)==0)
{
printf("\t\t-------------%s------------\n",p->type);
printf("\t\t名次\t姓名\t学校\t成绩\n");
if(atoi(p->item_num)%2==0)/*如果是偶数项项目--取前三*/
for(i=0;i<3;i++)
printf("\t\t%d\t%s\t%s\t%d\n",p->rank[i],Search_ath_num_name(nn,p->ath_num[i]),Search_sch_num_name(nn,p->sch_num[i]),p->score[i]);
else/*是奇数--取前五*/
for(i=0;i<5;i++)
printf("\t\t%d\t%s\t%s\t%d\n",p->rank[i],Search_ath_num_name(nn,p->ath_num[i]),Search_sch_num_name(nn,p->sch_num[i]),p->score[i]);
printf("\t\t----------------------------------------\n");
break;/*找到及时退出循环*/
}
if(p==NULL)/*没找到相应项目*/
printf("\t\t输入项目编号错误!
\n");
}
else
printf("\t\tError!
你只能按项目编号或项目名查找\n");
}
voidModify_item_info(Num_name*nn,Sport*head1)/*修改项目信息*/
{
intsel,i;
charsear[20];
Sport*p=NULL;
Sort_athlete_rank(head1);/*一开始就对运动员按成绩排序或说按名次排序*/
printf("\t\t修改项目信息\n");
printf("\t\t按项目名查找(0),按项目编号查找
(1):
");
scanf("%d",&sel);
if(0==sel)/*按项目名查找*/
{
printf("\t\t请输入项目名:
");
scanf("%s",sear);
getchar();/*吃掉回车符*/
for(p=head1;p!
=NULL;p=p->next)
if(strcmp(p->item_num,Search_ite_num_name(nn,sear))==0)
{
chargo='y';
printf("\t\t-------------%s--------------\n",p->type);
printf("\t\t名次\t运动员编号\t学校编号\t成绩\n");
if(atoi(p->item_num)%2==0)/*如果是偶数项项目--取前三*/
for(i=0;i<3;i++)
printf("\t\t%d\t%s\t\t%s\t\t%d\n",p->rank[i],p->ath_num[i],p->sch_num[i],p->score[i]);
else/*是奇数--取前五*/
for(i=0;i<5;i++)
printf("\t\t%d\t%s\t\t%s\t\t%d\n",p->rank[i],p->ath_num[i],p->sch_num[i],p->score[i]);
printf("\t\t--------------------------------------------\n");
while(go=='y'||go=='Y')
{
intj,ra;
printf((atoi(p->item_num)%2==0)?
"\t\t第几名次需修改(1-3):
":
"\t\t第几名次需修改(1-5):
");
scanf("%d",&ra);
for(j=0;j<5;j++)/*当只取前三名时,rank[R]中其他内容为0*/
if(p->rank[j]==ra)
{
printf("\t\t名次修改为:
");
scanf("%d",&p->rank[j]);
printf("\t\t成绩修改为:
");
scanf("%d",&p->score[j]);
printf("\t\t运动员编号修改为:
");
scanf("%s",p->ath_num[j]);
printf("\t\t性别修改为:
");
scanf("%s",p->sex[j]);
printf("\t\t学校编号修改为:
");
scanf("%s",p->sch_num);
break;
}
if(5==j)
printf("\t\t您输入的名次有误,那最多只有1--5名\n");
printf("\t\t是否继续修改(Y/N):
");
scanf("%c",&go);
getchar();/*吃掉回车符*/
}
break;/*找到及时退出循环*/
}
if(p==NULL)/*没找到相应项目*/
printf("\t\t输入项目名错误!
\n");
}
elseif(1==sel)/*按项目编号查找*/
{
printf("\t\t请输入项目编号:
");
scanf("%s",sear);
getchar();/*吃掉回车符*/
for(p=head1;p!
=NULL;p=p->next)
if(strcmp(p->item_num,sear)==0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运动员 分数 统计 系统