日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构课程设计:运动会分数统计

發布時間:2023/12/9 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构课程设计:运动会分数统计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

運動會分數統計

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); }

    運行結果:


    總結

    以上是生活随笔為你收集整理的数据结构课程设计:运动会分数统计的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。