數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---模擬旅館管理系統(tǒng)——床位的分配與回收_第1頁
已閱讀1頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)</b></p><p><b>  實(shí)驗(yàn)報(bào)告</b></p><p>  題目名稱: 模擬旅館管理系統(tǒng)——床位的分配與回收 </p><p><b>  前 言</b></p><p>  數(shù)據(jù)結(jié)構(gòu)課

2、程設(shè)計(jì)是配合數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)課程與實(shí)驗(yàn)教學(xué)的一個(gè)非常重要的教學(xué)環(huán)節(jié)。它是通信工程專業(yè)學(xué)生的重要基礎(chǔ)實(shí)踐課,能鞏固程序編輯的理論知識(shí),提高程序設(shè)計(jì)水平,加強(qiáng)綜合分析問題和解決問題的能力,進(jìn)一步培養(yǎng)學(xué)生的實(shí)驗(yàn)技能和動(dòng)手能力,啟發(fā)學(xué)生的創(chuàng)新意識(shí)及創(chuàng)新思維。完成本次課程設(shè)計(jì),對(duì)進(jìn)行畢業(yè)設(shè)計(jì)及畢業(yè)后從事相關(guān)工作都有很大的幫助。</p><p>  同時(shí),《數(shù)據(jù)結(jié)構(gòu)》在計(jì)算機(jī)科學(xué)中是一門綜合性的專業(yè)基礎(chǔ)課.數(shù)據(jù)結(jié)構(gòu)的研究不僅涉及

3、到計(jì)算機(jī)的硬件的研究范圍,而且和計(jì)算機(jī)軟件的研究有著更密切的關(guān)系,無論是編譯程序還是操作系統(tǒng),都涉及到數(shù)據(jù)元素在存儲(chǔ)器中的分配問題。在研究信息檢索時(shí)也必須考慮如何組織數(shù)據(jù),以便查找和存取數(shù)據(jù)元素更為方面。因此,可以認(rèn)為數(shù)據(jù)結(jié)構(gòu)是介于數(shù)學(xué)、計(jì)算機(jī)硬件和計(jì)算機(jī)軟件三者之間的一門核心課程.在計(jì)算機(jī)科學(xué)中,數(shù)據(jù)結(jié)構(gòu)不僅是一般程序設(shè)計(jì)的基礎(chǔ),而且是設(shè)計(jì)和實(shí)現(xiàn)編譯程序、操作系統(tǒng)、數(shù)據(jù)庫系統(tǒng)及其它系統(tǒng)程序和大型應(yīng)用程序的重要基礎(chǔ)。</p>

4、<p>  可見,學(xué)好數(shù)據(jù)結(jié)構(gòu)以及認(rèn)真對(duì)待數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)對(duì)我們十分重要,此次我們小組做的是“模擬旅館管理系統(tǒng)的一個(gè)功能——床位的分配與回收”,為了能夠保質(zhì)保量的完成老師交給我們的任務(wù),我小組積極查閱圖書館及網(wǎng)上的各項(xiàng)資源,認(rèn)真對(duì)待每一次的上機(jī)課程,力求盡自己最大的努力,將這項(xiàng)課程設(shè)計(jì)做好。</p><p><b>  目 錄 </b></p><p>

5、  前言 ……………………………………………………………………1</p><p>  一、課題設(shè)計(jì)任務(wù)及要求 ……………………………………………3</p><p>  1.問題描述 ……………………………………………………………3</p><p>  2.基本要求 ……………………………………………………………3</p><p>  

6、3.實(shí)現(xiàn)提示 ……………………………………………………………3</p><p>  二、需求分析 …………………………………………………………4</p><p>  三、系統(tǒng)的概要設(shè)計(jì) …………………………………………………4</p><p>  1.功能模塊的劃分 ……………………………………………………4</p><p>  2.

7、參考的ADT …………………………………………………………5</p><p>  四、程序設(shè)計(jì)思路 ……………………………………………………71.建立結(jié)構(gòu)體及鏈表 …………………………………………………7</p><p>  2.算法的描述 …………………………………………………………7</p><p>  五、程序的調(diào)試與分析 ………………………

8、………………………91.測(cè)試數(shù)據(jù) ……………………………………………………………9</p><p>  2.測(cè)試結(jié)果 ……………………………………………………………9</p><p>  六、用戶使用說明 ……………………………………………………101.程序運(yùn)行環(huán)境 ……………………………………………………10</p><p>  2.程序主界面

9、………………………………………………………10</p><p>  3.相關(guān)程序各項(xiàng)說明 ………………………………………………10</p><p>  七、調(diào)試過程中出現(xiàn)的問題及心得體會(huì) ……………………………12</p><p>  八、心得體會(huì) …………………………………………………………13</p><p>  附錄:程序的源代

10、碼 …………………………………………………14</p><p>  一、課題設(shè)計(jì)任務(wù)及要求</p><p><b>  1.問題描述:</b></p><p>  某旅館有n個(gè)等級(jí)的房間,第i等級(jí)有個(gè)房間,每個(gè)等級(jí)有個(gè)床位(1≤I≤n)。試模擬旅館管理系統(tǒng)中床位分配和回收的功能,設(shè)計(jì)能為單個(gè)旅客分配床位,在其離店便回收床位(供下次分配)的算法

11、。</p><p><b>  2.基本要求:</b></p><p><b> ?。?)輸入數(shù)據(jù)</b></p><p>  對(duì)房間信息進(jìn)行初始化,包括房間的類別、數(shù)量以及房間和床位的計(jì)費(fèi)標(biāo)準(zhǔn);</p><p>  分配時(shí),輸入旅客姓名、年齡、性別、到達(dá)日期和所需房間等級(jí);</p>

12、<p>  回收時(shí),輸入房間等級(jí)、房間號(hào)和床位號(hào)。</p><p><b>  (2)輸出數(shù)據(jù)</b></p><p>  分配成功時(shí)打印旅客姓名、年齡、到達(dá)日期、房間等級(jí)、房間號(hào)碼和床位號(hào)碼。</p><p>  分配不成功時(shí),如所有等級(jí)均無床位,則打印“客滿”信息;如旅客需要的等級(jí)均無空床位,則打印“是否愿意更換等級(jí)?”的詢問信息

13、。若旅客愿意更換,則重新輸入有關(guān)信息,再進(jìn)行分配,否則分配工作結(jié)束。</p><p><b> ?。?)結(jié)帳管理</b></p><p>  在旅客離開時(shí)計(jì)算房費(fèi),并打印賬單,賬單格式自行設(shè)計(jì),要求信息齊全、清晰。</p><p> ?。?)對(duì)旅客信息和房間信息以及收費(fèi)標(biāo)準(zhǔn)采用文件的形式存儲(chǔ)也可以在程序中初始化。</p><

14、p><b>  3.實(shí)現(xiàn)提示:</b></p><p><b>  數(shù)據(jù)結(jié)構(gòu):</b></p><p>  主要采用順序結(jié)構(gòu)鏈接結(jié)構(gòu)的線性表及堆棧。</p><p>  每個(gè)房間用一個(gè)如下所示的具有五個(gè)字段的結(jié)點(diǎn)(房結(jié)點(diǎn))表示: </p><p>  其中,性別:0表示房間為空狀態(tài)</p

15、><p>  1表示房間分配給女旅客</p><p>  2表示房間分配給男旅客</p><p>  現(xiàn)有空床數(shù):數(shù)據(jù)在0~bi之間,其中bi是第i等級(jí)一個(gè)房間的床位數(shù),當(dāng)現(xiàn)有空床數(shù)為bi時(shí),表示房間為空;為0時(shí),表示房間滿。</p><p>  RLINK:當(dāng)房間空時(shí),用作空房棧的連接;當(dāng)房間不空時(shí),指向下一個(gè)房結(jié)點(diǎn)。</p>&

16、lt;p>  BTOP:指向該房間的空床號(hào)棧棧頂。一個(gè)房間對(duì)應(yīng)一個(gè)順序表示的空床號(hào)棧。棧的容量為bi,棧中存放空床號(hào)。分配時(shí),從棧頂取出空床號(hào),棧頂下移(BTOP=BTOP+1);回收時(shí),棧頂上移(BTOP=BTOP-1),將回收的空床號(hào)填入棧頂。</p><p>  每一個(gè)等級(jí)中的空房間構(gòu)成一個(gè)空房棧;已住旅客的房間構(gòu)成一個(gè)鏈棧(簡(jiǎn)稱房鏈),其頭結(jié)點(diǎn)結(jié)構(gòu)如下:</p><p>  

17、其中:ai:第i等級(jí)中房間總數(shù)</p><p>  bi第i等級(jí)中每個(gè)房間的床位數(shù)</p><p>  可分配男、女床位的總數(shù)的初值等于ai *bi,因?yàn)殚_始時(shí)所有房間和床位既可以分配給男旅客,也可以分配給女旅客。當(dāng)在房鏈中分配一個(gè)床位給男(女)旅客,床位總數(shù)應(yīng)減1;當(dāng)從空房棧中取出一個(gè)房間作為男(女)旅客房間時(shí),則可分配女(男)床位總數(shù)應(yīng)減bi,當(dāng)回收一個(gè)男(女)床位時(shí),則可分配男(女)

18、床位總數(shù)應(yīng)加1;當(dāng)回收一個(gè)男(女)空房至空房棧時(shí),則可分配女(男)床位總數(shù)應(yīng)加bi。</p><p>  TTOP:指向本級(jí)空房棧棧頂,當(dāng)無空房間時(shí),TTOP=^(NIL)。</p><p>  RLINK:指向本級(jí)房鏈第一個(gè)頂點(diǎn),當(dāng)房鏈為空時(shí),RLINK=^(NIL)</p><p>  順序表s=(s0,s1,...,si,...sn),其中,s1-Sn順序存放

19、第1~n等級(jí)房間的頭結(jié)點(diǎn);</p><p>  s0存放內(nèi)容如下所示:</p><p>  初始時(shí),全店可分配男、女床總數(shù)相同,均為,在分配或回收時(shí),對(duì)各等級(jí)可分配男(女)床位總數(shù)處理的同時(shí)也要對(duì)全店可分配男(女)床總數(shù)作相應(yīng)處理,當(dāng)全店可分配男(女)床總數(shù)等于零時(shí),表示客滿。</p><p><b>  二、需求分析</b></p>

20、;<p>  經(jīng)分析,程序要有以下功能:</p><p> ?、賹?duì)旅館信息進(jìn)行初始化;</p><p> ?、谠诼每偷絹頃r(shí)記錄旅客信息并為其分配床位;</p><p>  ③在旅客離開時(shí)為其打印賬單,并回收其床位;</p><p> ?、茉谳斎脒^程中對(duì)輸入的數(shù)據(jù)進(jìn)行檢查,以防止輸入超出范圍的信息。</p><

21、p><b>  三、系統(tǒng)的概要設(shè)計(jì)</b></p><p><b>  1.功能模塊的劃分</b></p><p>  程序功能模塊劃分下圖所示:</p><p><b>  2.參考的ADT</b></p><p>  ADT設(shè)計(jì)使用線性表和棧:</p>

22、<p>  ADT List {</p><p>  數(shù)據(jù)對(duì)象:D={ ai | ai∈ ElemSet, i=1,2,...,n, n≥0 }</p><p>  數(shù)據(jù)關(guān)系:R1={ <ai-1 ,ai >| ,∈D, i=2,...,n }  </p><p><b>  基本操作:</b></p>&

23、lt;p>  InitList( &L )</p><p>  操作結(jié)果:構(gòu)造一個(gè)空的線性表 L 。</p><p>  DestroyList( &L )</p><p>  初始條件:線性表 L 已存在。</p><p>  操作結(jié)果:銷毀線性表 L 。</p><p>  ListEmpty

24、( L )</p><p>  初始條件:線性表L已存在。</p><p>  操作結(jié)果:若 L 為空表,則返回 TRUE,否則返回 FALSE。</p><p>  ListLength( L )</p><p>  初始條件:線性表 L 已存在。</p><p>  操作結(jié)果:返回 L 中元素個(gè)數(shù)。</p&g

25、t;<p>  PriorElem( L, cur_e, &pre_e )</p><p>  初始條件:線性表 L 已存在。</p><p>  操作結(jié)果:若 cur_e 是 L 中的數(shù)據(jù)元素,則用 pre_e 返回它的前驅(qū),</p><p>  否則操作失敗,pre_e 無定義。</p><p>  NextElem

26、( L, cur_e, &next_e )</p><p>  初始條件:線性表 L 已存在。</p><p>  操作結(jié)果:若 cur_e 是 L 中的數(shù)據(jù)元素,則用 next_e 返回它的后繼,</p><p>  否則操作失敗,next_e 無定義。</p><p>  GetElem( L, i, &e )</p

27、><p>  初始條件:線性表 L 已存在,1≤i≤LengthList(L)。</p><p>  操作結(jié)果:用 e 返回 L 中第 i 個(gè)元素的值。</p><p>  LocateElem( L, e, compare( ) )</p><p>  初始條件:線性表 L 已存在,compare( ) 是元素判定函數(shù)。</p>

28、<p>  操作結(jié)果:返回 L 中第1個(gè)與 e 滿足關(guān)系 compare( ) 的元素的位序。</p><p>  若這樣的元素不存在,則返回值為0。</p><p>  ListTraverse(L, visit( ))</p><p>  初始條件:線性表 L 已存在,visit( ) 為元素的訪問函數(shù)。</p><p>  操

29、作結(jié)果:依次對(duì) L 的每個(gè)元素調(diào)用函數(shù) visit( )。</p><p>  一旦 visit( ) 失敗,則操作失敗。</p><p>  ClearList( &L )</p><p>  初始條件:線性表 L 已存在。</p><p>  操作結(jié)果:將 L 重置為空表。</p><p>  PutEle

30、m( &L, i, &e )</p><p>  初始條件:線性表L已存在,1≤i≤LengthList(L)。</p><p>  操作結(jié)果:L 中第 i 個(gè)元素賦值同 e 的值。</p><p>  ListInsert( &L, i, e )</p><p>  初始條件:線性表 L 已存在,1≤i≤Length

31、List(L)+1。</p><p>  操作結(jié)果:在 L 的第 i 個(gè)元素之前插入新的元素 e,L 的長(zhǎng)度增1。</p><p>  ListDelete( &L, i, &e )</p><p>  初始條件:線性表 L 已存在且非空,1≤i≤LengthList(L)。</p><p>  操作結(jié)果:刪除 L 的第 i

32、個(gè)元素,并用 e 返回其值,L 的長(zhǎng)度減1。</p><p>  } ADT List</p><p>  ADT Stack {</p><p>  數(shù)據(jù)對(duì)象:D={ai| ai∈ElemSet, i=1,2,...,n, n≥0 }</p><p>  數(shù)據(jù)關(guān)系:R1={ < ai-1, ai >| ai-1, ai-∈D,

33、i=2,...,n }</p><p>  約定an端為棧頂,a1端為棧底。</p><p><b>  基本操作:</b></p><p>  InitStack(&S)</p><p>  操作結(jié)果:構(gòu)造一個(gè)空棧 S。</p><p>  DestroyStack(&S)<

34、;/p><p>  初始條件:棧 S 已存在。</p><p>  操作結(jié)果:棧 S 被銷毀。 </p><p>  ClearStack(&S)</p><p>  初始條件:棧 S 已存在。</p><p>  操作結(jié)果:將 S 清為空棧。</p><p>  StackEmpty(S)

35、</p><p>  初始條件:棧 S 已存在。</p><p>  操作結(jié)果:若棧 S 為空棧,則返回TRUE,否則返回FALSE。</p><p>  StackLength(S)</p><p>  初始條件:棧 S 已存在。</p><p>  操作結(jié)果:返回棧 S 中元素個(gè)數(shù),即棧的長(zhǎng)度。</p>

36、<p>  GetTop(S, &e)</p><p>  初始條件:棧 S 已存在且非空。</p><p>  操作結(jié)果:用 e 返回S的棧頂元素。</p><p>  Push(&S, e)</p><p>  初始條件:棧 S 已存在。</p><p>  操作結(jié)果:插入元素 e 為

37、新的棧頂元素。</p><p>  Pop(&S, &e)</p><p>  初始條件:棧 S 已存在且非空。</p><p>  操作結(jié)果:刪除 S 的棧頂元素,并用 e 返回其值。</p><p>  StackTraverse(S, visit( ))</p><p>  初始條件:棧 S 已存

38、在且非空,visit( )為元素的訪問函數(shù)。</p><p>  操作結(jié)果:從棧底到棧頂依次對(duì)S的每個(gè)元素調(diào)用函數(shù)visit( ),</p><p>  一旦visit( )失敗,則操作失敗。</p><p>  } ADT Stack</p><p><b>  四、程序設(shè)計(jì)思路</b></p><

39、p>  1.建立結(jié)構(gòu)體及鏈表</p><p>  ①建立旅館房間結(jié)構(gòu)體及其信息類型,如下:</p><p>  typedef struct node</p><p><b>  {</b></p><p>  int roomgrade;//房間等級(jí)</p><p>  int roomn

40、umber;//房間號(hào)</p><p>  int peoplein;//入住人數(shù)</p><p>  int bed[N];//床號(hào)</p><p>  int sex;//性別</p><p>  struct node *next;//結(jié)構(gòu)體指針</p><p><b>  }Room;</b&g

41、t;</p><p><b> ?、诮⒖盏姆块g鏈表</b></p><p>  Room *creat()</p><p>  {//建立房間的鏈表</p><p>  建立指向房間的指針Room *head,*p,*q;</p><p>  While(等級(jí)循環(huán))</p><

42、;p><b>  { </b></p><p>  For(房間號(hào)在小于等級(jí)的情況下進(jìn)行循環(huán))</p><p><b>  { </b></p><p>  將p所指向的房間進(jìn)行初始化,賦初值; </p><p>  讓q->next=p;</p><p>&

43、lt;b>  }</b></p><p><b>  head為頭結(jié)點(diǎn);</b></p><p>  將房間對(duì)等級(jí)循環(huán)建立整個(gè)空旅館鏈表</p><p><b>  }</b></p><p><b>  2.算法的描述</b></p><

44、p><b> ?、俪跏蓟瘮?shù)的建立</b></p><p>  Void chushihua(Room *head)</p><p><b>  {</b></p><p>  建立指向房間的room *p指針,</p><p>  通過對(duì)每個(gè)房間的查找</p><p>

45、;<b>  并將其恢復(fù)賦初始值</b></p><p><b>  }</b></p><p><b> ?、谟喎亢瘮?shù)的建立</b></p><p>  Void dingfang(Room *head)</p><p><b>  {</b></

46、p><p><b>  //訂房間</b></p><p><b>  旅客信息的輸入;</b></p><p>  While(房間不為空)</p><p><b>  { </b></p><p>  If(房間所需等級(jí)存在并且房間入住的性別一致或者房間

47、為空)</p><p><b>  {</b></p><p>  For(對(duì)等級(jí)進(jìn)行循環(huán))</p><p><b>  {</b></p><p><b>  If(床位為空)</b></p><p><b>  {</b><

48、;/p><p>  將房間號(hào)、床位號(hào)賦值</p><p><b>  }</b></p><p>  If(如果找到了符合的房間)</p><p><b>  跳出循環(huán);</b></p><p><b>  } </b></p><p&g

49、t;<b>  P指向下一個(gè)房間;</b></p><p><b>  }</b></p><p>  If(房間號(hào)和床位號(hào)都不為空)</p><p><b>  打?。嚎蜐M;</b></p><p><b>  Else</b></p>&

50、lt;p><b>  打印旅客入住信息;</b></p><p><b>  }</b></p><p><b> ?、弁朔亢瘮?shù)的建立</b></p><p>  void tuifang(Room *head)</p><p><b>  {//退房間<

51、/b></p><p>  建立房間指針Room *p;</p><p>  輸入旅客退房的房間號(hào),性別,床號(hào);</p><p>  While(房間不為空)</p><p><b>  {</b></p><p>  If(查找到的房間號(hào)與輸入的一致)</p><p&g

52、t;  If(性別與輸入一致)</p><p><b>  For(循環(huán)等級(jí))</b></p><p><b>  {</b></p><p>  將此人的所有信息進(jìn)行刪除操作</p><p><b>  }</b></p><p><b> 

53、 P指向下一個(gè)房間;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b> ?、茱@示函數(shù)的建立</b></p><p>  void display(Room *head)</p><p

54、><b>  {//顯示房間信息</b></p><p>  建立房間指針room *p;</p><p>  While(入住人數(shù)不為空)</p><p><b>  {</b></p><p>  打印旅客入住的相關(guān)信息</p><p><b>  For

55、(等級(jí)循環(huán))</b></p><p><b>  If(床位不為空)</b></p><p>  打印已經(jīng)入住的床位號(hào);</p><p><b>  P指向下一個(gè)房間</b></p><p><b>  }</b></p><p><b

56、>  } </b></p><p>  五、程序的調(diào)試與分析</p><p><b>  1.測(cè)試數(shù)據(jù)</b></p><p>  A.打開程序后在訂房系統(tǒng)中訂房,可按下圖進(jìn)行:</p><p>  然后進(jìn)行顯示函數(shù)的測(cè)試,將如上數(shù)據(jù)輸入后,打印,看是否顯示正確;</p><p>

57、;  B.進(jìn)行退房函數(shù)測(cè)試,將進(jìn)行退房操作,打印看是否已經(jīng)正確刪除;</p><p>  C.進(jìn)行初始化函數(shù)的測(cè)試,選擇初始化操作,點(diǎn)擊打印,看是否可以成功進(jìn)行初始化;</p><p>  D.進(jìn)行退出函數(shù)的測(cè)試,點(diǎn)擊退出選項(xiàng),看是否可以成功退出。</p><p><b>  2.測(cè)試結(jié)果</b></p><p>  以

58、上兩項(xiàng)測(cè)試數(shù)據(jù)經(jīng)過實(shí)際測(cè)試后,其返回值與預(yù)計(jì)返回值相同,證明程序在數(shù)據(jù)輸入正確的情況下可以正常運(yùn)行。</p><p><b>  六、用戶使用說明</b></p><p><b>  1.程序運(yùn)行環(huán)境</b></p><p>  程序名為hotel.exe,運(yùn)行環(huán)境為window XP。</p><p&

59、gt;<b>  2.程序主界面</b></p><p>  運(yùn)行程序后首先顯示圖所示程序主界面:</p><p>  選擇1:有旅客入住;</p><p>  選擇2:有旅客退房;</p><p>  選擇3:顯示房間信息;</p><p>  選擇4:刪除所有信息;</p>&

60、lt;p><b>  選擇5:退出程序;</b></p><p>  3.相關(guān)程序各項(xiàng)說明</p><p><b> ?、俾每腿胱。?</b></p><p>  選擇此項(xiàng)后,程序提示下圖所示界面:</p><p>  按照提示依次輸入旅客信息。其中,性別一項(xiàng)0代表男、1代表女,性別取值0-1

61、,年齡取值16-99,房間等級(jí)取初始時(shí)的房間等級(jí)范圍;如果各項(xiàng)輸入超出范圍程序會(huì)要求重新輸入。</p><p>  當(dāng)輸入全部信息后,如果旅客選擇的房間等級(jí)有空床位,則程序?yàn)槁每头峙浯参徊?,如果沒有則詢問是否更換房間等級(jí);如果旅客愿意更換等級(jí)則輸入新等級(jí)重新分配床位,如果如果旅客愿意更換等級(jí)則返回程序主界面。當(dāng)床位分配成功后程序顯示圖:</p><p><b> ?、诼每屯朔浚?

62、</b></p><p>  選擇此項(xiàng)后,程序提示下圖所示界面</p><p>  按照提示依次輸入旅客信息。其中,性別一項(xiàng)0代表男、1代表女,性別取值0-1,房間號(hào)為已有房間號(hào)碼,床位號(hào)碼0-該級(jí)別每房間床位數(shù);如果各項(xiàng)輸入超出范圍程序會(huì)要求重新輸入。</p><p>  當(dāng)輸入全部信息后,如果輸入無誤則可退房成功,否則要求重新輸入數(shù)據(jù)。</p&

63、gt;<p><b> ?、埏@示房間信息:</b></p><p>  選擇此項(xiàng)后,程序下圖所示界面,該界面將顯示各等級(jí)男女床位可用數(shù)、該級(jí)別床位價(jià)格,以及總男女床位可用數(shù)。</p><p><b>  ④退出程序</b></p><p>  選擇此項(xiàng)后程序?qū)⑼顺觥?lt;/p><p> 

64、 七、調(diào)試過程中出現(xiàn)的問題及心得體會(huì)</p><p>  調(diào)試程序,是軟件開發(fā)過程中的一個(gè)必不可少的環(huán)節(jié),是程序能否正常運(yùn)行的關(guān)鍵。</p><p>  在程序調(diào)試之前,需要熟練地掌握幾門必要的匯編語言及熟悉開發(fā)環(huán)境,這樣才能做到事半功倍。</p><p>  以下是調(diào)試過程中遇到的主要問題及解決過程:</p><p><b>  

65、1. 清屏問題</b></p><p>  在程序設(shè)計(jì)中,想讓界面顯示美觀,加入清屏函數(shù),可是用clearscreen();或者system(”cls”);都不能實(shí)現(xiàn)該功能,經(jīng)查證,看書等途徑,才知道原來是頭文件里沒包含該函數(shù)的功能。因此,我們將其頭文件加入,則可以正常運(yùn)行了。</p><p><b>  2. 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)</b></p>

66、<p>  題目已經(jīng)給了數(shù)據(jù)結(jié)構(gòu)的提示,所以開始設(shè)計(jì)時(shí)直接使用了已有的結(jié)構(gòu)。但是在設(shè)計(jì)后續(xù)算法時(shí)發(fā)現(xiàn),現(xiàn)有的結(jié)構(gòu)對(duì)于已經(jīng)住人但還沒住滿的房間和住滿的房間沒有區(qū)分,分配房間時(shí)要把所有房間都檢查過以后才能找到一個(gè)空床位,這就導(dǎo)致了程序設(shè)計(jì)比較復(fù)雜。后經(jīng)過重新設(shè)計(jì),決定分別使用一個(gè)空房間棧存儲(chǔ)空房間信息,一個(gè)空床棧存儲(chǔ)已經(jīng)住人但還沒住滿的房間的信息,一個(gè)滿床鏈存儲(chǔ)已經(jīng)住滿人的房間信息;后經(jīng)過改進(jìn),除空房棧外其余兩個(gè)均為一個(gè)有兩個(gè)元素

67、的數(shù)組,分別存儲(chǔ)男女房間信息,這個(gè)直接根據(jù)顧客性別即可到相應(yīng)的鏈或棧尋找相關(guān)信息,省去了對(duì)已經(jīng)住人的房間的性別判斷,同時(shí)不用在房間結(jié)構(gòu)體上記錄該房間性別,當(dāng)開設(shè)房間數(shù)量比較大以后可以節(jié)省一部分存儲(chǔ)空間。</p><p>  3. 房間分配和回收算法</p><p>  數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)決定了這兩個(gè)算法的思想是很簡(jiǎn)單的:分配房間時(shí)如果有房間就先看有沒有沒住滿的房間,有就直接分配沒有就開一個(gè)空房分

68、配;回收房間時(shí)如果房間還有其他人就將房間放到相應(yīng)的空床棧,沒有人就將房間回收到空房棧中。不過在實(shí)現(xiàn)回收算法時(shí)發(fā)現(xiàn)要判斷的東西比較多,程序分別到空床棧和滿房鏈中尋找房間,而且這兩個(gè)鏈/棧沒有設(shè)置頭結(jié)點(diǎn),需要對(duì)第一個(gè)結(jié)點(diǎn)單獨(dú)做判斷,由此導(dǎo)致了回收房間的函數(shù)源代碼有144行之多,難免會(huì)在編寫時(shí)出現(xiàn)一些錯(cuò)誤,帶來了很大調(diào)試工作量。</p><p><b>  八、心得體會(huì)</b></p>

69、<p>  這次的課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很非常重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在整個(gè)設(shè)計(jì)過程中,構(gòu)思是很花費(fèi)時(shí)間的。調(diào)試時(shí)經(jīng)常會(huì)遇到這樣那樣的錯(cuò)誤,有的是因?yàn)榇中脑斐傻恼Z法錯(cuò)誤。當(dāng)然,很多也時(shí)用錯(cuò)了方法,總是實(shí)現(xiàn)不了。同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過的知識(shí)理解得不夠深刻

70、,掌握得不夠牢固。</p><p>  根據(jù)我在課程設(shè)計(jì)中遇到得問題,我將在以后的學(xué)習(xí)過程中注意以下幾點(diǎn):</p><p>  1、認(rèn)真上好專業(yè)實(shí)驗(yàn)課,多在實(shí)踐中鍛煉自己。</p><p>  2、寫程序的過程中要考慮周到,嚴(yán)密。</p><p>  3、在做設(shè)計(jì)的時(shí)候要有信心,有耐心,切勿浮躁。</p><p>  

71、4、認(rèn)真的學(xué)習(xí)課本知識(shí),掌握課本中的知識(shí)點(diǎn),并在此基礎(chǔ)上學(xué)會(huì)靈活運(yùn)用。</p><p>  5、在課余時(shí)間里多寫程序,熟練掌握在調(diào)試程序的過程中所遇到的常見錯(cuò)誤,以便能節(jié)省調(diào)試程序的時(shí)間。</p><p>  每個(gè)實(shí)驗(yàn)通常都要花費(fèi)很久的時(shí)間才能理清一個(gè)程序的思路,而且要不斷的調(diào)試程序才能把程序調(diào)試正確,同時(shí)還要做到界面的輸出也是需要美化的。這次課程設(shè)計(jì)終于順利完成了,在設(shè)計(jì)中遇到了很多專業(yè)

72、知識(shí)問題,最后在老師的辛勤指導(dǎo)下,也完成了課程設(shè)計(jì)。</p><p>  通過這次的課程設(shè)計(jì),讓我更加了解到數(shù)據(jù)結(jié)構(gòu)的重要性。以及它對(duì)我們專業(yè)的發(fā)展發(fā)揮的作用。對(duì)我們而言,知識(shí)上的收獲很重要,但精神上的豐收更加可喜。讓我知道了學(xué)無止境的道理。我們每一個(gè)人永遠(yuǎn)不能滿足于現(xiàn)有的成就,人生就像在爬山,一座山峰的后面還有更高的山峰在等著你。挫折是一份財(cái)富,經(jīng)歷是一份擁有。這次課程設(shè)計(jì)必將成為我人生旅途上一個(gè)非常美好的回憶

73、!同時(shí)在做課程設(shè)計(jì)時(shí)要能夠從多方面去考慮,去研究,用多種算法去實(shí)現(xiàn)要求。此次課程設(shè)計(jì),學(xué)到了很多課內(nèi)學(xué)不到的東西,比如獨(dú)立思考解決問題,出現(xiàn)差錯(cuò)的隨機(jī)應(yīng)變,這些都讓我受益非淺,今后的制作應(yīng)該能夠更輕松,自己也都能夠解決并高質(zhì)量的完成項(xiàng)目。</p><p><b>  附錄:程序的源代碼</b></p><p>  #include<stdio.h><

74、/p><p>  #define N 10//房間等級(jí)</p><p>  #include<conio.h></p><p>  #include<stdlib.h></p><p>  #include<string.h></p><p>  typedef struct node{

75、</p><p>  int roomgrade;</p><p>  int roomnumber;</p><p>  int peoplein;</p><p>  int bed[N];</p><p><b>  int sex;</b></p><p>  st

76、ruct node *next;//結(jié)構(gòu)體指針</p><p><b>  }Room;</b></p><p>  Room *creat()</p><p>  {//建立房間的鏈表</p><p>  Room *head,*p,*q;</p><p>  int i=1,j,m=0,h;&

77、lt;/p><p>  while (i<=N)</p><p><b>  {</b></p><p>  for(j=1;j<=i;j++)</p><p><b>  {</b></p><p>  if((i!=1)||(j!=1))</p>&

78、lt;p><b>  q=p;</b></p><p>  p=new(Room);</p><p>  if((i==1)&&(j==1))</p><p><b>  head=p;</b></p><p>  p->roomgrade=i;</p>&

79、lt;p>  p->roomnumber=m+1;</p><p>  p->peoplein=0;</p><p>  p->sex=-1;//表示一個(gè)人也沒有</p><p>  for(h=0;h<i;h++)</p><p>  p->bed[h]=0;//0表示該床未住人,1表示住人</p&

80、gt;<p>  if((i!=1)||(j!=1))</p><p>  q->next=p;</p><p><b>  }</b></p><p>  i++; m++;</p><p><b>  }</b></p><p>  p->ne

81、xt=NULL;</p><p>  return(head);</p><p><b>  }</b></p><p>  void chushihua(Room *head)</p><p><b>  {//初始化</b></p><p><b>  Room

82、 *p;</b></p><p><b>  int i;</b></p><p><b>  p=head;</b></p><p>  while(p!=NULL)</p><p><b>  { </b></p><p>  p-

83、>peoplein=0;</p><p>  p->sex=-1;</p><p>  for(i=0;i<N;i++)</p><p>  p->bed[i]=0;</p><p>  p=p->next;</p><p><b>  }</b></p>

84、<p>  printf("\n\n\n 操作成功! \n");</p><p><b>  }</b></p><p>  void dingfang(Room *head)</p><p><b>  {//訂房間</b></p><p><b&

85、gt;  Room *p;</b></p><p>  int i,number=0,bednumber=0,s,grade;</p><p>  printf("\n\n *****歡迎使用訂房系統(tǒng)***** \n\n");</p><p>  printf("____________________________

86、_______________________\n\n");</p><p>  printf("\n 請(qǐng)輸入性別(1為男,0為女):");</p><p>  scanf("%d",&s);</p><p>  printf("\n\n 請(qǐng)輸入房間等級(jí):(1-10): &quo

87、t; );</p><p>  scanf("%d",&grade);</p><p><b>  p=head;</b></p><p>  while (p!=NULL)</p><p><b>  {</b></p><p>  if ((

88、p->roomgrade==grade)&&((p->sex==s)||(p->sex==-1)))</p><p><b>  {</b></p><p>  for(i=0;i<grade;i++)</p><p>  if (p->bed[i]==0)</p><p>

89、<b>  {</b></p><p>  number=p->roomnumber;</p><p>  bednumber=i+1;</p><p>  p->bed[i]=1;</p><p><b>  p->sex=s;</b></p><p> 

90、 p->peoplein++;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  if (number!=0) break;</p><p><b>  }</b></p><p>  p

91、=p->next;</p><p><b>  }</b></p><p>  if(number==0&&bednumber==0)</p><p>  printf("\n 不能入住該房間,請(qǐng)重新輸入:\n");</p><p><b>  else</b&

92、gt;</p><p>  printf(" \n 房間號(hào):%d 床號(hào):%d\n",number,bednumber);</p><p><b>  }</b></p><p>  void tuifang(Room *head)</p><p><b>  {//退房間&l

93、t;/b></p><p><b>  Room *p;</b></p><p>  int number,bednumber,i,s;</p><p>  printf(" ***歡迎使用退房系統(tǒng)*** \n");</p><p>  printf("\n\n

94、 請(qǐng)輸入房間號(hào)(1為男,0為女):");</p><p>  scanf("%d",&number);</p><p>  printf(" \n\n 請(qǐng)輸入性別:");</p><p>  scanf("%d",&s);</p><p&g

95、t;  printf("\n\n 請(qǐng)輸入床號(hào):");</p><p>  scanf("%d",&bednumber);</p><p><b>  p=head;</b></p><p>  while (p!=NULL)</p><p><b> 

96、 {</b></p><p>  if (p->roomnumber==number)</p><p>  if(p->sex==s)</p><p>  for (i=0;i<p->roomgrade;i++)</p><p>  if (i+1==bednumber)</p><p&

97、gt;<b>  {</b></p><p>  p->bed[i]=0;</p><p>  p->peoplein--;</p><p>  if(p->peoplein<0)</p><p>  p->peoplein=0;</p><p>  if(p->

98、;peoplein==0)</p><p>  p->sex=-1;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  p=p->next;</p><p><b>  }</b>&

99、lt;/p><p><b>  }</b></p><p>  void display(Room *head)</p><p><b>  {//顯示房間信息</b></p><p><b>  Room *p;</b></p><p><b>

100、  int i;</b></p><p><b>  p=head;</b></p><p>  printf("\n\n\n ***已訂房間查詢*** \n\n");</p><p>  while (p->peoplein!=NULL)</p><p>

101、;<b>  {</b></p><p>  printf("\n 房間號(hào):%d,房間等級(jí):%d,已住人數(shù):%d,住人性別:%d",p->roomnumber,p->roomgrade,p->peoplein,p->sex);</p><p>  for(i=0;i<p->roomgrade;i++)&l

102、t;/p><p>  if (p->bed[i]==1)</p><p>  printf("已住人的床號(hào):%d\n",i+1);</p><p>  printf("\n");</p><p>  p=p->next;</p><p><b>  }</

103、b></p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p>  int n,k=1;</p><p>  Room *head;</p><p>  head=

104、creat();</p><p>  while(k==1)</p><p><b>  {</b></p><p>  printf("\n\n 歡迎您的光臨,很開心為您服務(wù) \n");</p><p>  printf(" \n

105、 *******菜單****** \n");</p><p>  printf(" ___________________________________________________\n\n");</p><p>  printf(" | 1:訂房

106、 | \n\n");</p><p>  printf(" | 2:退房 | \n\n");</p><p>  printf(" | 3:顯示房間分配情況

107、 | \n\n");</p><p>  printf(" | 4:刪除所有信息 | \n\n");</p><p>  printf(" | 5:退出系統(tǒng) | \n\n");<

108、/p><p>  printf(" __________________________________________________\n\n");</p><p>  printf(" \n 請(qǐng)輸入您的選擇(請(qǐng)輸入1-5的數(shù)字):");</p><p>  scanf("%d",&

109、;n);</p><p><b>  switch(n)</b></p><p><b>  {</b></p><p>  case 1:system("CLS");dingfang(head);break;</p><p>  case 2:system("CLS&

110、quot;);tuifang(head);break;</p><p>  case 3:system("CLS");display(head);break;</p><p>  case 4:system("CLS");chushihua(head);break;</p><p>  case 5:k=2;break;<

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論