運動會比賽計分系統--1_第1頁
運動會比賽計分系統--1_第2頁
運動會比賽計分系統--1_第3頁
運動會比賽計分系統--1_第4頁
運動會比賽計分系統--1_第5頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、運動會比賽計分系統一、設計目的和任務要求:初始化輸入:N-參賽學校總數,M-男子競賽項目數,W-女子競賽項目數各項目名次取法有如下幾種:取前5名:第一名得分7分,第二名得分5,第三名得分3,第四名得分2,第五名得分1;取前3名:第一名得分5,第二名得分3,第三名得分2;功能要求:(1)系統以菜單方式工作(2)由程序提醒用戶填寫比賽結果,輸入各項目獲獎運動員信息。(3)所有信息記錄完畢后,用戶可以查詢各個學校的比賽成績(4)查看參賽學校信息和比賽項目信息等。二、總體設計編寫目的:根據要求分析文檔,初步提出問題的解決方案,以及軟件系統的體系結構和數據結構的設計方案并寫出書面文檔總體設計說明書,為下

2、一步進行詳細設計做準備。2.1總體設計 該系統可以按功能進行模塊劃分,其模塊圖如下:菜單模塊 計分模塊 輸入模塊輸出模塊文件讀入模塊查找模塊結束 系統模塊圖 其中:*菜單選擇模塊完成用戶命令的接收,此模塊是運動會比賽計分系統的入口,用戶所要進行的各種操作均需在此模塊中進行選擇而調用其他模塊實現相應的功能;*信息輸入模塊完成學校、比賽項目(以及運動員的信息)輸入功能,輸入信息包括各參賽學校的編號、名稱和每個學校在各比賽項目的編號、類型、名稱、獲獎次數、排名,以及(運動員姓名)等必要信息;*計分模塊是對輸入信息的處理,是一種必要的輔助模塊;*輸出模塊包括:1不輸出信息,讀入文件中;2輸出信息,不讀

3、入文件。其中輸出的信息有:學校編號、名稱以及其所獲獎項的項目編號、類型、名稱、排名、男子總分、女子總分還有學校的總分等;*文件讀入模塊是為了滿足客戶需要,為了儲存信息,方便使用;*信息查詢模塊完成對各信息的查詢,查詢時對應有兩種選擇以確定用戶進行哪種查詢。2.2 數據結構本系統中主要的數據結構就是以學校為結點建立一個鏈式存儲結構,結點中包括學校編號、學校名稱、男子項目總分、女子項目總分、學校總分;再定義一個新的結構體是以項目信息為基礎,通過指針實現學校來對項目信息的調用,無論是計分,輸出還是查找均以鏈式存儲結構來實現。數據結構:學校信息:typedef struct school int sc

4、lnum;/學校編號 char sclname20;/學校名稱 sc am+w; int mscore;/男子團體總分 int wscore;/女子團體總分 int sum;/學校項目總分 struct school *next;scl; scl *p,*q,*head,*g,*s,*u;/全局指針變量項目信息(及運動員信息):typedef struct sco int mark5;/分數 int itmnum;/項目編號 int itmkind;/項目類型 char itmname20;/項目名稱 char name10;/運動員姓名 int l; /獲獎名次數 int range5;/排

5、名sc;2.3程序流程系統的執行應從輸入信息功能開始,再執行菜單功能,依據用戶的選擇來進行后續的處理,直到用戶選擇退出系統為止,其間應對用戶的選擇做出判斷及異常處理。系統的流程圖如下:開始執行菜單模塊選擇輸入學校編號、名稱輸入項目編號、名稱、獲獎名次數排名、運動員姓名選擇按學校信息輸出其獲獎項目信息按學校排名輸出學校和項目信息按項目信息輸出各個獲獎學校信息計分函數n0?文件讀入函數結束編寫目的:根據項目概要設計說明書,在項目概要設計的基礎之上,對系統進行詳細設計,以便下一步進行程序編碼工作。三、詳細設計:對于總設計時的系統模塊功能圖,各個功能模塊的處理邏輯如下:1)菜單選擇模塊:調用void

6、menu() /菜單函數給出信息提示;繪制菜單(包含查詢、退出);提示菜單選擇并輸入變量;根據輸入變量的值調用不同的模塊函數;以下是截取的菜單函數: void menu() system(cls); printf(=運動會比賽計分系統=n); printf(* welcome *n); printf(* * 編制 *n); printf(* 1-鍵盤輸入 *n); printf(* 2-文件讀入 *n); printf(* 3-輸出 *n); printf(* 4-查詢 *n); printf(* 5-退出 *n); printf(*男子前五名依次得分:7分 5分 3分 2分 1分*n); p

7、rintf(*女子前三名依次得分:5分 3分 2分 *n); printf(*n); printf(=n); 2) 信息輸入模塊:調用scl *input() /信息輸入函數在輸入信息時要求按照文字提示進行輸入,要輸入的信息包括:參賽學校編號,名稱以及比賽項目的編號,名稱,獲獎名次,排名,(運動員姓名)。建立單鏈表,以鏈式存儲結構來存放學校,項目等數據;以下是輸入的內容與形式:scanf(%d,&p-sclnum);/輸入學校編號 scanf(%s,p-sclname);/輸入學校名稱 for(x=0;xax.itmnum);/輸入項目編號 scanf(%d,&p-ax.itmkind);/輸

8、入項目類型 scanf(%s,p-ax.itmname);/輸入項目名稱 scanf(%d,&p-ax.l);/輸入獲獎名次數 for(i=0;iax.l;i+) scanf(%d,&p-ax.rangei);/輸入運動員的名次scanf(%s,); /運動員姓名 輸入結束;在輸入結束結束后要調用計分模塊。3)計分模塊:計分模塊主要是依據輸入信息的不同予以判斷,并以不同的計分方式來計數將節點中的數據改變,并保存。 if(k=3) /女子項目取前三名else /男子項目取前五名4)信息輸出模塊:根據用戶的需要與選擇,給出兩種方式:1、存入文件,不輸出;2、輸出,不存入文件。pr

9、intf(*1-不輸出,存入文件n); printf(*2-輸出,不存入文件n); scanf(%d,&co); switch(co) Case 1:運用文件存儲內容;break; Case 2:輸出相應信息;break;5)文件讀入模塊: !此模塊只是用來讀入文件中的信息,無實際意義,只是滿足題目要求,需謹慎使用。6)信息查詢模塊:和輸出模塊相似,同樣有兩種選擇:1、按學校編號查詢;2、按項目編號查詢。printf(按學校查找請輸入1,按項目查找請輸入2n); scanf(%d,&cha); if(cha=1) printf(請輸入你要查詢的學校編號:); scanf(%d,&num);wh

10、ile(q!=NULL) 按學校輸出相應信息;if(cha=2)printf(請輸入你要查詢的項目編號:); scanf(%d,&xiang);while(q!=NULL) 按項目輸出相應信息;四、調試與測試1.調試方法;上機運行各個模塊,分別調試,最后綜合運行;2.測試結果的討論與分析;首先必須要對程序進行數據信息輸入,對于所需不同的信息程序會自動提示用戶進行相關操作,再輸出相關信息,對于一些錯誤的操作可能會造成程序運行錯誤的后果,因此在輸入信息的時候用戶請務必細心操作。其數據與運行結果如下圖:運行結果:輸入1輸入:1huada1 111 taiqiu 3 1 zhao 2 qian 3 s

11、un2 222 ticao 1 2 li2dongda1 111 taiqiu 2 4 zhou 5 wu2 222 ticao 2 1 feng 3 chen輸出:輸入:3輸出:輸入:2輸出:輸入:4輸出:輸入:1輸出:輸入;1輸出:輸入:4輸出:輸入:2輸出:輸入:2輸出;(因為只定義了兩個學校,所以結果只有兩個學校的名稱)輸入:3輸出:輸出:輸入:2輸出:結束程序運行!五、源程序清單#include#include#define n 2 /參賽學校數#define m 1 /男子競賽項目數#define w 1 /女子競賽項目數typedef struct sco int mark5;/

12、分數 int itmnum;/項目編號 int itmkind;/項目類型 char itmname20;/項目名稱 char name10;/運動員姓名 int l; /獲獎名次數 int range5;/排名sc;typedef struct school int sclnum;/學校編號 char sclname20;/學校名稱 sc am+w; int mscore;/男子團體總分 int wscore;/女子團體總分 int sum;/學校項目總分 struct school *next;scl; scl *p,*q,*head,*g,*s,*u;/全局指針變量 /*/ /*菜 單

13、函 數*/ void menu() system(cls); printf(=運動會比賽計分系統=n); printf(* welcome *n); printf(* * 編制 *n); printf(* 1-鍵盤輸入 *n); printf(* 2-文件讀入 *n); printf(* 3-輸出 *n); printf(* 4-查詢 *n); printf(* 5-退出 *n); printf(*男子前五名依次得分:7分 5分 3分 2分 1分*n); printf(*女子前三名依次得分:5分 3分 2分 *n); printf(*n); printf(=n); /*/*計 分 函 數*/

14、void compute(int i,int x,int k) if(k=3) /女子項目取前三名 switch(p-ax.rangei) case 0: p-ax.markp-ax.rangei=0;break; case 1: p-ax.markp-ax.rangei=5;break; case 2: p-ax.markp-ax.rangei=3;break; case 3: p-ax.markp-ax.rangei=2;break; default: puts(輸入有誤!);exit(0); else switch(p-ax.rangei) /男子項目取前五名 case 0: p-ax.

15、markp-ax.rangei=0;break; case 1: p-ax.markp-ax.rangei=7;break; case 2: p-ax.markp-ax.rangei=5;break; case 3: p-ax.markp-ax.rangei=3;break; case 4: p-ax.markp-ax.rangei=2;break; case 5: p-ax.markp-ax.rangei=1;break; default: puts(輸入有誤!);break; /*輸 入 函 數*/scl *input() /創建鏈表輸入函數 int i,x,y=1,k; p=(scl*)

16、malloc(sizeof(scl); /頭結點的初始化 printf(n*按如下格式輸入(相同學校編號不重復輸入)*n); printf(*項目類型有:111-男子 222-女子 *n); printf(*學校編號n*學校名稱n*項目編號項目類型項目名稱獲得名次數名次姓名n); p-mscore=0;p-wscore=0; scanf(%d,&p-sclnum);/輸入學校編號 scanf(%s,p-sclname);/輸入學校名稱 for(x=0;xax.itmnum);/輸入項目編號 scanf(%d,&p-ax.itmkind);/輸入項目類型 scanf(%s,p-ax.itmnam

17、e);/輸入項目名稱 scanf(%d,&p-ax.l);/輸入獲獎名次數 for(i=0;iax.l;i+) scanf(%d,&p-ax.rangei);/輸入運動員的名次scanf(%s,); /運動員姓名 if(p-ax.itmkind=222) /計分方式判斷 k=3; else k=5; for(i=0;iax.l;i+) compute(i,x,k); if(p-ax.itmkind=222 ) /共兩種項目: 111(男子項目) 222(女子項目) p-wscore+=p-ax.markp-ax.rangei; else p-mscore+=p-ax.mark

18、p-ax.rangei; p-sum=p-mscore+p-wscore; /求學校總成績 head=p; q=p; /*/ while(ymscore=0;p-wscore=0; scanf(%d,&p-sclnum); scanf(%s,p-sclname); for(x=0;xax.itmnum); scanf(%d,&p-ax.itmkind); scanf(%s,p-ax.itmname); scanf(%d,&p-ax.l); for(i=0;iax.l;i+) scanf(%d,&p-ax.rangei); scanf(%s,); if(p-ax.itmkind

19、=222) k=3; else k=5; for(i=0;iax.l;i+) compute(i,x,k); if(p-ax.itmkind=222) p-wscore+=p-ax.markp-ax.rangei; else p-mscore+=p-ax.markp-ax.rangei; p-sum=p-mscore+p-wscore; q-next=p; q=p; p-next=NULL; menu(); return head; /*輸 出 函 數*/ void output(scl *head) /輸出成績 scl *q=head; int i,x,y=1; FILE *fp; int

20、co; printf(*1-不輸出,存入文件n); printf(*2-輸出,不存入文件n); scanf(%d,&co); switch(co) case 1: fp=fopen(d:abc.txt,w+); if(fp=NULL)printf(無法打開文件!);exit(0); while(q!=NULL) fprintf(fp,%dn,q-sclnum); for(x=0;xax.itmkind); fprintf(fp,%dtn,q-ax.l); for(i=0;iax.l;i+) fprintf(fp,%dt,q-ax.rangei); fprintf(fp,n); q=q-next

21、; fclose(fp); break; case 2: while(q!=NULL) printf(=n); printf( 學校編號:t); printf(%dn,q-sclnum); printf( 學校名稱:t); printf(%sn,q-sclname); for(x=0;xax.itmnum); printf( 項目類型:t); printf(%dn,q-ax.itmkind); printf( 項目名稱:t); printf(%sn,q-ax.itmname); printf( 有%d個獲獎名次:t,q-ax.l); for(i=0;iax.l;i+) printf(第%d名t

22、,q-ax.rangei); printf(nn); printf(男子團體項目總分:t%dn,q-mscore); printf(女子團體項目總分:t%dn,q-wscore); printf( 學校項目總得分:t%dnn,q-sum); printf(n); q=q-next;break; default : puts(輸入有誤!);exit(0); /*文 件 讀 入 函 數*/ scl *read() FILE *fpa=NULL; int i,x,y=1,k; p=(scl *)malloc(sizeof(scl); p-mscore=0;p-wscore=0; fpa=fopen(

23、d:abc.txt,r+);/打開文件 if(fpa=NULL) puts(對不起,無法打開文件!);exit(0); fscanf(fpa,%d,&p-sclnum); for(x=0;xax.itmnum,&p-ax.itmkind,&p-ax.l); for(i=0;iax.l;i+) fscanf(fpa,%d,&p-ax.rangei); if(p-ax.itmkind=222) k=3; else k=5; for(i=0;iax.l;i+) compute(i,x,k); if(p-ax.itmkind=222) p-wscore+=p-ax.markp-ax.rangei; e

24、lse p-mscore+=p-ax.markp-ax.rangei; p-sum=p-mscore+p-wscore; head=p; q=p; while(ymscore=0; p-wscore=0; fscanf(fpa,%d,&p-sclnum); for(x=0;xax.itmnum,&p-ax.itmkind); fscanf(fpa,%d,&p-ax.l); for(i=0;iax.l;i+) fscanf(fpa,%d,&p-ax.rangei); if(p-ax.itmkind=222) k=3; else k=5; for(i=0;iax.l;i+) compute(i,x

25、,k); if(p-ax.itmkind=222) p-wscore+=p-ax.markp-ax.rangei; else p-mscore+=p-ax.markp-ax.rangei; p-sum=p-wscore+p-mscore; q-next=p; q=p; p-next=NULL; fclose(fpa);/關閉文件 return head;/*查 找 函 數*/ void find(scl *head) scl *q=head; int num,x,i,cha,xiang,flag=0; printf(按學校查找請輸入1,按項目查找請輸入2n); scanf(%d,&cha);

26、if(cha=1) printf(請輸入你要查詢的學校編號:); scanf(%d,&num); while(q!=NULL) if(num=q-sclnum) printf(=n); printf(學校編號n); printf(%dn,q-sclnum); for(x=0;xax.itmnum); printf(項目類型n); printf(%dtn,q-ax.itmkind); printf(有%d個獲獎名次:t,q-ax.l); for(i=0;iax.l;i+) printf(第%d名t,q-ax.rangei); printf(nn); printf(男子團體項目總分:%dn,q-m

27、score); printf(女子團體項目總分:%dn,q-wscore); printf( 學校項目總得分:%dnn,q-sum); printf(n); flag=1; printf(n); q=q-next; if(flag=0) puts(對不起!沒有您要查詢的對象); else if(cha=2) printf(請輸入你要查詢的項目編號:); scanf(%d,&xiang); while(q!=NULL) for(x=0;xax.itmnum&q-ax.itmkind=111) printf(獲得前5名的學校為:n); for(i=0;isclnum,q-sclname); flag=1; break; else if(xiang=q-ax.it

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論