運(yùn)動會比賽計分系統(tǒng)--1_第1頁
運(yùn)動會比賽計分系統(tǒng)--1_第2頁
運(yùn)動會比賽計分系統(tǒng)--1_第3頁
運(yùn)動會比賽計分系統(tǒng)--1_第4頁
運(yùn)動會比賽計分系統(tǒng)--1_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

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

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

3、入文件。其中輸出的信息有:學(xué)校編號、名稱以及其所獲獎項(xiàng)的項(xiàng)目編號、類型、名稱、排名、男子總分、女子總分還有學(xué)校的總分等;*文件讀入模塊是為了滿足客戶需要,為了儲存信息,方便使用;*信息查詢模塊完成對各信息的查詢,查詢時對應(yīng)有兩種選擇以確定用戶進(jìn)行哪種查詢。2.2 數(shù)據(jù)結(jié)構(gòu)本系統(tǒng)中主要的數(shù)據(jù)結(jié)構(gòu)就是以學(xué)校為結(jié)點(diǎn)建立一個鏈?zhǔn)酱鎯Y(jié)構(gòu),結(jié)點(diǎn)中包括學(xué)校編號、學(xué)校名稱、男子項(xiàng)目總分、女子項(xiàng)目總分、學(xué)校總分;再定義一個新的結(jié)構(gòu)體是以項(xiàng)目信息為基礎(chǔ),通過指針實(shí)現(xiàn)學(xué)校來對項(xiàng)目信息的調(diào)用,無論是計分,輸出還是查找均以鏈?zhǔn)酱鎯Y(jié)構(gòu)來實(shí)現(xiàn)。數(shù)據(jù)結(jié)構(gòu):學(xué)校信息:typedef struct school int sc

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

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

6、menu() /菜單函數(shù)給出信息提示;繪制菜單(包含查詢、退出);提示菜單選擇并輸入變量;根據(jù)輸入變量的值調(diào)用不同的模塊函數(shù);以下是截取的菜單函數(shù): void menu() system(cls); printf(=運(yùn)動會比賽計分系統(tǒng)=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) 信息輸入模塊:調(diào)用scl *input() /信息輸入函數(shù)在輸入信息時要求按照文字提示進(jìn)行輸入,要輸入的信息包括:參賽學(xué)校編號,名稱以及比賽項(xiàng)目的編號,名稱,獲獎名次,排名,(運(yùn)動員姓名)。建立單鏈表,以鏈?zhǔn)酱鎯Y(jié)構(gòu)來存放學(xué)校,項(xiàng)目等數(shù)據(jù);以下是輸入的內(nèi)容與形式:scanf(%d,&p-sclnum);/輸入學(xué)校編號 scanf(%s,p-sclname);/輸入學(xué)校名稱 for(x=0;xax.itmnum);/輸入項(xiàng)目編號 scanf(%d,&p-ax.itmkind);/輸

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

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

10、ile(q!=NULL) 按學(xué)校輸出相應(yīng)信息;if(cha=2)printf(請輸入你要查詢的項(xiàng)目編號:); scanf(%d,&xiang);while(q!=NULL) 按項(xiàng)目輸出相應(yīng)信息;四、調(diào)試與測試1.調(diào)試方法;上機(jī)運(yùn)行各個模塊,分別調(diào)試,最后綜合運(yùn)行;2.測試結(jié)果的討論與分析;首先必須要對程序進(jìn)行數(shù)據(jù)信息輸入,對于所需不同的信息程序會自動提示用戶進(jìn)行相關(guān)操作,再輸出相關(guān)信息,對于一些錯誤的操作可能會造成程序運(yùn)行錯誤的后果,因此在輸入信息的時候用戶請務(wù)必細(xì)心操作。其數(shù)據(jù)與運(yùn)行結(jié)果如下圖:運(yùn)行結(jié)果:輸入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輸出;(因?yàn)橹欢x了兩個學(xué)校,所以結(jié)果只有兩個學(xué)校的名稱)輸入:3輸出:輸出:輸入:2輸出:結(jié)束程序運(yùn)行!五、源程序清單#include#include#define n 2 /參賽學(xué)校數(shù)#define m 1 /男子競賽項(xiàng)目數(shù)#define w 1 /女子競賽項(xiàng)目數(shù)typedef struct sco int mark5;/

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

13、函 數(shù)*/ void menu() system(cls); printf(=運(yùn)動會比賽計分系統(tǒng)=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); /*/*計 分 函 數(shù)*/

14、void compute(int i,int x,int k) if(k=3) /女子項(xiàng)目取前三名 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) /男子項(xiàng)目取前五名 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; /*輸 入 函 數(shù)*/scl *input() /創(chuàng)建鏈表輸入函數(shù) int i,x,y=1,k; p=(scl*)

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

17、e);/輸入項(xiàng)目名稱 scanf(%d,&p-ax.l);/輸入獲獎名次數(shù) for(i=0;iax.l;i+) scanf(%d,&p-ax.rangei);/輸入運(yùn)動員的名次scanf(%s,); /運(yùn)動員姓名 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 ) /共兩種項(xiàng)目: 111(男子項(xiàng)目) 222(女子項(xiàng)目) p-wscore+=p-ax.markp-ax.rangei; else p-mscore+=p-ax.mark

18、p-ax.rangei; p-sum=p-mscore+p-wscore; /求學(xué)??偝煽?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; /*輸 出 函 數(shù)*/ 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( 學(xué)校編號:t); printf(%dn,q-sclnum); printf( 學(xué)校名稱:t); printf(%sn,q-sclname); for(x=0;xax.itmnum); printf( 項(xiàng)目類型:t); printf(%dn,q-ax.itmkind); printf( 項(xiàng)目名稱: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(男子團(tuán)體項(xiàng)目總分:t%dn,q-mscore); printf(女子團(tuán)體項(xiàng)目總分:t%dn,q-wscore); printf( 學(xué)校項(xiàng)目總得分:t%dnn,q-sum); printf(n); q=q-next;break; default : puts(輸入有誤!);exit(0); /*文 件 讀 入 函 數(shù)*/ 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);/關(guān)閉文件 return head;/*查 找 函 數(shù)*/ void find(scl *head) scl *q=head; int num,x,i,cha,xiang,flag=0; printf(按學(xué)校查找請輸入1,按項(xiàng)目查找請輸入2n); scanf(%d,&cha);

26、if(cha=1) printf(請輸入你要查詢的學(xué)校編號:); scanf(%d,&num); while(q!=NULL) if(num=q-sclnum) printf(=n); printf(學(xué)校編號n); printf(%dn,q-sclnum); for(x=0;xax.itmnum); printf(項(xiàng)目類型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(男子團(tuán)體項(xiàng)目總分:%dn,q-m

27、score); printf(女子團(tuán)體項(xiàng)目總分:%dn,q-wscore); printf( 學(xué)校項(xiàng)目總得分:%dnn,q-sum); printf(n); flag=1; printf(n); q=q-next; if(flag=0) puts(對不起!沒有您要查詢的對象); else if(cha=2) printf(請輸入你要查詢的項(xiàng)目編號:); scanf(%d,&xiang); while(q!=NULL) for(x=0;xax.itmnum&q-ax.itmkind=111) printf(獲得前5名的學(xué)校為: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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論