版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 課程設(shè)計(jì)課 程: 題 目: 停車場管理系統(tǒng) 專 業(yè): 班 級: 姓 名: 2010 年 9 月 6 日 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)停車場管理系統(tǒng)課程設(shè)計(jì)目的通過課程設(shè)計(jì),加深對數(shù)據(jù)結(jié)構(gòu)這一課程所學(xué)內(nèi)容的進(jìn)一步理解與鞏固。通過課程設(shè)計(jì),加深對結(jié)構(gòu)化設(shè)計(jì)思想的理解,能對系統(tǒng)功能進(jìn)行分析,并設(shè)計(jì)合理的模塊化結(jié)構(gòu)。通過課程設(shè)計(jì),提高程序開發(fā)功能,能運(yùn)用合理的控制流程編寫清晰高效的程序。通過課程設(shè)計(jì),訓(xùn)練C程序調(diào)試能力,能將一個(gè)中小型各級組織系統(tǒng)聯(lián)調(diào)通過。通過課程設(shè)計(jì),開發(fā)一個(gè)中小型系統(tǒng),掌握系統(tǒng)研發(fā)全過程。通話課程設(shè)計(jì),培養(yǎng)分析問題、解決實(shí)際問題的能力。二、課程設(shè)計(jì)內(nèi)容問題描述:設(shè)有一個(gè)可以停放n輛汽車的狹長
2、停車場,它只有一個(gè)大門可以供車輛進(jìn)出。車輛按到達(dá)停車場時(shí)間的早晚依次從停車場最里面向大門口處停放(最先到達(dá)的第一輛車放在停車場的最里面)。如果停車場已放滿n輛車,則后來的車輛只能在停車場大門外的便道上等待,一旦停車場內(nèi)有車開走,則排以便道上的第一輛車就進(jìn)入停車場。停車場內(nèi)如有某輛車要開走,在它之后進(jìn)入停車場的車都必須先退出停車場為它讓路,待其開出停車場后,這些輛再依原來的次序進(jìn)場。每輛車在離開停車場時(shí),都應(yīng)根據(jù)它在停車場內(nèi)停留的時(shí)間長短交費(fèi)。如果停留在便道上的車未進(jìn)停車場時(shí),允許其離去,不收停車費(fèi),并且仍然保持在便道上等待的車輛的次序。編制一程序模擬該停車場的管理?;疽螅阂蟪绦蜉敵雒枯v車
3、到達(dá)后的停車位置(停車場或便道上),以及某輛車離開停車場應(yīng)交納的費(fèi)用和它在停車場內(nèi)停留的時(shí)間。實(shí)現(xiàn)提示:汽車的模擬輸入信息格式可以是:(到達(dá)/離去,汽車牌照號碼,到達(dá)/離去的時(shí)刻)。例如,(A,1,5)表示1號牌照車在5這個(gè)時(shí)刻到達(dá),而(D,5,20)表示5號牌照車在20這個(gè)時(shí)刻離去。整個(gè)程序可以在輸入信息為(E,0,0)時(shí)結(jié)束。本題可用棧和隊(duì)列來實(shí)現(xiàn)。三、概要設(shè)計(jì)1、設(shè)計(jì)思想此停車場管理系統(tǒng)是在一個(gè)狹長的通道上的,而且只有一個(gè)大門可以供車輛進(jìn)出,并且要實(shí)現(xiàn)停車場內(nèi)某輛車要離開時(shí),在它之后進(jìn)入停車場的車都必須先退出停車場為它讓路,待其開出停車場后,這些輛再依原來的次序進(jìn)場的功能,就可以設(shè)計(jì)兩個(gè)
4、堆棧,其中一個(gè)堆棧用來模擬停車場,另一個(gè)堆棧用來模擬臨時(shí)停車場,該臨時(shí)停車場用來存放當(dāng)有車輛離開時(shí),原來停車場內(nèi)為其讓路的車輛。至于當(dāng)停車場已滿時(shí),需要停放車輛的通道可以用一個(gè)鏈隊(duì)列來實(shí)現(xiàn)。當(dāng)停車場內(nèi)開走一輛車時(shí),通道上便有一輛車進(jìn)入停車場,此時(shí)只需要改變通道上車輛結(jié)點(diǎn)的連接方式就可以了,使通道上第一輛車進(jìn)入停車場這個(gè)堆棧,并且使通道上原來的第二輛車成為通道上的第一輛車,此時(shí)只需將模擬通道的鏈隊(duì)列的頭結(jié)點(diǎn)連到原來的第二輛車上就可以了。2、實(shí)現(xiàn)方法對于此停車場管理系統(tǒng)的實(shí)現(xiàn),就是用兩個(gè)堆棧來分別模擬停車場以及停車場內(nèi)車輛為其它車輛讓路時(shí)退出停車的臨時(shí)停放地點(diǎn)。至于通道上車輛的停放則用一個(gè)鏈隊(duì)列來
5、實(shí)現(xiàn),此時(shí),通道上車輛的離開或者進(jìn)入停車場只需改變此鏈隊(duì)列上的結(jié)點(diǎn)而已。對于要對停車場內(nèi)的車輛根據(jù)其停放時(shí)間收取相應(yīng)的停車費(fèi)用,可以記錄下車輛進(jìn)入以及離開停車場的時(shí)間,再用時(shí)間差乘以相應(yīng)的單價(jià)并且打印出最后的費(fèi)用就可以實(shí)現(xiàn)了。3、主要模塊此停車場管理系統(tǒng),主要分為以下若干模塊:首先定義用來模擬停車場的堆棧以及用來模擬通道的鏈隊(duì)列為全局變量,然后編寫主函數(shù),在此主函數(shù)中實(shí)現(xiàn)對其它各個(gè)模塊的調(diào)用。在主函數(shù)中首先調(diào)用option()函數(shù),出現(xiàn)歡迎用戶使用的主界面,然后提示用戶進(jìn)入此停車場管理系統(tǒng)后,再出現(xiàn)一個(gè)供用戶選擇的界面,在用戶的選擇過程中,程序又分別調(diào)用車輛的到達(dá)、車輛的離開、停車場內(nèi)停放車輛
6、的信息以及退出程序這四個(gè)函數(shù)模塊。其中,在車輛的離開那個(gè)模塊函數(shù)中又調(diào)用了打印離開車輛信息的函數(shù),在停車場內(nèi)停放車輛信息的那個(gè)模塊函數(shù)中,又分別調(diào)用了顯示停車場上車輛信息的函數(shù)以及顯示便道上車輛信息的函數(shù)。最后,從調(diào)鼐的這四個(gè)函數(shù)中回到主函數(shù)結(jié)束整個(gè)程序的運(yùn)行。在以上各個(gè)模塊中,出現(xiàn)的調(diào)用的函數(shù)為:void InitStack(SeqStackCar *s);int InitQueue(LinkQueueCar *Q);option();int Arrival(SeqStackCar *Enter,LinkQueueCar *W);void Leave(SeqStackCar *Enter,S
7、eqStackCar *Temp,LinkQueueCar *W);void PRINT(CarNode *p);void List(SeqStackCar S,LinkQueueCar W);void List1(SeqStackCar *S);void List2(LinkQueueCar *W);4、模塊間關(guān)系開始初始化兩個(gè)棧Enter和Temp及一個(gè)隊(duì)列Wait。進(jìn)入主菜單車到達(dá)車離開退出Room前車輛進(jìn)臨時(shí)棧對room計(jì)費(fèi)便道車信息車場內(nèi)信息判便道是否有車車場是否為空列表顯示棧Enter元素出棧隊(duì)列中元素進(jìn)棧隊(duì)列Wait中元素出隊(duì)元素進(jìn)棧Enter便道車進(jìn)車場元素進(jìn)隊(duì)列Wait判斷棧
8、是否為滿結(jié)束退出列表顯示是否否是否是四、調(diào)試分析(1) 調(diào)試過程中的主要問題由于此停車場管理系統(tǒng)是分模塊設(shè)計(jì)的,而且在程序的實(shí)現(xiàn)過程中又使用了清屏函數(shù),所以,運(yùn)行時(shí)用戶選擇任務(wù)并且執(zhí)行完任務(wù)后,又會(huì)回到供用戶選擇功能的主界面,因此整個(gè)程序從整體上來講結(jié)構(gòu)清晰,使用方便。本程序的調(diào)試運(yùn)行,總體上情況良好,但中間也出現(xiàn)了一些小問題。其中比較有代表性的主要問題有:當(dāng)停車場已經(jīng)達(dá)到最大容量,但仍有車輛進(jìn)入停車場的時(shí)候,運(yùn)行界面上沒有出現(xiàn)或者說出現(xiàn)了但又跳掉了“停車場已滿,該車輛需在便道上等待!”的提示信息。我們小組成員經(jīng)過反復(fù)商量討論,并且在查閱了多種資料后,在那一個(gè)printf語句后加了一個(gè)getc
9、h(),此時(shí),程序運(yùn)行結(jié)果就符合要求了。本程序中我使用的是VC6+進(jìn)行的編譯和運(yùn)行!(2) 測試結(jié)果的分析與討論歡迎界面車輛到達(dá)車輛離開車輛信息(車場)車輛信息(便道)五、用戶手冊這個(gè)程序用來實(shí)現(xiàn)對停車場內(nèi)車輛的管理,整個(gè)操作界面為中文,更加符合人性化的標(biāo)準(zhǔn),使得用戶使用方便,而且每一個(gè)操作都有提示,使得初次接觸該程序的用戶也能很快適應(yīng)程序的操作。這個(gè)程序操作簡單,對于車牌號,只需輸入車牌號上的數(shù)字就行,而且對于進(jìn)出停車場的時(shí)間,也簡化了操作,只需輸入當(dāng)時(shí)的時(shí)刻就行,沒有具體到小時(shí)和分鐘,但也許這也是該程序不足之處所在。而且該程序也給用戶提供了選擇的機(jī)會(huì),當(dāng)點(diǎn)擊運(yùn)行該程序后,如果想退出程序,可
10、以輸入n或N退出該運(yùn)行程序。至于使用過程中的更具體的問題,可以參照該報(bào)告書中調(diào)試分析那一項(xiàng)的屏幕截圖,整個(gè)程序的運(yùn)行界面大致就如上述屏幕截圖的內(nèi)容。六、附錄1、源程序代碼#include #include#include#define MAX 2 /*車庫容量*/ #define price 3 /*每車每時(shí)刻費(fèi)用*/typedef struct node int num; int reachtime; int leavetime; CarNode; /*車輛信息結(jié)點(diǎn)*/ typedef struct NODE CarNode *stackMAX+1; int top; SeqStackCar
11、; /*模擬車站*/typedef struct car CarNode *data; struct car *next; QueueNode; typedef struct Node QueueNode *head; QueueNode *rear; LinkQueueCar; /*模擬通道*/*-*/ /*函數(shù)聲明部分*/ void InitStack(SeqStackCar *); /*初始化棧*/ int InitQueue(LinkQueueCar *); /*初始化便道*/ int Arrival(SeqStackCar *,LinkQueueCar *); /*車輛到達(dá)*/ vo
12、id Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*車輛離開*/ void List(SeqStackCar,LinkQueueCar); /*顯示存車信息*/ void PRINT(CarNode *p) ;/*-*/ void option() int i; char choice; gotoxy(0,0); for(i=1;i=1&chtop=0; for(i=0;istacks-top=NULL; int InitQueue(LinkQueueCar *Q) /*初始化便道*/ Q-head=(QueueNode *)mall
13、oc(sizeof(QueueNode); if(Q-head!=NULL) Q-head-next=NULL; Q-rear=Q-head; return(1); else return(-1); void PRINT(CarNode *p) /*打印出站車的信息*/ int A1,A2; printf(nttt請輸入離開時(shí)間: ); scanf(%d,&(p-leavetime); printf(nttt離開車輛的車牌號: %d,p-num); printf(nnttt離開車輛到達(dá)時(shí)間: %d ,p-reachtime); printf(nnttt離開車輛離開時(shí)間: %d,p-leavet
14、ime); A1=p-reachtime; A2=p-leavetime; printf(nnttt停車場管理費(fèi)用: %d,(A2-A1)*price); free(p); int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*車輛到達(dá)*/ CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); flushall(); printf(ttt請輸入到達(dá)車輛車牌號: ); scanf(%d,&(p-num); if(Enter-toptop+; printf(nttt該車輛在停車場的
15、位置是: %dn,Enter-top); printf(nttt請輸入該車輛到達(dá)的時(shí)間: ); scanf(%d,&(p-reachtime); Enter-stackEnter-top=p; return(1); else /*車場已滿,車進(jìn)便道*/ printf(nttt停車場已滿 該車輛需在便道上等待!); getch(); t=(QueueNode *)malloc(sizeof(QueueNode); t-data=p; t-next=NULL; W-rear-next=t; W-rear=t; return(1); void Leave(SeqStackCar *Enter,Seq
16、StackCar *Temp,LinkQueueCar *W) /*車輛離開*/ int i, room; CarNode *p,*t; QueueNode *q; /*判斷車場內(nèi)是否有車*/ if(Enter-top0) /*有車*/ while(1) /*輸入離開車輛的信息*/ printf(ttt停車場里停放的車輛總數(shù): %d,Enter-top); printf(nnttt請輸入要離開車輛的位置: ); scanf(%d,&room); if(room=1&roomtop) break; while(Enter-toproom) /*車輛離開*/ Temp-top+; Temp-sta
17、ckTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; p=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; while(Temp-top=1) Enter-top+; Enter-stackEnter-top=Temp-stackTemp-top; Temp-stackTemp-top=NULL; Temp-top-; PRINT(p);/*判斷通道上是否有車及車站是否已滿*/ if(W-head!=W-rear)&Enter-top
18、head-next; t=q-data; Enter-top+; printf(nnttt便道的%d號車進(jìn)入車場第%d位置.,t-num,Enter-top); printf(nnttt請輸入現(xiàn)在的時(shí)間:); scanf(%d,&(t-reachtime); W-head-next=q-next; if(q=W-rear) W-rear=W-head; Enter-stackEnter-top=t; free(q); else printf(nnttt便道里沒有車.n); else printf(nnttt車場里沒有車.); /*沒車*/ void List1(SeqStackCar *S)
19、/*列表顯示車場信息*/ int i; if(S-top0) /*判斷車站內(nèi)是否有車*/ printf(nttt車場:); printf(nnttt位置 到達(dá)時(shí)間 車牌號n); for(i=1;itop;i+) printf(%26d,i); printf(%6d,S-stacki-reachtime); printf(%10d,S-stacki-num); printf(n); else printf(nttt車場里沒有車); void List2(LinkQueueCar *W) /*列表顯示便道信息*/ QueueNode *p; p=W-head-next; if(W-head!=W-
20、rear) /*判斷通道上是否有車*/ printf(nttt等待車輛的號碼為: ); while(p!=NULL) printf(%-10d,p-data-num); p=p-next; printf(n); else printf(nttt便道里沒有車.); void List(SeqStackCar S,LinkQueueCar W) int flag,tag; flag=1; while(flag) printf(nttt請選擇 1|2|3:); printf(nnttt1.車場nnttt2.便道nnttt3.返回nnttt); while(1) scanf(%d,&tag); if(
21、tag=1|tag=3) break; else printf(nttt請選擇 1|2|3:); switch(tag) case 1:List1(&S);break; /*列表顯示車場信息*/ case 2:List2(&W);break; /*列表顯示便道信息*/ case 3:flag=0;break; default: break; 2、設(shè)計(jì)體會(huì)通過這一周的課程設(shè)計(jì),加深了我對數(shù)據(jù)結(jié)構(gòu)這門課程所學(xué)內(nèi)容的進(jìn)一步的理解與掌握;同時(shí),通過對停車場管理系統(tǒng)的開發(fā),使得我將計(jì)算機(jī)課程所學(xué)知識與實(shí)際問題很好地相聯(lián)接在了一起。在這次課程設(shè)計(jì)中,不僅培養(yǎng)了我開發(fā)一個(gè)中小型程序的能力,而且也培養(yǎng)了我的團(tuán)
22、隊(duì)合作能力。在這次對停車場管理系統(tǒng)的開發(fā)過程中,我們小組成員互相合作,互相幫助,其中有程序功能成功實(shí)現(xiàn)時(shí)的欣喜,也有遇到問題、解決問題時(shí)的執(zhí)著以及迷茫。在這次課程設(shè)計(jì)中,使得我很好地了解了在開發(fā)程序過程中合作的重要性。在這周課程設(shè)計(jì)中,我們小組所開發(fā)的停車場管理系統(tǒng),基本上可以完成每一項(xiàng)功能。汽車進(jìn)入停車場的信息、離開停車場的信息以及通道上的信息都可以在程序上一一實(shí)現(xiàn)。但是,該程序也有不足的地方。主要表現(xiàn)在車輛的車牌號上,現(xiàn)實(shí)中的車牌號是一串字符,可是,在這個(gè)程序中,為了簡便起見,我們就車牌號定義為了整型,這個(gè)與現(xiàn)實(shí)是有些不符的。還有一個(gè)可以改進(jìn)的地方就是記錄車輛進(jìn)入停車場以及離開停車場的時(shí)間
23、,應(yīng)該精確到小時(shí)以及分鐘的,可是在程序中,為了簡便起見,我們只是設(shè)置成了一個(gè)時(shí)刻,所以,在這方面還是有待改進(jìn)的。改進(jìn)的程序中,還應(yīng)該增加時(shí)間的判斷功能,即停車場內(nèi)有可能有車輛停放的時(shí)間超過一天。還有一個(gè)很重要的問題,對于停車場內(nèi)可以停放的最多車輛數(shù),為了測試數(shù)據(jù)的方便,我在程序中,定為了2,在實(shí)際使用中,可以改變程度開頭的宏定義以增加停車場的容量??傊?,在這周的課程設(shè)計(jì)中,我以及我們這組的收獲還是挺大的,不僅對于專業(yè)課有了更好的認(rèn)識,而且在合作的過程中更加了解了團(tuán)隊(duì)精神的重要性。主要參考資料譚浩強(qiáng). C語言程序設(shè)計(jì)(第三版). 北京:清華大學(xué)出版社,2005廖雷、羅代忠. C語言程序設(shè)計(jì)基礎(chǔ)實(shí)
24、驗(yàn)教程. 北京:高等教育出版社,2005譚浩強(qiáng). C程序設(shè)計(jì)解題與上機(jī)指導(dǎo)(第三版) . 北京:清華大學(xué)出版社,2005廖雷等. C語言程序設(shè)計(jì)基礎(chǔ). 北京:高等教育出版社,2004譚浩強(qiáng),張基溫,唐永炎. C語言程序設(shè)計(jì)教程. 北京: 高等教育出版社,2003可供選擇源程序代碼:一:/*停車場管理器*/#include #include #include#include /*/#define MAXSTACKSIZE 2 /*車庫容量*/#define price 0.1 /*每車每分鐘費(fèi)用*/typedef struct time int hour;int min;Time; /*時(shí)間結(jié)點(diǎn)
25、*/ typedef struct char num10;Time reach; Time leave; CarNode; /*車輛信息結(jié)點(diǎn)*/typedef struct CarNode *base;CarNode *top;int stacksize;SqStackCar; /*模擬車站*/typedef struct car CarNode *data;struct car *next; QueueNode;typedef struct QueueNode *front;QueueNode *rear; LinkQueueCar; /*模擬通道*/ int QueueEmpty(Link
26、QueueCar Q) /*便道判空函數(shù)*/ if(Q.front=Q.rear) return 1; else return 0;/*/void InitStack(SqStackCar *s) /*初始化棧*/ s-base=(CarNode *)malloc(MAXSTACKSIZE*sizeof(CarNode); if(!s-base) exit(0);/*分配失敗*/ s-top=s-base; s-stacksize=MAXSTACKSIZE;int Push(SqStackCar *s,CarNode *e) /*進(jìn)站函數(shù)*/ if(s-top-s-base=s-stacksi
27、ze) return 0; else *s-top+=*e; return 1;int Pop(SqStackCar *s,CarNode *e) /*出站函數(shù)*/ if(s-top=s-base) return 0; *e=*-s-top; return 1;int StackEmpty(SqStackCar s) /*判空函數(shù)*/ if(s.base=s.top) return 1; else return 0;int InitQueue(LinkQueueCar *Q) /*初始化便道*/ Q-front=Q-rear=(QueueNode *)malloc(sizeof(QueueNo
28、de); if(!Q-front) exit(0); Q-front-next=NULL; return 1; /*/int EnQueue(LinkQueueCar *Q,CarNode *e) /*便道插入函數(shù)*/ QueueNode *p; p=(QueueNode *)malloc(sizeof(QueueNode); if(!p) exit(0); p-data=e; p-next=NULL; Q-rear-next=p; Q-rear=p; return 1;int DeQueue(LinkQueueCar *Q,CarNode *e) /*便道刪除函數(shù)*/ QueueNode *
29、p; if(Q-front=Q-rear) return 0; p=Q-front-next; e=p-data; Q-front-next=p-next; if(Q-rear=p) Q-rear=Q-front; free(p); return 1;/*/int Arrive(SqStackCar *In,LinkQueueCar *Wait) /*車輛到達(dá)函數(shù)*/ CarNode *i; QueueNode *w; i=(CarNode *)malloc(sizeof(CarNode); flushall(); printf(Input the car number:); gets(i-n
30、um); if(In-top-In-basereach.hour,&i-reach.min); Push(In,i); printf(nCar in success!); sleep(1); return 1; else /*停車場已滿,車進(jìn)便道*/ w=(QueueNode *)malloc(sizeof(QueueNode); w-data=i; w-next=NULL; Wait-rear-next=w; Wait-rear=w; printf(The PART is full,car must wait in the road!); sleep(1); return 1; return
31、 0;/*/int Departure(SqStackCar *In,SqStackCar *temp,LinkQueueCar *Wait) /*車輛離開函數(shù)*/ int flag=0,a1,a2,b1,b2, money; CarNode *p,*t; QueueNode *q; p=(CarNode *)malloc(sizeof(CarNode); flushall(); printf(Input the out car number: ); gets(p-num); while(!StackEmpty(*In) t=(CarNode *)malloc(sizeof(CarNode);
32、 Pop(In,t); if(strcmp(p-num,t-num)=0) /*比較車場中有無這輛車,有即出站*/ printf(Input the time the car out(00:00):); scanf(%d:%d,&p-leave.hour,&p-leave.min); printf(The ); printf(%s,p-num); printf( Car out the part!); a1= p-leave.hour; a2= t-reach.hour; b1= p-leave.min; b2= t-reach.min; money = (a1-a2+24)%24*60+(b
33、1-b2+60)%60)*price; /*計(jì)算車輛需要的費(fèi)用*/ printf(nThe time the car arrive: %d:%d,t-reach.hour,t-reach.min); printf(nThe time the car leave: %d:%d,p-leave.hour,p-leave.min); printf(nNeed: %d yuan,money); flag=1; getch(); free(t); break; else Push(temp,t); /*while*/ if(!flag) printf(No this car!); getch(); wh
34、ile(!StackEmpty(*temp) Pop(temp,p); Push(In,p); free(p); if(flag&Wait-front!=Wait-rear) /*車站中有空位,便道有車,車入站*/ q=(QueueNode *)malloc(sizeof(QueueNode); q=Wait-front-next; t=q-data; if(q!=NULL) Push(In,t); printf(nThe ); printf(%s,t-num); printf( car in part!); printf(nInput the time the car arrive(00:0
35、0): ); scanf(%d:%d,&t-reach.hour,&t-leave.min); Wait-front-next=q-next; if(q=Wait-rear) Wait-rear=Wait-front; free(q); return 1;/*/void Print(SqStackCar *In,SqStackCar *Temp,LinkQueueCar *Wait) /*打印函數(shù)*/ int c=0; int count=1; CarNode *p,*t; QueueNode *q; q=(QueueNode *)malloc(sizeof(QueueNode); p=(Ca
36、rNode *)malloc(sizeof(CarNode); t=(CarNode *)malloc(sizeof(CarNode); while(1&c!=3) clrscr(); gotoxy(1,10); printf(1. Print the road!); gotoxy(1,11); printf(2. Print the part!); gotoxy(1,12); printf(3. return.); do printf(nInput your choice:); c = getche(); printf(n); while(c!=1&c!=2&c!=3);if(c=2) /*
37、打印停車場*/ printf(The car in the part!n); count=1; while(!StackEmpty(*In) Pop(In,t); Push(Temp,t); while(!StackEmpty(*Temp) Pop(Temp,t); printf(The ); printf(%d,count); printf( car number is: ); count+; puts(t-num); Push(In,t); printf(Press any key to continue.); getch();if(c=1) /*打印便道*/ printf(The car
38、 in the road!n); count=1; q=Wait-front-next; if(Wait-front!=Wait-rear) /*/ while(q!=NULL) p=q-data; printf(The ); printf(%d,count); printf( Car number is: ); puts(p-num); q=q-next; count+; else printf(nNo car in the road.); printf(Press any key to continue.); getch(); /*主程序*/int Arrive(SqStackCar *I
39、n,LinkQueueCar *Wait);int Departure(SqStackCar *In,SqStackCar *temp,LinkQueueCar *Wait);void Print(SqStackCar *In,SqStackCar *temp,LinkQueueCar *Wait);void initialization();char readcommand();void interpret(char cmd);main() char cmd; SqStackCar part,temp; LinkQueueCar road; InitStack(&part); InitSta
40、ck(&temp); InitQueue(&road); printf(Press any key to continue.); getch(); while(1) initialization(); /*初始化界面*/ cmd = readcommand(); /*讀取停車場狀況*/ clrscr(); switch(cmd) case a: Arrive(&part,&road); break; case A: Arrive(&part,&road); break; case d: Departure(&part,&temp,&road); break; case D: Departure
41、(&part,&temp,&road); break; case p: Print(&part,&temp,&road); break; case P: Print(&part,&temp,&road); break; case e: printf(Press any to continue.);getch();exit(0); break; case E: printf(Press any to continue.);getch();exit(0); break; default : printf(ERROR!); break; /*/void initialization() /*初始函數(shù)
42、*/ int i; clrscr(); gotoxy(0,0); for(i=1;i=240;i+) printf(1); gotoxy(15,8); printf(THIS IS A CAR PART MANAGE SYSYTEM!); gotoxy(15,12); printf(NAME: GAOHE.); gotoxy(15,13); printf(NUM: 200812010205.); gotoxy(15,14); printf(GRADE: 2008.); gotoxy(15,15); printf(CLASS: INTERNET02); gotoxy(1,20); printf(
43、n*); printf(1. Car Arrive-A 2. Car Departure-D 3. Print Car-P 4.Exit-E); printf(n*); printf(Input C,D,P,E choose!n);char readcommand() /*選擇函數(shù)*/ char cmd; do printf(Input your choice:); cmd = getche(); printf(n); while(cmd!=a)&(cmd!=A)&(cmd!=d)&(cmd!=D)&(cmd!=p)&(cmd!=P)&(cmd!=E)&(cmd!=e); return cmd
44、;二#include#includeusing namespace std;#define MAX_SIZE 2/停車場能夠容納的車的數(shù)量#define FARE 5/表示停車場的收費(fèi)為每小時(shí)FARE元int CountForStack=0;/ 此全局變量用來計(jì)數(shù)堆?,F(xiàn)有的車數(shù)int CountForQueue=0;/ 此全局變量用來計(jì)數(shù)隊(duì)列現(xiàn)有的車數(shù)typedef struct/這個(gè)節(jié)點(diǎn)用來保存每輛車的信息 char Condition ;/用來表示“到達(dá)”或者“離開”的狀態(tài), int ArriveTime;/用來記錄到達(dá)時(shí)間,默認(rèn)為-1,說明還沒有到達(dá)int LeaveTime;/ 用來記
45、錄離開時(shí)間,默認(rèn)為-1,說明還沒有離開int License;/ 記錄車牌號 CarNode;typedef struct /棧的定義 CarNode *base;/棧底指針,指向0CarNode *top;/棧頂指針,如果指向0,說明棧為空int stacksize;/棧的容量大小CarStack;typedef struct QNode/隊(duì)列節(jié)點(diǎn)的定義 char Condition ;/用來表示“到達(dá)”或者“離開”的狀態(tài), int ArriveTime;/用來記錄到達(dá)時(shí)間,默認(rèn)為-1,說明還沒有到達(dá)int LeaveTime;/ 用來記錄離開時(shí)間,默認(rèn)為-1,說明還沒有離開int Lice
46、nse;/ 記錄車牌號QNode *next;/指向下一個(gè)節(jié)點(diǎn)的指針QNode;typedef struct/ 隊(duì)列的定義 QNode *front;/隊(duì)頭指針QNode *rear;/隊(duì)尾指針Queue;bool InitStack(CarStack &S)/此函數(shù)用來初始化棧 S.base =(CarNode *)malloc(MAX_SIZE*sizeof(CarNode);if(!S.base ) cout內(nèi)存分配失敗!endl;return false;/說明內(nèi)存分配失敗,返回false S.top =S.base ;S.stacksize =MAX_SIZE;return true
47、;bool InitQueue(Queue &Q)/此函數(shù)用來初始化隊(duì)列 Q.front =(QNode *)malloc(sizeof(QNode);if(!Q.front ) cout內(nèi)存分配失??!next =0;/下一個(gè)節(jié)點(diǎn)指空return true;bool EnQueue(Queue &Q,QNode &qnode)/此函數(shù)用來入隊(duì)一個(gè)節(jié)點(diǎn) QNode *p=(QNode *)malloc(sizeof(QNode);if(!p) cout內(nèi)存分配失??!ArriveTime =qnode.ArriveTime ;p-Condition =qnode.Condition ;p-Leav
48、eTime =qnode.LeaveTime ;p-License =qnode.License ;p-next =0;Q.rear -next =p; Q.rear =p;return true;bool DeQueue(Queue &Q,QNode &t)/此函數(shù)用來出隊(duì) if(Q.front =Q.rear ) cout隊(duì)列為空!next ;t.ArriveTime =p-ArriveTime ;t.Condition =p-Condition ;t.LeaveTime =p-LeaveTime ;t.License =p-License ;Q.front -next =p-next ;
49、if(Q.rear =p)/如果P是指向最后一個(gè)出隊(duì)的元素Q.rear =Q.front ;free(p);return true;void InitCarNode(CarNode &C,char condition,int arrivetime,int leavetime,int license)/本函數(shù)用來初始化一個(gè)CarNode 節(jié)點(diǎn) C.ArriveTime =arrivetime;C.Condition =condition;C.LeaveTime =leavetime;C.License=license;bool Push(CarStack &S,CarNode &car)/此函數(shù)
50、用來入棧一個(gè)CarNode 節(jié)點(diǎn) if(S.top -S.base =S.stacksize ) cout此棧已滿,不能壓入新的信息endl;return false;(*S.top ).ArriveTime =car.ArriveTime ;(*S.top ).Condition =car.Condition ;(*S.top ).LeaveTime =car.LeaveTime ;(*S.top ).License =car.License ;+S.top ;/棧頂指針上移return true;bool Pop(CarStack &S,CarNode &t)/此函數(shù)用來彈出棧內(nèi)元素 if
51、(S.top =S.base ) cout???,不能執(zhí)行出棧操作!=S.stacksize )return true;else return false;bool IsStackEmputy(CarStack &S)/此函數(shù)用來判斷堆棧是否為空 if(S.top =S.base )return true;else return false;bool IsQueueEmputy(Queue &Q)/此函數(shù)用來判斷隊(duì)列是否為空 if(Q.front =Q.rear )return true;else return false;bool SearchInStack(CarStack&S,int a)
52、 bool tag=false;if(!IsStackEmputy(S) CarNode *p=S.top-1 ;while(p!=S.base ) if(*p).License =a)tag=true;-p;if(*p).License =a)tag=true;return tag;bool SearchInQueue(Queue &Q,int a)/a表示要查找的車牌號, bool tag=false;if(!IsQueueEmputy(Q)/如果隊(duì)列非空 QNode *p=Q.front-next ;while(p!=Q.rear) if(*p).License =a) tag=true
53、;/退出此while循環(huán)時(shí)p指向最后一個(gè)元素if(*p).License =a) tag=true;return tag;void InCar(CarStack &S,Queue &Q,int a1,int a2)/此函數(shù)用來表示進(jìn)入車輛, 參數(shù)a1用來表示到達(dá)時(shí)間,參數(shù)a2表示車牌號碼 if(SearchInStack(S,a2) cout車號a2已經(jīng)存在于停車場內(nèi),輸入有誤endl;return ; if(SearchInQueue(Q,a2) cout車號a2已經(jīng)存在于通道內(nèi),輸入有誤endl;return ; if(IsStackFull(S)/如果堆棧已滿,說明停車場已滿,需要停車在
54、通道 QNode qnode;qnode.ArriveTime =-1;/在通道時(shí)間不收費(fèi),所以不計(jì)時(shí)qnode.Condition =A;qnode.LeaveTime =-1;/定義為-1,說明還沒有開始離開qnode.License =a2;EnQueue(Q,qnode);/停在通道上+CountForQueue;cout車號:qnode.License 停在通道的第CountForQueue號位置endl;else CarNode carnode;carnode.ArriveTime =a1;carnode.Condition =A;carnode.LeaveTime =-1;car
55、node.License =a2;Push(S,carnode);+CountForStack;cout車號:carnode.License 到達(dá)時(shí)間 carnode.ArriveTime 停在停車場的第CountForStack號位置endl; void OutCar(CarStack &S,Queue &Q,int a1,int a2)/此函數(shù)用來出車,參數(shù)a1用來表示離開時(shí)間,參數(shù)a2表示車牌號碼 if(SearchInQueue(Q,a2) cout車號a2存在于通道內(nèi),還未進(jìn)入停車場,不能離開endl;return ; if(!SearchInStack(S,a2) cout車號a2
56、不在停車場內(nèi),輸入有誤endl;return ; CarStack tempstack;InitStack(tempstack);/建立并且初始化用于暫存出車時(shí)讓車的堆棧bool tag1=false;/標(biāo)志這個(gè)停車場出車以前是否已滿,默認(rèn)為沒有滿tag1=IsStackFull(S);bool tag2=true;/標(biāo)志通道是否有汽車在等待, 默認(rèn)為通道為空tag2=IsQueueEmputy(Q);CarNode temp;/用來保存暫時(shí)取出的汽車bool tag3=false;/用來標(biāo)志是否是離開時(shí)間小于到達(dá)時(shí)間而導(dǎo)致離開失敗,true表示離開失敗while(1)/讓車離開 Pop(S,
57、temp);if(temp.License =a2) if(a1temp.ArriveTime ) cout輸入有誤,離開時(shí)間不能小于到達(dá)時(shí)間,離開失敗endl;tag3=true;Push(tempstack,temp);elsecout車號a2現(xiàn)在離開停車場,所用的時(shí)間為a1-temp.ArriveTime 收費(fèi)為(a1-temp.ArriveTime )*FAREendl;break; elsePush(tempstack ,temp);/進(jìn)入暫存棧while(!IsStackEmputy(tempstack)/倒出的車再次進(jìn)入停車場 Pop(tempstack,temp);Push(S
58、,temp);QNode tempqnode;/用來暫時(shí)保存從通道出來的汽車if(tag1=true&tag2=false&tag3=false) DeQueue(Q,tempqnode);-CountForQueue;temp.ArriveTime =a1 ;temp.Condition =tempqnode.Condition ;temp.LeaveTime =tempqnode.LeaveTime ;temp.License =tempqnode.License ;Push(S,temp); if(tag2=true&tag3=false)/ 如果停車場沒有滿,并且離開成功-CountF
59、orStack; void showmenu(CarStack &S,Queue &Q) cout*選擇菜單*endl;cout 1: 停車endl;cout 2: 離開endl;cout 3: 退出endl;cout*請按鍵選擇*tag;while(tag!=1&tag!=2&tag!=3) cintag;int a1;unsigned int a2;switch(tag) case 1:cout請輸入到達(dá)的車號a1;cout請輸入到達(dá)時(shí)間a2;InCar(S,Q,a2,a1); break;case 2:cout請輸入離開的車號a1;cout請輸入離開的時(shí)間a2;OutCar(S,Q,a2
60、,a1); break;case 3:return ; break; char ch;cout*按E/e退出,按任意鍵返回菜單*ch;if(ch!=E&ch!=e)showmenu(S,Q); int main() CarStack carstack;InitStack(carstack);/ 建立并且初始化用于停車場的堆棧Queue carqueue;InitQueue(carqueue);/建立并且初始化用于通道的隊(duì)列showmenu(carstack,carqueue);三:#include#includeusing namespace std;#define MAX 2 /停車場車位數(shù)
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年山東政法學(xué)院公開招聘工作人員29人(長期招聘崗位)考試備考題庫及答案解析
- 2026中國國際航空股份有限公司廣東分公司休息室就業(yè)見習(xí)崗招聘2人筆試備考試題及答案解析
- 2026能建綠氫(石家莊)新能源有限公司招聘6人筆試模擬試題及答案解析
- 2026山東能源集團(tuán)營銷貿(mào)易有限公司所屬企業(yè)市場化招聘15人考試備考試題及答案解析
- 2026江蘇南京郵電大學(xué)招聘(人事代理)4人(第二批)考試備考試題及答案解析
- 2026年醫(yī)療護(hù)理職業(yè)防護(hù)培訓(xùn)
- 2026年紡織廠機(jī)械操作安全守則
- 2026浙江溫州市樂清市龍西鄉(xiāng)衛(wèi)生院招聘2人筆試備考試題及答案解析
- 2026上半年貴州事業(yè)單位聯(lián)考貴州中醫(yī)藥大學(xué)第一附屬醫(yī)院招聘48人筆試備考題庫及答案解析
- 2026年工程地質(zhì)勘察中實(shí)驗(yàn)室分析技術(shù)
- 經(jīng)典名著《紅樓夢》閱讀任務(wù)單
- 古田會(huì)議學(xué)習(xí)課件
- 高寒地區(qū)建筑工程冬季施工技術(shù)規(guī)范研究
- 電流保護(hù)原理課件
- DBJT15-212-2021 智慧排水建設(shè)技術(shù)規(guī)范
- 民俗學(xué)課件萬建中
- 能源與動(dòng)力工程專業(yè)培養(yǎng)目標(biāo)合理性評價(jià)分析報(bào)告
- 公司員工活動(dòng)室管理制度
- CJ/T 3066-1997內(nèi)磁水處理器
- 院內(nèi)急重癥快速反應(yīng)小組
評論
0/150
提交評論