首頁 > 軟體

C語言實現運動會管理系統

2022-05-30 18:01:41

本文範例為大家分享了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;              /*定義連結串列結點的結構體型別struct stunode,取別名STU*/ 
STU head;        /*定義頭結點head*/
char stu[20][20];        /*定義結構體陣列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;        /*定義整型N,M,W,用於初始化存放參賽院系總數、男子競賽專案數和女子競賽專案數*/
int k=0;        /*用於建立連結串列時的計數(區分首次建立連結串列和再次建立連結串列)*/ 
int main(int argc, char *argv[])
 {
     int i;
    int select;
    head.next=NULL;        /*將頭結點的next至為NULL*/ 
    printf("ttt------------------------n");
    printf("ttt*******系統初始化*******n");
    printf("ttt1.請輸入參賽院系總數:");
    scanf("%d",&N);    
    printf("ttt2.請輸入男子競賽專案數:");
    scanf("%d",&M);
    printf("ttt3.請輸入女子競賽專案數:");
    scanf("%d",&W);
    printf("ttt4.請輸入參賽的院系名:");
    for(i=0;i<N;i++)
    {
        scanf("%s",&stu[i])    ;
    }
    printf("nttt-----------------------n");
    printf("ttt  運動會參賽學院有:");
    for(i=0;i<N;i++)
    {
        printf("%s ",stu[i])    ;
    }
    printf("nttt");
    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("tt--------------------------n");
    printf("tt******運動會管理系統******n");
    printf("tt1.輸入專案獲獎資訊n"); 
    printf("tt2.查詢個人的比賽成績n"); 
    printf("tt3.查詢院系的比賽資訊n");
    printf("tt4.查詢院系的比賽成績n");
    printf("tt5.生成團體總分報表n");
    printf("tt6.檢視各專案獲獎運動員資訊n");
    printf("tt7.修改專案資訊n");
    printf("tt8.顯示所有資訊n");
    printf("tt0.退出n");
    printf("tt--------------------------n");
    return;
}

功能函數如下:

/*函數功能:建立某專案的n個獲獎資訊*/ 
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;            /*初始建立連結串列tail指向頭結點head*/ 
        printf("*請輸入參賽人數:");
        scanf("%d",&n);
        printf("n------------------------n");
        for(i=1;i<=n;i++)        /*輸入n個專案資訊到連結串列中*/ 
        {
            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賦給新結點的next*/
            p->next=NULL;        /*將新結點的地址賦給p所指結點的next*/
            tail=p;
        }
        if(strcmp(p->sport,sport4)==0||strcmp(p->sport,sport5)==0||strcmp(p->sport,sport6)==0)
        {
            for(i=0;i<j;i++)        /*初始化palce,grade2和grade1*/
            {
                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++)        /*初始化palce,grade2和grade1*/
            {
                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;        /*p1指向下一個結點*/ 
        }
        p5=&head;
        while(1)
        {
            if(p5->next==NULL)break;        /*當連結串列迴圈至尾部時結束迴圈*/ 
            p5=p5->next;        /*p1指向下一個結點*/ 
        }
        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賦給新的結點的next*/ 
            p1->next=p2;            /*將新的結點的地址賦給p1所指結點的next*/ 
            for(i=0;i<j;i++)        /*初始化palce,grade2和grade1*/ 
            {
                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++)        /*初始化palce,grade2和grade1*/ 
                {
                    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++)        /*初始化palce,grade2和grade1*/ 
                {
                    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;        /*p指向第一個結點*/ 
    printf("-------------------------------------n");
    printf("專案t性別t姓名t學院t成績t名次n");
    while(p!=NULL)        /*當p不為NULL*/ 
    {
        printf("%st%st%st%st%.2ft%dn",p->sport,p->sex,p->name,p->college,p->grade,p->rank);
        p=p->next;        /*p指向下一個結點*/ 
    }
    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;        /*p3指向第一個結點*/ 
    while(p3!=NULL)        /*當p3不為NULL*/
    {
        
        if(strcmp(p3->name,name1)==0)
        {
            goal=getscore(p3->rank);        /*呼叫getscore函數換算出名次所對應的分數*/ 
            printf("%st%st%st%st%.2ft%dt%dn",p3->sport,p3->sex,p3->name,p3->college,p3->grade,p3->rank,goal);
            tatal+=goal;
        }    
        p3=p3->next;        /*p3指向下一個結點*/ 
        
    } 
    printf("總分:%dn",tatal);
    return;
    
}
/*函數功能:釋放連結串列中所有存放運動專案資訊的結點*/ 
void freelist()
{
    STU *p;
    p=head.next;            /*從第一個結點開始釋放*/ 
    while(p!=NULL)            /*迴圈釋放連結串列中每個結點的空間*/
    {
        head.next=p->next;
        free(p);            /*釋放p指向的結點空間*/ 
        p=head.next;        /*指標變數p指向下一個待釋放的結點*/ 
    }
    return;
}
/*函數功能:查詢學院比賽資訊*/
void findcollege()
{
    STU *p4;
    p4=head.next;        /*p4指向第一個結點*/
    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("%st%st%st%st%.2ft%dn",p4->sport,p4->sex,p4->name,p4->college,p4->grade,p4->rank);
        }
        p4=p4->next;        /*p4指向下一個結點*/
    }
    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;        /*p3指向第一個結點*/ 
    while(p3!=NULL)
    {
        
        if(strcmp(p3->college,name1)==0)        /*如果相等,輸出連結串列*/
        {
            goal=getscore(p3->rank);
            printf("%st%st%st%st%.2ft%dt%dn",p3->sport,p3->sex,p3->name,p3->college,p3->grade,p3->rank,goal);
            tatal+=goal;
        }    
        p3=p3->next;        /*p3指向下一個結點*/
        
    } 
    printf("總分:%dn",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;        /*p3指向第一個結點*/
        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;        /*p3指向下一個結點*/
        }
        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*/ 
        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;        /*p3指向第一個結點*/
        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;        /*p3指向下一個結點*/
        }
        tatal2[p]=man2[p]+women2[p];
        printf("%st%dt%dt%dt%dn",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("%st%st%st%st%.2ft%dn",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;        /*p指向第一個結點*/
     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;        /*p指向下一個結點*/
     }
     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;
}

具體實現如下:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com