

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