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

本文實例為大傢分享瞭C語言實現校運動會項目管理系統的具體代碼,供大傢參考,具體內容如下

源碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3 //參與運動會的學院數目
//定義一個結構體
typedef struct project
{
    char xiangmu[40];     //比賽項目名稱
    char name[N][40];     //學院名稱
    float score[N];       //單項成績
    int no[N];            //單項名次
    struct project *next; //指向下一節點的指針
} Proj;

typedef struct sumno
{
    char name[40];
    float sum;
} SumNo;
//函數聲明放在這裡
void ListCreate(Proj *L, int n); //創建鏈表節點
void ListSearch(Proj *L);        //查找某個運動會項目信息
void ListModify(Proj *L);        //修改某個運動會項目信息
void ListDelete(Proj *L);        //刪除某個運動會項目信息
void Input(Proj *p, int i);      //輸入運動會項目信息
void Output(Proj *L);            //輸出每個運動會項目的學院成績排名信息
void PerRank(Proj *L);           //計算每個運動會項目的學院成績排名並輸出
void SumRank(Proj *L);           //所有項目每個學院的總成績和排名
void Menu();                     //校運動會項目管理系統的菜單

//校運動會項目管理系統的主函數入口
int main()
{
    int item, n;                      //item用於接收輸入的命令,n用於接收輸入的項目數
    Proj *L = NULL;                   //初始化一個頭節點
    L = (Proj *)malloc(sizeof(Proj)); //為頭節點開辟內存空間
    L->next = NULL;                   //將頭節點的指針域置空
    do
    {
        Menu(); //菜單
        printf("請輸入相應的數字,進行相應的操作:\n");
        scanf("%d", &item);
        system("cls");
        switch (item)
        {
        case 1:
            printf("請輸入您要錄入的項目數目:");
            scanf("%d", &n);
            ListCreate(L, n); //創建項目鏈表節點
            getchar();
            printf("\n請按任意鍵返回主菜單\n");
            getchar();
            system("cls");
            break;
        case 2:
            ListSearch(L); //查找項目的相關信息
            getchar();
            printf("\n請按任意鍵返回主菜單\n");
            getchar();
            system("cls");
            break;
        case 3:
            ListModify(L); //修改項目信息
            getchar();
            printf("\n請按任意鍵返回主菜單\n");
            getchar();
            system("cls");
            break;
        case 4:
            ListDelete(L); //刪除項目的信息
            getchar();
            printf("\n請按任意鍵返回主菜單\n");
            getchar();
            system("cls");
            break;
        case 5:
            PerRank(L); //計算每個運動會項目的學院成績排名
            Output(L);  //輸出每個運動會項目的學院成績排名信息
            getchar();
            printf("\n請按任意鍵返回主菜單\n");
            getchar();
            system("cls");
            break;
        case 6:
            SumRank(L); //所有項目每個學院的總成績和排名
            getchar();
            printf("\n請按任意鍵返回主菜單\n");
            getchar();
            system("cls");
            break;
        case 0:
            printf("即將退出校運動會項目管理系統....."); //退出校運動會項目管理系統
            exit(0);
        default:
            printf("您輸入的指令不正確,請重新輸入");
        }
        printf("\n\n");
    } while (item);
    return 0;
}

//創建鏈表,將新生成的節點插入到鏈表的表頭
void ListCreate(Proj *L, int n)
{
    int i;
    for (i = 0; i < n; i++)
    {
        Proj *p;
        //將新生成的節點插入到鏈表中
        p = NULL;
        p = (Proj *)malloc(sizeof(Proj));
        Input(p, i);
        p->next = L->next;
        L->next = p;
    }
}

//查找項目信息
void ListSearch(Proj *L)
{
    int k;
    char n[40];
    Proj *p = L->next;
    if (p == NULL)
        printf("數據為空,無法查找!");
    else
    {
        printf("請輸入您要查找的項目名稱:");
        scanf("%s", n);
        while (strcmp(p->xiangmu, n) != 0)
        {
            p = p->next;
            if (p == NULL)
            {
                printf("沒有找到相關信息\n");
                return;
            }
        }
        PerRank(L);
        printf("該項目的相關信息如下:\n");
        printf("學院名稱\t單項成績\t單項名次\n\n");
        for (k = 0; k < N; k++)
        {
            printf("%s\t\t", *((p->name) + k));
            printf("%.2f\t\t", *((p->score) + k));
            printf("%d\t\n", *((p->no) + k));
        }
        printf("\n\n");
    }
}

//修改項目的相關信息
void ListModify(Proj *L)
{
    int item, k, a;
    char n[40], m[40];
    Proj *p = L->next;
    if (p == NULL)
        printf("數據為空,無法修改!");
    else
    {
        printf("請輸入您要修改的項目名稱:");
        scanf("%s", n);
        while (strcmp(p->xiangmu, n) != 0)
        {
            p = p->next;
            if (p == NULL)
            {
                printf("沒有找到相關信息\n");
                return;
            }
        }
        printf("您是否需要修改項目名稱(是輸入1,不是輸入0):");
        scanf("%d", &a);
        if (a == 1)
        {
            printf("請輸入您修改後的項目名稱:");
            scanf("%s", m);
            strcpy(p->xiangmu, m);
            printf("修改成功!");
        }
        else if (a == 0)
        {
            printf("請輸入您要修改的學院:");
            scanf("%s", n);
            for (k = 0; k < N; k++)
            {
                if (strcmp(*((p->name) + k), n) == 0)
                    break;
            }
            printf("請輸入你要修改的項目信息類型:\n");
            printf("1、學院名稱\n2、該學院該項目的成績\n");
            scanf("%d", &item);
            switch (item)
            {
            case 1:
                printf("請輸入修改後的學院名稱:");
                scanf("%s", m);
                strcpy(*((p->name) + k), m);
                printf("修改成功");
                break;
            case 2:
                printf("請輸入您修改後的該學院該項目的成績:");
                scanf("%f", (p->score) + k);
                printf("修改成功");
                break;
            default:
                printf("您輸入的指令錯誤!");
                break;
            }
        }
        else
            printf("您輸入錯誤!");
    }
}

//刪除項目的相關信息
void ListDelete(Proj *L)
{
    char n[40];
    Proj *p = L->next, *pre = L; //定義p指針指向頭節點的指向,定義pre指向頭節點,pre始終指向p的前驅節點
    if (p == NULL)
        printf("數據為空,無法刪除!");
    else
    {
        printf("請輸入您要刪除的項目名稱:");
        scanf("%s", n);
        while (strcmp(p->xiangmu, n) != 0)
        {
            pre = p;
            p = pre->next;
            if (p == NULL)
            {
                printf("沒有找到相關信息,無法刪除\n");
                return;
            }
        }
        pre->next = p->next;
        free(p);
        printf("刪除成功");
    }
}

//計算每個運動會項目的學院成績排名
void PerRank(Proj *L)
{
    int i, j, k;
    float t;
    char na[40] = {' '};
    Proj *p = L->next;
    if (p == NULL)
        printf("數據為空,無法排序!");
    else
    {
        while (p != NULL)
        {
            for (i = 0; i < N; i++)
            {
                for (j = 0; j < N - i - 1; j++)
                {
                    if (*((p->score) + j) < *((p->score) + j + 1))
                    {
                        t = *((p->score) + j);
                        *((p->score) + j) = *((p->score) + j + 1);
                        *((p->score) + j + 1) = t;
                        strcpy(na, *((p->name) + j));
                        strcpy(*((p->name) + j), *((p->name) + j + 1));
                        strcpy(*((p->name) + j + 1), na);
                    }
                }
            }
            for (k = 0; k < N; k++)
                *((p->no) + k) = k + 1;
            p = p->next;
        }
    }
}

//所有項目每個學院的總成績和排名;
void SumRank(Proj *L)
{
    int i, j, k;
    float t;
    SumNo s[N],s0;
    Proj *p = L->next;
    for (i = 0; i < N; i++)
    {
        strcpy(s[i].name, *((p->name) + N - i - 1));
        s[i].sum = 0;
    }
    if (p == NULL)
        printf("數據為空!");
    else
    {
        while (p != NULL)
        {
            for(i=0;i<N;i++)
                s[i].sum += *((p->score) + i);
            p = p->next;
        }
        for (j = 0; j < N; j++)
        {
            for (k = 0; k < N - j - 1; k++)
            {
                if(s[k].sum>s[k+1].sum){
                    s0 = s[k];
                    s[k] = s[k + 1];
                    s[k + 1]= s0;
                }
            }
        }
        p = L->next;
        printf("學院名稱\t總成績\t\t總排名\n");
        for (i = N - 1; i >= 0; i--)
        {
            printf("%s\t\t", s[i].name);
            printf("%.2f\t\t", s[i].sum);
            printf("%d\t\t", N - i);
            printf("\n");
        }
    }
}
//輸入項目的相關信息
void Input(Proj *p, int i)
{
    int j;
    printf("請輸入第%d個比賽項目名稱:", i + 1);
    scanf("%s", p->xiangmu);
    for (j = 0; j < N; j++)
    {
        printf("請輸入第%d個學院的名稱:", j + 1);
        scanf("%s", (p->name) + j);
        printf("請輸入該學院的該項目的成績:");
        scanf("%f", (p->score) + j);
    }
}

//輸出全部項目信息
void Output(Proj *L)
{
    int k;
    Proj *p = L->next;
    while (p != NULL)
    {
        printf("\t\t項目:%s\n\n", p->xiangmu);
        printf("學院名稱\t單項成績\t單項名次\n\n");
        for (k = 0; k < N; k++)
        {
            printf("%s\t\t", *((p->name) + k));
            printf("%.2f\t\t", *((p->score) + k));
            printf("%d\t\n", *((p->no) + k));
        }
        printf("\n\n");
        p = p->next;
    }
}
//校運動會項目管理系統的菜單
void Menu()
{
    printf("\n\n");
    printf("\t\t\t===================校運動會項目管理系統==================\n");
    printf("\t\t\t* 作者:XXX  班級:人工智能XXXX  學號:XXXXXXXXX            *\n");
    printf("\t\t\t*                                                       *\n");
    printf("\t\t\t*          1>. 錄入運動會項目信息                       *\n");
    printf("\t\t\t*          2>. 查找某個運動會項目信息                   *\n");
    printf("\t\t\t*          3>. 修改某個運動會項目信息                   *\n");
    printf("\t\t\t*          4>. 刪除某個運動會醒目信息                   *\n");
    printf("\t\t\t*          5>. 每個運動會項目的學院成績排名             *\n");
    printf("\t\t\t*          6>. 所有項目每個學院的總成績和排名           *\n");
    printf("\t\t\t*          0>. 退出管理系統                             *\n");
    printf("\t\t\t*                                        歡迎使用本系統!*\n");
    printf("\t\t\t=========================================================\n");
    printf("\t\t\t輸入選項,按回車進入選項:                                \n");
}

主菜單截圖

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: