<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了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。
相關文章
<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