版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 運動會分?jǐn)?shù)統(tǒng)計系統(tǒng)</b></p><p><b> 設(shè)計內(nèi)容</b></p><p><b> 任務(wù):</b></p><p> 參加運動會有n個學(xué)校,學(xué)校編號為1~n。比賽分成m個男子項目,和w個女子項目。項目編號為1~m,女子為m+1~w。不同的項目取前5名或
2、前3明積分;取前5名的積分為:7、5、3、2、1,前3名的積分分別為:5、3、2;哪些項目取前5名或前3名由學(xué)生自己決定。(m<=20,n<=20)。</p><p><b> 功能要求:</b></p><p> 可以輸入各個項目的前3名或前5名的成績;</p><p> 能統(tǒng)計各個學(xué)??偡?;</p><
3、p> 可以按學(xué)校編號、學(xué)校總分、男女團(tuán)體總分排序輸出;</p><p> 可以按學(xué)校編號查詢學(xué)校某個項目的情況;</p><p> 可以按項目編號查詢?nèi)〉们?或前5名的學(xué)校。</p><p><b> 設(shè)計思路</b></p><p><b> 系統(tǒng)結(jié)構(gòu)設(shè)計圖</b></p&g
4、t;<p><b> 思路分析</b></p><p> 從上面的結(jié)構(gòu)設(shè)計圖來看,隱含地給出了第一個約束條件:每個參賽學(xué)校均參加所有的比賽項目。然而這種設(shè)計思路并不符合實際情況,因為每個學(xué)校有權(quán)利選擇參加或不參加某個比賽項目。</p><p> 首先,在上述結(jié)構(gòu)圖中,比賽項目Event是最小的數(shù)據(jù)存儲基本單元。比賽項目集合SportEvents可以
5、理解為Event數(shù)組,包含了所有的比賽項目。根據(jù)約束,只要有學(xué)校University參加運動會,此學(xué)校就包含了一個SportEvents集合,即為每個學(xué)校分配自己的項目成績單。有n個學(xué)校報名參加了運動會SportsMeeting,大會的工作人員根據(jù)比賽項目結(jié)果統(tǒng)計各個學(xué)校的成績。因此,這種設(shè)計結(jié)構(gòu)有3層包含關(guān)系,但是每一部分相互獨立,耦合性弱。</p><p> 除了第1條所指出的設(shè)計缺陷,這種設(shè)計也面臨著另一
6、個問題。項目的成績?nèi)绾屋斎耄砍R?guī)思想是根據(jù)比賽結(jié)果,向系統(tǒng)輸入比賽項目的前3或5名的學(xué)校編號或名稱,系統(tǒng)后臺自動累加積分。但是,這里項目是最小的單元,學(xué)校又包含了項目,也就是說每個學(xué)校的項目成績單之間是封閉的,學(xué)校和學(xué)校之間是無法看到的,只有運動會的工作人員才有權(quán)限按照邏輯關(guān)系查詢某個學(xué)校的某項成績,所以顯然就不能按照常規(guī)思想進(jìn)行項目成績的輸入。那怎么辦呢?直接輸入分?jǐn)?shù)。我再給出第二個約束:對于一個項目來說,每個學(xué)校只派出一個代表參加。
7、通常對于一個比賽項目來說,學(xué)??梢耘沙霾恢挂粋€代表參加,就像奧運會的男子百米飛人大賽,牙買加出3名,美國出3名等。</p><p> 根據(jù)第二個約束條件,假設(shè)裁判給出比賽結(jié)果表1中的學(xué)校名次,工作人員根據(jù)名次,將表2的分?jǐn)?shù)輸入到系統(tǒng)即可。</p><p> 從另一個方面來看,如果大會的積分規(guī)則改變了。除非系統(tǒng)有對外修改積分規(guī)則的接口,否則工作人員就無能為力了。因此以表2的形式更加有靈活
8、性。</p><p> 客觀的說,此系統(tǒng)的設(shè)計上有很多缺陷,與實際的常規(guī)思想有所不同,所以才加入了兩個約束條件。</p><p><b> 功能設(shè)計</b></p><p><b> 功能模塊設(shè)計圖</b></p><p><b> 實現(xiàn)思路</b></p>
9、<p> 模塊設(shè)計圖中具體功能明了,這里就不再重復(fù)了。</p><p> 一般情況下,學(xué)校信息,比賽項目信息和項目成績都需要在cmd窗口中進(jìn)行輸入。這也帶來2個問題。一是如果學(xué)校有n個,項目有m個,取前5名,那么你就要輸入n*m*5個數(shù)據(jù),工作量大。二是一旦發(fā)現(xiàn)歷史輸入有誤,那么就要全部重新輸入數(shù)據(jù)。為解決這個問題,本系統(tǒng)以文件流的形式導(dǎo)入數(shù)據(jù),文件流最簡單的方式就是讀寫txt。我把每個項目的成
10、績放在對應(yīng)的txt文件中,如男子100米——M100.txt,具體對應(yīng)關(guān)系可以查看PointsRules.txt。文件里的內(nèi)容形式與表2相同,存放的是項目成績。在cmd窗口中,需要哪個項目的成績,就導(dǎo)入對應(yīng)的txt文件即可。此外,如果項目成績發(fā)生變化,只需修改txt文件,再重新導(dǎo)入即可。</p><p> 采用OOP編程,將每一部分封裝成一個類,每個類滿足了強內(nèi)聚、松耦合原則。具體的類的定義和聲明請查看代碼。&
11、lt;/p><p> 在結(jié)構(gòu)設(shè)計圖中,學(xué)校和項目的數(shù)量是可以任意的,雖然需求規(guī)定m<=20,n<=20。如果直接定義數(shù)組(對象數(shù)組或者結(jié)構(gòu)數(shù)組)大小為20,可能存在資源浪費的情況。為此,我采用了c++自帶的通用模板(也即泛型)vector<>結(jié)構(gòu)。對于SportEvents類來說,它包含了vector<Event>類型的數(shù)據(jù)成員;在SportsMeeting類中,包含了vecto
12、r<University>類型的數(shù)據(jù)成員。調(diào)用push_back() 函數(shù),就可以根據(jù)實際情況添加任意個學(xué)?;蛘唔椖俊?lt;/p><p> 此外,采用vector另一個好處,就在于排序,對應(yīng)功能要求的第5條。Vector背后運用的是迭代器,也就可以調(diào)用通用函數(shù)sort() 對vector進(jìn)行排序,只要設(shè)計相應(yīng)的排序規(guī)則即可,簡化了工作量。</p><p><b>
13、程序?qū)崿F(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> 對應(yīng)結(jié)構(gòu)設(shè)計圖中所設(shè)計的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); // 設(shè)置項目編號和名稱</p><p> int getEventIndex() const; // 返回項目編號</p><p> string getEventName() const; // 返回項目名稱</p><
17、;p> int getEventScore() const; // 返回項目成績</p><p> void setEventScore(const int & score); // 設(shè)置項目成績</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(); // 設(shè)置運動會項目信息</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); // 設(shè)置學(xué)校信息</p><p> void getUniversityInfo() const; // 返回學(xué)校信息</p><p
24、> int getUniversityIndex() const; // 返回學(xué)校編號</p><p> string getUniversityName() const; // 返回學(xué)校名稱</p><p> void getUniversitySportsInfo() const; // 返回學(xué)校所有參賽項目信息</p><p> int getT
25、otalScore(); // 返回學(xué)校總成績</p><p> int getMTScore(); // 返回男團(tuán)總分</p><p> int getWTScore(); // 返回女團(tuán)總分</p><p> SportEvents & getUniSportEvents();</p><p><b> priv
26、ate:</b></p><p> int uIndex; // 學(xué)校編號</p><p> string uName; // 學(xué)校名稱</p><p> int totalScore; // 學(xué)校總成績</p><p> int mTeamScore; // 男團(tuán)總分</p><p> i
27、nt wTeamScore; // 女團(tuán)總分</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; // 顯示所有參賽學(xué)校信息</p><p> void displaySportEvents() const; // 顯示所有比賽項目信息</p><p> void displaySingleUniversity(); // 顯示指定學(xué)校
30、所有成績信息和總分</p><p> void displayPointsRules() const; // 顯示積分排名規(guī)則</p><p> void importEventScore(); // 導(dǎo)入某個項目的成績</p><p> void countTotalScore(); // 統(tǒng)計各學(xué)??偡?lt;/p><p> void
31、 sortByTotalScore(); // 按學(xué)??偡峙判?lt;/p><p> void sortByMTScore(); // 按男團(tuán)總分排序</p><p> void sortByWTScore(); // 按女團(tuán)總分排序</p><p> void inquireByUIandEI(); // 按學(xué)校編號查詢某個項目成績</p><
32、;p> void inquireByEIandTop(); // 按項目編號查詢Top(n)學(xué)校</p><p><b> private:</b></p><p> vector< University > myUniversity;</p><p> bool flag; // 標(biāo)記是否導(dǎo)入過成績</p>
33、;<p><b> };</b></p><p><b> 程序代碼</b></p><p><b> 請見附錄</b></p><p><b> 測試數(shù)據(jù):</b></p><p><b> 實驗結(jié)果</b>
34、</p><p><b> 程序界面</b></p><p> 展示參賽學(xué)校信息(selection=1)</p><p> 展示所有比賽項目信息(selection=2)</p><p> 展示排名積分規(guī)則(selection=3)</p><p> 調(diào)用系統(tǒng)API,打開一個txt文件
35、。</p><p> 輸入比賽項目成績(selection=4)</p><p> 首先給出項目編號,然后給出對應(yīng)的成績表,即txt文件,系統(tǒng)導(dǎo)入成績。</p><p> 輸入3組數(shù)據(jù):男子100(M100),女子100(W100),男子跳遠(yuǎn)(MLJ)。</p><p> 統(tǒng)計每個學(xué)校的總分(selection=5)</p>
36、;<p> 此功能也對應(yīng)按學(xué)校編號排序輸出</p><p> 查詢學(xué)校的項目成績單和總分(selection=6)</p><p> 如果想具體了解某個學(xué)校的所有比賽成績情況,可以選擇此功能。</p><p> 按照學(xué)??偡峙判蜉敵觯╯election=7)</p><p> 按照男子團(tuán)體總分排序(selection=
37、8)</p><p> 目前只輸入2個男子項目:男子100,男子跳遠(yuǎn)。</p><p> 按照女子團(tuán)體總分排序(selection=9)</p><p> 只輸入1個女子項目:女子100。</p><p> 查詢某個學(xué)校的某項成績(selection=10)</p><p> 查詢某個項目的前3或前5名成績(
38、selection=11)</p><p><b> 總結(jié)與展望</b></p><p> 隨著對OOP的深入理解,以及設(shè)計模式的學(xué)習(xí),希望盡快寫出Version2。</p><p><b> 附錄:程序代碼</b></p><p> 請前往 “新浪愛問·共享資料”網(wǎng)站</p
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-運動會分?jǐn)?shù)統(tǒng)計系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--運動會分?jǐn)?shù)統(tǒng)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--運動會分?jǐn)?shù)統(tǒng)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計——運動會分?jǐn)?shù)統(tǒng)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-運動會分?jǐn)?shù)統(tǒng)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-- 運動會分?jǐn)?shù)統(tǒng)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---運動會分?jǐn)?shù)統(tǒng)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---運動會分?jǐn)?shù)統(tǒng)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---運動會分?jǐn)?shù)統(tǒng)計
- 數(shù)據(jù)結(jié)構(gòu)運動會分?jǐn)?shù)統(tǒng)計課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--運動會分?jǐn)?shù)統(tǒng)計系統(tǒng)設(shè)計
- 運動會分?jǐn)?shù)統(tǒng)計系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計論文
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告--運動會分?jǐn)?shù)統(tǒng)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告運動會分?jǐn)?shù)統(tǒng)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---運動會分?jǐn)?shù)統(tǒng)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-運動會分?jǐn)?shù)統(tǒng)計
- 運動會分?jǐn)?shù)統(tǒng)計-數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-運動會分?jǐn)?shù)統(tǒng)計(c語言版)
- 運動會分?jǐn)?shù)統(tǒng)計數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(含源代碼)
- 運動會分?jǐn)?shù)統(tǒng)計系統(tǒng)課程設(shè)計
評論
0/150
提交評論