2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  數(shù)據(jù)結(jié)構(gòu)</b></p><p><b>  課程設(shè)計(jì)報(bào)告</b></p><p>  設(shè)計(jì)題目: 航空客運(yùn)訂票系統(tǒng)</p><p>  院 系 計(jì)算機(jī)學(xué)院 </p><p>  年 級(jí) xxxxx </p><p&

2、gt;  學(xué) 生 xxx </p><p>  學(xué) 號(hào) xxxxxxxxxxx</p><p>  指導(dǎo)教師 xxxxxxxxxxx </p><p>  起止時(shí)間 9-6/9-13 </p><p>  2013年9月10日星期二</p><p><b>

3、  目 錄</b></p><p>  一、 課程設(shè)計(jì)目的 3</p><p>  二、 需求分析 3</p><p><b>  三、 概要設(shè)計(jì)</b></p&

4、gt;<p>  1.設(shè)計(jì)步驟 4</p><p>  2.系統(tǒng)整體結(jié)構(gòu)圖 5</p><p>  3.功能模塊及調(diào)用關(guān)系說明

5、 5</p><p>  四、 詳細(xì)設(shè)計(jì)和源代碼</p><p>  1.實(shí)現(xiàn)概要設(shè)計(jì)中定義數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu) 6</p><p>  2.查詢航線信息功能的算法設(shè)計(jì) 7</p><p>  3.訂票功能的算法設(shè)計(jì)

6、 9</p><p>  4.退票功能的算法設(shè)計(jì) 12</p><p>  5.錄入功能的算法設(shè)計(jì) 14</p><p>  6.總

7、航線預(yù)覽功能的程序源代碼 15</p><p><b>  五、調(diào)試分析</b></p><p>  1.各功能的具體實(shí)例分析 16</p><p>  2.實(shí)驗(yàn)過程中出現(xiàn)的問題及解決方法

8、 20</p><p>  六、課程設(shè)計(jì)總結(jié) 20</p><p>  七、參考資料 21</p><p><b>  一、 課程設(shè)計(jì)目的</b>&

9、lt;/p><p>  (1) 熟練使用 C 語言編寫程序,解決實(shí)際問題;</p><p>  (2) 了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法,具備初步的獨(dú)立分析和設(shè)計(jì)能力;</p><p>  (3) 初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測試等基本方法和技能;</p><p>  (4) 提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解

10、決問題的能力;</p><p><b>  航空訂票系統(tǒng):</b></p><p>  (1)熟練掌握鏈表存儲(chǔ)結(jié)構(gòu)及其建立過程和常用操作;</p><p> ?。?)熟練掌握隊(duì)列的建立過程和常用操作;</p><p>  學(xué)會(huì)自己調(diào)試程序的方法并掌握一定的技巧。</p><p><b>

11、  二、 需求分析</b></p><p>  問題描述:航空客運(yùn)訂票的業(yè)務(wù)活動(dòng)包括:查詢航線、客票預(yù)訂和辦理退票等。試設(shè)計(jì)一個(gè)航空客運(yùn)訂票系統(tǒng),以使上述業(yè)務(wù)可以借助計(jì)算機(jī)來完成。</p><p>  設(shè)計(jì)任務(wù):通過此系統(tǒng)可以實(shí)現(xiàn)如下功能:</p><p>  錄入:可以錄入航班情況(數(shù)據(jù)可以存儲(chǔ)在一個(gè)數(shù)據(jù)文件中,數(shù)據(jù)結(jié)構(gòu)、具體數(shù)據(jù)自定)</p&g

12、t;<p>  查詢:可以查詢某個(gè)航線的情況(如,輸入航班號(hào),查詢起降時(shí)間,起飛抵達(dá)城市,航班票價(jià),票價(jià)折扣,確定航班是否滿倉);可以輸入起飛抵達(dá)城市,查詢飛機(jī)航班情況;根據(jù)旅客提出的終點(diǎn)站名輸出下列信息:航班號(hào)、飛機(jī)號(hào)、星期幾飛行,最近一天航班的日期和余票額;</p><p>  訂票:(訂票情況可以存在一個(gè)數(shù)據(jù)文件中,結(jié)構(gòu)自己設(shè)定)根據(jù)客戶提出的要求(日期、航班號(hào)、訂票數(shù)額)查詢該航班票額情況,

13、若尚有余額,則為客戶辦理訂票手續(xù),輸出座位號(hào);若已滿員或余票額少于訂票額,則需要重新詢問客戶要求。若需要,可預(yù)約登記排隊(duì)等候。如果該航班已經(jīng)無票,可以提供相關(guān)可選擇航班;</p><p>  退票:根據(jù)客戶提供的情況(日期、航班、退票數(shù)額),為客戶辦理退票手續(xù),然后查詢該航班是否有人預(yù)約登記,首先詢問排在第一的客戶,若所退票額能滿足他的要求,則為他辦理訂票手續(xù),否則依次詢問其他排隊(duì)預(yù)約的客戶……退票成功后修改相關(guān)

14、數(shù)據(jù)文件。</p><p>  客戶資料有姓名,證件號(hào),訂票數(shù)量及航班情況,訂單要有編號(hào)。</p><p>  修改航班信息:當(dāng)航班信息改變可以修改航班數(shù)據(jù)文件</p><p>  要求:根據(jù)以上功能說明,設(shè)計(jì)航班信息,訂票信息的存儲(chǔ)結(jié)構(gòu),設(shè)計(jì)程序完成功能。</p><p>  測試數(shù)據(jù):由學(xué)生任意指定,但報(bào)告上要求寫出多批數(shù)據(jù)測試結(jié)果。&l

15、t;/p><p>  實(shí)現(xiàn)提示:每條航線應(yīng)包含的信息有:終點(diǎn)站名、航班號(hào)、飛機(jī)號(hào)、飛行日期(星期幾)、乘員定額、余票額、已訂票的客戶名單(包括姓名、訂票額、座位號(hào))和預(yù)約登記的客戶名單(包括日期、姓名、所需票額)。這最后兩項(xiàng)顯然是一個(gè)線性表和一個(gè)隊(duì)列。為查找方便、已訂票客戶的線性表應(yīng)按客戶姓名有序,并且,為插入和刪除方便,應(yīng)以鏈表作存儲(chǔ)結(jié)構(gòu)。由于預(yù)約人數(shù)無法預(yù)料,隊(duì)列也應(yīng)以鏈表作存儲(chǔ)結(jié)構(gòu)。整個(gè)系統(tǒng)需匯總各條航線的情況

16、登錄在一張線性表上,由于航線基本不變,可采用順序存儲(chǔ)結(jié)構(gòu),并按航班有序或按終點(diǎn)站名有序。每條航線是這張表上的一個(gè)記錄,包含上述八個(gè)域,其中乘員名單域?yàn)橹赶虺藛T名單鏈表的頭指針,預(yù)約登記客戶名單域?yàn)榉謩e指向隊(duì)頭和隊(duì)尾的指針。</p><p>  選做內(nèi)容:當(dāng)客戶訂票要求不能滿足時(shí),系統(tǒng)可向客戶提供到達(dá)同一目的地的其它航線情況。</p><p><b>  三、概要設(shè)計(jì)</b&

17、gt;</p><p><b>  1.設(shè)計(jì)步驟</b></p><p>  1)分析問題,給出數(shù)學(xué)模型,設(shè)計(jì)相應(yīng)的數(shù)據(jù)結(jié)構(gòu)。</p><p><b>  提示:</b></p><p>  (1)己訂票的客戶名單可以用線性表來實(shí)現(xiàn)。為查找方便,線性表應(yīng)按照客戶姓名有序,</p>&l

18、t;p>  并且為了插入和刪除的方便,應(yīng)以鏈表作為存儲(chǔ)結(jié)構(gòu)。</p><p>  (2)等候替補(bǔ)的客戶名單可以用隊(duì)列來實(shí)現(xiàn)。由于預(yù)約人數(shù)無法預(yù)計(jì),所以隊(duì)列也應(yīng)以鏈表作為存儲(chǔ)結(jié)構(gòu)。</p><p>  (3)需將輸入的航班情況登錄到一張線性表上(用順序存儲(chǔ)結(jié)構(gòu)或鏈表存儲(chǔ)結(jié)構(gòu))。為了查詢的方便,可以將航班情況按照航班有序或按照終點(diǎn)站名有序建立線性表。每條航線是這張線性表的一個(gè)記錄,包含上

19、述8個(gè)域,其中已訂票的客戶名單域是指向己訂票的客戶名單鏈表的頭指針,等候替補(bǔ)的客戶名單域是指向隊(duì)頭和隊(duì)尾的指針。</p><p><b>  2)算法設(shè)計(jì)</b></p><p>  在已經(jīng)選擇好數(shù)據(jù)結(jié)構(gòu)的前提下,為解決問題設(shè)計(jì)算法。</p><p><b> ?。?)確定所需模塊</b></p><p

20、>  對于稍復(fù)雜的程序設(shè)計(jì),要充分利用模塊化程序設(shè)計(jì)方法,自頂向下,逐步細(xì)化,在整體思路確定的情況下,考慮所需模塊數(shù),各模塊完成功能以及模塊之間的數(shù)據(jù)聯(lián)系和調(diào)用關(guān)系。</p><p> ?。?)各子模塊功能描述</p><p>  給出主要模塊的算法描述,用流程圖或偽代碼表示。</p><p> ?。?)模塊之間的調(diào)用關(guān)系</p><p&g

21、t;<b>  3)源程序清單</b></p><p>  為了提高工作效率,充分利用上機(jī)調(diào)試程序的時(shí)間,要求學(xué)生在上機(jī)之前給出源程序清單。</p><p>  4)用測試數(shù)據(jù)去驗(yàn)證算法及程序的正確性</p><p><b>  5)算法分析</b></p><p>  經(jīng)過上機(jī)調(diào)試,源程序運(yùn)行正確

22、,并且實(shí)現(xiàn)算法要求的功能,解決課程設(shè)計(jì)題目中給出的問題后,分析算法的時(shí)間復(fù)雜度和空間復(fù)雜度。</p><p>  2.系統(tǒng)整體結(jié)構(gòu)圖(功能模塊圖)</p><p>  圖 1. 系統(tǒng)整體結(jié)構(gòu)圖</p><p>  3.功能模塊及調(diào)用關(guān)系說明</p><p> ?。?)總航線信息預(yù)覽:通過調(diào)用display()預(yù)覽已經(jīng)建立的全部航線的相關(guān)信息(

23、航班號(hào)、飛機(jī)號(hào) 、終點(diǎn)站 、飛行日期 、 定額 、余票數(shù) 、排隊(duì)等候人數(shù)),預(yù)覽完返回主菜單。</p><p> ?。?)查詢單條航線信息:根據(jù)乘客提出的終點(diǎn)站名或航班號(hào)調(diào)用Search()函數(shù)來查詢并輸出此條航線的相關(guān)信息(航班號(hào)、飛機(jī)號(hào) 、終點(diǎn)站 、飛行日期 、 定額 、余票數(shù) 、已訂票乘客名單、排隊(duì)等候乘客名單)。 并且查詢完后詢問乘客是否訂票,是就調(diào)用訂票Book()函數(shù)來為乘客進(jìn)行訂票,否就返回主菜單。

24、</p><p> ?。?)辦理訂票業(yè)務(wù):客戶先輸入的終點(diǎn)站名、訂票數(shù)、姓名信息再來調(diào)用訂票Book()函數(shù),Book()函數(shù)根據(jù)客戶提供的終點(diǎn)站名查詢到該航線信息,若客戶訂票額末超過余票量,訂票成功并登記信息,在訂票乘員名單鏈表中添加乘客的信息; 如果暫時(shí)余票數(shù)不足是,詢問客戶是否要排隊(duì)等侯,如果是,則在排隊(duì)等候的隊(duì)列中增加該乘客的訂票信息。</p><p> ?。?)辦理退票業(yè)務(wù):調(diào)用

25、tuipiao()查詢函數(shù),根據(jù)客戶提供的航線進(jìn)行搜索根據(jù)客戶提供的姓名到訂票客戶名單域進(jìn)行查詢。退票成功后,重新將航線名單域指向訂票單鏈表的頭指針。根據(jù)隊(duì)列中從出的客戶信息判斷是否滿足要求,如果滿足,則將該客戶的信息插入到乘客信息鏈表中。</p><p> ?。?)錄入航班信息:調(diào)用CreatPlane()函數(shù),根據(jù)輸入的航班的相關(guān)的信息(航班號(hào)、飛機(jī)號(hào) 、終點(diǎn)站 、飛行日期 、 定額 、余票數(shù)),將此航班加入

26、到原來的航班組中。</p><p><b> ?。?)退出系統(tǒng)</b></p><p>  四、詳細(xì)設(shè)計(jì)和源代碼</p><p>  1.實(shí)現(xiàn)概要設(shè)計(jì)中定義數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)</p><p> ?。?)已訂票乘客信息(單鏈表)</p><p>  typedef struct Cust//已訂票乘

27、客信息</p><p><b>  {</b></p><p>  char Name[15];//乘客姓名</p><p>  char number[10];//乘客所乘飛機(jī)航班號(hào)</p><p>  char end[15];//乘客終點(diǎn)站</p><p> ?。?)排隊(duì)等候的乘客

28、信息</p><p>  typedef struct waitNode//排隊(duì)等候客戶信息</p><p><b>  {</b></p><p>  char name[15];//乘客姓名</p><p>  int ticket;//乘客的訂票數(shù)</p><p>  struc

29、t waitNode *next;</p><p>  }waitNode,*waitlink;</p><p>  typedef struct</p><p><b>  {</b></p><p>  waitlink front;</p><p>  waitlink rear;</

30、p><p>  }waitQueue;</p><p><b> ?。?)航班信息</b></p><p>  typedef struct Plane//航班信息</p><p><b>  {</b></p><p>  char number[10];//航班號(hào)&l

31、t;/p><p>  int planenum;//飛機(jī)號(hào)</p><p>  char end[15];//終點(diǎn)站</p><p>  char date[10];//飛行日期</p><p>  int dinge;//成員定額</p><p>  int tick;//剩余票數(shù) </

32、p><p>  int k;//排隊(duì)等候的人數(shù)</p><p>  Customer *first;//鏈接已訂票客戶</p><p>  waitQueue Q;//鏈接候補(bǔ)客戶</p><p>  }PlaneLink;</p><p>  2.查詢單條航線信息功能的算法設(shè)計(jì)(Search( )函數(shù)功能

33、實(shí)現(xiàn)的源代碼)</p><p>  int Search(PlaneLink *p,int N)</p><p><b>  {</b></p><p>  int i=0,Q; </p><p>  cout<<"=========================================

34、==\n";</p><p>  cout<<" 1.按終點(diǎn)站名查詢\n";</p><p>  cout<<" 2.按航班號(hào)查詢 \n";</p><p>  cout<<"________________________

35、___________________\n";</p><p>  cout<<">>>>>>\n";</p><p>  cout<<" 請選擇查詢方式 (1/2):"; cin>>Q;</p><p><b>  if(Q==1

36、)</b></p><p><b>  {</b></p><p>  char end[10];</p><p>  cout<<" 請您輸入要查詢的航班的終點(diǎn)站名: "; //按站點(diǎn)名查詢航班信息</p><p><b>  cin>>end;&l

37、t;/b></p><p>  while(i<N)</p><p><b>  {</b></p><p>  if(strcmp(p[i].end,end)==0) //先查看是否存在到該站點(diǎn)的航班</p><p><b>  {</b></p><p>

38、  cout<<"\n*****************您所查詢的航班信息如下******************\n";</p><p>  cout<<"_________________________________________________________\n";</p><p>  cout<<&

39、quot; 航班號(hào) 飛機(jī)號(hào) 終點(diǎn)站 飛行日期 余票數(shù)\n";</p><p>  cout<<" "<<p[i].number<<setw(7)<<p[i].planenum<<setw(12)<<p[i].end<<setw(10)<<p[i].date<<

40、;setw(10)<<p[i].tick<<endl;</p><p>  cout<<"\n=========================================================\n";</p><p><b>  break;</b></p><p><

41、;b>  }</b></p><p><b>  i++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  else if(Q==2)</p><p><b>  {

42、</b></p><p>  char num[10];</p><p>  cout<<" 請您輸入要查詢的航班的航班號(hào): "; //按站點(diǎn)名查詢航班信息</p><p><b>  cin>>num;</b></p><p>  while(i<N)

43、</p><p><b>  {</b></p><p>  if(strcmp(p[i].number,num)==0) //查看是否存在該航班號(hào)的航班</p><p><b>  {</b></p><p>  cout<<"\n*****************您所

44、查詢的航班信息如下:****************\n";</p><p>  cout<<"_________________________________________________________\n";</p><p>  cout<<" 航班號(hào) 終點(diǎn) 飛行日期 余票數(shù)\n&quo

45、t;;</p><p>  cout<<" "<<p[i].number<<setw(12)<<p[i].end<<setw(12)<<p[i].date<<setw(12)<<p[i].tick<<endl;</p><p>  cout<<&quo

46、t;\n=========================================================\n";</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  i++;</b></p>&

47、lt;p><b>  }</b></p><p><b>  }</b></p><p>  display_s(p, i, N); //調(diào)用display_s()函數(shù)輸出該航班的已訂票乘客和排隊(duì)等候乘客的名單信息</p><p>  if(i<N) //如果存在該航班,詢問客戶是否要預(yù)定 該航班

48、的 機(jī)票</p><p><b>  {</b></p><p><b>  int j;</b></p><p>  cout<<" 是否需要預(yù)定 該航班的票(1/0):"; cin>>j;</p><p>  if(j==1) </p>

49、;<p><b>  {</b></p><p>  char name[10]; int ticket;</p><p>  cout<<" 請輸入訂票數(shù)目、姓名:";</p><p>  cin>>ticket>>name;</p><p>  

50、Book(p,p[i].end,ticket, name, N);</p><p><b>  }</b></p><p><b>  }</b></p><p>  else { cout<<" 很抱歉,沒有您查詢的航班信息!\n"; }</p><p><

51、b>  return 0;</b></p><p><b>  }</b></p><p>  3.訂票功能的算法設(shè)計(jì)(Book( )函數(shù)功能實(shí)現(xiàn)源代碼)</p><p>  int Book(PlaneLink *p,char end[],int ticket,char name[],int N) </p>

52、<p><b>  {</b></p><p><b>  int i; </b></p><p>  for(i=0;i<N;i++)</p><p>  {if(strcmp(p[i].end,end)==0) //先找出是否存在要訂票的航班</p><p><b

53、>  {</b></p><p>  if(p[i].tick>=ticket) //查看 余票數(shù)是否 >= 訂票客戶 訂票數(shù)</p><p><b>  {</b></p><p>  p[i].tick-=ticket;</p><p>  Customer *t=(Custom

54、er *)malloc(sizeof(Customer));</p><p>  t->ticket=ticket;</p><p>  strcpy(t->Name,name);</p><p>  strcpy(t->number,p[i].number); </p><p>  strcpy(t->end,p[

55、i].end);</p><p>  t->next=p[i].first; p[i].first=t; // 此使用的是頭插法將訂票乘客的信息放入到 鏈表中 /</p><p>  cout<<" 您訂票成功!\n";</p><p>  cout<<" 您的航班信息如下:\n";<

56、;/p><p>  cout<<"__________________________________________________\n";</p><p>  cout<<" 航班號(hào) 飛機(jī)號(hào) 終點(diǎn)站 飛行日期 定額\n";</p><p>  cout<<&qu

57、ot;__________________________________________________\n";</p><p>  cout<<" "<<setw(9)<<p[i].number<<setw(6)<<p[i].planenum<<setw(12)<<p[i].end<<

58、setw(12)<<p[i].date<<setw(10)<<p[i].dinge<<endl;</p><p>  cout<<"==================================================\n\n";</p><p><b>  break;</b&g

59、t;</p><p><b>  }</b></p><p>  else if(p[i].dinge<ticket) //訂票數(shù)超出航班的定額時(shí),不能訂票,也不能無法排隊(duì)等候了</p><p>  { cout<<" 您預(yù)訂的票數(shù)超過了航班定額,無法為您訂票!\n"; break; }</p

60、><p>  else // 余票數(shù)不足時(shí),詢問乘客是否排隊(duì)等候</p><p><b>  {</b></p><p><b>  char z;</b></p><p>  cout<<" 該航班剩余票數(shù)為:"<<p[i].tic

61、k<<endl;</p><p>  cout<<" 很抱歉,剩余的票數(shù)不夠!\n";</p><p>  cout<<" 您是否需要排隊(duì)等候 (Y(y)/N(n)): "; cin>>z;</p><p>  if(z=='Y'||z=='y'

62、;) {Queue(p,end,ticket , name, N,i); } //調(diào)用入隊(duì)列函數(shù),將乘客信息插入排隊(duì)等候的人后面</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p&

63、gt;<b>  }</b></p><p>  if(i>=N) {cout<<" 很抱歉,沒有您所需要的航班!\n"; }</p><p><b>  return 0;</b></p><p><b>  }</b></p><p&g

64、t;  int display_s(PlaneLink *p,int i,int N) //輸出已定票及排隊(duì)乘客的名單信息</p><p><b>  {</b></p><p>  if(p[i].first!=NULL) //p[i].first!=NULL說明已訂票鏈表不為空, 輸出 已訂票乘客的名單信息</p><p>

65、<b>  {</b></p><p>  cout<<"****該航班的已訂票乘客名單如下:****\n"; </p><p>  cout<<"____________________________________\n";</p><p>  cout<<&quo

66、t; 姓名 訂票量\n";</p><p>  Customer *t=p[i].first;</p><p><b>  while(t) </b></p><p><b>  {</b></p><p>  cout<<setw(10)

67、<<t->Name<<" "<<setw(7)<<t->ticket<<endl;</p><p>  t=t->next;</p><p><b>  }</b></p><p><b>  }</b>

68、</p><p>  if(i<N&&p[i].Q.front!=NULL) //p[i].Q.front!=NULL,輸出正在排隊(duì)等候乘客的名單信息</p><p><b>  {</b></p><p>  cout<<"****該航班等候訂票的乘客名單如下: ****\n";&l

69、t;/p><p>  cout<<" 姓名 訂票量\n";</p><p>  waitlink S=p[i].Q.front;</p><p>  while(S!=NULL)</p><p><b>  {</b></p><p>  

70、cout<<setw(10)<<S->name<<" "<<setw(7)<<S->ticket<<endl;</p><p>  S=S->next;</p><p><b>  }</b></p><p>  cou

71、t<<"=====================================\n";</p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p> 

72、 附:入隊(duì)函數(shù)Queue( )的源代碼</p><p>  int Queue(PlaneLink *p,char end[],int ticket,char name[],int N ,int i) //入隊(duì)函數(shù),將等候排隊(duì)的乘客放入原來的隊(duì)列中</p><p><b>  {</b></p><p>  system("cls&

73、quot;);</p><p>  system("color 2e");</p><p>  waitlink q=(waitlink)malloc(sizeof(waitNode)); //將要的入隊(duì)的結(jié)點(diǎn),存儲(chǔ)將要入隊(duì)乘客的信息</p><p>  strcpy(q->name,name);</p><p>

74、;  q->ticket=ticket;</p><p>  q->next=NULL; </p><p>  if(p[i].Q.front==NULL)</p><p><b>  { </b></p><p>  p[i].Q.front=p[i].Q.rear=q; p[i].k++; //

75、p[i].k用來記錄排隊(duì)人數(shù)</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  p[i].Q.rear->next=q;</p><p>  p[i].

76、Q.rear=q; p[i].k++; </p><p><b>  }</b></p><p>  cout<<"已為您登記,請耐心等候!\n";</p><p>  return 0;</p><p><b>  }</b></p>

77、<p>  4.退票功能的算法設(shè)計(jì)(tuipiao( )函數(shù)實(shí)現(xiàn)的源代碼)</p><p>  int tuipiao(PlaneLink *p,int N)</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  Customer *

78、R,*S;</p><p>  char number[10],Name[15];</p><p>  cout<<">>>>>>\n";</p><p>  cout<<" 請輸入您的航班號(hào)與姓名:";</p><p>  cin>&g

79、t;number>>Name;</p><p>  for(i=0;i<N;i++)</p><p><b>  {</b></p><p>  if(strcmp(p[i].number,number)==0&&p[i].first!=NULL)</p><p><b>  

80、{</b></p><p>  if(strcmp(p[i].first->Name,Name)==0)</p><p><b>  {</b></p><p>  p[i].tick=p[i].tick+p[i].first->ticket;</p><p>  p[i].first=p[i].

81、first->next;</p><p>  cout<<" 您已成功退票!\n\n";</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p>&

82、lt;p>  R=p[i].first; S=p[i].first->next;</p><p>  while(S!=NULL)</p><p><b>  {</b></p><p>  if(strcmp(S->Name,Name)==0)</p><p><b>  {</b

83、></p><p>  p[i].tick=p[i].tick+S->ticket;</p><p>  R->next=S->next;</p><p>  cout<<" 您已經(jīng)成功退票!\n\n"; break;</p><p><b>  }</b><

84、/p><p>  R=R->next; S=S->next;</p><p><b>  }</b></p><p>  if(S==NULL) cout<<" 很抱歉,在該航班上沒有找到您的姓名,請核實(shí)信息!\n\n";</p><p><b>  }</b&

85、gt;</p><p>  if(p[i].Q.front!=NULL)</p><p><b>  {</b></p><p>  waitlink Q=p[i].Q.front , q; </p><p>  while(Q!=NULL)</p><p><b>  {</

86、b></p><p>  if(p[i].tick>=Q->ticket)</p><p><b>  {</b></p><p>  if(Q==p[i].Q.front)</p><p><b>  {</b></p><p>  cout<<

87、;" 正在為等候的乘客 "<<Q->name<<"辦理訂票!\n";</p><p>  Book(p,p[i].end,Q->ticket,Q->name,N);</p><p>  if(p[i].Q.front==p[i].Q.rear)</p><p><b>  {

88、</b></p><p>  p[i].Q.front=p[i].Q.rear=NULL;</p><p>  Q=Q->next;</p><p><b>  }</b></p><p><b>  else</b></p><p>  { p[i]

89、.Q.front=p[i].Q.front->next;</p><p>  Q=Q->next;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p>

90、<b>  {</b></p><p>  cout<<" 正在為等候的乘客 "<<Q->name<<"辦理訂票!\n";</p><p>  Book(p,p[i].end,Q->ticket,Q->name,N);</p><p>  q->

91、next=Q->next; Q=Q->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  else {q=Q; Q=Q->next; }</p><p><b>  }</b></p&

92、gt;<p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  if(strcmp(p[i].number,number)==0&&p[i].first==NULL)</p>

93、<p><b>  {</b></p><p>  cout<<" 很抱歉,該航班目前沒有已訂票的乘客,無法為你退票,請核實(shí)信息!\n\n"; break;</p><p><b>  }</b></p><p><b>  }</b></p>

94、<p>  if(i>=N) cout<<" 很抱歉,沒有該航班信息,無法為你退票,請核實(shí)信息!\n\n";</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  5.錄入功能的算法設(shè)計(jì)(CreatPlane(

95、 )函數(shù)的源代碼)</p><p>  void CreatPlane(PlaneLink *p,int n,int N) </p><p><b>  {</b></p><p><b>  int i,j;</b></p><p>  for(i=N;i<N+n;i++)</p&g

96、t;<p><b>  {</b></p><p>  p[i].first=NULL; // 帶頭結(jié)點(diǎn)的單鏈表為空時(shí)的條件</p><p>  p[i].Q.front=p[i].Q.rear=NULL; //隊(duì)列為空時(shí)的條件</p><p>  cout<<">>>>>

97、;>\n";</p><p>  cout<<" 請輸入航班號(hào): "; cin>>p[i].number;</p><p>  cout<<" 輸入終點(diǎn)站名: "; cin>>p[i].end;</p><p>  for( j=0;j<N;j++)

98、</p><p><b>  {</b></p><p>  if(strcmp(p[i].number,p[j].number)==0) //查看該航班號(hào)是否已經(jīng)存在</p><p><b>  {</b></p><p>  cout<<" 已經(jīng)存在該航班號(hào)!\n &qu

99、ot;; break; </p><p><b>  }</b></p><p>  if(strcmp(p[i].end,p[j].end)==0) // 查看是否存在到改站點(diǎn)的航班</p><p><b>  {</b></p><p>  cout<<" 已經(jīng)有到

100、該站點(diǎn)的航班!\n "; break;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(j==N)</b></p><p><b>  {</b></p><p

101、>  cout<<" 飛機(jī)號(hào)、飛行日期、成員定額:\n";</p><p>  cin>>p[i].planenum>>p[i].date>>p[i].dinge;</p><p>  p[i].tick=p[i].dinge; p[i].k=0;</p><p>  cout<<

102、;" 錄入完成!\n";</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  6.總航線預(yù)覽功能的算法設(shè)計(jì)(display( )函數(shù)的源代碼)</p>&l

103、t;p>  int display(PlaneLink *p,int N) //N為當(dāng)前的航班數(shù) </p><p><b>  {</b></p><p>  cout<<"==============================================================================\n

104、";</p><p>  cout<<" 航班號(hào) 飛機(jī)號(hào) 終點(diǎn)站 飛行日期 定額 余票數(shù) 排隊(duì)等候人數(shù)\n";</p><p>  cout<<"____________________________________________________________________

105、__________\n";</p><p>  for(int i=0;i<N;i++)</p><p><b>  {</b></p><p>  cout<<setw(9)<<p[i].number<<setw(6)<<p[i].planenum<<setw(12

106、)<<p[i].end<<setw(12)<<p[i].date<<setw(10)<<p[i].dinge<<setw(10)<<p[i].tick<<setw(10)<<p[i].k<<endl;</p><p><b>  }</b></p><p

107、>  cout<<"==============================================================================\n";</p><p><b>  return 0;</b></p><p><b>  }</b></p><

108、;p><b>  五、調(diào)試分析</b></p><p>  1)各功能的具體實(shí)例分析</p><p>  為了調(diào)試分析方便,在程序中已經(jīng)初始放入了三個(gè)航班信息,如下:</p><p><b>  1.系統(tǒng)主菜單界面</b></p><p>  2.總航線預(yù)覽功能界面</p>&l

109、t;p>  3.查詢單條航線功能</p><p>  圖1.按終點(diǎn)站名查詢</p><p><b>  圖2.按航班號(hào)查詢</b></p><p>  圖3.錯(cuò)誤查詢輸出結(jié)果</p><p><b>  4.訂票功能</b></p><p> ?、?當(dāng)訂票的航班存在且航

110、班的余票數(shù)≥乘客訂票數(shù)時(shí)</p><p> ?、诋?dāng)訂票的航班存在但余票數(shù)≤訂票數(shù)≤航班的定額時(shí)</p><p> ?、郛?dāng)航班存在但訂票數(shù)大于航班定額時(shí)乘客將無法排隊(duì)等候了</p><p> ?、?當(dāng)預(yù)定的航班不存在時(shí)</p><p><b>  5.退票功能</b></p><p> ?、?當(dāng)退票

111、后余票數(shù)能夠滿足排隊(duì)乘客的需要時(shí)</p><p> ?、?當(dāng)航班號(hào)或姓名輸入錯(cuò)誤時(shí),系統(tǒng)會(huì)輸出顯示以下的三種界面</p><p><b>  圖1</b></p><p><b>  圖2</b></p><p><b>  圖3</b></p><p>

112、;<b>  6.錄入功能</b></p><p>  2)實(shí)驗(yàn)過程中出現(xiàn)的問題及解決方法:</p><p>  一開始錯(cuò)誤很多,包括大量的語法錯(cuò)誤和邏輯錯(cuò)誤。通過反復(fù)的編譯、調(diào)試、學(xué)習(xí)和修改,更正了程序中的語法,使程序可以正常編譯,運(yùn)行。</p><p>  程序健壯性方面屢屢遇到問題,在程序的測試過程中逐步發(fā)現(xiàn)并改進(jìn),如主菜單選擇如果輸入字

113、符型數(shù)據(jù)就會(huì)引起程序的混亂出現(xiàn)自動(dòng)跳出;解決方法,引入新的部分從鍵盤獲取字符型數(shù)據(jù),通過字符型常量與數(shù)據(jù)間的關(guān)系,將字符數(shù)據(jù)轉(zhuǎn)化成整形數(shù)據(jù)。</p><p>  程序優(yōu)化,程序雖然可以運(yùn)行使用,但是有很多不合理處, 例如程序的運(yùn)行過程對于正確的輸入情況考慮的還比較完全,但對于有誤信息的輸入情況考慮的不是很好,經(jīng)常輸入有誤或是不符合的信息時(shí),會(huì)出現(xiàn)死循環(huán)或者其他一些異常。對于種情況,我都是通過F10調(diào)試,在調(diào)試過程

114、輸入剛出錯(cuò)我輸入的信息,然后逐句或是逐過程的進(jìn)行調(diào)試,最終都能找到問題的具體所在處,然后通過分析為什么這處會(huì)出現(xiàn)異常,從這不斷的調(diào)試及分析的過程中得出了這些錯(cuò)誤的修改方法。從而不斷的完善了整個(gè)系統(tǒng)程序。</p><p>  功能添加上,我是在實(shí)現(xiàn)基礎(chǔ)功能的基礎(chǔ)上再添加一些其他的比較復(fù)雜難處理的功能,但在添加另外的功能時(shí),常常會(huì)出現(xiàn)這些功能之間邏輯聯(lián)系不好的問題。這些主要就是通過調(diào)試看 這些函數(shù)的連接處的代碼的調(diào)試

115、情況,比如一些for循環(huán)、while循環(huán)或是if語句等的限制條件上把握的不好,經(jīng)常會(huì)出現(xiàn)在我的邏輯理論上應(yīng)該執(zhí)行的語句沒執(zhí)行,而不該執(zhí)行的卻執(zhí)行了的情況。在調(diào)試的時(shí)候我會(huì)首先看看這些連接處的中間變量的值的變化境況,通過這找出了比較這些語句的正確的限制的條件。</p><p><b>  六、課程設(shè)計(jì)總結(jié)</b></p><p>  在一周的時(shí)間里,不斷地對程序及各模塊

116、進(jìn)行修改、編譯、調(diào)試、運(yùn)行,其間遇到很多問題,但通過自己的努力及詢問同學(xué)的幫助都一一解決了。</p><p>  因本人能力有限,在編寫的時(shí)候只使用了相對較為簡單的基礎(chǔ)語言 ,代替了相對較為復(fù)雜的語言,降低了運(yùn)行效率。</p><p>  程序是寫出來的,不是想出來的。開始階總是在想,總感覺很困難做不了,但是真正投入其中之后才發(fā)覺其實(shí)只要用心,只要有克服一切的勇氣和信心就可以把程序做好,錯(cuò)

117、誤總是越改越少的。</p><p>  要用愉悅的心情去做,從編程的過程中體會(huì)樂趣,興趣是最好的老師就是這么回事</p><p>  學(xué)會(huì)利用輔助程序去發(fā)現(xiàn)問題</p><p>  通過課程設(shè)計(jì),自己通過系統(tǒng)分析、系統(tǒng)設(shè)計(jì)、編程調(diào)試,寫實(shí)驗(yàn)報(bào)告等環(huán)節(jié),進(jìn)一步掌握應(yīng)用系統(tǒng)設(shè)計(jì)的方法和步驟,靈活運(yùn)用并深刻理解典型數(shù)據(jù)結(jié)構(gòu)在軟件開發(fā)中的應(yīng)用 。</p>&l

118、t;p>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)是檢驗(yàn)我們這個(gè)學(xué)期學(xué)習(xí)成果的重要手段,通過這學(xué)期的學(xué)習(xí),我認(rèn)為學(xué)好數(shù)據(jù)結(jié)構(gòu)這門課程,不僅要認(rèn)真閱讀課本知識(shí),更重要的是要通過上機(jī)實(shí)踐才能增強(qiáng)和鞏固我的知識(shí)。經(jīng)過這一階段的上機(jī)實(shí)踐學(xué)習(xí),使我對數(shù)據(jù)結(jié)構(gòu)有了更進(jìn)一步的認(rèn)識(shí)和了解,要想學(xué)好它要重在實(shí)踐,要通過不斷的上機(jī)操作才能更好地學(xué)習(xí)它。通過實(shí)踐,我也發(fā)現(xiàn)我的很多不足之處,首先是自己平時(shí)上機(jī)練習(xí)太少,知識(shí)的積壓給編程帶來了一定的麻煩。另外我對數(shù)據(jù)結(jié)構(gòu)的一些標(biāo)

119、準(zhǔn)庫函數(shù)還不太了解,如開始進(jìn)入系統(tǒng)后發(fā)現(xiàn)操作的界面很亂,如果能夠及時(shí)的清屏那樣就會(huì)變的很明了。查閱了相關(guān)的資料和問同學(xué)后我知道只要在程序中調(diào)用庫函數(shù)system("cls")就可以了,知道了這個(gè)函數(shù)的基本用法;還有對數(shù)據(jù)結(jié)構(gòu)中經(jīng)常出現(xiàn)的錯(cuò)誤也不了解,通過實(shí)踐,使我獨(dú)自處理錯(cuò)誤的能力也有了很大的提高。</p><p><b>  七、參考資料</b></p>

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論