<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了C語言實現魔方比賽管理系統的具體程式碼,供大家參考,具體內容如下
#include <stdio.h> #include <stdlib.h> #include <string.h> #define AVAILABLE 0 #define UNAVAILABLE 1 #define MAXNAME 30 #define CLEAR "cls" typedef struct match{ char *name; int id; int count; int status; struct match *next; }Match; void welcome(); void error(char *); char land(); int player(); int usrmanager(); int viewmatch(); int addmatch(); int modmatch(); int delmatch(); void printmatch(Match *); Match *lookup(char *, int); int joinmatch(); int finishmatch(); Match *head = NULL; int nmatch = 0; //主函數 int main(){ welcome(); return 0; } void welcome(){ printf("*************************歡迎使用魔方比賽管理系統*************************n"); while(1){ printf("-------------------------------------n"); printf("請輸入專案前編號執行相關操作:n"); printf("n[1] 管理員入口nn[2] 選手入口nn[0] 退出nn"); switch(land()){ case '1': while(1){ if(usrmanager()){ continue; }else{ break; } } break; case '2': while(1){ if(player()){ continue; }else{ break; } } break; case '0': exit(0); default: error("採集專案引數失敗"); } } } char land(){ char c, flag; int i; while(1){ for(i = 0; (c = getchar()) != 'n'; flag = c, ++i) ; if(i == 1){ if(flag == '1' || flag == '2' || flag == '0'){ return flag; } }else if(i == 0){ continue; } error("[請輸入命令: 1 / 2 / 0 選擇專案]"); } return ' '; } void error(char *s){ fprintf(stderr, "%sn", s); } char dostudent(){ char c, flag; int i; while(1){ for(i = 0; (c = getchar()) != 'n'; flag = c, ++i ) ; if(i == 1){ if(flag == '1' || flag == '2' || flag == '3' || flag == '0'){ return flag; } }else if(i == 0){ continue; } error("[請輸入命令: 1 / 2 / 3/ 0 選擇專案]"); } } int player(){ printf("-------------------------------------n"); printf("請輸入專案前編號執行相關操作:nn"); printf("[1] 報名比賽n[2] 完成比賽n[3] 檢視比賽n"); printf("[0] 返回主頁n"); switch(dostudent()){ case '1': joinmatch(); break; case '2': finishmatch(); break; case '3': viewmatch(); break; case '0': return 0; default: error("採集專案引數失敗"); break; } return 1; } int joinmatch(){ system(CLEAR); char sname[MAXNAME]; printf("搜尋比賽:n"); scanf("%s", sname); getchar(); Match *bp; char *namep = NULL; if((bp = lookup(namep = strdup(sname), 0)) == NULL){ printf("比賽 %s 不存在n", namep); fflush(stdin); return -1; }else{ printmatch(bp); if(! bp->status){ printf("參加比賽: Y Nn"); }else{ printf("比賽進行中n"); return 0; } while(1){ char c = ' '; scanf("%c", &c); getchar(); if(!(c == 'Y' || c == 'y' || c == 'N' || c == 'n')){ fflush(stdin); error("指令無效"); continue; } if(c == 'Y' || c == 'y'){ --bp->count > -1 ? printf("成功n") : printf("失敗n"); if(! bp->count){ bp->status = UNAVAILABLE; } return bp->id; }else{ return 0; } } } return -1; } int finishmatch(){ system(CLEAR); char sname[MAXNAME]; printf("完成比賽:n"); scanf("%s", sname); getchar(); Match *bp; char *namep; if((bp = lookup(namep = strdup(sname), 0)) == NULL){ fflush(stdin); printf("此賽事沒有註冊n"); return -1; }else{ printmatch(bp); printf("完成比賽: Y Nn"); while(1){ char c = ' '; scanf("%c", &c); getchar(); if(!(c == 'Y' || c == 'y' || c == 'N' || c == 'n')){ fflush(stdin); error("指令無效"); }else if(c == 'Y' || c == 'y'){ bp->count++ ? 0: (bp->status = AVAILABLE); printf("成功n"); return bp->id; }else{ return 0; } } } return -1; } char domanager(){ char c, flag; int i; while(1){ for(i = 0; (c = getchar()) != 'n'; flag = c, ++i) ; if(i == 1){ if(flag == '1' || flag == '2' || flag == '3' || flag == '4' || flag == '0'){ return flag; } }else if(i == 0){ continue; } error("[請輸入命令: 1 / 2 / 3/ 4 / 0 選擇專案]"); } return ' '; } int usrmanager(){ printf("-------------------------------------n"); printf("請輸入專案前編號執行相關操作:nn"); printf("[1] 檢視比賽專案n[2] 新增新專案n[3] 修改已有專案n[4] 刪除比賽專案n"); printf("[0] 返回主頁n"); switch(domanager()){ case '1': viewmatch(); break; case '2': addmatch(); break; case '3': modmatch(); break; case '4': delmatch(); break; case '0': return 0; default: error("採集專案引數失敗"); break; } return 1; } int viewmatch(){ system(CLEAR); Match *bp; for(bp =head; bp != NULL; bp = bp->next){ printmatch(bp); } if(nmatch){ return nmatch; }else{ printf("比賽沒有這個專案n"); return 0; } return -1; } void printmatch(Match *bp){ printf("專案編號:%dn", bp->id); printf("專案名:%sn", bp->name); printf("專案狀態:%sn", bp->status ? "未開始" : "開始"); } int addmatch(){ system(CLEAR); char sname[MAXNAME]; int id, count; char *namep; while(1){ id = 0; count = 0; namep = NULL; printf("請輸入比賽名:n"); scanf("%s", sname); getchar(); printf("請輸入小於1000的比賽編號:n"); scanf("%d", &id); getchar(); if(!(id > 0 && id < 1000)){ error("輸入編號不符合要求"); fflush(stdin); continue; } printf("請輸入小於50的比賽選手數量:n"); scanf("%d", &count); getchar(); if(!(count > 0 && count < 50)){ error("輸入數目不符合要求"); fflush(stdin); continue; } Match *bp; if((bp = lookup(namep = strdup(sname), id)) == NULL){ bp = (Match *)malloc(sizeof (Match)); if(bp == NULL || (bp->name = namep) == NULL){ error("新增比賽失敗"); fflush(stdin); continue; } bp->id = id; bp->count = count; bp->status = AVAILABLE; ++nmatch; bp->next = head; head = bp; printf("比賽 %s 註冊成功n", sname); return id; }else{ fflush(stdin); error("專案名或編號已經被佔用"); } } return -1; } Match *lookup(char *s, int id){ Match *bp; for(bp = head; bp != NULL; bp = bp->next){ if(id == bp->id || strcmp(s, bp->name) == 0){ return bp; } } return NULL; } int modmatch(){ system(CLEAR); Match *bp = NULL; while(1){ int id = 0; printf("請輸入要修改資訊的專案編號:n"); scanf("%d", &id); getchar(); if(!(id > 0 && id < 1000)){ fflush(stdin); error("專案編號不符合要求"); continue; } if((bp = lookup("", id)) != NULL){ printf("以下為要修改的專案的現有資訊:n"); printmatch(bp); printf("[1] 修改專案名n[2] 修改比賽選手數量n[3] 修改專案狀態n[0] 放棄修改n"); while(1){ int i; scanf("%d", &i); getchar(); if(!(i == 1 || i == 2 || i == 3 || i == 0)){ fflush(stdin); error("輸入專案前編號選擇相關專案"); continue; } switch(i){ case 1: while(1){ char newname[MAXNAME], *namep; printf("專案名:n"); scanf("%s", newname); getchar(); if((lookup(namep = strdup(newname), 0)) != NULL){ fflush(stdin); error("專案名已存在"); continue; } if((bp->name = namep) != NULL){ printf("修改成功n"); return id; } } break; case 2: while(1){ int bnum; printf("輸入比賽數量:n"); scanf("%d", &bnum); getchar(); if(!(bnum > 0 || bnum < 1000)){ fflush(stdin); error("數目不符合要求"); continue; } bp->count = bnum; printf("修改成功n"); return id; } break; case 3: while(1){ char c; int status; status = bp->status; status == AVAILABLE ? printf("修改狀態為[未開始]: Y Nn") : printf("修改狀態為[開始]: Y Nn"); scanf("%c", &c); getchar(); if(!( c == 'Y' || c == 'y' || c == 'N' || c == 'n')){ fflush(stdin); error("指令無效"); continue; } if(c == 'Y' || c == 'y'){ status == AVAILABLE ? bp->status = UNAVAILABLE : (bp->status = AVAILABLE); printf("修改成功n"); return id; }else{ printf("放棄修改n"); return 0; } } break; case 0: return 0; default: error("獲取引數失敗"); break; } } }else{ printf("沒有此比賽n"); return 0; } } return -1; } int delmatch(){ system(CLEAR); Match *bp, *fbp; int id = 0; printf("請輸入要登出的專案編號:n"); scanf("%d", &id); getchar(); if(!(id > 0 && id < 1000)){ fflush(stdin); error("專案編號不符合要求"); return -1; } for(fbp = bp = head; bp != NULL; fbp = bp, bp = bp->next){ if(bp->id == id){ printmatch(bp); break; } } if(bp != NULL){ while(1){ printf("確定要登出此專案:Y Nn"); char YN; scanf("%c", &YN); getchar(); if(!((YN == 'Y' || YN == 'y') || (YN == 'N' || YN == 'n'))){ fflush(stdin); error("指令無效n"); continue; } if(YN == 'Y' || YN == 'y'){ bp == head ? head = bp->next : (fbp->next = bp->next); free(bp->name); free(bp); bp = NULL; printf("專案登出成功n"); break; }else{ printf("放棄登出n"); return 0; } } return id; }else{ printf("要登出的專案編號不存在n"); return -1; } return -1; }
主介面包含管理員入口、選手入口、和退出功能。
管理員入口進入有如下功能
選手入口進入有如下功能
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45