1. 程式人生 > >C語言版資料結構《運動會分數統計》

C語言版資料結構《運動會分數統計》

問題描述:參加運動會有n個學校,學校編號為1……n。比賽分成m個男子專案,和w個女子專案。專案編號為男子1……m,女子m+1……m+w。不同的專案取前五名或前三名積分;取前五名的積分分別為:7、5、3、2、1,前三名的積分分別為:5、3、2;哪些取前五名或前三名由學生自己設定。(m<=20,n<=20)。  功能要求:       1) 可以輸入各個學校各個專案的前三名或前五名的成績; 2) 能統計各學校總分;  3) 可以按學校編號或名稱、學校總分、男女團體總分排序輸出;  4) 可以按學校編號查詢學校某個專案的情況;可以按專案編號查詢取得前三或前五名的學校; 5) 資料存入檔案並能隨時查詢;  6) 規定:輸入資料形式和範圍:可以輸

入學校的名稱,運動專案的名稱





原始碼如下:

#include <stdio.h>
#include <stdlib.h>
#include <cstdlib>
#define n0 20          /*學校最大數目*/
#define m0 20          /*男子專案最大數目*/
#define w0 20          /*女子專案最大數目*/
typedef struct itemnode
{
int item[m0+w0+5][n0+1];
//item[1][0]-item[m0+w0][0]  存放專案編號
//item[0][1]-item[0][n]  存放學校編號
//item[1][]-item[m0][]  存放男子各專案成績
//item[m0+1][]-item[m0+w0][]存放女子各專案成績
//item[m0+w0+1][]存放男子各專案總成績
//item[m0+w0+2][]存放女子各專案總成績
//item[m0+w0+3][]存放學校各專案總成績
//item[m0+w0+4][]存放學校按總分排序的名次




}itemnode;             /*存放資訊*/
int main()
{
    int n,m,w;
    printf("              北京資訊科技大學運動會分數統計系統            \n");
    printf("\t\t\t歡迎使用\t\t\t\t\n\n");
    printf("該系統實現的功能有:\n");
    printf("              1.可以輸入各個專案的前三名或前五名的成績;\n");
    printf("              2.能統計各學校總分;\n");
    printf("              3.可以按學校編號、學校總分、男女團體總分排序輸出;\n");
    printf("              4.可以按學校編號查詢取得前三或者前五名的學校。\n");
    printf("實現功能2、3、4的前提是先錄入資訊!\n");
printf("請先輸入運動會主要資訊\n");                 /*設計運動會主要資料個數*/
    printf("輸入學校個數:");
scanf("%d",&n);
printf("輸入男子專案個數:");
    scanf("%d",&m);
printf("輸入女子專案個數:");
    scanf("%d",&w);
    int c;
    int i,j;
    struct itemnode a;


    for(i=1;i<n+1;i++)
{
   printf("請輸入第%d個學校編號:",i);
   scanf("%d",&a.item[0][i]);
   printf("\n");


}
for(j=1;j<m+1;j++)
{
   printf("請輸入第%d個男子專案編號:",j);
        scanf("%d",&a.item[j][0]);
        printf("\n");
    }
    for(j=m+1;j<m+w+1;j++)
    {
        printf("請輸入第%d個女子專案編號:",j-m);
        scanf("%d",&a.item[j][0]);
        printf("\n");
    }
    for(i=1;i<n+1;i++)
    {
        for(j=1;j<m+1;j++)
       {
           printf("請輸入第%d個學校第%d個男子專案成績:",i,j);
           scanf("%d",&a.item[j][i]);
           printf("\n");
       }
       for(j=m+1;j<m+w+1;j++)
       {
           printf("請輸入第%d個學校第%d個女子專案成績:",i,j-m);
           scanf("%d",&a.item[j][i]);
           printf("\n");
       }
    }


    for(i=1;i<n+1;i++)
    {
        a.item[m+w+1][i]=0;
        a.item[m+w+2][i]=0;
        a.item[m+w+3][i]=0;
        a.item[m+w+4][i]=0;
    }
    //下面計算各學校、各學校男子、女子專案總分
   for(i=1;i<n+1;i++)
    {
        for(j=1;j<m+w+1;j++)
        {
            a.item[m+w+3][i]+=a.item[j][i];//學校專案總分
        }
    }
    for(i=1;i<n+1;i++)
    {
        for(j=1;j<m+1;j++)
        {
            a.item[m+w+1][i]+=a.item[j][i];//男子專案總分
        }
    }
    for(i=1;i<n+1;i++)
    {
        for(j=m+1;j<m+w+1;j++)
        {
            a.item[m+w+2][i]+=a.item[j][i];//女子專案總分
        }
    }
    printf("****************************************排序輸出*************************************\n");
    //插入排序啦  很簡單的
    int temp,temp1;
    int xu;
    for(i=2;i<n+1;i++)
    {
        temp=a.item[m+w+3][i];
        for(j=i-1;j>=1&&temp>a.item[m+w+3][j];j--)//尋找插入位置
        {
            a.item[m+w+3][j+1]=a.item[m+w+3][j];//交換總分列
            for(xu=0;xu<m+w+4;xu++)
            {
                if(xu!=m+w+3)//除了總分那一列不交換 其他的都交換  因為總分的那一列在上面交換
                {
                    temp1=a.item[xu][j+1];
                    a.item[xu][j+1]=a.item[xu][j];
                    a.item[xu][j]=temp1;
                }
            }
        }
        a.item[m+w+3][j+1]=temp;//小魚於當前值的,插到當前值後面
    }
    //賦值名次
    for(i=1;i<n+1;i++)
    {
        a.item[m+w+4][i]=i;
    }
for(i=0;i<n+1;i++)
    {
        for(j=0;j<w+m+5;j++)
        {
            if(i==0)
            {
                if(j==0)
                {
                    printf("\t");
                }
                else if(j>=1&&j<m+1)
                {
                    printf("男子專案%d\t",a.item[j][i]);
                }
                else if(j>=m+1&&j<m+w+1)
                {
                    printf("女子專案%d\t",a.item[j][i]);
                }
                else if(j==m+w+1)
                {
                    printf("男子專案總成績\t");
                }
                else if(j==m+w+2)
                {
                    printf("女子專案總成績\t");
                }
                else if(j==m+w+3)
                {
                    printf("學校總成績\t");
                }
                else if(j==m+w+4)
                {
                    printf(" 名次\t");
                }
            }
            else if(j==0)
            {
                if(i!=0)
                {
                    printf("學校%d\t",a.item[j][i]);
                }
            }
            else
            {
                printf("  %d\t\t",a.item[j][i]);
            }


        }
        printf("\n");
    }
    int s;
    printf("\t\t*******1.按學校總分排序輸出*******\n");
    printf("\t\t*******2.按學校編號輸出*******\n");
    printf("\t\t*******3.按男團總分排序輸出*******\n");
    printf("\t\t*******4.按女團總分排序輸出*******\n");
    printf("\n\n");
printf("請選擇要實現輸出功能的編號(1——4):");
scanf("%d",&s);
    switch(s)
{
case 1:


{
  for(i=0;i<n+1;i++)
    {
        for(j=0;j<w+m+5;j++)
        {
            if(i==0)
            {
                if(j==0)
                {
                    printf("\t");
                }
                else if(j>=1&&j<m+1)
                {
                    printf("男子專案%d\t",a.item[j][i]);
                }
                else if(j>=m+1&&j<m+w+1)
                {
                    printf("女子專案%d\t",a.item[j][i]);
                }
                else if(j==m+w+1)
                {
                    printf("男子專案總成績\t");
                }
                else if(j==m+w+2)
                {
                    printf("女子專案總成績\t");
                }
                else if(j==m+w+3)
                {
                    printf("學校總成績\t");
                }
                else if(j==m+w+4)
                {
                    printf(" 名次\t");
                }
            }
            else if(j==0)
            {
                if(i!=0)
                {
                    printf("學校%d\t",a.item[j][i]);
                }
            }
            else
            {
                printf("  %d\t\t",a.item[j][i]);
            }


        }
        printf("\n");
    }
        }break;
    case 2:
{ //學校編號排序
   for(i=2;i<n+1;i++)
    {
        temp=a.item[0][i];
        for(j=i-1;j>=1&&temp<a.item[0][j];j--)//尋找插入位置
        {
            a.item[0][j+1]=a.item[0][j];//交換學校列
            for(xu=0;xu<m+w+5;xu++)
            {
                if(xu!=0)//除了學校那一列不交換 其他的都交換  因為學校的那一列在上面交換
                {
                    temp1=a.item[xu][j+1];
                    a.item[xu][j+1]=a.item[xu][j];
                    a.item[xu][j]=temp1;
                }
            }
        }
        a.item[0][j+1]=temp;//小魚於當前值的,插到當前值後面
    }
     for(i=0;i<n+1;i++)
    {
        for(j=0;j<w+m+5;j++)
        {
            if(i==0)
            {
                if(j==0)
                {
                    printf("\t");
                }
                else if(j>=1&&j<m+1)
                {
                    printf("男子專案%d\t",a.item[j][i]);
                }
                else if(j>=m+1&&j<m+w+1)
                {
                    printf("女子專案%d\t",a.item[j][i]);
                }
                else if(j==m+w+1)
                {
                    printf("男子專案總成績\t");
                }
                else if(j==m+w+2)
                {
                    printf("女子專案總成績\t");
                }
                else if(j==m+w+3)
                {
                    printf("學校總成績\t");
                }
                else if(j==m+w+4)
                {
                    printf(" 名次\t");
                }
            }
            else if(j==0)
            {
                if(i!=0)
                {
                    printf("學校%d\t",a.item[j][i]);
                }
            }
            else
            {
                printf("  %d\t\t",a.item[j][i]);
            }


        }
        printf("\n");
    }
};break;
    case 3:
{
    for(i=2;i<n+1;i++)
    {
        temp=a.item[m+w+1][i];
        for(j=i-1;j>=1&&temp>a.item[m+w+1][j];j--)//尋找插入位置
        {
            a.item[m+w+1][j+1]=a.item[m+w+1][j];//交換男子總分列
            for(xu=0;xu<m+w+5;xu++)
            {
                if(xu!=m+w+1)//除了男子總分那一列不交換 其他的都交換  因為男子總分的那一列在上面交換
                {
                    temp1=a.item[xu][j+1];
                    a.item[xu][j+1]=a.item[xu][j];
                    a.item[xu][j]=temp1;
                }
            }
        }
        a.item[m+w+1][j+1]=temp;//小魚於當前值的,插到當前值後面
    }
     for(i=0;i<n+1;i++)
    {
        for(j=0;j<w+m+5;j++)
        {
            if(i==0)
            {
                if(j==0)
                {
                    printf("\t");
                }
                else if(j>=1&&j<m+1)
                {
                    printf("男子專案%d\t",a.item[j][i]);
                }
                else if(j>=m+1&&j<m+w+1)
                {
                    printf("女子專案%d\t",a.item[j][i]);
                }
                else if(j==m+w+1)
                {
                    printf("男子專案總成績\t");
                }
                else if(j==m+w+2)
                {
                    printf("女子專案總成績\t");
                }
                else if(j==m+w+3)
                {
                    printf("學校總成績\t");
                }
                else if(j==m+w+4)
                {
                    printf(" 名次\t");
                }
            }
            else if(j==0)
            {
                if(i!=0)
                {
                    printf("學校%d\t",a.item[j][i]);
                }
            }
            else
            {
                printf("  %d\t\t",a.item[j][i]);
            }


        }
        printf("\n");
    }
   }break;
    case 4:
{
     for(i=2;i<n+1;i++)
    {
        temp=a.item[m+w+2][i];
        for(j=i-1;j>=1&&temp>a.item[m+w+2][j];j--)//尋找插入位置
        {
            a.item[m+w+2][j+1]=a.item[m+w+2][j];//交換女子總分列
            for(xu=0;xu<m+w+5;xu++)
            {
                if(xu!=m+w+2)//除了女子總分那一列不交換 其他的都交換  因為女子總分的那一列在上面交換
                {
                    temp1=a.item[xu][j+1];
                    a.item[xu][j+1]=a.item[xu][j];
                    a.item[xu][j]=temp1;
                }
            }
        }
        a.item[m+w+2][j+1]=temp;//小魚於當前值的,插到當前值後面
    }
     for(i=0;i<n+1;i++)
    {
        for(j=0;j<w+m+5;j++)
        {
            if(i==0)
            {
                if(j==0)
                {
                    printf("\t");
                }
                else if(j>=1&&j<m+1)
                {
                    printf("男子專案%d\t",a.item[j][i]);
                }
                else if(j>=m+1&&j<m+w+1)
                {
                    printf("女子專案%d\t",a.item[j][i]);
                }
                else if(j==m+w+1)
                {
                    printf("男子專案總成績\t");
                }
                else if(j==m+w+2)
                {
                    printf("女子專案總成績\t");
                }
                else if(j==m+w+3)
                {
                    printf("學校總成績\t");
                }
                else if(j==m+w+4)
                {
                    printf(" 名次\t");
                }
            }
            else if(j==0)
            {
                if(i!=0)
                {
                    printf("學校%d\t",a.item[j][i]);
                }
            }
            else
            {
                printf("  %d\t\t",a.item[j][i]);
            }
        }
        printf("\n");
    }
   }break;
    }
    //下面為查詢模組
    printf("**************************************查詢模組***********************************\n");
    int bianhao;
    printf("請輸入要查詢的學校編號:");
    scanf("%d",&bianhao);
    printf("\n");
    for(i=1;i<n+1;i++)
    {
        if(a.item[0][i]==bianhao)
        {
            printf("該學校的各項成績及各項總分和名次如下:\n");
            for(j=0;j<m+w+5;j++)
            {
                if(j==0)
                {
                    printf("\t");
                }
                else if(j>=1&&j<m+1)
                {
                    printf("男子專案%d\t",a.item[j][0]);
                }
                else if(j>=m+1&&j<m+w+1)
                {
                    printf("女子專案%d\t",a.item[j][0]);
                }
                else if(j==m+w+1)
                {
                    printf("男子專案總成績\t");
                }
                else if(j==m+w+2)
                {
                    printf("女子專案總成績\t");
                }
                else if(j==m+w+3)
                {
                    printf("學校總成績\t");
                }
                else if(j==m+w+4)
                {
                    printf(" 名次\t");
                }
            }
            printf("\n");
            for(j=0;j<w+m+5;j++)
            {
                if(j==0)
                {
                    printf("學校%d\t",a.item[0][i]);
                }
                else
                {
                    printf("  %d\t\t",a.item[j][i]);
                }
            }
        }
    }
    printf("\n");
    int bianhao1;
    printf("請輸入要查詢的專案編號:");
    scanf("%d",&bianhao1);
    printf("\n");


     for(i=2;i<n+1;i++)
    {
        temp=a.item[m+w+3][i];
        for(j=i-1;j>=1&&temp>a.item[m+w+3][j];j--)//尋找插入位置
        {
            a.item[m+w+3][j+1]=a.item[m+w+3][j];//交換總分列
            for(xu=0;xu<m+w+5;xu++)
            {
                if(xu!=m+w+3)//除了總分那一列不交換 其他的都交換  因為總分的那一列在上面交換
                {
                    temp1=a.item[xu][j+1];
                    a.item[xu][j+1]=a.item[xu][j];
                    a.item[xu][j]=temp1;
                }
            }
        }
        a.item[m+w+3][j+1]=temp;//小魚於當前值的,插到當前值後面
    }
    int s2;
    printf("請輸入要查詢該專案名次的個數(3或5):");
    scanf("%d",&s2);
    switch(s2)
{
case 3:
{
            for(j=1;j<m+w+1;j++)
            {
                if(a.item[j][0]==bianhao1)
                {
                    for(i=1;i<4;i++)
                    {
                        printf("學校%d\t",a.item[0][i]);
                        printf("專案%d  成績:%d\t",a.item[j][0],a.item[j][i]);
                        printf("\n");
                    }
                }
            }
        }break;
    case 5:
{
            for(j=1;j<m+w+1;j++)
            {
                if(a.item[j][0]==bianhao1)
                {
                    for(i=1;i<6;i++)
                    {
                        printf("學校%d\t",a.item[0][i]);
                        printf("專案%d  成績:%d\t",a.item[j][0],a.item[j][i]);
                        printf("\n");
                    }
                }
            }
        }break;
    }
    return 0;
}