數(shù)據(jù)結構運動會分數(shù)統(tǒng)計課程設計(共22頁)_第1頁
數(shù)據(jù)結構運動會分數(shù)統(tǒng)計課程設計(共22頁)_第2頁
數(shù)據(jù)結構運動會分數(shù)統(tǒng)計課程設計(共22頁)_第3頁
數(shù)據(jù)結構運動會分數(shù)統(tǒng)計課程設計(共22頁)_第4頁
數(shù)據(jù)結構運動會分數(shù)統(tǒng)計課程設計(共22頁)_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上 數(shù)據(jù)結構課程設計 目錄1. 需求分析-2 1.1問題描述-21.2基本任務-22. 概要設計-22.1主界面設計-22.2數(shù)據(jù)結構設計-32.3系統(tǒng)功能設計-33. 模塊設計-33.1模塊設計-33.2系統(tǒng)子模塊及功能設計-43.3系統(tǒng)模塊之間的調用關系-44. 詳要設計-54.1數(shù)據(jù)結構設計-54.2系統(tǒng)主要模塊設計-65. 調試分析-85.1創(chuàng)建學校鏈表-85.2添加獲獎學生-85.3按項目查學校成績-115.4按學校編號查參加項目-146. 用戶使用說明-157. 參考文獻-158. 對軟件自我評價-159. 程序設計源代碼-1610. 心得體會-22一需求分

2、析 1.1 問題描述1. 課程設計題目:運動會分數(shù)統(tǒng)計。2. 任務:加運動會有n個學校,學校編號為1n。比賽分成m個男子項目,和w個女子項目。項目編號為男子1m,女子m+1m+w。不同的項目取前五名或前三名積分;取前五名的積分分別為:7、5、3、2、1,前三名的積分分別為:5、3、2;哪些取前五名或前三名由學生自己設定。(m<=20,n<=20)3. 問題分析:1)、每個學校有運動員要參加運動項目,故存儲結構要有三個,項目結構體,學生信息結構體和學校鏈表。每個結點存儲一個學校,每個學校可以有多名運動員參加運動項目。由此,存儲結構就建立了。2)、要求不同的項目根據(jù)具體情況取去前五名或

3、前三名積分,則可以設定標準,即當參加某項目的運動員數(shù)等于或多于五人時,就取該項目的前五名進行積分,取前五名的積分分別為:7,5,3,2,1。當參加某一項目的人數(shù)少于五人時,則去該項目的前三名進行積分,去取前三名的積分分別為:5,3,2。3)、要求能統(tǒng)計學校的總分,并可以按學校編號輸出每個學校的參賽信息及每個學校每個運動員的信息和所有運動項目清單。以上這些功能可以通過遍歷學校鏈表來實現(xiàn)。4)、要求可以學校編號查詢學校某個項目的情況,用戶輸入學校編號和項目編號,通過遍歷學校鏈表即可實現(xiàn)。5)、要求可以按編號查詢取得前三或前五名的學校,用戶輸入要查詢的項目的編號,通過遍歷學校鏈表即可實現(xiàn)。6)、設置

4、菜單函數(shù)menu(),產生用戶界面。 規(guī)定: 輸入數(shù)據(jù)形式和范圍:可以輸入學校的名稱,運動項目的名稱輸出形式:有中文提示,各學校分數(shù)為整形界面要求:有合理的提示,每個功能可以設立菜單,根據(jù)提示,可以完成相關的功能要求。存儲結構:學生自己根據(jù)系統(tǒng)功能要求自己設計,但是要求運動會的相關數(shù)據(jù)要存儲在數(shù)據(jù)文件中。測試數(shù)據(jù):要求使用1、全部合法數(shù)據(jù);2、整體非法數(shù)據(jù);3、局部非法數(shù)據(jù)。進行程序測試,以保證程序的穩(wěn)定。 1.2 基本任務通過用戶調查分析及實際需求,系統(tǒng)需要實現(xiàn)如下基本任務:1) .輸入各個項目的前三名或前五名的成績;2) .統(tǒng)計各學??偡?3).按學校編號或名稱、男女團體總分排序輸出;4)

5、.按學校編號查詢學校某個項目的情況;可以按項目編號查詢取得前三或前五名的學校。數(shù)據(jù)存入文件并能隨時查詢。二概要設計為了完成需求分析的基本任務,主要從以下3個方面進行設計: 2.1 主界面設計為了實現(xiàn)運動會分數(shù)統(tǒng)計的各項功能,設計了一個含有多個菜單項的主控菜單模塊以鏈接系統(tǒng)的各項功能,以方便用戶使用系統(tǒng)。系統(tǒng)主控菜單運行界面如圖1所示:圖1 運動會分數(shù)統(tǒng)計主菜單 2.2 數(shù)據(jù)結構設計系統(tǒng)采用數(shù)據(jù)的存儲結構定義:運動項目結構體、 運動員信息結構體、學校鏈表此外,還定義了一些全局變量:學??倲?shù)SchoolCount、男生項目總數(shù)BoyProject、女生項目總數(shù)GirlProject、項目總數(shù)Tot

6、alProject、項目表Project_T41。 2.3 系統(tǒng)功能設計創(chuàng)建學校的鏈表: void CreatSchoolLink(School &head);添加獲獎學生: void AddStudentLink(School &head); 按項目編號查詢取得前三或前五名的學校。 void Find_Project_ID(School &head,int Project_ID); 按學校編號查詢學校某個項目。 void Find_School_Project(School &head,int School_ID,int Project_ID);成績統(tǒng)計: v

7、oid ScoreCount(School &head);輸出參賽結果: void OutPut_Link(School head);(7) .添加學生數(shù)據(jù): void AddStudent(School &head);(8).菜單函數(shù): int menu();(9).主函數(shù): int main();三模塊設計 3.1 模塊設計系統(tǒng)主要包含主程序模塊和其它鏈表操作模塊。其調用關系如圖2所示。ScoreCount(School&head)main()CreatSchoolLink(head)AddStudent(head)OutPut_Link(head)FindProj

8、ect_ID(head,Project_ID)Find_School_Project(head,School_ID,intProject_ID)menu()AddStudentLink(head) 圖2 模塊調用示意圖 3.2 系統(tǒng)子模塊及其功能設計系統(tǒng)設計了8個子功能模塊,8個子功能模塊的描述如下:創(chuàng)建學校的鏈表: void CreatSchoolLink(School &head);添加獲獎學生: void AddStudentLink(School &head); 按項目編號查詢取得前三或前五名的學校。 void Find_Project_ID(School &h

9、ead,int Project_ID); 按學校編號查詢學校某個項目。 void Find_School_Project(School &head,int School_ID,int Project_ID);成績統(tǒng)計: void ScoreCount(School &head);輸出參賽結果: void OutPut_Link(School head);(8) .添加學生數(shù)據(jù): void AddStudent(School &head);(8).菜單函數(shù): int menu(); 3.3 系統(tǒng)模塊之間的調用關系系統(tǒng)的10個子模塊之間的主要調用關系如圖3所示:Menu()

10、 圖3 系統(tǒng)函數(shù)調用關系圖四詳細設計 4.1 數(shù)據(jù)結構設計系統(tǒng)采用線性表的鏈式存儲結構存儲學校信息。結點定義如下:typedef struct SchoolNodeint number;/學校編號 char name10; int count;/運動員人數(shù) int boyscore;/男子團體總分 int girlscore;/女子團體總分 int totalscore;/團體總分 int jifen;/積分 Student students20;/參賽學生 struct SchoolNode *next;SchoolNode,*School; 4.2 系統(tǒng)主要模塊設計(1) 創(chuàng)建學校鏈表算法

11、思想及程序代碼:void CreatSchoolLink(School &head)/創(chuàng)建學校的鏈表 School p; int i; head=p=(School)malloc(sizeof(SchoolNode); for(i=1;i<=SchoolCount;i+) p=p->next=(School)malloc(sizeof(SchoolNode); printf("請輸入編號為%d的學校的名稱:n",i); scanf("%s",p->name); p->number=i; p->count=0; p-&

12、gt;boyscore=0; p->girlscore=0; p->totalscore=0; p->jifen=0; p->next=NULL;/使指針指向空 head=head->next;/頭指針后移(2) 添加獲獎學生函數(shù)程序代碼:void AddStudentLink(School &head)/添加獲獎學生 School L,p; int School_ID; /學校編號 char StudentName20; /學生姓名 int sex;/性別 int Project_ID; /項目編號 int score; /成績 int ranking;

13、 /名次 printf("請輸入學生的姓名:n"); scanf("%s",StudentName); printf("請輸入該學生所在學校的編號:n"); scanf("%d",&School_ID); printf("請輸入該學生的性別(0-女,-男):n"); scanf("%d",&sex); printf("請輸入該學生參加的項目編號:n"); scanf("%d",&Project_ID); if(s

14、ex=0) GirlProject=Project_ID; if(sex=1) BoyProject=Project_ID; printf("請輸入該學生該項目的得分:n"); scanf("%d",&score); printf("請輸入該學生在該項目中的名次:n"); scanf("%d",&ranking); L=head; while(L) if(L->number=School_ID) p=L; p->count=p->count+1; /運動員數(shù)+1 strcpy(p-

15、>studentsp->, StudentName); /學生姓名 p->studentsp->count.Project=Project_ID ;/得分項目 Project_TProject_ID.count=Project_TProject_ID.count+1; /該項目得分人數(shù)+1 p->studentsp->count.ranking=ranking;/得分名次 p->studentsp->count.score=score;/得分 p->studentsp->count.sex=sex; /性別 bre

16、ak; else L=L->next; (3) 按學校項目查詢前三名和前五名學校函數(shù)程序代碼:void Find_Project_ID(School &head,int Project_ID) /按項目編號查詢取得前三或前五名的學校。 School h,p; p=h=head; /保存鏈表頭指針 int i; printf("查詢結果如下:n"); while(h) for(i=1;i<=h->count;i+) if(h->studentsi.Project=Project_ID) printf("學校:%s 姓名:%s 名次:%

17、dn",h->name,h->,h->studentsi.ranking); printf("n-n"); h=h->next; (4) 按學校編號查詢學校的某個項目程序代碼:void Find_School_Project(School &head,int School_ID,int Project_ID)/按學校編號查詢學校某個項目 School h,p; int Project_i=0; int i; p=h=head; /保存鏈表頭指針 while(h) if(h->number=Schoo

18、l_ID)p=h;break; h=h->next; for(i=1;i<=p->count;i+) if(p->studentsi.Project=Project_ID) printf("查詢結果如下:n"); printf("姓名:%sn",p->); Project_i=p->studentsi.Project; if(p->studentsi.sex=0) printf("性別:女n"); Project_i=Project_i+20; else print

19、f("性別:男n"); printf("項目編號:%d 項目名稱%s 該項目得分%d 名次:%dn",p->studentsi.Project,Project_TProject_,p->studentsi.score,p->studentsi.ranking); 五調試分析各子功能測試運行結果如下: 5.1創(chuàng)建學校鏈表運行結果: 創(chuàng)建5個學校,分別為重慶工商大學、重慶郵電大學、重慶交通大學、重慶師范大學、重慶大學 5.2添加獲獎學生運行結果:詳細添加學生人數(shù),我們組徐維維已截圖,總共輸入重慶工商大學9人,其中項目2有5人,項

20、目1、3、4、5各一人,重慶郵電大學1人參加項目5,重慶交通大學2人,,參加項目2、5各一人。 5.3按項目查找前三名或前五名學校運行結果:由運行結果可以知道,當每個項目人數(shù)大于等于5時,按第一種積分計算,第一名取7分,當每個項目總數(shù)小于5時,按第二種積分計算,第一名取得是5分。其次還計算了每個學校女子團體總分、男子團體總分、學校總分。 5.4按學校編號查找某個項目參加人數(shù)函數(shù)運行結果:六用戶使用說明該運動會分數(shù)統(tǒng)計程序用C語言編寫,實現(xiàn)了所要求的大部分功能。(1)按數(shù)字鍵1,使用前首先要進行參數(shù)統(tǒng)計,包括參賽學校數(shù)(不多余20個),男生項目數(shù)(不多于20個)和女生項目數(shù)(不多于20個)。設置

21、時同時輸入學校及項目的名稱,要求輸入英文字符。(2)按數(shù)字鍵2用戶可以添加獲獎學習信息,包括所在學校編號,性別,參賽項目編號,成績和名次。(3)按數(shù)字鍵3,可以按學校編號輸出學校參賽的信息,包括學校的編號名稱,男子團體總分,女子團體總分,團體總分,積分。可以輸出每個學校的每個運動員的信息,包括姓名,性別,得分項目名稱,成績,名次。可以輸出所有的運動項目。(4)按數(shù)字鍵4,可以查詢某個學校某個項目的信息。(5)按數(shù)字鍵5,可以按項目編號查詢取得前三或前五名的學校。(6)按15之外的數(shù)字鍵可以退出程序。七參考文獻在編程過程中所參考的文獻:數(shù)據(jù)結構第三版、C語言教程八對所設計的軟件進行自我評價 此源

22、程序代碼還存在兩點點沒有解決的問題,第一學??偡殖煽兣判驔]有編寫代碼,第二男女生參加項目人數(shù)沒有統(tǒng)計,其他的相關要求基本上達到。在實驗過程中出現(xiàn)以下幾點問題:第一,在創(chuàng)建鏈表時,忽略了不帶頭結點的指針頭指針需要向后移,是由于長期的定式思維,頭指針是不能發(fā)生改變導致;第二,對鏈表的掌握不是足夠的扎實,因此在處理相關問題的時候,存在很大的障礙,譬如對遍歷鏈表,表頭指針的后移;第三,在處理每個項目的前三名和前五名積分是花費了一段時間去理解。九程序源代碼:#include"stdio.h"#include"malloc.h"#include"stdli

23、b.h"#include"string.h"typedef struct Projectint number;/項目編號 char name10;/項目名稱 int count;/該項目得分人數(shù)Project_Table;typedef struct Studentchar name10; int sex; int Project;/參加的項目 int score;/成績 int ranking;/名次Student;typedef struct SchoolNodeint number;/學校編號 char name10; int count;/運動員人數(shù) in

24、t boyscore;/男子團體總分 int girlscore;/女子團體總分 int totalscore;/團體總分 int jifen;/積分 Student students20;/參賽學生 struct SchoolNode *next;SchoolNode,*School;int SchoolCount=0;/學??倲?shù)int BoyProject=0;/男生項目總數(shù)int GirlProject=0;/女生項目總數(shù)int TotalProject=0; /項目總數(shù)Project_Table Project_T41;/項目表void CreatSchoolLink(School &

25、amp;head)/創(chuàng)建學校的鏈表 School p; int i; head=p=(School)malloc(sizeof(SchoolNode); for(i=1;i<=SchoolCount;i+) p=p->next=(School)malloc(sizeof(SchoolNode); printf("請輸入編號為%d的學校的名稱:n",i); scanf("%s",p->name); p->number=i; p->count=0; p->boyscore=0; p->girlscore=0; p-&

26、gt;totalscore=0; p->jifen=0; p->next=NULL;/使指針指向空 head=head->next;/頭指針后移 void AddStudentLink(School &head)/添加獲獎學生 School L,p; int School_ID; /學校編號 char StudentName20; /學生姓名 int sex;/性別 int Project_ID; /項目編號 int score; /成績 int ranking; /名次 printf("請輸入學生的姓名:n"); scanf("%s&q

27、uot;,StudentName); printf("請輸入該學生所在學校的編號:n"); scanf("%d",&School_ID); printf("請輸入該學生的性別(0-女,-男):n"); scanf("%d",&sex); printf("請輸入該學生參加的項目編號:n"); scanf("%d",&Project_ID); if(sex=0) GirlProject=Project_ID; if(sex=1) BoyProject=Pr

28、oject_ID; printf("請輸入該學生該項目的得分:n"); scanf("%d",&score); printf("請輸入該學生在該項目中的名次:n"); scanf("%d",&ranking); L=head; while(L) if(L->number=School_ID) p=L; p->count=p->count+1; /運動員數(shù)+1 strcpy(p->studentsp->, StudentName); /學生姓名 p-&

29、gt;studentsp->count.Project=Project_ID ;/得分項目 Project_TProject_ID.count=Project_TProject_ID.count+1; /該項目得分人數(shù)+1 p->studentsp->count.ranking=ranking;/得分名次 p->studentsp->count.score=score;/得分 p->studentsp->count.sex=sex; /性別 break; else L=L->next; void Find_Project_ID(School &a

30、mp;head,int Project_ID) /按項目編號查詢取得前三或前五名的學校。 School h,p; p=h=head; /保存鏈表頭指針 int i; printf("查詢結果如下:n"); while(h) for(i=1;i<=h->count;i+) if(h->studentsi.Project=Project_ID) printf("學校:%s 姓名:%s 名次:%dn",h->name,h->,h->studentsi.ranking); printf("

31、n-n"); h=h->next; void Find_School_Project(School &head,int School_ID,int Project_ID)/按學校編號查詢學校某個項目 School h,p; int Project_i=0; int i; p=h=head; /保存鏈表頭指針 while(h) if(h->number=School_ID)p=h;break; h=h->next; for(i=1;i<=p->count;i+) if(p->studentsi.Project=Project_ID) prin

32、tf("查詢結果如下:n"); printf("姓名:%sn",p->); Project_i=p->studentsi.Project; if(p->studentsi.sex=0) printf("性別:女n"); Project_i=Project_i+20; else printf("性別:男n"); printf("項目編號:%d 項目名稱%s 該項目得分%d 名次:%dn",p->studentsi.Project,Project_

33、TProject_,p->studentsi.score,p->studentsi.ranking); void OutPut_Link(School head) /向屏幕輸出數(shù)據(jù) School h; h=head; int i; int Project_ID; int Project_count_i; while(h) /遍歷學校 printf("學校編號:%dn",h->number); printf("學校名稱:%sn",h->name); printf("本次運動會積分%dn",h->

34、jifen); printf("男子團體總分:%dn",h->boyscore); printf("女子團體總分:%dn",h->girlscore); printf("總分:%dn",h->totalscore); printf("運動員數(shù):%dn",h->count); for(i=1;i<=h->count;i+) /輸出該校學生運動員情況 printf("運動員姓名:%sn",h->); if(h->studen

35、tsi.sex=0)printf("性別:女n"); else printf("性別:男n"); Project_ID=h->studentsi.Project; if(h->studentsi.sex=0)Project_ID=Project_ID+20; /如果是女生則項目表向后移動 printf("得分項目:%sn",Project_TProject_ID.name); printf("得分:%dn",h->studentsi.score); printf("得分名次:%dn&qu

36、ot;,h->studentsi.ranking); printf("n-n"); h=h->next; /指針向后移動 printf("n-n"); void ScoreCount(School &head)/成績統(tǒng)計 School p; p=head; /保存鏈表頭指針 int boyscore=0; /男子團體總分 int girlscore=0; /女子團體總分 int totalscore=0; /團體總分 int i; int Project_i=0; int jifen=0;/積分 while(p) for(i=1;i&

37、lt;=p->count;i+) /計算分數(shù) totalscore=totalscore+p->studentsi.score; /計算總分 if(p->studentsi.sex=0) girlscore=girlscore+p->studentsi.score;/女子團體總分 else boyscore=boyscore+p->studentsi.score;/男子團體總分 /計算積分 Project_i=p->studentsi.Project; if(Project_TProject_i.count>=5) /取前名 if(p->stud

38、entsi.ranking=1)jifen=jifen+7; else if(p->studentsi.ranking=2)jifen=jifen+5; else if(p->studentsi.ranking=3)jifen=jifen+3; else if(p->studentsi.ranking=4)jifen=jifen+2; else if(p->studentsi.ranking=5)jifen=jifen+1; if(Project_TProject_i.count<5) /取前名 if(p->studentsi.ranking=1)jifen

39、=jifen+5; else if(p->studentsi.ranking=2)jifen=jifen+3; else if(p->studentsi.ranking=3)jifen=jifen+2; /for p->jifen=jifen; /計算積分 p->girlscore=girlscore;/保存女子總分 p->boyscore=boyscore;/保存男子總分 p->totalscore=totalscore;/保存總分 jifen=0; boyscore=0; /男子團體總分 girlscore=0; /女子團體總分 totalscore=0

40、; /總分 p=p->next; /向后移動指針 /whilevoid AddStudent(School &head) /添加學生數(shù)據(jù) int i=1; while(i) AddStudentLink(head); /添加學生數(shù)據(jù) printf("n是否繼續(xù)添加學生數(shù)據(jù)?No=0 Yes=1n"); scanf("%d",&i); int menu() /*菜單函數(shù)*/int d; printf("n數(shù)據(jù)結構-運動會分數(shù)統(tǒng)計n"); printf("n1-參數(shù)設置 2-添加學生n"); printf("n3-統(tǒng)計 4-學校查詢n"); printf("n5-項目查詢 按其他鍵退出n"); scanf("%d",&d);return(d);int main()School head; int i,flag=1; int a,b,c; while(flag) switch(menu() case 1: prin

溫馨提示

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

評論

0/150

提交評論