運動會分數(shù)統(tǒng)計系統(tǒng)實驗報告_第1頁
運動會分數(shù)統(tǒng)計系統(tǒng)實驗報告_第2頁
運動會分數(shù)統(tǒng)計系統(tǒng)實驗報告_第3頁
運動會分數(shù)統(tǒng)計系統(tǒng)實驗報告_第4頁
運動會分數(shù)統(tǒng)計系統(tǒng)實驗報告_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、運動會分數(shù)統(tǒng)計系統(tǒng)的實現(xiàn)09 計科 (2) 班 E10914044 楊素傳一、設計要求1、問題描述參加運動會有n個學校,學校編碼為1, 2,,n,比賽分成m個男子項目和 w個女子 項目。項目編號為男子1, 2,,m,女子m+1,m+2,m+w。不同的項目取前五名或前三名積分;取前五名的積分分別為 7, 5 , 3 , 2, 1 ;前三名的積分分別 5, 3 , 2;哪些取前五名 或前三名由學生自己設定(m<=20,n<=20) 。2、需求分析( 1)可以輸入各個項目的前三名或前五名成績;( 2)能統(tǒng)計各學校成績;( 3)可以按學校編號、學??偡帧⒛信畧F體總分排序輸出;( 4)可以按

2、學校編號查詢學校某項目情況,可以按項目編號查詢?nèi)〉们叭蚯拔迕?的學校。二、概要設計1、主界面設計為了實現(xiàn)運動會分數(shù)統(tǒng)計系統(tǒng),設計一個含有多個菜單項的主控菜單子程序以連接系統(tǒng)的各項子程序,方便用戶使用本程序。本系統(tǒng)主控菜單運行界面圖 1 所示。圖 1 運動會分數(shù)統(tǒng)計系統(tǒng)程序主菜單2、存儲結(jié)構設計本程序采用鏈式存儲類型(LNode)存儲運動會分數(shù)統(tǒng)計系統(tǒng)的節(jié)點信息。運動會分數(shù)統(tǒng)計系統(tǒng)的鏈表中的結(jié)點包括8 個域:項目編號域( objnum ) 、項目類型( objtype ) 、運動員編號 ( athnum) 、 運動員姓名 ( athname20 ) 、 學校編號( schnum) 、 校名

3、( schname30 ) 、運動員分數(shù)( athscore )和指向下一個節(jié)點的指針欲(struct LNode *next )。3、系統(tǒng)功能設計本系統(tǒng)設置了 8個子功能菜單。8個子功能的設計描述如下:(1)錄入各項目的成績。由函數(shù) creatLink() 實現(xiàn)。當用戶選擇該功能時,系統(tǒng)會以 用戶輸入的數(shù)據(jù)運動會分數(shù)統(tǒng)計鏈表。(2)統(tǒng)計各學校分數(shù)。由函數(shù) schoolScore()實現(xiàn)。當用戶選擇該功能時,系統(tǒng)會統(tǒng) 計各學校分數(shù)。(3)按學校編號順序輸出。由函數(shù)printfSchoolNumber() 實現(xiàn)。當用戶選擇該功能時,系統(tǒng)會按學校編號順序輸出數(shù)據(jù)。(4)按學校總分順序輸出。由函數(shù)

4、printfSchoolScore() 實現(xiàn)。當用戶選擇該功能時, 系統(tǒng)會按學??偡猪樞蜉敵鰯?shù)據(jù)。(5)按男女團體總分順序輸出。由函數(shù) printfManWomanScore()實現(xiàn)。當用戶選擇該 功能時,系統(tǒng)會按男女團體總分順序輸出數(shù)據(jù)。(6)按學校編號查詢學校某項目情況。由函數(shù) printfSchoolObject() 實現(xiàn)。當用戶選 擇該功能時,系統(tǒng)會按學校編號輸出學校某項目情況。(7)按項目編號查詢?nèi)〉们叭蚯拔迕膶W校。由函數(shù)printfObjectSchool() 實現(xiàn)。當用戶選擇該功能時,系統(tǒng)會按項目編號查詢?nèi)〉们叭蚯拔迕膶W校情況。(8)退出。由exit(0)函數(shù)實現(xiàn)。三

5、、模塊設計1、模塊設計本程序包含兩個模塊:主程序模塊和工作區(qū)選擇模塊。其調(diào)用關系如圖2所示。主程序模塊工作區(qū)選擇模塊圖2模塊調(diào)用示意圖2、系統(tǒng)子程序及功能設計本系統(tǒng)共設置個6子程序,各子程序的函數(shù)名及功能說明如下。(1)LinkList creatLink()/創(chuàng)建鏈表(錄入各項目的成績)(2)int schoolScore(LinkList L)/統(tǒng)計各學??偡?3)void printfSchoolNumber()/按學校編號順序輸出(4)void printfSchoolScore()/按學??偡猪樞蜉敵?5)void printfManWomanScore(LinkList L /按男

6、女團體總分排序輸出(6)void printfSchoolObject(LinkList L) /情況按學校編號查詢學校某項目void printfObjectSchool(LinkListL)前五名的學校/ 按項目編號查詢?nèi)〉们岸?8)int main()/主函數(shù)3、函數(shù)主要調(diào)用關系圖本系統(tǒng)6個子系統(tǒng)之間的主要調(diào)用關系如圖3所示,圖中數(shù)字是各函數(shù)的編號。8 main()四、詳細設計1、數(shù)據(jù)類型定義(1)本系統(tǒng)采用鏈式結(jié)構存儲運動會分數(shù)統(tǒng)計的結(jié)點。節(jié)點定義如下:typedef struct LNode鏈表節(jié)點數(shù)據(jù)結(jié)構int objnum;char objtype;int athnum;ch

7、ar athname20;int schnum;char schname30;int athscore;struct LNode *next;LNode,*LinkList;(2)各學校情況數(shù)據(jù)結(jié)構的結(jié)構定義成結(jié)構體數(shù)組形式。定義如下:struct Schoolint schoolnumber;char schoolname30;int schoolscore;school30;2、系統(tǒng)主要子程序詳細設計(1)創(chuàng)建鏈表(錄入各項目的成績)子程序設計LinkList creatLink()LinkList L=(LinkList)malloc(LEN);LinkList p,q;int num,

8、objnum,n;char objtype;L->next=NULL;p=L;printf(" 請輸入男女項目總個數(shù):");scanf("%d",&num);while(num-)printf("請輸入項目編號:");scanf("%d",&objnum);printf("請輸入項目類型:");getchar();objtype=getchar();printf(" 請輸入 3( 代表取前三名 )或 5(代表取前五名 ):");scanf("%

9、d",&n);printf(" 請按名次順序輸入運動員編號, 姓名 , 學校編號 , 校名和成績n");while(n-)q=(LinkList)malloc(LEN);q->objnum=objnum;q->objtype=objtype;printf("請輸入運動員編號:");scanf("%d",&q->athnum);printf("請輸入運動員姓名:");getchar();scanf("%s",q->athname);printf(&

10、quot; 請輸入學校編號:");scanf("%d",&q->schnum);printf(" 請輸入校名 :");getchar();scanf("%s",q->schname);printf(" 請輸入成績:");scanf("%d",&q->athscore);q->next=NULL;p->next=q;p=q;return(L);( 2 )統(tǒng)計各學校總分子程序設計int schoolScore(LinkList L)LinkLi

11、st p;int i;p=L->next;for(i=0;i<20;i+)schooli.schoolscore=0;schooli.schoolnumber=-1;while(!p=NULL)for(i=0;i<20;i+)if(schooli.schoolnumber=-1)strcpy(schooli.schoolname,p->schname);schooli.schoolnumber=p->schnum;schooli.schoolscore=p->athscore;p=p->next; break;else if(schooli.schoo

12、lnumber=p->schnum) schooli.schoolscore+=p->athscore;p=p->next;break;return 0;五、測試分析1、創(chuàng)建鏈表(錄入各項目的成績)在主菜單下,用戶輸入 1 并回車,然后輸入數(shù)據(jù)結(jié)點的個數(shù)并回車,再輸入數(shù)據(jù),運行結(jié)果如圖 4 所示。圖 4 鏈表建立(錄入各項目的成績)2、統(tǒng)計各學??偡衷谥鞑藛蜗拢脩糨斎?2 并回車,運行結(jié)果如圖 5 所示。圖 5 統(tǒng)計各學??偡?、按學校編號順序輸出在主菜單下,用戶輸入 3 并回車,運行結(jié)果如圖 6 所示。圖 6 按學校編號順序輸出的數(shù)據(jù)4、按學??偡猪樞蜉敵鲈谥鞑藛蜗?,用戶

13、輸入 4 并回車,運行結(jié)果如圖 7 所示。圖 7 按學??偡猪樞蜉敵龅臄?shù)據(jù)5、按男女團體總分排序輸出在主菜單下,用戶輸入 5 并回車,運行結(jié)果如圖 8 所示。圖 8 按男女團體總分排序輸出的數(shù)據(jù)6、按學校編號查詢學校某項目情況在主菜單下,用戶輸入 6 并回車,再輸入學校編號回車,然后輸入項目編號,運行結(jié)果如圖 9 所示。圖 9 按學校編號查詢學校某項目情況6、按項目編號查詢?nèi)〉们叭蚯拔迕膶W校在主菜單下,用戶輸入 7 并回車,再輸入項目編號回車,然后輸入取名規(guī)則,運行結(jié)果如圖 10 所示。圖 10 按項目編號查詢?nèi)〉们叭蚯拔迕膶W校8、退出在主菜單下,用戶輸入 0 并回車,運行結(jié)果如圖

14、 11 所示。圖 11 退出程序六、源程序清單#include<stdio.h>#include<stdlib.h>#include<string.h>#define NULL 0#define LEN sizeof(LNode)typedef struct LNode/ 鏈表節(jié)點數(shù)據(jù)結(jié)構 int objnum;char objtype;int athnum;char athname20;int schnum;char schname30;int athscore;struct LNode *next;LNode,*LinkList;/ 學校情況數(shù)據(jù)結(jié)構st

15、ruct Schoolint schoolnumber;char schoolname30;int schoolscore;school30;/ 創(chuàng)建鏈表LinkList creatLink()LinkList L=(LinkList)malloc(LEN);LinkList p,q;int num,objnum,n;char objtype;L->next=NULL;p=L;printf(" 請輸入男女項目總個數(shù):");scanf("%d",&num);while(num-)printf("請輸入項目編號:");sca

16、nf("%d",&objnum);printf("請輸入項目類型:");getchar();objtype=getchar();printf(" 請輸入 3( 代表取前三名 ) 或 5(代表取前五名 ):");scanf("%d",&n);printf(" 請按名次順序輸入運動員編號 , 姓名 , 學校編號 , 校名和成績n");while(n-)q=(LinkList)malloc(LEN);q->objnum=objnum;q->objtype=objtype;p

17、rintf("請輸入運動員編號:");scanf("%d",&q->athnum);printf("請輸入運動員姓名:");getchar();scanf("%s",q->athname);printf(" 請輸入學校編號:");scanf("%d",&q->schnum);printf(" 請輸入校名 :");getchar();scanf("%s",q->schname);printf(&qu

18、ot; 請輸入成績:");scanf("%d",&q->athscore);q->next=NULL;p->next=q;p=q;return(L);/ 統(tǒng)計各學??偡謎nt schoolScore(LinkList L)LinkList p;int i;p=L->next;for(i=0;i<20;i+)schooli.schoolscore=0;schooli.schoolnumber=-1;while(!p=NULL)for(i=0;i<20;i+)if(schooli.schoolnumber=-1)strcpy

19、(schooli.schoolname,p->schname);schooli.schoolnumber=p->schnum;schooli.schoolscore=p->athscore;p=p->next;break;else if(schooli.schoolnumber=p->schnum) schooli.schoolscore+=p->athscore;p=p->next;break;return 0;/ 按學校編號順序輸出void printfSchoolNumber()int i,j,num,flag;printf(" 學校編

20、號 校 名 學??偡?n");for(i=0;i+)if(schooli.schoolnumber=-1)break;num=school0.schoolnumber;flag=0;for(j=1;j+)if(schoolj.schoolnumber=-1)break;if(schoolj.schoolnumber<num)num=schoolj.schoolnumber;flag=j;printf("%8d%10s%12dn",schoolflag.schoolnumber,schoolflag.schoolname,sc hoolflag.schools

21、core);schoolflag.schoolnumber=35565;/ 按學??偡猪樞蜉敵鰒oid printfSchoolScore()int i,j,sco,flag;printf(" 學校編號 校 名 學??偡?n");for(i=0;i+)if(schooli.schoolscore=0)break;sco=school0.schoolscore;flag=0;for(j=1;j+)if(schoolj.schoolscore=0)break;if(schoolj.schoolscore>sco)sco=schoolj.schoolscore;flag=j

22、;printf("%8d%10s%12dn",schoolflag.schoolnumber,schoolflag.schoolname,sc hoolflag.schoolscore);schoolflag.schoolscore=-1;/ 按男女團體總分排序輸出void printfManWomanScore(LinkList L)LinkList p;int manscore=0,womanscore=0;p=L->next;while(!p=NULL)if(p->objtype='m')manscore+=p->athscore;e

23、lse womanscore+=p->athscore;p=p->next;printf(" 團體 總分 n");if(manscore>=womanscore)printf("男生 %8dn",manscore);printf("女生 %8dn",womanscore);else printf("女生 %8dn",womanscore);printf("男生 %8dn",manscore);/ 按學校編號查詢學校某項目情況void printfSchoolObject(Lin

24、kList L)LinkList p;int scnum,obnum,sum=0;char scname30;p=L->next;printf(" 請輸入要查看的學校編號:");scanf("%d",&scnum);printf(" 請輸入項目編號:");scanf("%d",&obnum);while(p!=NULL)if(p->schnum=scnum&&p->objnum=obnum)sum+=p->athscore;strcpy(scname,p-&g

25、t;sc hname);p=p->next;printf(" 學校編號 校 名 項目編號 獲得總分 n");printf("%8d%10s%12d%12dn",scnum,scname,obnum,sum);/ 按項目編號查詢?nèi)〉们叭蚯拔迕膶W校void printfObjectSchool(LinkList L)LinkList p;int obnum,n,i;p=L->next;printf(" 請輸入要查看的項目編號:");scanf("%d",&obnum);printf("

26、; 請輸入 3( 前三名 ) 或 5( 前五名 ):");scanf("%d",&n);for(i=20;i<30;i+)schooli.schoolscore=0;schooli.schoolnumber=-1;while(p!=NULL)for(i=20;i<30;i+)if(schooli.schoolnumber=-1&&p->objnum=obnum) strcpy(schooli.schoolname,p->schname);schooli.schoolnumber=p->schnum; schoo

27、li.schoolscore=p->athscore; p=p->next;break;else if(schooli.schoolnumber=p->schnum&&p->objnum=obnum) schooli.schoolscore+=p->athscore;p=p->next;break;elsep=p->next;break;printf(" 項目編號 學校編號校 名 學??偡?n");/*i=20;while(n-)if(schooli.schoolscore!=0)printf("%8d%1

28、2d%10s%12dn",obnum,schooli.schoolnumber,schooli.schoolnam e,schooli.schoolscore);i+;else break;*/p=L->next;while(p->objnum!=obnum)p=p->next; while(n-)printf("%8d%12d%10s%12dn",obnum,p->schnum,p->schname,p->athscore);p=p->next;/ 主函數(shù)int main()LinkList L;int menu;while(menu!=0)printf("*n");printf(" printf("printf("printf("printf(&

溫馨提示

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

評論

0/150

提交評論