版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 運動會分數(shù)統(tǒng)計系統(tǒng)</b></p><p><b> 設計內容</b></p><p><b> 任務:</b></p><p> 參加運動會有n個學校,學校編號為1~n。比賽分成m個男子項目,和w個女子項目。項目編號為1~m,女子為m+1~w。不同的項目取前5名或
2、前3明積分;取前5名的積分為:7、5、3、2、1,前3名的積分分別為:5、3、2;哪些項目取前5名或前3名由學生自己決定。(m<=20,n<=20)。</p><p><b> 功能要求:</b></p><p> 可以輸入各個項目的前3名或前5名的成績;</p><p> 能統(tǒng)計各個學??偡郑?lt;/p><
3、p> 可以按學校編號、學校總分、男女團體總分排序輸出;</p><p> 可以按學校編號查詢學校某個項目的情況;</p><p> 可以按項目編號查詢取得前3或前5名的學校。</p><p><b> 設計思路</b></p><p><b> 系統(tǒng)結構設計圖</b></p&g
4、t;<p><b> 思路分析</b></p><p> 從上面的結構設計圖來看,隱含地給出了第一個約束條件:每個參賽學校均參加所有的比賽項目。然而這種設計思路并不符合實際情況,因為每個學校有權利選擇參加或不參加某個比賽項目。</p><p> 首先,在上述結構圖中,比賽項目Event是最小的數(shù)據(jù)存儲基本單元。比賽項目集合SportEvents可以
5、理解為Event數(shù)組,包含了所有的比賽項目。根據(jù)約束,只要有學校University參加運動會,此學校就包含了一個SportEvents集合,即為每個學校分配自己的項目成績單。有n個學校報名參加了運動會SportsMeeting,大會的工作人員根據(jù)比賽項目結果統(tǒng)計各個學校的成績。因此,這種設計結構有3層包含關系,但是每一部分相互獨立,耦合性弱。</p><p> 除了第1條所指出的設計缺陷,這種設計也面臨著另一
6、個問題。項目的成績如何輸入?常規(guī)思想是根據(jù)比賽結果,向系統(tǒng)輸入比賽項目的前3或5名的學校編號或名稱,系統(tǒng)后臺自動累加積分。但是,這里項目是最小的單元,學校又包含了項目,也就是說每個學校的項目成績單之間是封閉的,學校和學校之間是無法看到的,只有運動會的工作人員才有權限按照邏輯關系查詢某個學校的某項成績,所以顯然就不能按照常規(guī)思想進行項目成績的輸入。那怎么辦呢?直接輸入分數(shù)。我再給出第二個約束:對于一個項目來說,每個學校只派出一個代表參加。
7、通常對于一個比賽項目來說,學校可以派出不止一個代表參加,就像奧運會的男子百米飛人大賽,牙買加出3名,美國出3名等。</p><p> 根據(jù)第二個約束條件,假設裁判給出比賽結果表1中的學校名次,工作人員根據(jù)名次,將表2的分數(shù)輸入到系統(tǒng)即可。</p><p> 從另一個方面來看,如果大會的積分規(guī)則改變了。除非系統(tǒng)有對外修改積分規(guī)則的接口,否則工作人員就無能為力了。因此以表2的形式更加有靈活
8、性。</p><p> 客觀的說,此系統(tǒng)的設計上有很多缺陷,與實際的常規(guī)思想有所不同,所以才加入了兩個約束條件。</p><p><b> 功能設計</b></p><p><b> 功能模塊設計圖</b></p><p><b> 實現(xiàn)思路</b></p>
9、<p> 模塊設計圖中具體功能明了,這里就不再重復了。</p><p> 一般情況下,學校信息,比賽項目信息和項目成績都需要在cmd窗口中進行輸入。這也帶來2個問題。一是如果學校有n個,項目有m個,取前5名,那么你就要輸入n*m*5個數(shù)據(jù),工作量大。二是一旦發(fā)現(xiàn)歷史輸入有誤,那么就要全部重新輸入數(shù)據(jù)。為解決這個問題,本系統(tǒng)以文件流的形式導入數(shù)據(jù),文件流最簡單的方式就是讀寫txt。我把每個項目的成
10、績放在對應的txt文件中,如男子100米——M100.txt,具體對應關系可以查看PointsRules.txt。文件里的內容形式與表2相同,存放的是項目成績。在cmd窗口中,需要哪個項目的成績,就導入對應的txt文件即可。此外,如果項目成績發(fā)生變化,只需修改txt文件,再重新導入即可。</p><p> 采用OOP編程,將每一部分封裝成一個類,每個類滿足了強內聚、松耦合原則。具體的類的定義和聲明請查看代碼。&
11、lt;/p><p> 在結構設計圖中,學校和項目的數(shù)量是可以任意的,雖然需求規(guī)定m<=20,n<=20。如果直接定義數(shù)組(對象數(shù)組或者結構數(shù)組)大小為20,可能存在資源浪費的情況。為此,我采用了c++自帶的通用模板(也即泛型)vector<>結構。對于SportEvents類來說,它包含了vector<Event>類型的數(shù)據(jù)成員;在SportsMeeting類中,包含了vecto
12、r<University>類型的數(shù)據(jù)成員。調用push_back() 函數(shù),就可以根據(jù)實際情況添加任意個學?;蛘唔椖?。</p><p> 此外,采用vector另一個好處,就在于排序,對應功能要求的第5條。Vector背后運用的是迭代器,也就可以調用通用函數(shù)sort() 對vector進行排序,只要設計相應的排序規(guī)則即可,簡化了工作量。</p><p><b>
13、程序實現(xiàn)</b></p><p><b> 運行環(huán)境</b></p><p> Win XP,VC++ 6.0。</p><p><b> 工程項目</b></p><p> 工程文件SportsMeeting,包括SportsMeeting.h,SportsMeeting.cp
14、p,Client.cpp。</p><p><b> 編譯原理圖</b></p><p><b> 類聲明</b></p><p> 對應結構設計圖中所設計的4個類,在SportsMeeting.h中聲明</p><p> *************************** Event
15、類 ***************************</p><p> class Event</p><p><b> {</b></p><p><b> public:</b></p><p><b> Event();</b></p>&l
16、t;p> void setEventInfo(const int & index, const string name); // 設置項目編號和名稱</p><p> int getEventIndex() const; // 返回項目編號</p><p> string getEventName() const; // 返回項目名稱</p><
17、;p> int getEventScore() const; // 返回項目成績</p><p> void setEventScore(const int & score); // 設置項目成績</p><p><b> private:</b></p><p> int eventIndex; // 項目編號&l
18、t;/p><p> string eventName; // 項目名稱</p><p> int eventScore; // 項目成績</p><p><b> };</b></p><p> *************************** SportEvents類 ***************
19、************</p><p> class SportEvents</p><p><b> {</b></p><p><b> public:</b></p><p> SportEvents();</p><p> void setSportEve
20、ntsInfo(); // 設置運動會項目信息</p><p> void displaySportEventsInfo() const; // 返回所有比賽項目信息和目前成績</p><p> void initializeSportEvents(); // 初始化比賽信息</p><p> vector<Event> & getMySp
21、ortEvents(); </p><p><b> private:</b></p><p> vector<Event> mySportEvents;</p><p><b> };</b></p><p> *************************** Univ
22、ersity類 ***************************</p><p> class University</p><p><b> {</b></p><p><b> public:</b></p><p> University();</p><p
23、> void initializeUinversity(); // 初始化</p><p> void setUniversityInfo(const int & index, const string name); // 設置學校信息</p><p> void getUniversityInfo() const; // 返回學校信息</p><p
24、> int getUniversityIndex() const; // 返回學校編號</p><p> string getUniversityName() const; // 返回學校名稱</p><p> void getUniversitySportsInfo() const; // 返回學校所有參賽項目信息</p><p> int getT
25、otalScore(); // 返回學??偝煽?lt;/p><p> int getMTScore(); // 返回男團總分</p><p> int getWTScore(); // 返回女團總分</p><p> SportEvents & getUniSportEvents();</p><p><b> priv
26、ate:</b></p><p> int uIndex; // 學校編號</p><p> string uName; // 學校名稱</p><p> int totalScore; // 學??偝煽?lt;/p><p> int mTeamScore; // 男團總分</p><p> i
27、nt wTeamScore; // 女團總分</p><p> SportEvents uSportEvents; // Sports 對象</p><p><b> };</b></p><p> *************************** SportsMeeting類 *************************
28、**</p><p> class SportsMeeting</p><p><b> {</b></p><p><b> public:</b></p><p> SportsMeeting();</p><p> void initializeSportsM
29、eeting(); // 初始化運動會</p><p> void displayUniversity() const; // 顯示所有參賽學校信息</p><p> void displaySportEvents() const; // 顯示所有比賽項目信息</p><p> void displaySingleUniversity(); // 顯示指定學校
30、所有成績信息和總分</p><p> void displayPointsRules() const; // 顯示積分排名規(guī)則</p><p> void importEventScore(); // 導入某個項目的成績</p><p> void countTotalScore(); // 統(tǒng)計各學??偡?lt;/p><p> void
31、 sortByTotalScore(); // 按學??偡峙判?lt;/p><p> void sortByMTScore(); // 按男團總分排序</p><p> void sortByWTScore(); // 按女團總分排序</p><p> void inquireByUIandEI(); // 按學校編號查詢某個項目成績</p><
32、;p> void inquireByEIandTop(); // 按項目編號查詢Top(n)學校</p><p><b> private:</b></p><p> vector< University > myUniversity;</p><p> bool flag; // 標記是否導入過成績</p>
33、;<p><b> };</b></p><p><b> 程序代碼</b></p><p><b> 請見附錄</b></p><p><b> 測試數(shù)據(jù):</b></p><p><b> 實驗結果</b>
34、</p><p><b> 程序界面</b></p><p> 展示參賽學校信息(selection=1)</p><p> 展示所有比賽項目信息(selection=2)</p><p> 展示排名積分規(guī)則(selection=3)</p><p> 調用系統(tǒng)API,打開一個txt文件
35、。</p><p> 輸入比賽項目成績(selection=4)</p><p> 首先給出項目編號,然后給出對應的成績表,即txt文件,系統(tǒng)導入成績。</p><p> 輸入3組數(shù)據(jù):男子100(M100),女子100(W100),男子跳遠(MLJ)。</p><p> 統(tǒng)計每個學校的總分(selection=5)</p>
36、;<p> 此功能也對應按學校編號排序輸出</p><p> 查詢學校的項目成績單和總分(selection=6)</p><p> 如果想具體了解某個學校的所有比賽成績情況,可以選擇此功能。</p><p> 按照學??偡峙判蜉敵觯╯election=7)</p><p> 按照男子團體總分排序(selection=
37、8)</p><p> 目前只輸入2個男子項目:男子100,男子跳遠。</p><p> 按照女子團體總分排序(selection=9)</p><p> 只輸入1個女子項目:女子100。</p><p> 查詢某個學校的某項成績(selection=10)</p><p> 查詢某個項目的前3或前5名成績(
38、selection=11)</p><p><b> 總結與展望</b></p><p> 隨著對OOP的深入理解,以及設計模式的學習,希望盡快寫出Version2。</p><p><b> 附錄:程序代碼</b></p><p> 請前往 “新浪愛問·共享資料”網(wǎng)站</p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結構課程設計-運動會分數(shù)統(tǒng)計系統(tǒng)
- 數(shù)據(jù)結構課程設計--運動會分數(shù)統(tǒng)計
- 數(shù)據(jù)結構課程設計--運動會分數(shù)統(tǒng)計
- 數(shù)據(jù)結構課程設計——運動會分數(shù)統(tǒng)計
- 數(shù)據(jù)結構課程設計-運動會分數(shù)統(tǒng)計
- 數(shù)據(jù)結構課程設計-- 運動會分數(shù)統(tǒng)計
- 數(shù)據(jù)結構課程設計---運動會分數(shù)統(tǒng)計
- 數(shù)據(jù)結構課程設計---運動會分數(shù)統(tǒng)計
- 數(shù)據(jù)結構課程設計---運動會分數(shù)統(tǒng)計
- 數(shù)據(jù)結構運動會分數(shù)統(tǒng)計課程設計
- 數(shù)據(jù)結構課程設計--運動會分數(shù)統(tǒng)計系統(tǒng)設計
- 運動會分數(shù)統(tǒng)計系統(tǒng)數(shù)據(jù)結構課程設計論文
- 《數(shù)據(jù)結構》課程設計報告--運動會分數(shù)統(tǒng)計
- 數(shù)據(jù)結構課程設計報告運動會分數(shù)統(tǒng)計
- 數(shù)據(jù)結構課程設計報告---運動會分數(shù)統(tǒng)計
- 數(shù)據(jù)結構課程設計報告-運動會分數(shù)統(tǒng)計
- 運動會分數(shù)統(tǒng)計-數(shù)據(jù)結構與算法課程設計報告
- 數(shù)據(jù)結構課程設計-運動會分數(shù)統(tǒng)計(c語言版)
- 運動會分數(shù)統(tǒng)計數(shù)據(jù)結構課程設計(含源代碼)
- 運動會分數(shù)統(tǒng)計系統(tǒng)課程設計
評論
0/150
提交評論