

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告</p><p> 題目 停車場(chǎng)管理系統(tǒng)程序</p><p> 班級(jí) __________________</p><p> 姓名 __________________</p><p> 學(xué)號(hào) __________________</p><p><b>
2、停車場(chǎng)管理系統(tǒng)</b></p><p><b> 1 問題描述</b></p><p> 設(shè)停車場(chǎng)是一個(gè)可停放n輛汽車的狹長(zhǎng)通道,且只有一個(gè)門可供出入。汽車在停車場(chǎng)內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列(門在最南端,最先到達(dá)的第一輛車停放在車場(chǎng)的最北端),若車場(chǎng)內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一
3、輛汽車即可開入;當(dāng)停車場(chǎng)內(nèi)某輛車要離開時(shí),在它之后進(jìn)入的車輛必須先退出車場(chǎng)為它讓路,待該輛車開出大門外,其他車輛再按原順序進(jìn)入車場(chǎng),每輛停放在車場(chǎng)的車在它離開停車場(chǎng)時(shí)必須按它停留的時(shí)間長(zhǎng)短交納費(fèi)用。</p><p><b> 2 需求分析</b></p><p> ?。?)根據(jù)車輛到達(dá)停車場(chǎng)到車輛離開停車場(chǎng)時(shí)所停留的時(shí)間進(jìn)行計(jì)時(shí)收費(fèi)。</p><
4、p> ?。?)當(dāng)有車輛從停車場(chǎng)離開時(shí),等待的車輛按順序進(jìn)入停車場(chǎng)停放。實(shí)現(xiàn)停車場(chǎng)的調(diào)度功能。</p><p> ?。?)用順序棧來表示停車場(chǎng),鏈隊(duì)表示停車場(chǎng)外的便道。</p><p> (4)顯示停車場(chǎng)信息和便道信息。</p><p> (5)程序執(zhí)行的命令為:車輛進(jìn)入停車場(chǎng) 車輛離開停車場(chǎng) 顯示停車場(chǎng)的信息。</p><p>
5、(以棧S作為停車場(chǎng),棧S1作為讓路的臨時(shí)停車點(diǎn),隊(duì)列Q作為車等待時(shí)用的便道。stack[Max+1]作為車場(chǎng)能夠容納的車輛數(shù),num[10]作為車所在位置的編號(hào),并且限定車場(chǎng)最多能夠容納10輛車.</p><p> (2).用戶根據(jù)系統(tǒng)所規(guī)定并提示的要求輸入有關(guān)內(nèi)容,車場(chǎng)所能容納的車輛數(shù)由收費(fèi)人員來確定,車輛離開時(shí),車主還可以得到收據(jù),便于收費(fèi)的管理使用;并且系統(tǒng)程序所提供的一些信息可通過特殊硬件顯示出來,供車
6、主了解信息,準(zhǔn)確有效的停車。</p><p> (3).程序應(yīng)該能夠顯示當(dāng)前存車信息以及等待車的信息,便于管理人員對(duì)車輛進(jìn)行管理,并且能夠給等待的車提供一些信息,便于他們能夠及時(shí)的停車。</p><p> (4).程序執(zhí)行的命令為:輸入進(jìn)站信息->輸入出站信息->打印收據(jù)</p><p> (5).改程序系簡(jiǎn)單的用于運(yùn)用棧與隊(duì)列基本知識(shí)的工具,不能
7、用于現(xiàn)實(shí)中,特別是棧“先進(jìn)后出”的規(guī)則大大限定了該程序的推廣,現(xiàn)實(shí)世界的車站管理系統(tǒng)比這個(gè)遠(yuǎn)遠(yuǎn)復(fù)雜的多。</p><p><b> 二.概要設(shè)計(jì):</b></p><p> 1.設(shè)定棧的抽象數(shù)據(jù)類型定義為:</p><p> ADT stack{</p><p> 數(shù)據(jù)對(duì)象:D={ai|ai∈charset,i=
8、1,2,……,n,n>=0}</p><p> 數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D,i=2……,n}</p><p><b> 基本操作:</b></p><p> InitStack(&S)</p><p> 操作結(jié)果:構(gòu)造一個(gè)空棧S。</p>&l
9、t;p> Push(&S,e)</p><p> 初始條件:棧S已經(jīng)存在。</p><p> 操作結(jié)果:在棧S的棧頂插入新的棧頂元素e。</p><p> Pop(&S,&e)</p><p> 初始條件:棧S已經(jīng)存在。</p><p> 操作結(jié)果:刪除S的棧頂元素,并以e返回
10、其值。</p><p> StackTraverse(S,visit())</p><p> 初始條件:棧S已經(jīng)存在。</p><p> 操作結(jié)果:從棧底到棧頂依次對(duì)S中的每一個(gè)元素調(diào)用函數(shù)visit().</p><p> }ADT stack</p><p> 2. 設(shè)定隊(duì)列的抽象數(shù)據(jù)類型定義為:<
11、/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,i=2……,n}</p><p> 約定其中ai為隊(duì)列頭,an為隊(duì)列尾.</p><p><b> 基本操作:</b></p
12、><p> InitQueue(&Q)</p><p> 操作結(jié)果:構(gòu)造一個(gè)空隊(duì)列Q.</p><p> DestroyQueue(&Q)</p><p> 初始條件:隊(duì)列Q已存在.</p><p> 操作結(jié)果:隊(duì)列Q被銷毀,不再存在.</p><p> ClearQue
13、ue(&Q)</p><p> 初始條件:隊(duì)列Q已存在.</p><p> 操作結(jié)果:將Q清為空隊(duì)列.</p><p> QueueEmpty(Q)</p><p> 初始條件:隊(duì)列Q已存在.</p><p> 操作結(jié)果:若Q為空隊(duì)列,則返回True,否則返回False.</p><
14、;p> QueueLength(Q)</p><p> 初始條件:隊(duì)列Q已經(jīng)存在.</p><p> 操作結(jié)果:返回Q的元素個(gè)數(shù),即隊(duì)列的長(zhǎng)度.</p><p> GetHead(Q,&e)</p><p> 初始條件:Q為非空隊(duì)列.</p><p> 操作結(jié)果:用e返回Q的對(duì)頭元素.<
15、/p><p> EnQueue(&Q,e)</p><p> 初始條件:隊(duì)列Q已存在.</p><p> 操作結(jié)果:插入元素e為Q新的隊(duì)尾元素.</p><p> DeQueue(&Q,&e)</p><p> 初始條件:Q為非空隊(duì)列.</p><p> 操作結(jié)果
16、:刪除Q的隊(duì)頭元素,并用e返回其值.</p><p> QueueTraverse(Q,visit())</p><p> 初始條件:Q已存在且非空.</p><p> 操作結(jié)果:從隊(duì)頭到隊(duì)尾,依次對(duì)Q的每一個(gè)數(shù)據(jù)元素調(diào)用函數(shù)visit().一旦visit()失敗,則操作失敗.</p><p> }ADT Queue</p>
17、;<p> 3.本程序包括四個(gè)模塊</p><p><b> 1)主程序模塊</b></p><p> Void main()</p><p><b> {</b></p><p><b> 聲明定義</b></p><p>&l
18、t;b> 調(diào)用棧與隊(duì)列的函數(shù)</b></p><p> 主信息(輸入初始操作信息)</p><p><b> }</b></p><p> 2)棧模塊---實(shí)現(xiàn)棧抽象數(shù)據(jù)類型</p><p> 3)隊(duì)列模塊---實(shí)現(xiàn)隊(duì)列抽象數(shù)據(jù)類型</p><p> 4)結(jié)構(gòu)體模塊-
19、--用于對(duì)對(duì)象及變量的管理</p><p> 各模塊之間的調(diào)用關(guān)系如下: </p><p><b> 主程序模塊</b></p><p><b> ↓</b></p><p><b> 結(jié)構(gòu)體模塊</b></p><p><b> ↓
20、</b></p><p><b> 棧模塊</b></p><p><b> ↓</b></p><p><b> 隊(duì)列模塊</b></p><p> 4.設(shè)計(jì)停車管理程序的要求</p><p> 按照從終端讀入的輸入數(shù)據(jù)進(jìn)行模擬管
21、理,每一組輸入數(shù)據(jù)包括三個(gè)數(shù)據(jù)項(xiàng):汽車“進(jìn)站”或“出站”信息、汽車牌照號(hào)碼以及進(jìn)站或出站的時(shí)刻,對(duì)每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為:若是車輛到達(dá),則輸出汽車在停車場(chǎng)內(nèi)或便道上的停車位置;若是車輛離去,則輸出汽車在停車場(chǎng)內(nèi)逗留的時(shí)間和應(yīng)交納的費(fèi)用(在便道上停留不收費(fèi)),按以順序結(jié)構(gòu)實(shí)現(xiàn),隊(duì)列以鏈表結(jié)構(gòu)實(shí)現(xiàn)。</p><p><b> 三.詳細(xì)設(shè)計(jì):</b></p><
22、p><b> 1. 時(shí)間結(jié)點(diǎn)類型</b></p><p> typedef struct time{ </p><p> int hour; </p><p><b> int min; </b></p><p> }Time; /*時(shí)間結(jié)點(diǎn)*/ </p><p&
23、gt; 2.車輛進(jìn)出站信息類型</p><p> typedef struct node{ </p><p> char num[10];</p><p> Time reach; </p><p> Time leave; </p><p> }CarNode; /*車輛信息結(jié)點(diǎn)*/ </p>
24、<p> 3.停車場(chǎng)和便道信息類型</p><p> typedef struct NODE{ </p><p> CarNode *stack[Max+1];</p><p><b> int top; </b></p><p> }SeqStackCar; /*模擬車站*/</p>
25、<p> typedef struct car{ </p><p> CarNode *data;</p><p> struct car *next; </p><p> }QueueNode; </p><p> typedef struct Node{ </p><p> QueueNo
26、de *head; </p><p> QueueNode *rear; </p><p> }LinkQueueCar; /*模擬通道*/ </p><p> void InitStack(SeqStackCar *,int n); /*聲明棧*/</p><p> //初始化,創(chuàng)建兩個(gè)新棧S,S1</p><p
27、> int InitQueue(LinkQueueCar *); /*聲明便道*/</p><p> //初始化,創(chuàng)建一個(gè)隊(duì)列Q用于便道</p><p> int Arrival(SeqStackCar *,LinkQueueCar *,int n); /*車輛進(jìn)站*/</p><p> void Leave(SeqStackCar *,SeqStac
28、kCar *,LinkQueueCar *,int n); /*車輛出站*/</p><p> void List(SeqStackCar,LinkQueueCar); /*顯示存車信息*/ </p><p> void InitStack(SeqStackCar *s,int n) /*初始化棧*/</p><p> 4.主函數(shù)和其它函數(shù)的偽碼算法<
29、/p><p> void main()</p><p><b> {//主程序</b></p><p> initialization(); //初始化</p><p><b> while(1){</b></p><p> scanf(...............
30、....);//根據(jù)提示信息輸入想要的操作</p><p> switch(k){//根據(jù)輸入的數(shù)調(diào)用不同的函數(shù)</p><p><b> case 1:</b></p><p><b> case 2:</b></p><p> ....................</p>
31、<p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> typedef struct **{</p><p> //用于創(chuàng)建不同結(jié)構(gòu)體類型的指針與變量</p><p&
32、gt;<b> }</b></p><p> void PRINT(CarNode *p){</p><p><b> //調(diào)用輸出函數(shù)</b></p><p> Leave(*p,n)...................</p><p> 根據(jù)求解時(shí)間值來求得費(fèi)用,并通過收據(jù)打印出來&
33、lt;/p><p><b> }</b></p><p><b> 5.主要函數(shù)思想</b></p><p> 本程序是個(gè)簡(jiǎn)單的棧與隊(duì)列的應(yīng)用程序,其所用的函數(shù)也是棧與隊(duì)列的基本函數(shù),但在編寫函數(shù)時(shí)應(yīng)特別注意它的面向?qū)ο笮耘c窗口化設(shè)計(jì),切身為使用者著想.所以在運(yùn)用一些函數(shù)時(shí)調(diào)用的基本語(yǔ)句有太多的重復(fù),其目的在于實(shí)現(xiàn)它本來
34、的基本目的.</p><p><b> 四.調(diào)試分析:</b></p><p> 本次作業(yè)比較簡(jiǎn)單,只是棧與隊(duì)列的復(fù)習(xí)應(yīng)用,所以總的調(diào)試比較順利,只是在調(diào)用棧與隊(duì)列的函數(shù)時(shí)遇到一些問題,比如我想通過鍵盤輸入來確定停車場(chǎng)的停車數(shù),所以初始化時(shí)那些操作函數(shù)必須帶有停車數(shù)這個(gè)參數(shù)。</p><p> 在定義棧的元素最大空間時(shí)如果使用順序棧必須先
35、給它賦初值,但如果通過鏈表就可以實(shí)現(xiàn)動(dòng)態(tài)分配內(nèi)存,為棧動(dòng)態(tài)開辟新空間。</p><p> 在判斷鍵盤輸入是否符合要求時(shí),如果不符合要求應(yīng)循環(huán)賦值,直到符合要求為止,在此利用的do-while循環(huán)語(yǔ)句與外部while語(yǔ)句套用時(shí)應(yīng)使用兩次break語(yǔ)句,才能跳出循環(huán),否則會(huì)造成死循環(huán)。</p><p> 經(jīng)驗(yàn)體會(huì):通過DEBUG調(diào)試器和數(shù)據(jù)觀察窗口,可以加快找到程序中的疵點(diǎn)。</p&
36、gt;<p> 五.軟件使用說明書:</p><p> 本系統(tǒng)為存車信息管理軟件,能實(shí)現(xiàn)車場(chǎng)存車及便道存車信息的輸入,輸出,查找等功能,并建立和更新的存車費(fèi)用信息保存于文件輸出或打印。對(duì)于查找等功能能夠按存車位置及車牌號(hào)分別進(jìn)行。每輛車的相關(guān)信息包括:車牌號(hào),進(jìn)站時(shí)間,出站時(shí)間,存車位置,停車費(fèi)用等。</p><p> 本系統(tǒng)功能還需完善,操作簡(jiǎn)單,只是供學(xué)習(xí)之用,并不
37、能作為實(shí)際生活使用。</p><p> 下面介紹了此軟件的使用說明:</p><p> 1.停車場(chǎng).exe;</p><p> 2.進(jìn)入演示系統(tǒng)后首先是一個(gè)用戶及管理員使用注意事項(xiàng)界面,進(jìn)入后會(huì)出現(xiàn)菜單選項(xiàng)。</p><p> 1.車輛進(jìn)站 2.車輛出站 3.存車信息 4.離開系統(tǒng)</p><p>
38、 請(qǐng)選擇: 1|2|3|4.</p><p> 這時(shí)可按照提示進(jìn)行你想要的操作。</p><p> 3.對(duì)于1-4的具體操作與內(nèi)容請(qǐng)?jiān)斠娗懊娴恼{(diào)試分析,您便可以輕松操作了!</p><p> 六.總結(jié):經(jīng)過這次課程設(shè)計(jì),通過對(duì)程序的編制,調(diào)試和運(yùn)行,使我更好的掌握了棧和隊(duì)列基本性質(zhì)和有關(guān)它們之間關(guān)系使用問題的解決方法,熟悉了各種調(diào)用的數(shù)據(jù)類型,在調(diào)試和運(yùn)行
39、過程中使我更加的了解和熟悉程序運(yùn)行的環(huán)境,提高了我對(duì)程序調(diào)試分析的能力和對(duì)錯(cuò)誤的糾正能力。這次數(shù)據(jù)結(jié)構(gòu)的程序設(shè)計(jì),對(duì)于我來說是一個(gè)挑戰(zhàn)。我對(duì)數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)在程序的設(shè)計(jì)中也有所體現(xiàn)。課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí)、發(fā)現(xiàn)、提出、分析和解決實(shí)際問題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過程。隨著科學(xué)技術(shù)發(fā)展的日新月異,當(dāng)今計(jì)算機(jī)應(yīng)用在生活中可以說得是無(wú)處不在。因此作為二十一世紀(jì)的大學(xué)來說掌握計(jì)算機(jī)開發(fā)技術(shù)是十分重要
40、的。</p><p><b> 七.附錄</b></p><p><b> 所用到的庫(kù)函數(shù):</b></p><p> Stdio.h /*標(biāo)準(zhǔn)輸入/輸出頭文件*/</p><p> String.h /*包含字符串處理函數(shù)頭文件*/</p><p>
41、; Stdlib.h /*包含動(dòng)態(tài)存儲(chǔ)與釋放函數(shù)頭文件*/</p><p> Malloc.h /*包含內(nèi)存分配頭文件*/</p><p> 該停車場(chǎng)管理系統(tǒng)的主要程序如下:</p><p> /*停車場(chǎng)管理系統(tǒng)*/</p><p> #include<stdio.h></p><p&g
42、t; #include<stdlib.h> </p><p> #include<string.h></p><p> #include<malloc.h></p><p> /*------------------------------------------------------------------------
43、------*/ </p><p> #define Max 10</p><p> int getn()</p><p><b> {</b></p><p><b> int n;</b></p><p> printf("歡迎您光臨順風(fēng)停車場(chǎng),&qu
44、ot;);</p><p> printf("本停車場(chǎng)管理實(shí)行24小時(shí)制,停車每分鐘0.1元.\n");</p><p> printf("請(qǐng)輸入停車場(chǎng)可容納的車(最多10輛):");</p><p> scanf("%d",&n);</p><p> fflush(
45、stdin);</p><p><b> do{</b></p><p> if(n<1 || n>10)</p><p><b> {</b></p><p> printf("輸入的車輛數(shù)不在要求范圍內(nèi),請(qǐng)重新輸入!");</p><p
46、> scanf("%d",&n);</p><p> fflush(stdin);</p><p><b> }</b></p><p> else break;</p><p> }while(n<1 || n>10);</p><p>&
47、lt;b> return n;</b></p><p><b> }</b></p><p> typedef struct time{ </p><p> int hour; </p><p><b> int min; </b></p><p>
48、; }Time; /*時(shí)間結(jié)點(diǎn)*/ </p><p> typedef struct node{ </p><p> char num[10];</p><p> Time reach; </p><p> Time leave; </p><p> }CarNode; /*車輛信息結(jié)點(diǎn)*/ </p&
49、gt;<p> typedef struct NODE{ </p><p> CarNode *stack[Max+1];</p><p><b> int top; </b></p><p> }SeqStackCar; /*模擬車站*/</p><p> typedef struct car{
50、 </p><p> CarNode *data;</p><p> struct car *next; </p><p> }QueueNode; </p><p> typedef struct Node{ </p><p> QueueNode *head; </p><p>
51、 QueueNode *rear; </p><p> }LinkQueueCar; /*模擬通道*/ </p><p> void InitStack(SeqStackCar *,int n); /*聲明棧*/</p><p> int InitQueue(LinkQueueCar *); /*聲明便道*/</p><p> int
52、 Arrival(SeqStackCar *,LinkQueueCar *,int n); /*車輛進(jìn)站*/</p><p> void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *,int n); /*車輛出站*/</p><p> void List(SeqStackCar,LinkQueueCar); /*顯示存車信息*/ &
53、lt;/p><p> void InitStack(SeqStackCar *s,int n) /*初始化棧*/</p><p><b> { </b></p><p><b> int i; </b></p><p> s->top=0; </p><p>
54、for(i=0;i<=n;i++)</p><p> s->stack[s->top]=NULL; </p><p><b> } </b></p><p> int InitQueue(LinkQueueCar *Q) /*初始化便道*/ </p><p><b> { </b
55、></p><p> Q->head=(QueueNode *)malloc(sizeof(QueueNode)); </p><p> if(Q->head!=NULL) </p><p><b> { </b></p><p> Q->head->next=NULL; </
56、p><p> Q->rear=Q->head; </p><p> return(1); </p><p><b> } </b></p><p> else return(-1); </p><p><b> } </b></p><p
57、> void PRINT(CarNode *p) /*打印出站車的信息*/</p><p><b> { </b></p><p> int A1,A2,B1,B2;</p><p> int a,b,c; </p><p> printf("\n請(qǐng)輸入離開的時(shí)間:/**:**/");
58、 </p><p> scanf("%d:%d",&(p->leave.hour),&(p->leave.min));</p><p> fflush(stdin);</p><p><b> do{</b></p><p> if(p->leave.hour
59、<p->reach.hour || (p->leave.hour==p->reach.hour && p->leave.min<p->reach.min))</p><p><b> {</b></p><p> printf("輸入離開時(shí)間比進(jìn)站時(shí)間早,請(qǐng)重新輸入!\n");</
60、p><p> scanf("%d:%d",&(p->leave.hour),&(p->leave.min));</p><p> fflush(stdin);</p><p><b> }</b></p><p> if(p->leave.hour<0 ||
61、 p->leave.hour>=24 || p->leave.min<0 || p->leave.min>=60)</p><p><b> {</b></p><p> printf("輸入的時(shí)間格式有錯(cuò),請(qǐng)重新輸入!");</p><p> scanf("%d:%d&q
62、uot;,&(p->leave.hour),&(p->leave.min));</p><p> fflush(stdin);</p><p><b> }</b></p><p> else break;</p><p> }while(p->leave.hour<p-&
63、gt;reach.hour || (p->leave.hour==p->reach.hour && p->leave.min<p->reach.min) || p->leave.hour<0 || p->leave.hour>=24 || p->leave.min<0 || p->leave.min>=60);</p><p
64、> printf("車場(chǎng)現(xiàn)在有一輛車離開,請(qǐng)便道里的第一輛車進(jìn)入車場(chǎng)!\n");</p><p> printf("出站的車的車牌號(hào)為:");</p><p> puts(p->num);</p><p> printf("\n");</p><p> A1=p
65、->reach.hour; </p><p> A2=p->reach.min; </p><p> B1=p->leave.hour; </p><p> B2=p->leave.min;</p><p> a=(B1-A1)*60+B2-A2;</p><p><b>
66、if(a>=60)</b></p><p><b> {</b></p><p><b> b=a/60;</b></p><p><b> c=a-60*b;</b></p><p><b> }</b></p>
67、<p><b> else</b></p><p><b> {</b></p><p><b> b=0;</b></p><p><b> c=a;</b></p><p><b> }</b></p&g
68、t;<p> printf(" 祝您一路順風(fēng),歡迎您下次光臨.");</p><p> printf("\n 收 據(jù)\n");</p><p> printf("================================== 車牌號(hào): ");</p
69、><p> puts(p->num);</p><p> printf("\n");</p><p> printf("===================================================\n");</p><p> printf("|進(jìn)車場(chǎng)時(shí)刻 |
70、 出車場(chǎng)時(shí)刻 | 停留時(shí)間 | 應(yīng)付(元)|\n");</p><p> printf("====================================================\n");</p><p> printf("| %d:%d",p->reach.hour,p->reach.min);<
71、/p><p> printf(" | %d:%d",p->leave.hour,p->leave.min);</p><p> printf(" | %d:%d",b,c);</p><p> printf(" | %2.1f",0.1*a);</p>
72、;<p> printf(" |\n");</p><p> printf("-----------------------------------------------------\n");</p><p><b> free(p);</b></p><p><b>
73、; } </b></p><p> int Arrival(SeqStackCar *Enter,LinkQueueCar *W,int n) /*車輛到達(dá)*/</p><p><b> { </b></p><p> CarNode *p; </p><p> QueueNode *t; <
74、;/p><p><b> int a,b;</b></p><p> p=(CarNode *)malloc(sizeof(CarNode)); </p><p> flushall(); </p><p> printf("\n請(qǐng)輸入車牌號(hào)(七位,例:陜A1234):\n");</p>
75、;<p> printf("請(qǐng)嚴(yán)格按照要求輸入車牌號(hào),否則系統(tǒng)會(huì)出錯(cuò)!\n");</p><p><b> do{</b></p><p> a=strlen("陜A1234");</p><p> b=strlen(gets(p->num));</p><
76、p> fflush(stdin);</p><p><b> if(a!=b)</b></p><p><b> {</b></p><p> printf("輸入車牌號(hào)格式錯(cuò)誤,請(qǐng)重新輸入(七位)!\n");</p><p> gets(p->num);&
77、lt;/p><p> fflush(stdin);</p><p><b> }</b></p><p> else break;</p><p><b> if(a!=b)</b></p><p> printf("輸入車牌號(hào)格式錯(cuò)誤,請(qǐng)重新輸入(七位)!\
78、n");</p><p> }while(a!=b);</p><p> if(Enter->top<n) /*車場(chǎng)未滿,車進(jìn)車場(chǎng)*/</p><p><b> { </b></p><p> Enter->top++; </p><p> printf(&q
79、uot;\n車輛在車場(chǎng)第%d位置.",Enter->top); </p><p> fflush(stdin);</p><p> printf("\n請(qǐng)輸入到達(dá)時(shí)間:/**:**/"); </p><p> scanf("%d:%d",&(p->reach.hour),&(p-&g
80、t;reach.min));</p><p> fflush(stdin);</p><p><b> do{</b></p><p> if(p->reach.hour<0 || p->reach.hour>=24 || p->reach.min<0 || p->reach.min>=60
81、)</p><p><b> {</b></p><p> printf("輸入的時(shí)間格式有錯(cuò),請(qǐng)重新輸入!");</p><p> scanf("%d:%d",&(p->reach.hour),&(p->reach.min));</p><p>
82、 fflush(stdin);</p><p><b> }</b></p><p><b> else</b></p><p><b> break;</b></p><p> }while(p->reach.hour<0 || p->reach.
83、hour>=24 || p->reach.min<0 || p->reach.min>=60);</p><p> Enter->stack[Enter->top]=p; </p><p> return(1); </p><p><b> } </b></p><p>
84、 else /*車場(chǎng)已滿,車進(jìn)便道*/ </p><p><b> { </b></p><p> printf("\n請(qǐng)?jiān)撥囋诒愕郎宰鞯却?");</p><p> t=(QueueNode *)malloc(sizeof(QueueNode)); </p><p> t->data
85、=p; </p><p> t->next=NULL; </p><p> W->rear->next=t; </p><p> W->rear=t; </p><p> return(1); </p><p><b> } </b></p>&l
86、t;p><b> } </b></p><p> void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W,int n)</p><p> { /*車輛離開*/ </p><p> int i, room; </p><p> CarN
87、ode *p,*t; </p><p> QueueNode *q; </p><p> /*判斷車場(chǎng)內(nèi)是否有車*/ </p><p> if(Enter->top>0) /*有車*/ </p><p><b> { </b></p><p> while(1) /*輸入
88、離開車輛的信息*/ </p><p><b> { </b></p><p> printf("\n請(qǐng)輸入要離開的車在車場(chǎng)的位置/1--%d/:",Enter->top);</p><p> scanf("%d",&room);</p><p> fflus
89、h(stdin); </p><p> if(room>=1&&room<=Enter->top) break; </p><p><b> } </b></p><p> while(Enter->top>room) /*車輛離開*/ </p><p><b&g
90、t; { </b></p><p> Temp->top++; </p><p> Temp->stack[Temp->top]=Enter->stack[Enter->top]; </p><p> Enter->stack[Enter->top]=NULL; </p><p>
91、 Enter->top--; </p><p><b> } </b></p><p> p=Enter->stack[Enter->top]; </p><p> Enter->stack[Enter->top]=NULL; </p><p> Enter->top--;
92、 </p><p> while(Temp->top>=1) </p><p><b> { </b></p><p> Enter->top++; </p><p> Enter->stack[Enter->top]=Temp->stack[Temp->top]; &l
93、t;/p><p> Temp->stack[Temp->top]=NULL; </p><p> Temp->top--; </p><p><b> } </b></p><p><b> PRINT(p);</b></p><p> /*判斷通道上
94、是否有車及車站是否已滿*/ </p><p> if((W->head!=W->rear)&&Enter->top<n) /*便道的車輛進(jìn)入車場(chǎng)*/</p><p><b> {</b></p><p> q=W->head->next; </p><p> t
95、=q->data; </p><p> Enter->top++; </p><p> printf("\n現(xiàn)在請(qǐng)便道上的車進(jìn)入車場(chǎng).該車的車牌號(hào)為:");</p><p> puts(t->num);</p><p> printf("\n該車進(jìn)入車場(chǎng)第%d位置.",Ente
96、r->top);</p><p> printf("\n請(qǐng)輸入現(xiàn)在的時(shí)間(即該車進(jìn)站的時(shí)間)/**:**/:");</p><p> scanf("%d:%d",&(t->reach.hour),&(t->reach.min));</p><p> fflush(stdin); <
97、/p><p><b> do{</b></p><p> if(t->reach.hour<0 || t->reach.hour>=24 || t->reach.min<0 || t->reach.min>=60)</p><p><b> {</b></p>
98、<p> printf("輸入的時(shí)間格式有錯(cuò),請(qǐng)重新輸入!");</p><p> scanf("%d:%d",&(t->reach.hour),&(t->reach.min));</p><p> fflush(stdin);</p><p><b> }</b
99、></p><p><b> else</b></p><p><b> break;</b></p><p> }while(t->reach.hour<0 || t->reach.hour>=24 || t->reach.min<0 || t->reach.min&
100、gt;=60);</p><p> W->head->next=q->next; </p><p> if(q==W->rear) W->rear=W->head; </p><p> Enter->stack[Enter->top]=t; </p><p><b> free
101、(q); </b></p><p><b> } </b></p><p> else printf("\n目前便道里沒有車.\n");</p><p><b> } </b></p><p> else printf("\n目前車場(chǎng)里沒有車,來車請(qǐng)
102、直接進(jìn)入車場(chǎng)!"); /*沒車*/</p><p><b> } </b></p><p> void List1(SeqStackCar *S) /*列表顯示車場(chǎng)存車信息*/</p><p><b> { </b></p><p><b> int i; </b
103、></p><p> if(S->top>0) /*判斷車站內(nèi)是否有車*/ </p><p><b> { </b></p><p> printf("\n車場(chǎng):"); </p><p> printf("\n 位置 到達(dá)時(shí)間 車牌號(hào)\n"); </
104、p><p> for(i=1;i<=S->top;i++) </p><p><b> { </b></p><p> printf(" %d ",i); </p><p> printf("%d:%d ",S->stack[i]->reach.hour
105、,S->stack[i]->reach.min); </p><p> puts(S->stack[i]->num); </p><p><b> } </b></p><p><b> } </b></p><p> else printf("\n目前車場(chǎng)
106、里沒有車");</p><p><b> } </b></p><p> void List2(LinkQueueCar *W) /*列表顯示便道信息*/ </p><p><b> { </b></p><p> QueueNode *p; </p><p&
107、gt; p=W->head->next; </p><p> if(W->head!=W->rear) /*判斷通道上是否有車*/ </p><p><b> { </b></p><p> printf("\n目前正在等待車輛的號(hào)碼為:");</p><p> wh
108、ile(p!=NULL) </p><p><b> { </b></p><p> puts(p->data->num); </p><p> p=p->next; </p><p> printf("\n");</p><p><b>
109、 } </b></p><p><b> } </b></p><p> else printf("\n目前便道里沒有車.");</p><p><b> } </b></p><p> void List(SeqStackCar S,LinkQueueCar
110、 W) </p><p><b> { </b></p><p> int flag,tag; </p><p><b> flag=1; </b></p><p> while(flag) </p><p><b> { </b></p
111、><p> printf("\n1.車場(chǎng)\n2.便道\n3.返回\n"); </p><p><b> while(1) </b></p><p> { printf("\n請(qǐng)選擇 1|2|3:"); </p><p> scanf("%d",&t
112、ag);</p><p> fflush(stdin);</p><p><b> do{</b></p><p> if(tag<1||tag>3)</p><p><b> {</b></p><p> printf("輸入有誤,請(qǐng)按要求重
113、新輸入!");</p><p> scanf("%d",&tag);</p><p> fflush(stdin);</p><p><b> }</b></p><p><b> else</b></p><p><b&g
114、t; break;</b></p><p> }while(tag>3 && tag<1);</p><p><b> break;</b></p><p><b> } </b></p><p> switch(tag) </p>&
115、lt;p><b> { </b></p><p> case 1:List1(&S);break; /*列表顯示車場(chǎng)信息*/ </p><p> case 2:List2(&W);break; /*列表顯示便道信息*/ </p><p> case 3:flag=0;break;/*返回*/</p>
116、<p> default: break; </p><p><b> } </b></p><p><b> } </b></p><p><b> }</b></p><p> void main() </p><p><b&
117、gt; { </b></p><p> SeqStackCar Enter,Temp; </p><p> LinkQueueCar Wait;</p><p><b> int ch;</b></p><p><b> int n; </b></p><p
118、> printf("該停車場(chǎng)管理系統(tǒng)是個(gè)比較簡(jiǎn)單系統(tǒng),在應(yīng)用的時(shí)候請(qǐng)注意要求! \n");</p><p> printf("如果您有任何問題,請(qǐng)及時(shí)聯(lián)系我們,謝謝合作!\n");</p><p> printf("=========================================================
119、===\n");</p><p><b> n=getn();</b></p><p> InitStack(&Enter,n); /*初始化車場(chǎng)*/</p><p> InitStack(&Temp,n); /*初始化讓路的臨時(shí)棧*/</p><p> InitQueue(&W
120、ait); /*初始化便道*/</p><p><b> while(1) </b></p><p><b> { </b></p><p> printf("\n1. 車輛進(jìn)站");</p><p> printf(" 2. 車輛出站");<
121、/p><p> printf(" 3. 存車信息");</p><p> printf(" 4. 退出系統(tǒng)\n"); </p><p><b> while(1) </b></p><p> {printf("請(qǐng)選擇: 1|2|3|4.\n");</p
122、><p> scanf("%d",&ch);</p><p> fflush(stdin);</p><p><b> do{</b></p><p> if(ch>4 || ch<1){</p><p> printf("輸入有誤,請(qǐng)重新輸
123、入!");</p><p> scanf("%d",&ch);</p><p> fflush(stdin);</p><p><b> }</b></p><p><b> else</b></p><p><b>
124、 break;</b></p><p> }while(ch>4 || ch<1);</p><p><b> break;</b></p><p><b> }</b></p><p> switch(ch) </p><p><b&g
125、t; { </b></p><p> case 1:Arrival(&Enter,&Wait,n);break; /*車輛進(jìn)站*/</p><p> case 2:Leave(&Enter,&Temp,&Wait,n);break; /*車輛出站*/</p><p> case 3:List(Enter,
126、Wait);break; /*存車信息*/</p><p> case 4:exit(0); /*退出系統(tǒng)*/</p><p> default:break;</p><p><b> } </b></p><p><b> } </b></p><p><b
127、> }</b></p><p><b> 6 課程設(shè)計(jì)總結(jié)</b></p><p> 通過這次課程設(shè)計(jì)使我充分的理解了用棧和隊(duì)列實(shí)現(xiàn)模擬停車場(chǎng)的基本原理,知道了棧的順序存儲(chǔ)結(jié)構(gòu)和隊(duì)列的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的定義和算法描述,同時(shí)也學(xué)會(huì)了編寫停車場(chǎng)問題的程序。雖然此次的程序不是很完備,沒有加入一些更完善的功能,但是總體還是一個(gè)比較能體現(xiàn)數(shù)據(jù)結(jié)構(gòu)知識(shí)點(diǎn)能力的
128、程序了,當(dāng)然只是相對(duì)于我這個(gè)初學(xué)者來說。在剛開始編程的時(shí)候,我感到有點(diǎn)無(wú)從下手,但經(jīng)過對(duì)題目的詳細(xì)分析和思考之后,我就知道具體應(yīng)該做什么,怎么做了。經(jīng)過幾天和同組同學(xué)的一起研究,我們分工完成了這個(gè)程序,完成這個(gè)程序,我學(xué)到了很多東西,這是在課堂上無(wú)法做到的。</p><p> 在此我非常要感謝的是我的指導(dǎo)老師老師,感謝老師的細(xì)心認(rèn)真的輔導(dǎo),讓我對(duì)數(shù)據(jù)結(jié)構(gòu)這門課程掌握得更好,懂得更多,她教我怎么分析問題,應(yīng)該要注
129、意些什么,最后還指出我存在的問題。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 黃同成,黃俊民,董建寅.?dāng)?shù)據(jù)結(jié)構(gòu)[M].北京:中國(guó)電力出版社,2008</p><p> [2] 董建寅,黃俊民,黃同成.?dāng)?shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)與題解[M].北京:中國(guó)電力出版社,2008</p><p> [3]
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)報(bào)告---停車場(chǎng)管理系統(tǒng)
- 停車場(chǎng)管理系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)停車場(chǎng)管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)停車場(chǎng)管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)停車場(chǎng)管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--停車場(chǎng)管理系統(tǒng)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)停車場(chǎng)管理報(bào)告
- 停車場(chǎng)管理-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---停車場(chǎng)管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----停車場(chǎng)管理系統(tǒng)設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-- 停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)《停車場(chǎng)管理系統(tǒng)》
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-停車場(chǎng)管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--停車場(chǎng)管理
評(píng)論
0/150
提交評(píng)論