數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)_第1頁(yè)
已閱讀1頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論