停車(chē)場(chǎng)模擬管理程序的設(shè)計(jì)報(bào)告(附源代碼)_第1頁(yè)
停車(chē)場(chǎng)模擬管理程序的設(shè)計(jì)報(bào)告(附源代碼)_第2頁(yè)
停車(chē)場(chǎng)模擬管理程序的設(shè)計(jì)報(bào)告(附源代碼)_第3頁(yè)
停車(chē)場(chǎng)模擬管理程序的設(shè)計(jì)報(bào)告(附源代碼)_第4頁(yè)
停車(chē)場(chǎng)模擬管理程序的設(shè)計(jì)報(bào)告(附源代碼)_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 停車(chē)場(chǎng)模擬管理程序的設(shè)計(jì)與實(shí)現(xiàn)一、簡(jiǎn)介1設(shè)計(jì)目的:理解線性表的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu),進(jìn)一步提高使用理論知識(shí)指導(dǎo)解決實(shí)際問(wèn)題的能力。2問(wèn)題的描述:設(shè)停車(chē)場(chǎng)只有一個(gè)可停放幾輛汽車(chē)的狹長(zhǎng)通道,只有一個(gè)大門(mén)可供汽車(chē)進(jìn)出。汽車(chē)在停車(chē)場(chǎng)按車(chē)輛到達(dá)的先后順序依次排列,若車(chē)場(chǎng)已停滿(mǎn)幾輛汽車(chē),則后來(lái)的汽車(chē)只能在門(mén)外的便道上等候,一旦停車(chē)場(chǎng)有車(chē)輛開(kāi)走,則排在便道上的第一輛汽車(chē)即可進(jìn)入;當(dāng)停車(chē)場(chǎng)某輛汽車(chē)要開(kāi)走時(shí),由于停車(chē)場(chǎng)是狹長(zhǎng)的通道,在它之后開(kāi)入的車(chē)輛必須先推出車(chē)場(chǎng)為他讓路,待車(chē)輛開(kāi)出大門(mén),為他讓路的車(chē)輛再按原次序進(jìn)入車(chē)場(chǎng)。試設(shè)計(jì)這樣一個(gè)停車(chē)場(chǎng)模擬管理程序。二、數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì):(1)為了便于區(qū)分每輛汽車(chē)并了解每輛

2、車(chē)當(dāng)前所處的位置,需要記錄汽車(chē)的牌照和汽車(chē)當(dāng)前的狀態(tài)。(2)為了便于停車(chē)場(chǎng)的管理,要為每個(gè)車(chē)位分配一個(gè)固定的編號(hào)。(3)當(dāng)停車(chē)場(chǎng)的停車(chē)位上都已停滿(mǎn)了汽車(chē),又有新的汽車(chē)到來(lái)時(shí)要把它調(diào)度到便道上,便道上的車(chē)輛要按照進(jìn)入便道的先后順序順次序放在便道上,為便道上的每個(gè)位置分配一個(gè)固定的編號(hào)。當(dāng)有車(chē)從停車(chē)位上離開(kāi)后,便道上的第一輛汽車(chē)就立即進(jìn)入停車(chē)位上的某個(gè)車(chē)位。(4)當(dāng)某輛車(chē)離開(kāi)停車(chē)場(chǎng)的時(shí)候,比他后進(jìn)停車(chē)位的車(chē)要為他讓路,而且當(dāng)他開(kāi)走之后讓路的車(chē)還要按照原來(lái)的停放次序再次進(jìn)入停車(chē)位的某個(gè)車(chē)位上,為完成這項(xiàng)功能,定義一個(gè)結(jié)構(gòu)體。三、功能(函數(shù))設(shè)計(jì):本程序從總體上分為四個(gè)功能模塊,分別為:(1)程序功能

3、介紹和操作提示模塊(2)汽車(chē)進(jìn)入停車(chē)位的管理模塊(3)汽車(chē)離開(kāi)停車(chē)位的管理模塊(4)查看停車(chē)場(chǎng)狀態(tài)的查詢(xún)模塊四、界面設(shè)計(jì): 本程序界面本著易于操作簡(jiǎn)單整潔而不失美觀的理念,采用數(shù)字對(duì)應(yīng)功能選項(xiàng),結(jié)合詳細(xì)的操作提示,使得操作方便快捷,界面清晰明朗。五、程序設(shè)計(jì):1車(chē)輛進(jìn)入停車(chē)場(chǎng)模塊:·Arrive函數(shù):有車(chē)進(jìn)入停車(chē)廠;·Enter->top<MAX:對(duì)棧進(jìn)行判滿(mǎn),Y表示棧滿(mǎn),進(jìn)入便道;N表示棧不滿(mǎn),進(jìn)入車(chē)站;2車(chē)輛離開(kāi)停車(chē)場(chǎng)模塊:·Leave函數(shù):有車(chē)的話就要離開(kāi)車(chē)位。·scanf("%d",&room):輸入需要離

4、開(kāi)的車(chē)所在的位置,如果Enter->top>room,車(chē)輛出站。·W->head!=W->rear)&&Enter->top<MAX:便道上有車(chē)且車(chē)位沒(méi)有滿(mǎn),便道上的車(chē)進(jìn)入車(chē)站。3停車(chē)場(chǎng)信息顯示模塊:·List函數(shù):查詢(xún)車(chē)輛信息。·flag:如果flag=1,則執(zhí)行List1函數(shù);如果flag=2,則執(zhí)行List2函數(shù);如果flag=3,則返回,退出函數(shù)。·List1函數(shù):查詢(xún)車(chē)站信息。·s->top>0:判斷車(chē)站有沒(méi)有車(chē),如果Y,用for循環(huán)打印出站的車(chē)位和車(chē)牌號(hào)的信息;如果N,

5、則輸入車(chē)場(chǎng)沒(méi)有車(chē),返回List函數(shù)。·List2函數(shù):查詢(xún)便道信息。·w->head!=w->rear:判斷便道有沒(méi)有車(chē),如果Y,用while循環(huán)打印出便道上車(chē)的信息;如果N,則輸出便道沒(méi)有車(chē),返回List函數(shù)。六、運(yùn)行與測(cè)試:1、測(cè)試的數(shù)據(jù)與其結(jié)果:(1)前五輛車(chē)到達(dá)進(jìn)入停車(chē)位:(2)后來(lái)的兩輛車(chē)在便道等候:(3)牌照為CF003的車(chē)離開(kāi),CF004,CF005需要讓道,CF006進(jìn)入5號(hào)車(chē)位:(4)查詢(xún)車(chē)場(chǎng)和便道里的信息(5)退出程序:2、運(yùn)行與測(cè)試期間遇到的問(wèn)題與其解決辦法。問(wèn)題1:在車(chē)輛離開(kāi)時(shí)不能顯示車(chē)輛讓道的信息; 解決辦法:在離開(kāi)函數(shù)中一個(gè)while

6、循環(huán)中增加一個(gè)printf語(yǔ)句,通過(guò)循環(huán)可以顯示全部需要讓道的車(chē)輛。問(wèn)題2:在進(jìn)行進(jìn)場(chǎng)出場(chǎng)信息的輸入時(shí),只能進(jìn)行一次; 解決辦法:設(shè)置一個(gè)標(biāo)志量flag和while循環(huán),在每一次操作后返回到操作步驟。問(wèn)題3:運(yùn)行顯示程序簡(jiǎn)介后,繼續(xù)輸入時(shí)沒(méi)有清屏操作,導(dǎo)致運(yùn)行結(jié)果不方便觀察: 解決辦法:增加getch(); system("cls");語(yǔ)句,實(shí)現(xiàn)按任意鍵繼續(xù),并清屏。七、結(jié)論:本停車(chē)場(chǎng)管理系統(tǒng),可以進(jìn)行車(chē)輛進(jìn)入停車(chē)場(chǎng)和退出停車(chē)場(chǎng)以與停車(chē)廠部車(chē)位和便道上的停車(chē)信息的顯示三個(gè)步驟的操作。在車(chē)輛進(jìn)入停車(chē)場(chǎng)進(jìn)入模塊中,如果進(jìn)入停車(chē)場(chǎng)的車(chē)輛大于5,即車(chē)位里停放的車(chē)輛已滿(mǎn),后面的車(chē)自動(dòng)

7、進(jìn)入便道等候;在車(chē)輛離開(kāi)停車(chē)場(chǎng)模塊中,在查找車(chē)輛過(guò)程中如果沒(méi)有對(duì)應(yīng)車(chē)輛能夠顯示出“對(duì)不起,輸入有誤,請(qǐng)重新輸入!”,并有輔助棧保證從車(chē)位上出來(lái)的車(chē)不會(huì)改變順序;車(chē)位出現(xiàn)空位時(shí),便道上的車(chē)能自動(dòng)進(jìn)入車(chē)位,同時(shí),便道上的車(chē)也可以直接離開(kāi)停車(chē)場(chǎng);信息查詢(xún)模塊,能夠顯示停車(chē)場(chǎng)車(chē)位和便道上等待車(chē)的信息。并有錯(cuò)誤操作的信息提示。同樣此程序存在一些不足之處。在顯示模塊,沒(méi)有顯示出開(kāi)出停車(chē)場(chǎng)車(chē)輛的信息,在進(jìn)一步修改補(bǔ)充時(shí),可以添加車(chē)輛開(kāi)出停車(chē)場(chǎng)的顯示模塊;車(chē)輛的信息過(guò)于簡(jiǎn)單,只有一個(gè)車(chē)牌,可以添加更加詳細(xì)的車(chē)輛信息以與添加收費(fèi)操作等功能。八、設(shè)計(jì)后的思考:此次課程設(shè)計(jì),付出了很多的時(shí)間和經(jīng)歷,編程過(guò)程中,我看

8、到了自己許多不足,例如程序編寫(xiě)的有點(diǎn)雜亂,造成編譯時(shí)錯(cuò)誤不好找到,沒(méi)有足夠的耐心,有點(diǎn)急功近利,修改編譯錯(cuò)誤時(shí)不能做到系統(tǒng)的分析,造成程序越改越亂,影響了情緒,丟掉了信心。同時(shí),我也深切感受到了程序員的艱辛,明白了作為一個(gè)程序員應(yīng)該盡可能的為用戶(hù)考慮,縝密的思維,讓程序不斷地人性化,可操作性強(qiáng),界面盡可能的友好,把完美作為自己的目標(biāo)。對(duì)于程序本身,我看到了良好的程序編寫(xiě)風(fēng)格對(duì)于程序員的重要性,函數(shù)之間調(diào)用的便利與簡(jiǎn)潔,以與循環(huán)套用的魅力之所在。總之,不管簡(jiǎn)單還是復(fù)雜的程序設(shè)計(jì),都要求扎實(shí)的基礎(chǔ)知識(shí),因?yàn)楦鞣N程序都是由簡(jiǎn)單的一塊塊的函數(shù)結(jié)構(gòu)組成的,并加強(qiáng)實(shí)踐,從程序的編寫(xiě)中進(jìn)一步加強(qiáng)對(duì)書(shū)本知識(shí)的

9、掌握。而且,需要耐心,做程序的編寫(xiě)時(shí)比較枯燥的,會(huì)出現(xiàn)許多錯(cuò)誤,需要我們細(xì)心并耐心的進(jìn)行修改?;仡櫨幊痰倪^(guò)程,我也學(xué)到了許多程序之外的東西,編程的過(guò)程對(duì)一個(gè)人的耐心和毅力是一種極考驗(yàn),不停地編譯,不停地改錯(cuò),不停地被打擊,信心被一點(diǎn)點(diǎn)的消磨,如果放棄,將前功盡棄。所以我選擇了停一停稍作休息然后堅(jiān)持下去,終于在完成的那一瞬間,心充滿(mǎn)了自豪和成就感。這次任務(wù)完成的過(guò)程給我上了生動(dòng)而難忘的一課,面對(duì)一次次的挫折與打擊,我會(huì)選擇咬牙堅(jiān)持;為了遠(yuǎn)方的目標(biāo),我會(huì)不懈的努力,一點(diǎn)點(diǎn)的去接近。參考文獻(xiàn):1譚浩強(qiáng),C語(yǔ)言設(shè)計(jì)(第三版). : 清華大學(xué), 20052嚴(yán)蔚敏 吳偉民,數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版).:清華大學(xué)

10、,2007附:源代碼 #include<stdio.h> #include <conio.h> #include<stdlib.h> #include<string.h> #define MAX 5/*車(chē)庫(kù)容量*/ typedef struct node char num10; CarNode;/*車(chē)輛信息結(jié)點(diǎn)*/ typedef struct NODE CarNode *stackMAX+1; int top; SeqStackCar; /*模擬車(chē)站*/ typedef struct car CarNode *data; struct car

11、*next; QueueNode; typedef struct Node QueueNode *head; QueueNode *rear; LinkQueueCar; /*模擬通道*/ void InitStack(SeqStackCar *); /*初始化棧*/ int InitQueue(LinkQueueCar *); /*初始化便道*/ int Arrival(SeqStackCar *,LinkQueueCar *); /*車(chē)輛到達(dá)*/ void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*車(chē)輛離開(kāi)*/ void Li

12、st(SeqStackCar,LinkQueueCar); /*顯示存車(chē)信息*/ int j=0; void main() SeqStackCar Enter,Temp; LinkQueueCar Wait; int ch;int j=0; InitStack(&Enter); /*初始化車(chē)站*/ InitStack(&Temp); /*初始化讓路的臨時(shí)棧*/ InitQueue(&Wait); /*初始化通道*/ printf("|*|n"); printf("|*|n"); printf("|* *|n")

13、; printf("|*歡迎進(jìn)入停車(chē)場(chǎng)管理系統(tǒng)*|n"); printf("|* *|n"); printf("|*|n"); printf("|*|n"); printf("|注:本程序操作容易,請(qǐng)注意跟隨操作提示|n"); printf("n"); printf("請(qǐng)按任意鍵繼續(xù)."); getch(); system("cls"); while(1) printf("請(qǐng)輸入對(duì)應(yīng)的數(shù)字選擇您需要的功能:n");

14、printf("n*n"); printf("*1.車(chē)輛到達(dá)*n"); printf("*2.車(chē)輛離開(kāi)*n"); printf("*3.查詢(xún)信息*n"); printf("*4.退出系統(tǒng)*n"); printf("*n"); while(1) scanf("%d",&ch); if(ch=4) printf("您的使用,再見(jiàn)!n"); else if(ch>=1&&ch<=4)break; else

15、printf("n對(duì)不起,您的輸入有誤!n");break; switch(ch) case 1:Arrival(&Enter,&Wait);break; /*車(chē)輛到達(dá)*/ case 2:Leave(&Enter,&Temp,&Wait);break; /*車(chē)輛離開(kāi)*/ case 3:List(Enter,Wait);break; /*列表打印信息*/ case 4:exit(0); /*退出主程序*/ default: break; void InitStack(SeqStackCar *s) /*初始化棧*/ int i; s-&

16、gt;top=0; for(i=0;i<=MAX;i+) s->stacks->top=NULL; int InitQueue(LinkQueueCar *Q) /*初始化便道*/ Q->head=(QueueNode *)malloc(sizeof(QueueNode); if(Q->head!=NULL) Q->head->next=NULL; Q->rear=Q->head; return(1); else return(-1); void PRINT(CarNode *p) /*打印出站車(chē)的信息*/ printf("n離開(kāi)

17、車(chē)輛的車(chē)牌號(hào)為:"); puts(p->num); int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*車(chē)輛到達(dá)*/ CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); flushall(); printf("n請(qǐng)輸入車(chē)牌號(hào)(例:DS888):n"); gets(p->num); if(Enter->top<MAX) /*車(chē)場(chǎng)未滿(mǎn),車(chē)進(jìn)車(chē)場(chǎng)*/ Enter->top+; printf("n車(chē)輛停入車(chē)場(chǎng)第%

18、d位置.nn",Enter->top); Enter->stackEnter->top=p; return(1); else /*車(chē)場(chǎng)已滿(mǎn),車(chē)進(jìn)便道*/ printf("n對(duì)不起,車(chē)場(chǎng)已滿(mǎn),該車(chē)須在便道等待!n"); t=(QueueNode *)malloc(sizeof(QueueNode); j+; t->data=p; t->next=NULL; W->rear->next=t; W->rear=t; printf("車(chē)進(jìn)入%d號(hào)便道nn",j); return(1); void Leav

19、e(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)/*車(chē)輛離開(kāi)*/ int i, room; CarNode *p,*t; QueueNode *q; /*判斷車(chē)場(chǎng)是否有車(chē)*/ if(Enter->top>0) /*有車(chē)*/ while(1) /*輸入離開(kāi)車(chē)輛的信息*/ printf("n請(qǐng)輸入車(chē)在車(chē)場(chǎng)的位置/1-%d/:",Enter->top); scanf("%d",&room); if(room>=1&&room<=Enter->

20、;top) break; while(Enter->top>room) /*車(chē)輛離開(kāi)*/ printf("n牌號(hào)為%s的車(chē)需要讓道n",Enter->stackEnter->top); Temp->top+; Temp->stackTemp->top=Enter->stackEnter->top; Enter->stackEnter->top=NULL; Enter->top-; p=Enter->stackEnter->top; Enter->stackEnter->top=N

21、ULL; Enter->top-; while(Temp->top>=1) Enter->top+; Enter->stackEnter->top=Temp->stackTemp->top; Temp->stackTemp->top=NULL; Temp->top-; PRINT(p); /*判斷通道上是否有車(chē)與車(chē)站是否已滿(mǎn)*/ if(W->head!=W->rear)&&Enter->top<MAX) /*便道的車(chē)輛進(jìn)入車(chē)場(chǎng)*/ q=W->head->next; t=q-&g

22、t;data; Enter->top+; printf("n便道的%s號(hào)車(chē)進(jìn)入車(chē)場(chǎng)第%d位置.n",t->num,Enter->top); W->head->next=q->next; if(q=W->rear) W->rear=W->head; Enter->stackEnter->top=t; free(q); else printf("n對(duì)不起,便道里沒(méi)有車(chē).n"); else printf("n對(duì)不起,車(chē)場(chǎng)里沒(méi)有車(chē)."); /*沒(méi)車(chē)*/ void List1(SeqStackCar *S) /*列表顯示車(chē)場(chǎng)信息*/ int i; if(S->top>0) /*判斷車(chē)站是否有車(chē)*/ printf("n車(chē)場(chǎng):"); printf("n 位置 車(chē)牌號(hào)n"); for(i=1;i<=S->t

溫馨提示

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

評(píng)論

0/150

提交評(píng)論