C语言实现运动会管理系统
本文实例为大家分享了C语言实现运动会管理系统的具体代码,供大家参考,具体内容如下
问题描述:
(1) 初始化输入:N-参赛院系总数,M-男子竞赛项目数,W-女子竞赛项目数;
(2) 各项目名次取法有如下几种:
取前5名:第1名得分 7,第2名得分 5,第3名得分3,第4名得分2,第5名得分 1;
(3) 由程序提醒用户填写比赛结果,输入各项目获奖运动员的信息。
(4) 所有信息记录完毕后,用户可以查询各个院系或个人的比赛成绩,生成团体总分报表,查看参赛院系信息、获奖运动员、比赛项目信息等。
C语言实现程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct stunode
{
char sport[20];
char sex[10];
char name[10];
char college[20];
char grade[10];
int rank;
struct stunode *next;
}STU;
STU head;
char stu[20][20];
void maininterface();
void createList();
void printall();
void findperson();
void findcollege();
void freelist();
void findcollogescore();
void modify();
void allscore();
void getprize();
int getscore();
int N,M,W;
int k=0;
int main(int arGC, char *argv[])
{
int i;
int select;
head.next=NULL;
printf("\t\t\t------------------------\n");
printf("\t\t\t*******系统初始化*******\n");
printf("\t\t\t1.请输入参赛院系总数:");
scanf("%d",&N);
printf("\t\t\t2.请输入男子竞赛项目数:");
scanf("%d",&M);
printf("\t\t\t3.请输入女子竞赛项目数:");
scanf("%d",&W);
printf("\t\t\t4.请输入参赛的院系名:");
for(i=0;i<N;i++)
{
scanf("%s",&stu[i]) ;
}
printf("\n\t\t\t-----------------------\n");
printf("\t\t\t 运动会参赛学院有:");
for(i=0;i<N;i++)
{
printf("%s ",stu[i]) ;
}
printf("\n\t\t\t");
system("pause");
while(1)
{
maininterface();
printf("\n*请选择需要的操作:");
scanf("%d",&select);
fflush(stdin);
switch(select)
{
case 1:createList();break;
case 2:findperson();break;
case 3:findcollege();break;
case 4:findcollogescore();break;
case 5:allscore();break;
case 6:getprize();break;
case 7:modify();break;
case 8:printall();break;
case 0:freelist();exit(0);
default:printf("输入错误!\n");
}
system("pause");
}
return 0;
}
void maininterface()
{
system("cls");
printf("\t\t--------------------------\n");
printf("\t\t******运动会管理系统******\n");
printf("\t\t1.输入项目获奖信息\n");
printf("\t\t2.查询个人的比赛成绩\n");
printf("\t\t3.查询院系的比赛信息\n");
printf("\t\t4.查询院系的比赛成绩\n");
printf("\t\t5.生成团体总分报表\n");
printf("\t\t6.查看各项目获奖运动员信息\n");
printf("\t\t7.修改项目信息\n");
printf("\t\t8.显示所有信息\n");
printf("\t\t0.退出\n");
printf("\t\t--------------------------\n");
return;
}
功能函数如下:
void createList()
{
int i,n,j=0;
int a,b;
float c;
int grade1[60],grade2[60];
int place[60];
char sport4[20]="跳高",sport5[20]="跳高",sport6[20]="铅球";
STU *p,*tail,*p3;
if(k==0)
{
k++;
if(head.next!=NULL)
{
printf("项目获奖链表已创建!\n");
return;
}
tail=&head;
printf("*请输入参赛人数:");
scanf("%d",&n);
printf("\n------------------------\n");
for(i=1;i<=n;i++)
{
p=(STU *)malloc(sizeof(STU));
if(p==NULL)
{
printf("建立链表时内存分配失败!\n");
return;
}
printf("项目 性别 姓名 学院 成绩\n");
scanf("%s%s%s%s%f",p->sport,p->sex,p->name,p->college,&p->grade);
p->rank=0;
grade1[j]=p->grade;
j++;
tail->next=p;
p->next=NULL;
tail=p;
}
if(strcmp(p->sport,sport4)==0||strcmp(p->sport,sport5)==0||strcmp(p->sport,sport6)==0)
{
for(i=0;i<j;i++)
{
place[i]=0;
grade2[i]=0;
}
for(i=0;i<j;i++)
{
grade2[i]=grade1[i];
}
for(a=0;a<j-1;a++)
{
for(b=0;b<j-a-1;b++)
{
if(grade2[b]<grade2[b+1])
{
c=grade2[b];
grade2[b]=grade2[b+1];
grade2[b+1]=c;
}
}
}
for(i=0;i<j;i++)
{
for(a=0;a<j;a++)
{
if(grade2[i]==grade1[a])
{
place[a]=i+1;
}
}
}
p3=head.next;
for(i=0;i<j;i++)
{
p3->rank=place[i];
p3=p3->next;
}
}else{
for(i=0;i<j;i++)
{
place[i]=0;
grade2[i]=0;
}
for(i=0;i<j;i++)
{
grade2[i]=grade1[i];
}
for(a=0;a<j-1;a++)
{
for(b=0;b<j-a-1;b++)
{
if(grade2[b]>grade2[b+1])
{
c=grade2[b];
grade2[b]=grade2[b+1];
grade2[b+1]=c;
}
}
}
for(i=0;i<j;i++)
{
for(a=0;a<j;a++)
{
if(grade2[i]==grade1[a])
{
place[a]=i+1;
}
}
}
p3=head.next;
for(i=0;i<j;i++)
{
p3->rank=place[i];
p3=p3->next;
}
}
return;
}
if(k==1)
{
j=0;
STU *p1,*p2,*p5;
p1=&head;
while(1)
{
if(p1->next==NULL)break;
p1=p1->next;
}
p5=&head;
while(1)
{
if(p5->next==NULL)break;
p5=p5->next;
}
printf("请输入参赛人数:");
scanf("%d",&n);
for(i=1;i<=n;i++){
p2=(STU*)malloc(sizeof(STU));
if(p2==NULL)
{
printf("动态内存分配失败!");
return;
}
printf("项目 性别 姓名 学院 成绩\n");
scanf("%s%s%s%s%f",p2->sport,p2->sex,p2->name,p2->college,&p2->grade);
p2->rank=0;
grade1[j]=p2->grade;
j++;
p2->next=p1->next;
p1->next=p2;
for(i=0;i<j;i++)
{
place[i]=0;
grade2[i]=0;
}
a=0;
b=0;
c=0;
if(strcmp(p2->sport,sport4)==0||strcmp(p2->sport,sport5)==0||strcmp(p2->sport,sport6)==0)
{
for(i=0;i<j;i++)
{
place[i]=0;
grade2[i]=0;
}
for(i=0;i<j;i++)
{
grade2[i]=grade1[i];
}
for(a=0;a<j-1;a++)
{
for(b=0;b<j-a-1;b++)
{
if(grade2[b]<grade2[b+1])
{
c=grade2[b];
grade2[b]=grade2[b+1];
grade2[b+1]=c;
}
}
}
for(i=0;i<j;i++)
{
for(a=0;a<j;a++)
{
if(grade2[i]==grade1[a])
{
place[a]=i+1;
}
}
}
p3=p5;
for(i=0;i<j;i++)
{
p3=p3->next;
p3->rank=place[i];
}
}else{
for(i=0;i<j;i++)
{
place[i]=0;
grade2[i]=0;
}
for(i=0;i<j;i++)
{
grade2[i]=grade1[i];
}
for(a=0;a<j-1;a++)
{
for(b=0;b<j-a-1;b++)
{
if(grade2[b]<grade2[b+1])
{
c=grade2[b];
grade2[b]=grade2[b+1];
grade2[b+1]=c;
}
}
}
for(i=0;i<j;i++)
{
for(a=0;a<j;a++)
{
if(grade2[i]==grade1[a])
{
place[a]=i+1;
}
}
}
p3=p5;
for(i=0;i<j;i++)
{
p3=p3->next;
p3->rank=place[i];
}
}
}
return;
}
}
void printall()
{
STU *p;
if(head.next==NULL)
{
printf("未创建学生链表!\n");
return;
}
p=head.next;
printf("-------------------------------------\n");
printf("项目\t性别\t姓名\t学院\t成绩\t名次\n");
while(p!=NULL)
{
printf("%s\t%s\t%s\t%s\t%.2f\t%d\n",p->sport,p->sex,p->name,p->college,p->grade,p->rank);
p=p->next;
}
return;
}
void findperson()
{
int tatal,Goal;
char name1[10];
printf("*请输入查询的运动员姓名:");
scanf("%s",&name1);
printf("--------------------------------------------\n");
printf("项目\t性别\t姓名\t学院\t名次\t成绩\t得分\n");
STU *p3;
p3=head.next;
while(p3!=NULL)
{
if(strcmp(p3->name,name1)==0)
{
goal=getscore(p3->rank);
printf("%s\t%s\t%s\t%s\t%.2f\t%d\t%d\n",p3->sport,p3->sex,p3->name,p3->college,p3->grade,p3->rank,goal);
tatal+=goal;
}
p3=p3->next;
}
printf("总分:%d\n",tatal);
return;
}
void freelist()
{
STU *p;
p=head.next;
while(p!=NULL)
{
head.next=p->next;
free(p);
p=head.next;
}
return;
}
void findcollege()
{
STU *p4;
p4=head.next;
char college1[10];
printf("*请输入查询的学院:");
scanf("%s",&college1);
printf("-------------------------------------\n");
printf("项目\t性别\t姓名\t学院\t成绩\t名次\n");
while(p4!=NULL)
{
if(strcmp(p4->college,college1)==0)
{
printf("%s\t%s\t%s\t%s\t%.2f\t%d\n",p4->sport,p4->sex,p4->name,p4->college,p4->grade,p4->rank);
}
p4=p4->next;
}
return;
}
int getscore(score1)
{
int n=0;
if(score1==1)
{
n=7;
return n;
}else if(score1==2)
{
n=5;
return n;
}else if(score1==3)
{
n=3;
return n;
}else if(score1==4)
{
n=2;
return n;
}else if(score1==5)
{
n=1;
return n;
}else
{
n=0;
return n;
}
return;
}
void findcollogescore()
{
int tatal,goal;
char name1[20];
printf("*请输入查询的学院:");
scanf("%s",&name1);
printf("--------------------------------------------\n");
printf("项目\t性别\t姓名\t学院\t成绩\t名次\t得分\n");
STU *p3;
p3=head.next;
while(p3!=NULL)
{
if(strcmp(p3->college,name1)==0)
{
goal=getscore(p3->rank);
printf("%s\t%s\t%s\t%s\t%.2f\t%d\t%d\n",p3->sport,p3->sex,p3->name,p3->college,p3->grade,p3->rank,goal);
tatal+=goal;
}
p3=p3->next;
}
printf("总分:%d\n",tatal);
return;
}
void allscore()
{
int tatal[60],goal=0,i,man[60],women[60],pla[60],data[60],tatal2[60],man2[60],women2[60];
STU *p3;
char ma[10]={"男"};
char wo[10]={"女"};
printf("-------------------------------------\n");
printf("院系\t男子\t女子\t总分\t排名\n");
for(i=0;i<N;i++)
{
p3=head.next;
tatal[i]=0;
man[i]=0;
women[i]=0;
while(p3!=NULL)
{
if(strcmp(p3->college,stu[i])==0&&strcmp(p3->sex,ma)==0)
{
goal=getscore(p3->rank);
man[i]+=goal;
}
if(strcmp(p3->college,stu[i])==0&&strcmp(p3->sex,wo)==0)
{
goal=getscore(p3->rank);
women[i]+=goal;
}
p3=p3->next;
}
tatal[i]=man[i]+women[i];
}
for(i=0;i<N;i++)
{
data[i]=tatal[i];
}
int a,b,c;
for(a=0;a<N-1;a++)
{
for(b=0;b<N-a-1;b++)
{
if(data[b]<data[b+1])
{
c=data[b];
data[b]=data[b+1];
data[b+1]=c;
}
}
}
for(i=0;i<N;i++){
pla[i]=0;
}
for(i=0;i<N;i++)
{
for(a=0;a<N;a++)
{
if(data[i]==tatal[a])
{
pla[a]=i+1;
}
}
}
int p;
for(p=0;p<N;p++)
{
p3=head.next;
man2[p]=0;
women2[p]=0;
while(p3!=NULL)
{
if(strcmp(p3->college,stu[p])==0&&strcmp(p3->sex,ma)==0)
{
goal=getscore(p3->rank);
man2[p]+=goal;
}
if(strcmp(p3->college,stu[p])==0&&strcmp(p3->sex,wo)==0)
{
goal=getscore(p3->rank);
women2[p]+=goal;
}
p3=p3->next;
}
tatal2[p]=man2[p]+women2[p];
printf("%s\t%d\t%d\t%d\t%d\n",stu[p],man2[p],women2[p],tatal2[p],pla[p]);
}
return;
}
void getprize()
{
STU *p;
int i,j;
p=&head;
printf("-------------------------------------\n");
printf("各项目前三名信息如下:\n") ;
printf("项目\t性别\t姓名\t学院\t成绩\t名次\n");
while(p!=NULL)
{
if((p->rank)>=1&&(p->rank)<=3)
{
printf("%s\t%s\t%s\t%s\t%.2f\t%d\n",p->sport,p->sex,p->name,p->college,p->grade,p->rank);
}
p=p->next;
}
return;
}
void modify()
{
int n,i;
char sport1[20],sex1[10],name1[10],college1[20];
STU *p,*p1;
p=head.next;
printf("请输入要修改位置的相关信息:\n");
printf("项目 性别 姓名 学院\n");
scanf("%s%s%s%s",&sport1,&sex1,&name1,&college1);
if(head.next==NULL)
{
printf("未创建项目链表!");
return;
}
while(p!=NULL)
{
if(strcmp(p->sport,sport1)==0&&strcmp(p->sex,sex1)==0&&strcmp(p->name,name1)==0&&strcmp(p->college,college1)==0)
{
p1=p;
break;
}
p=p->next;
}
char sport2[10]="项目",sex2[10]="性别",name2[10]="姓名",college2[10]="学院",grade2[10]="成绩",rank2[10]="名次";
char xiugai[10];
printf("请输入要修改的信息:");
scanf("%s",&xiugai);
if(xiugai[1]==sport2[1])
{
printf("请输入修改后的内容:") ;
scanf("%s",p1->sport);
printf("修改成功!") ;
}else if(xiugai[1]==sex2[1])
{
printf("请输入修改后的内容:") ;
scanf("%s",p1->sex);
printf("修改成功!") ;
}else if(xiugai[1]==name2[1])
{
printf("请输入修改后的内容:") ;
scanf("%s",p1->name);
printf("修改成功!") ;
}else if(xiugai[1]==college2[1])
{
printf("请输入修改后的内容:") ;
scanf("%s",p1->college);
printf("修改成功!") ;
}else if(xiugai[1]==grade2[1])
{
printf("请输入修改后的内容:") ;
scanf("%f",p1->grade);
printf("修改成功!") ;
}else if(xiugai[1]==rank2[1])
{
printf("请输入修改后的内容:") ;
scanf("%d",&p1->rank);
printf("修改成功!") ;
}
return;
}
具体实现如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关文章