数据结构课程设计:运动会分数统计
生活随笔
收集整理的這篇文章主要介紹了
数据结构课程设计:运动会分数统计
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
運動會分數統計
1.問題描述
參加運動會的n個學校編號為1~n。比賽分成m個男子項目和w個女子項目,項目編號分別為1~m和m+1~m+w。由于各項目參加人數差別較大,有些項目取前五名,得分順序為7,5,3,2,1;還有些項目只取前三名,得分順序為5,3,2。寫一個統計程序產生各種成績單和得分報表。
2.設計要求
(1)可以輸入各個項目的前三名或前五名的成績;
(2)能統計各學校總分;
(3)可以按學校編號或名稱、學校總分、男女團體總分排序輸出;
(4)可以按學校編號查詢學校某個項目的情況;可以按項目編號查詢取得前三或前五名的學校;
(5)數據存入文件并能隨時查詢;
(6)輸入:輸入學校的名稱,運動項目的名稱。
(7)輸出:要求有中文提示,各學校分數為整型。
(8)界面要求:有合理的提示,每個功能可以設立菜單,根據提示,可以完成相關的功能要求。
要求使用1、全部合法數據;2、整體非法數據;3、局部非法數據進行程序測試,以保證程序的穩定。
例如,對于n=4,m=3,w?=2,編號為奇數的項目取前五名,編號為偶數的項目取前三名,設計一組實例數據。
分析
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-tiAh127y-1591407091819)(…/images/aa.jpg)]
完整代碼
#include<stdio.h> #include<math.h> #include <process.h> #define N 20 /*學校最大數目*/ #define M 20 /*男子項目最大數目*/ #define W 20 /*女子項目最大數目*/ typedef struct { int inum; /*項目編號*/int top; /*取名次的數目*/int range[5]; /*名次*/int mark[5]; /*分數*/ }itemnode; /*存放項目信息*/ typedef struct {int snum; /*學校編號*/int score; /*學校總分*/int mscore; /*男團體總分*/int wscore; /*女團體總分*/itemnode t[M+W]; /*項目數組*/ }snode; /*存放學校信息*/ snode a[N]; /* 定義一個學校數組*/ void menu(int n,int m,int w) /*菜單函數*/ { int c;void input(int n,int m,int w);void output(int n,int m,int w);void sortput(int n,int m,int w);void search(int n,int m,int w);printf("\t\t\t歡迎使用\t\t\t\t\n\n"); printf("\t***********運動會分數統計系統***********\n\n");printf("\t\t*******1.信息輸入*******\n");printf("\t\t*******2.統計輸出*******\n");printf("\t\t*******3.排序輸出*******\n");printf("\t\t*******4.信息查詢*******\n");printf("\t\t*******0.退出系統*******\n\n");printf("=======================================================\n\n");printf("請選擇要實現步驟的編號(0--4):");scanf("%d",&c);switch(c){ case 1: input(n,m,w);break;case 2: output(n,m,w);break;case 3: sortput(n,m,w);break;case 4: search(n,m,w);break;case 0:printf("謝謝使用,再見!\n");exit(0);default: printf("輸入錯誤,請重試!\n");menu(n,m,w);} } void savetofile() /*信息存入文件file*/ {FILE *fp;int i;if((fp=fopen("file.txt","w"))==NULL){printf("cannot open the file\n");return;}for(i=0;i<N;i++){if(a[i].snum!='\0')if(fwrite(&a[i],sizeof(snode),1,fp)!=1){printf("file write error\n");return;}}fclose(fp); } void readfromfile() /*信息從文件file中取出*/ {int i;FILE *fp;if((fp=fopen("file.txt","rb"))==NULL){printf("cannot open the file\n");return;}for(i=0;i<N;i++)fread(&a[i],sizeof(snode),1,fp);fclose(fp); }void input(int n,int m,int w) /*1.信息輸入*/ {int i,j,s,k,q=0;for(i=0;i<n;i++){ printf("學校編號:");scanf("%d",&a[i].snum); /*輸入學校信息*/for(j=0;j<m+w;j++){ printf("項目編號:");scanf("%d",&a[i].t[j].inum);printf("項目取前3名或前5名(3或者5):");scanf("%d",&a[i].t[j].top);if(a[i].t[j].top==3)printf("獲得名次個數(1--3):");elseprintf("獲得名次個數(1--5):");scanf("%d",&k); /*輸入項目信息*/for(s=0;s<k;s++){ if(a[i].t[j].top==3)printf("所獲名次(1--3):");elseprintf("所獲名次(1--5):");scanf("%d",&a[i].t[j].range[s]); /*輸入所獲名次信息*/}printf("\n");}}for(i=0;i<n;i++){ a[i].score=0;a[i].mscore=0;a[i].wscore=0;} /*初始化分數*/for(i=0;i<n;i++)for(j=0;j<m+w;j++)for(s=0;s<5;s++){ if(a[i].t[j].top==3)switch(a[i].t[j].range[s]){case 0: a[i].t[j].mark[s]=0; break;case 1: a[i].t[j].mark[s]=5; break;case 2: a[i].t[j].mark[s]=3; break;case 3: a[i].t[j].mark[s]=2; break;}else if(a[i].t[j].top==5)switch(a[i].t[j].range[s]){case 0: a[i].t[j].mark[s]=0; break;case 1: a[i].t[j].mark[s]=7; break;case 2: a[i].t[j].mark[s]=5; break;case 3: a[i].t[j].mark[s]=3; break;case 4: a[i].t[j].mark[s]=2; break;case 5: a[i].t[j].mark[s]=1; break;}else {printf("信息有誤!");printf("\n");exit(0);}a[i].score=a[i].score+a[i].t[j].mark[s]; /*記學校總分*/if(j<=m-1)a[i].mscore=a[i].mscore+a[i].t[j].mark[s]; /*記男子團體總分*/elsea[i].wscore=a[i].wscore+a[i].t[j].mark[s]; /*記女子團體總分*/} printf("輸入完畢!返回? 1是 2否\n"); /*返回菜單*/scanf("%d",&q);printf("\n");if(q!=1)printf("不能再添加信息!");printf("\n");savetofile(); /*將信息存入文件file*/menu(n,m,w); } void output(int n,int m,int w) /*2.統計輸出*/ {readfromfile();int i,j,s,q=0; for(i=0;i<n;i++) /*顯示結果*/{printf("學校編號:%d 學校總分:%d 男團總分:%d 女團總分:%d\n",a[i].snum,a[i].score,a[i].mscore,a[i].wscore);for(j=0;j<m+w;j++){printf("項目編號:%d 所取名次數量:%d\n",a[i].t[j].inum,a[i].t[j].top);for(s=0;s<5;s++){if(a[i].t[j].range[s]!=0)printf("名次:%d 分數:%d\n",a[i].t[j].range[s],a[i].t[j].mark[s]);}}printf("\n");}printf("\n");printf("統計完畢!返回? 1是 2否"); /*返回菜單*/scanf("%d",&q);printf("\n");if(q!=1)printf("統計已經結束!");printf("\n");menu(n,m,w); } void sortput(int n,int m,int w) /*3.排序輸出*/ {readfromfile();int c,i,j,k,q=0;int temp[N];printf("\t**************排序輸出系統**************\n\n");printf("\t\t****1.按學校編號輸出****\n");printf("\t\t****2.按學校總分輸出****\n");printf("\t\t****3.按男團總分輸出****\n");printf("\t\t****4.按女團總分輸出****\n");printf("=======================================================\n\n");do{printf("請選擇要實現功能的編號(1--4):");scanf("%d",&c);switch(c){case 1: for(i=0;i<n;i++)temp[i]=i;for(i=0;i<n;i++){ for(j=i+1;j<n;j++)if(a[temp[i]].snum>a[j].snum){ k=temp[i];temp[i]=temp[j];temp[j]=k;}} /* 用冒泡排序方法排序*/for(i=0;i<n;i++){printf("學校編號:%d 學校總分:%d 男團總分:%d 女團總分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);} /*按學校編號輸出*/break; case 2: for(i=0;i<n;i++)temp[i]=i;for(i=0;i<n;i++){ for(j=i+1;j<n;j++)if(a[temp[i]].score<a[j].score){ k=temp[i];temp[i]=temp[j];temp[j]=k;}} /* 用冒泡排序方法排序*/for(i=0;i<n;i++){printf("學校編號:%d 學校總分:%d 男團總分:%d 女團總分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);} /*按學校總分輸出*/break;case 3: for(i=0;i<n;i++)temp[i]=i;for(i=0;i<n;i++){ for(j=i+1;j<n;j++)if(a[temp[i]].mscore<a[j].mscore){ k=temp[i];temp[i]=temp[j];temp[j]=k;}} /* 用冒泡排序方法排序*/for(i=0;i<n;i++){printf("學校編號:%d 學校總分:%d 男團總分:%d 女團總分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);} /*按男團總分輸出*/break; case 4: for(i=0;i<n;i++)temp[i]=i;for(i=0;i<n;i++){ for(j=i+1;j<n;j++)if(a[temp[i]].wscore<a[j].wscore){ k=temp[i];temp[i]=temp[j];temp[j]=k;}} /* 用冒泡排序方法排序*/for(i=0;i<n;i++){printf("學校編號:%d 學校總分:%d 男團總分:%d 女團總分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);} /*按女團總分輸出*/break; default: printf("輸入錯誤,請重試!\n"); }printf("請選擇 1 返回主菜單 0繼續"); /*返回菜單或繼續排序*/scanf("%d",&q);printf("\n");}while(q==0);printf("\n");if(q!=0)menu(n,m,w); } void search(int n,int m,int w) /*查詢函數*/ {readfromfile();int c,i,j,k,d,l,q=0;printf("\t****************查詢系統****************\n\n");printf("\t\t****1.按學校編號查詢****\n");printf("\t\t****2.按項目編號查詢****\n");printf("=======================================================\n\n");do{k=-1;d=-1;l=-1;printf("請選擇要實現功能的編號(1--2):");scanf("%d",&c);switch(c){case 1:printf("要查詢的學校編號:"); /*查找學校編號下標*/scanf("%d",&c);for(i=0;i<n;i++){if(a[i].snum==c)k=i;}if(k==-1)printf("錯誤:這個學校沒有參加此次運動會!\n");else{printf("要查詢的項目編號:"); /*查找項目編號下標*/scanf("%d",&c);for(j=0;j<m+w;j++){if(a[k].t[j].inum==c)d=j;}if(d==-1)printf("此次運動會沒有這個項目\n");else /*顯示結果*/{ printf("這個項目取前 %d名,該學校的成績如下:\n", a[k].t[d].top);for(i=0;i<5;i++)if(a[k].t[d].range[i]!=0)printf("名次:%d\n",a[k].t[d].range[i]);}}break; case 2:printf("要查詢的項目編號:"); /*查找項目編號下標*/scanf("%d",&c);for(i=0;i<n;i++)for(j=0;j<m+w;j++)if(a[i].t[j].inum==c)l=j;if(l==-1)printf("此次運動會沒有這個項目\n");else /*顯示結果*/{printf("該項目取前 %d名,取得名次的學校\n",a[0].t[l].top);for(i=0; i<n;i++)for(j=0;j<5;j++)if(a[i].t[l].range[j]!=0)printf("學校編號:%d,名次:%d\n",a[i].snum,a[i].t[l].range[j]); }break;default: printf("輸入錯誤,請重試!\n");}printf("請選擇:1.返回主菜單 0.繼續"); /*返回菜單或繼續查詢*/scanf("%d",&q);printf("\n");}while(q==0);printf("\n");if(q!=0)menu(n,m,w); } int main() /*主函數*/ { int n,m,w;printf("\t\t\t歡迎使用\t\t\t\t\n\n"); printf("\t***********運動會分數統計系統***********\n\n");printf("請先輸入運動會主要信息\n"); /*設計運動會主要數據個數*/ printf("輸入學校個數:"); scanf("%d",&n);printf("輸入男子項目個數:");scanf("%d",&m);printf("輸入女子項目個數:");scanf("%d",&w);menu(n,m,w); }運行結果:
總結
以上是生活随笔為你收集整理的数据结构课程设计:运动会分数统计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工作113:添加echart折线图
- 下一篇: 工作95视频上传逻辑