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。