數(shù)據(jù)結(jié)構停車場管理系統(tǒng)及課程設計報告_第1頁
數(shù)據(jù)結(jié)構停車場管理系統(tǒng)及課程設計報告_第2頁
數(shù)據(jù)結(jié)構停車場管理系統(tǒng)及課程設計報告_第3頁
數(shù)據(jù)結(jié)構停車場管理系統(tǒng)及課程設計報告_第4頁
數(shù)據(jù)結(jié)構停車場管理系統(tǒng)及課程設計報告_第5頁
已閱讀5頁,還剩89頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

PAGEPAGE2課程設計課程:題目:停車場管理系統(tǒng)專業(yè):班級:姓名:2010年9月6數(shù)據(jù)結(jié)構課程設計.停車場管理系統(tǒng)第93頁共94頁《數(shù)據(jù)結(jié)構》課程設計停車場管理系統(tǒng)課程設計目的通過課程設計,加深對《數(shù)據(jù)結(jié)構》這一課程所學內(nèi)容的進一步理解與鞏固。通過課程設計,加深對結(jié)構化設計思想的理解,能對系統(tǒng)功能進行分析,并設計合理的模塊化結(jié)構。通過課程設計,提高程序開發(fā)功能,能運用合理的控制流程編寫清晰高效的程序。通過課程設計,訓練C程序調(diào)試能力,能將一個中小型各級組織系統(tǒng)聯(lián)調(diào)通過。通過課程設計,開發(fā)一個中小型系統(tǒng),掌握系統(tǒng)研發(fā)全過程。通話課程設計,培養(yǎng)分析問題、解決實際問題的能力。二、課程設計內(nèi)容問題描述:設有一個可以停放n輛汽車的狹長停車場,它只有一個大門可以供車輛進出。車輛按到達停車場時間的早晚依次從停車場最里面向大門口處停放(最先到達的第一輛車放在停車場的最里面)。如果停車場已放滿n輛車,則后來的車輛只能在停車場大門外的便道上等待,一旦停車場內(nèi)有車開走,則排以便道上的第一輛車就進入停車場。停車場內(nèi)如有某輛車要開走,在它之后進入停車場的車都必須先退出停車場為它讓路,待其開出停車場后,這些輛再依原來的次序進場。每輛車在離開停車場時,都應根據(jù)它在停車場內(nèi)停留的時間長短交費。如果停留在便道上的車未進停車場時,允許其離去,不收停車費,并且仍然保持在便道上等待的車輛的次序。編制一程序模擬該停車場的管理?;疽螅阂蟪绦蜉敵雒枯v車到達后的停車位置(停車場或便道上),以及某輛車離開停車場應交納的費用和它在停車場內(nèi)停留的時間。實現(xiàn)提示:汽車的模擬輸入信息格式可以是:(到達/離去,汽車牌照號碼,到達/離去的時刻)。例如,(‘A’,1,5)表示1號牌照車在5這個時刻到達,而(‘D’,5,20)表示5號牌照車在20這個時刻離去。整個程序可以在輸入信息為(‘E’,0,0)時結(jié)束。本題可用棧和隊列來實現(xiàn)。三、概要設計1、設計思想此停車場管理系統(tǒng)是在一個狹長的通道上的,而且只有一個大門可以供車輛進出,并且要實現(xiàn)停車場內(nèi)某輛車要離開時,在它之后進入停車場的車都必須先退出停車場為它讓路,待其開出停車場后,這些輛再依原來的次序進場的功能,就可以設計兩個堆棧,其中一個堆棧用來模擬停車場,另一個堆棧用來模擬臨時停車場,該臨時停車場用來存放當有車輛離開時,原來停車場內(nèi)為其讓路的車輛。至于當停車場已滿時,需要停放車輛的通道可以用一個鏈隊列來實現(xiàn)。當停車場內(nèi)開走一輛車時,通道上便有一輛車進入停車場,此時只需要改變通道上車輛結(jié)點的連接方式就可以了,使通道上第一輛車進入停車場這個堆棧,并且使通道上原來的第二輛車成為通道上的第一輛車,此時只需將模擬通道的鏈隊列的頭結(jié)點連到原來的第二輛車上就可以了。2、實現(xiàn)方法對于此停車場管理系統(tǒng)的實現(xiàn),就是用兩個堆棧來分別模擬停車場以及停車場內(nèi)車輛為其它車輛讓路時退出停車的臨時停放地點。至于通道上車輛的停放則用一個鏈隊列來實現(xiàn),此時,通道上車輛的離開或者進入停車場只需改變此鏈隊列上的結(jié)點而已。對于要對停車場內(nèi)的車輛根據(jù)其停放時間收取相應的停車費用,可以記錄下車輛進入以及離開停車場的時間,再用時間差乘以相應的單價并且打印出最后的費用就可以實現(xiàn)了。3、主要模塊①此停車場管理系統(tǒng),主要分為以下若干模塊:首先定義用來模擬停車場的堆棧以及用來模擬通道的鏈隊列為全局變量,然后編寫主函數(shù),在此主函數(shù)中實現(xiàn)對其它各個模塊的調(diào)用。在主函數(shù)中首先調(diào)用option()函數(shù),出現(xiàn)歡迎用戶使用的主界面,然后提示用戶進入此停車場管理系統(tǒng)后,再出現(xiàn)一個供用戶選擇的界面,在用戶的選擇過程中,程序又分別調(diào)用車輛的到達、車輛的離開、停車場內(nèi)停放車輛的信息以及退出程序這四個函數(shù)模塊。其中,在車輛的離開那個模塊函數(shù)中又調(diào)用了打印離開車輛信息的函數(shù),在停車場內(nèi)停放車輛信息的那個模塊函數(shù)中,又分別調(diào)用了顯示停車場上車輛信息的函數(shù)以及顯示便道上車輛信息的函數(shù)。最后,從調(diào)鼐的這四個函數(shù)中回到主函數(shù)結(jié)束整個程序的運行。②在以上各個模塊中,出現(xiàn)的調(diào)用的函數(shù)為:voidInitStack(SeqStackCar*s);intInitQueue(LinkQueueCar*Q);option();intArrival(SeqStackCar*Enter,LinkQueueCar*W);voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W);voidPRINT(CarNode*p);voidList(SeqStackCarS,LinkQueueCarW);voidList1(SeqStackCar*S);voidList2(LinkQueueCar*W);4、模塊間關系開始開始初始化兩個棧Enter和Temp及一個隊列Wait。進入主菜單車到達車離開退出Room前車輛進臨時棧對room計費便道車信息車場內(nèi)信息判便道是否有車車場是否為空列表顯示棧Enter元素出棧隊列中元素進棧隊列Wait中元素出隊元素進棧Enter便道車進車場元素進隊列Wait判斷棧是否為滿結(jié)束退出列表顯示是否否是否是四、調(diào)試分析(1)調(diào)試過程中的主要問題由于此停車場管理系統(tǒng)是分模塊設計的,而且在程序的實現(xiàn)過程中又使用了清屏函數(shù),所以,運行時用戶選擇任務并且執(zhí)行完任務后,又會回到供用戶選擇功能的主界面,因此整個程序從整體上來講結(jié)構清晰,使用方便。本程序的調(diào)試運行,總體上情況良好,但中間也出現(xiàn)了一些小問題。其中比較有代表性的主要問題有:當停車場已經(jīng)達到最大容量,但仍有車輛進入停車場的時候,運行界面上沒有出現(xiàn)或者說出現(xiàn)了但又跳掉了“停車場已滿,該車輛需在便道上等待!”的提示信息。我們小組成員經(jīng)過反復商量討論,并且在查閱了多種資料后,在那一個printf語句后加了一個getch(),此時,程序運行結(jié)果就符合要求了。本程序中我使用的是VC6++進行的編譯和運行?。?)測試結(jié)果的分析與討論①歡迎界面②車輛到達③車輛離開④車輛信息(車場)⑤車輛信息(便道)五、用戶手冊這個程序用來實現(xiàn)對停車場內(nèi)車輛的管理,整個操作界面為中文,更加符合人性化的標準,使得用戶使用方便,而且每一個操作都有提示,使得初次接觸該程序的用戶也能很快適應程序的操作。這個程序操作簡單,對于車牌號,只需輸入車牌號上的數(shù)字就行,而且對于進出停車場的時間,也簡化了操作,只需輸入當時的時刻就行,沒有具體到小時和分鐘,但也許這也是該程序不足之處所在。而且該程序也給用戶提供了選擇的機會,當點擊運行該程序后,如果想退出程序,可以輸入n或N退出該運行程序。至于使用過程中的更具體的問題,可以參照該報告書中調(diào)試分析那一項的屏幕截圖,整個程序的運行界面大致就如上述屏幕截圖的內(nèi)容。六、附錄1、源程序代碼#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAX2/*車庫容量*/#defineprice3/*每車每時刻費用*/typedefstructnode{intnum;intreachtime;intleavetime;}CarNode;/*車輛信息結(jié)點*/typedefstructNODE{CarNode*stack[MAX+1];inttop;}SeqStackCar;/*模擬車站*/typedefstructcar{CarNode*data;structcar*next;}QueueNode;typedefstructNode{QueueNode*head;QueueNode*rear;}LinkQueueCar;/*模擬通道*//**//*函數(shù)聲明部分*/voidInitStack(SeqStackCar*);/*初始化棧*/intInitQueue(LinkQueueCar*);/*初始化便道*/intArrival(SeqStackCar*,LinkQueueCar*);/*車輛到達*/voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);/*車輛離開*/voidList(SeqStackCar,LinkQueueCar);/*顯示存車信息*/voidPRINT(CarNode*p);/**/voidoption(){inti;charchoice;gotoxy(0,0);for(i=1;i<=240;i++)system("graftabl936");printf("\004");gotoxy(33,8);printf("停車場管理系統(tǒng)");gotoxy(25,12);printf("小組成員:周曉宇");gotoxy(33,16);printf("班級:ZK073032");gotoxy(1,20);printf("\n********************************************************************************");printf("\t1.車輛到達--12.車輛離開--23.車輛信息--34.退出程序--4");printf("\n********************************************************************************");printf("\n\n\n\t是否進入該系統(tǒng)(y/n)?");choice=getchar();if(choice=='N'||choice=='n')exit(0);}voidmain(){SeqStackCarEnter,Temp;LinkQueueCarWait;intch;system("graftabl936");option();InitStack(&Enter);/*初始化車站*/InitStack(&Temp);/*初始化讓路的臨時棧*/InitQueue(&Wait);/*初始化通道*/while(1){clrscr();printf("\n\n\t\t\t1.車輛到達請選擇1");printf("\n\n\t\t\t2.車輛離開請選擇2");printf("\n\n\t\t\t3.車輛信息請選擇3");printf("\n\n\t\t\t4.退出程序請選擇4");printf("\n\n\t\t\t現(xiàn)在請選擇以上信息:");while(1){scanf("%d",&ch);printf("\n");if(ch>=1&&ch<=4)break;elseprintf("\n\t\t\t錯誤!請再次做出選擇!\n\n\t\t\t");}switch(ch){case1:Arrival(&Enter,&Wait);break;/*車輛到達*/case2:Leave(&Enter,&Temp,&Wait);break;/*車輛離開*/case3:List(Enter,Wait);break;/*列表打印信息*/case4:exit(0);/*退出主程序*/default:break;}}}/**/voidInitStack(SeqStackCar*s)/*初始化棧*/{inti;s->top=0;for(i=0;i<=MAX;i++)s->stack[s->top]=NULL;}intInitQueue(LinkQueueCar*Q)/*初始化便道*/{Q->head=(QueueNode*)malloc(sizeof(QueueNode));if(Q->head!=NULL){Q->head->next=NULL;Q->rear=Q->head;return(1);}elsereturn(-1);}voidPRINT(CarNode*p)/*打印出站車的信息*/{intA1,A2;printf("\n\t\t\t請輸入離開時間:");scanf("%d",&(p->leavetime));printf("\n\t\t\t離開車輛的車牌號:%d",p->num);printf("\n\n\t\t\t離開車輛到達時間:%d",p->reachtime);printf("\n\n\t\t\t離開車輛離開時間:%d",p->leavetime);A1=p->reachtime;A2=p->leavetime;printf("\n\n\t\t\t停車場管理費用:%d",(A2-A1)*price);free(p);}intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*車輛到達*/{CarNode*p;QueueNode*t;p=(CarNode*)malloc(sizeof(CarNode));flushall();printf("\t\t\t請輸入到達車輛車牌號:");scanf("%d",&(p->num));if(Enter->top<MAX)/*車場未滿,車進車場*/{Enter->top++;printf("\n\t\t\t該車輛在停車場的位置是:%d\n",Enter->top);printf("\n\t\t\t請輸入該車輛到達的時間:");scanf("%d",&(p->reachtime));Enter->stack[Enter->top]=p;return(1);}else/*車場已滿,車進便道*/{printf("\n\t\t\t停車場已滿該車輛需在便道上等待!");getch();t=(QueueNode*)malloc(sizeof(QueueNode));t->data=p;t->next=NULL;W->rear->next=t;W->rear=t;return(1);}}voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)/*車輛離開*/{inti,room;CarNode*p,*t;QueueNode*q;/*判斷車場內(nèi)是否有車*/if(Enter->top>0)/*有車*/{while(1)/*輸入離開車輛的信息*/{printf("\t\t\t停車場里停放的車輛總數(shù):%d",Enter->top);printf("\n\n\t\t\t請輸入要離開車輛的位置:");scanf("%d",&room);if(room>=1&&room<=Enter->top)break;}while(Enter->top>room)/*車輛離開*/{Temp->top++;Temp->stack[Temp->top]=Enter->stack[Enter->top];Enter->stack[Enter->top]=NULL;Enter->top--;}p=Enter->stack[Enter->top];Enter->stack[Enter->top]=NULL;Enter->top--;while(Temp->top>=1){Enter->top++;Enter->stack[Enter->top]=Temp->stack[Temp->top];Temp->stack[Temp->top]=NULL;Temp->top--;}PRINT(p);/*判斷通道上是否有車及車站是否已滿*/if((W->head!=W->rear)&&Enter->top<MAX)/*便道的車輛進入車場*/{q=W->head->next;t=q->data;Enter->top++;printf("\n\n\t\t\t便道的%d號車進入車場第%d位置.",t->num,Enter->top);printf("\n\n\t\t\t請輸入現(xiàn)在的時間:");scanf("%d",&(t->reachtime));W->head->next=q->next;if(q==W->rear)W->rear=W->head;Enter->stack[Enter->top]=t;free(q);}elseprintf("\n\n\t\t\t便道里沒有車.\n");}elseprintf("\n\n\t\t\t車場里沒有車.");/*沒車*/}voidList1(SeqStackCar*S)/*列表顯示車場信息*/{inti;if(S->top>0)/*判斷車站內(nèi)是否有車*/{printf("\n\t\t\t車場:");printf("\n\n\t\t\t位置到達時間車牌號\n");for(i=1;i<=S->top;i++){printf("%26d",i);printf("%6d",S->stack[i]->reachtime);printf("%10d",S->stack[i]->num);printf("\n");}}elseprintf("\n\t\t\t車場里沒有車");}voidList2(LinkQueueCar*W)/*列表顯示便道信息*/{QueueNode*p;p=W->head->next;if(W->head!=W->rear)/*判斷通道上是否有車*/{printf("\n\t\t\t等待車輛的號碼為:");while(p!=NULL){printf("%-10d",p->data->num);p=p->next;}printf("\n");}elseprintf("\n\t\t\t便道里沒有車.");}voidList(SeqStackCarS,LinkQueueCarW){intflag,tag;flag=1;while(flag){printf("\n\t\t\t請選擇1|2|3:");printf("\n\n\t\t\t1.車場\n\n\t\t\t2.便道\n\n\t\t\t3.返回\n\n\t\t\t");while(1){scanf("%d",&tag);if(tag>=1||tag<=3)break;elseprintf("\n\t\t\t請選擇1|2|3:");}switch(tag){case1:List1(&S);break;/*列表顯示車場信息*/case2:List2(&W);break;/*列表顯示便道信息*/case3:flag=0;break;default:break;}}}2、設計體會通過這一周的課程設計,加深了我對《數(shù)據(jù)結(jié)構》這門課程所學內(nèi)容的進一步的理解與掌握;同時,通過對停車場管理系統(tǒng)的開發(fā),使得我將計算機課程所學知識與實際問題很好地相聯(lián)接在了一起。在這次課程設計中,不僅培養(yǎng)了我開發(fā)一個中小型程序的能力,而且也培養(yǎng)了我的團隊合作能力。在這次對停車場管理系統(tǒng)的開發(fā)過程中,我們小組成員互相合作,互相幫助,其中有程序功能成功實現(xiàn)時的欣喜,也有遇到問題、解決問題時的執(zhí)著以及迷茫。在這次課程設計中,使得我很好地了解了在開發(fā)程序過程中合作的重要性。在這周課程設計中,我們小組所開發(fā)的停車場管理系統(tǒng),基本上可以完成每一項功能。汽車進入停車場的信息、離開停車場的信息以及通道上的信息都可以在程序上一一實現(xiàn)。但是,該程序也有不足的地方。主要表現(xiàn)在車輛的車牌號上,現(xiàn)實中的車牌號是一串字符,可是,在這個程序中,為了簡便起見,我們就車牌號定義為了整型,這個與現(xiàn)實是有些不符的。還有一個可以改進的地方就是記錄車輛進入停車場以及離開停車場的時間,應該精確到小時以及分鐘的,可是在程序中,為了簡便起見,我們只是設置成了一個時刻,所以,在這方面還是有待改進的。改進的程序中,還應該增加時間的判斷功能,即停車場內(nèi)有可能有車輛停放的時間超過一天。還有一個很重要的問題,對于停車場內(nèi)可以停放的最多車輛數(shù),為了測試數(shù)據(jù)的方便,我在程序中,定為了2,在實際使用中,可以改變程度開頭的宏定義以增加停車場的容量。總之,在這周的課程設計中,我以及我們這組的收獲還是挺大的,不僅對于專業(yè)課有了更好的認識,而且在合作的過程中更加了解了團隊精神的重要性。主要參考資料譚浩強.C語言程序設計(第三版)[M].北京:清華大學出版社,2005廖雷、羅代忠.C語言程序設計基礎實驗教程[M].北京:高等教育出版社,2005譚浩強.C程序設計解題與上機指導(第三版)[M].北京:清華大學出版社,2005廖雷等.C語言程序設計基礎[M].北京:高等教育出版社,2004譚浩強,張基溫,唐永炎.C語言程序設計教程.

北京:高等教育出版社,2003可供選擇源程序代碼:一:/*******************************停車場管理器*************************************/#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>/********************************************************************************/#defineMAXSTACKSIZE2/*車庫容量*/#defineprice0.1/*每車每分鐘費用*/typedefstructtime{inthour;intmin;}Time;/*時間結(jié)點*/typedefstruct{charnum[10];Timereach;Timeleave;}CarNode;/*車輛信息結(jié)點*/typedefstruct{CarNode*base;CarNode*top;intstacksize;}SqStackCar;/*模擬車站*/typedefstructcar{CarNode*data;structcar*next;}QueueNode;typedefstruct{QueueNode*front;QueueNode*rear;}LinkQueueCar;/*模擬通道*/intQueueEmpty(LinkQueueCarQ)/*便道判空函數(shù)*/{if(Q.front==Q.rear)return1;elsereturn0;}/********************************************************************************/voidInitStack(SqStackCar*s)/*初始化棧*/{s->base=(CarNode*)malloc(MAXSTACKSIZE*sizeof(CarNode));if(!s->base)exit(0);/*分配失敗*/s->top=s->base;s->stacksize=MAXSTACKSIZE;}intPush(SqStackCar*s,CarNode*e)/*進站函數(shù)*/{if(s->top-s->base>=s->stacksize)return0;else*s->top++=*e;return1;}intPop(SqStackCar*s,CarNode*e)/*出站函數(shù)*/{if(s->top==s->base)return0;*e=*--s->top;return1;}intStackEmpty(SqStackCars)/*判空函數(shù)*/{if(s.base==s.top)return1;elsereturn0;}intInitQueue(LinkQueueCar*Q)/*初始化便道*/{Q->front=Q->rear=(QueueNode*)malloc(sizeof(QueueNode));if(!Q->front)exit(0);Q->front->next=NULL;return1;}/**************************************************************/intEnQueue(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;return1;}intDeQueue(LinkQueueCar*Q,CarNode*e)/*便道刪除函數(shù)*/{QueueNode*p;if(Q->front==Q->rear)return0;p=Q->front->next;e=p->data;Q->front->next=p->next;if(Q->rear==p)Q->rear=Q->front;free(p);return1;}/********************************************************************************/intArrive(SqStackCar*In,LinkQueueCar*Wait)/*車輛到達函數(shù)*/{CarNode*i;QueueNode*w;i=(CarNode*)malloc(sizeof(CarNode));flushall();printf("Inputthecarnumber:");gets(i->num);if(In->top-In->base<MAXSTACKSIZE)/*車場未滿,車輛進棧*/{printf("\nThetimethecararrive(00:00):");scanf("%d:%d",&i->reach.hour,&i->reach.min);Push(In,i);printf("\nCarinsuccess!!");sleep(1);return1;}else/*停車場已滿,車進便道*/{w=(QueueNode*)malloc(sizeof(QueueNode));w->data=i;w->next=NULL;Wait->rear->next=w;Wait->rear=w;printf("ThePARTisfull,carmustwaitintheroad!");sleep(1);return1;}return0;}/********************************************************************************/intDeparture(SqStackCar*In,SqStackCar*temp,LinkQueueCar*Wait)/*車輛離開函數(shù)*/{intflag=0,a1,a2,b1,b2,money;CarNode*p,*t;QueueNode*q;p=(CarNode*)malloc(sizeof(CarNode));flushall();printf("Inputtheoutcarnumber:");gets(p->num);while(!StackEmpty(*In)){t=(CarNode*)malloc(sizeof(CarNode));Pop(In,t);if(strcmp(p->num,t->num)==0)/*比較車場中有無這輛車,有即出站*/{printf("Inputthetimethecarout(00:00):");scanf("%d:%d",&p->leave.hour,&p->leave.min);printf("The");printf("%s",p->num);printf("Caroutthepart!");a1=p->leave.hour;a2=t->reach.hour;b1=p->leave.min;b2=t->reach.min;money=((a1-a2+24)%24*60+(b1-b2+60)%60)*price;/*計算車輛需要的費用*/printf("\nThetimethecararrive:%d:%d",t->reach.hour,t->reach.min);printf("\nThetimethecarleave:%d:%d",p->leave.hour,p->leave.min);printf("\nNeed:%dyuan",money);flag=1;getch();free(t);break;}elsePush(temp,t);}/*while*/if(!flag){printf("Nothiscar!!");getch();}while(!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("carinpart!");printf("\nInputthetimethecararrive(00:00):");scanf("%d:%d",&t->reach.hour,&t->leave.min);}Wait->front->next=q->next;if(q==Wait->rear)Wait->rear=Wait->front;free(q);}return1;}/********************************************************************************/voidPrint(SqStackCar*In,SqStackCar*Temp,LinkQueueCar*Wait)/*打印函數(shù)*/{intc=0;intcount=1;CarNode*p,*t;QueueNode*q;q=(QueueNode*)malloc(sizeof(QueueNode));p=(CarNode*)malloc(sizeof(CarNode));t=(CarNode*)malloc(sizeof(CarNode));while(1&&c!='3'){clrscr();gotoxy(1,10);printf("1.Printtheroad!");gotoxy(1,11);printf("2.Printthepart!");gotoxy(1,12);printf("3.return.");do{printf("\nInputyourchoice:");c=getche();printf("\n");}while(c!='1'&&c!='2'&&c!='3');if(c=='2')/*打印停車場*/{printf("Thecarinthepart!\n");count=1;while(!StackEmpty(*In)){Pop(In,t);Push(Temp,t);}while(!StackEmpty(*Temp)){Pop(Temp,t);printf("The");printf("%d",count);printf("carnumberis:");count++;puts(t->num);Push(In,t);}printf("Pressanykeytocontinue...");getch();}if(c=='1')/*打印便道*/{printf("Thecarintheroad!\n");count=1;q=Wait->front->next;if(Wait->front!=Wait->rear)/**/{while(q!=NULL){p=q->data;printf("The");printf("%d",count);printf("Carnumberis:");puts(p->num);q=q->next;count++;}}elseprintf("\nNocarintheroad.");printf("Pressanykeytocontinue...");getch();}}}/***************************主程序***********************************************/intArrive(SqStackCar*In,LinkQueueCar*Wait);intDeparture(SqStackCar*In,SqStackCar*temp,LinkQueueCar*Wait);voidPrint(SqStackCar*In,SqStackCar*temp,LinkQueueCar*Wait);voidinitialization();charreadcommand();voidinterpret(charcmd);main(){charcmd;SqStackCarpart,temp;LinkQueueCarroad;InitStack(&part);InitStack(&temp);InitQueue(&road);printf("Pressanykeytocontinue");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(&part,&temp,&road);break;case'p':Print(&part,&temp,&road);break;case'P':Print(&part,&temp,&road);break;case'e':printf("Pressanytocontinue...");getch();exit(0);break;case'E':printf("Pressanytocontinue...");getch();exit(0);break;default:printf("ERROR!");break;}}}/********************************************************************************/voidinitialization()/*初始函數(shù)*/{inti;clrscr();gotoxy(0,0);for(i=1;i<=240;i++)printf("\1");gotoxy(15,8);printf("THISISACARPARTMANAGESYSYTEM!");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("\n********************************************************************************");printf("1.CarArrive--A2.CarDeparture--D3.PrintCar--P4.Exit--E");printf("\n********************************************************************************");printf("InputC,D,P,Echoose!!\n");}charreadcommand()/*選擇函數(shù)*/{charcmd;do{printf("Inputyourchoice:");cmd=getche();printf("\n");}while((cmd!='a')&&(cmd!='A')&&(cmd!='d')&&(cmd!='D')&&(cmd!='p')&&(cmd!='P')&&(cmd!='E')&&(cmd!='e'));returncmd;}二#include<iostream>#include<fstream>usingnamespacestd;#defineMAX_SIZE2//停車場能夠容納的車的數(shù)量#defineFARE5//表示停車場的收費為每小時FARE元intCountForStack=0;//此全局變量用來計數(shù)堆?,F(xiàn)有的車數(shù)intCountForQueue=0;//此全局變量用來計數(shù)隊列現(xiàn)有的車數(shù)typedefstruct//這個節(jié)點用來保存每輛車的信息{charCondition;//用來表示“到達”或者“離開”的狀態(tài),intArriveTime;//用來記錄到達時間,默認為-1,說明還沒有到達intLeaveTime;//用來記錄離開時間,默認為-1,說明還沒有離開intLicense;//記錄車牌號}CarNode;typedefstruct//棧的定義{CarNode*base;//棧底指針,指向0CarNode*top;//棧頂指針,如果指向0,說明棧為空intstacksize;//棧的容量大小}CarStack;typedefstructQNode//隊列節(jié)點的定義{charCondition;//用來表示“到達”或者“離開”的狀態(tài),intArriveTime;//用來記錄到達時間,默認為-1,說明還沒有到達intLeaveTime;//用來記錄離開時間,默認為-1,說明還沒有離開intLicense;//記錄車牌號QNode*next;//指向下一個節(jié)點的指針}QNode;typedefstruct//隊列的定義{QNode*front;//隊頭指針QNode*rear;//隊尾指針}Queue;boolInitStack(CarStack&S)//此函數(shù)用來初始化棧{S.base=(CarNode*)malloc(MAX_SIZE*sizeof(CarNode));if(!S.base){cout<<"內(nèi)存分配失??!"<<endl;returnfalse;//說明內(nèi)存分配失敗,返回false}S.top=S.base;S.stacksize=MAX_SIZE;returntrue;}boolInitQueue(Queue&Q)//此函數(shù)用來初始化隊列{Q.front=(QNode*)malloc(sizeof(QNode));if(!Q.front){cout<<"內(nèi)存分配失?。?<<endl;returnfalse;}Q.rear=Q.front;Q.front->next=0;//下一個節(jié)點指空returntrue;}boolEnQueue(Queue&Q,QNode&qnode)//此函數(shù)用來入隊一個節(jié)點{QNode*p=(QNode*)malloc(sizeof(QNode));if(!p){cout<<"內(nèi)存分配失?。?<<endl;returnfalse;}p->ArriveTime=qnode.ArriveTime;p->Condition=qnode.Condition;p->LeaveTime=qnode.LeaveTime;p->License=qnode.License;p->next=0;Q.rear->next=p;Q.rear=p;returntrue;}boolDeQueue(Queue&Q,QNode&t)//此函數(shù)用來出隊{if(Q.front==Q.rear){cout<<"隊列為空!"<<endl;returnfalse;}QNode*p=Q.front->next;t.ArriveTime=p->ArriveTime;t.Condition=p->Condition;t.LeaveTime=p->LeaveTime;t.License=p->License;Q.front->next=p->next;if(Q.rear==p)//如果P是指向最后一個出隊的元素Q.rear=Q.front;free(p);returntrue;}voidInitCarNode(CarNode&C,charcondition,intarrivetime,intleavetime,intlicense)//本函數(shù)用來初始化一個CarNode節(jié)點{C.ArriveTime=arrivetime;C.Condition=condition;C.LeaveTime=leavetime;C.License=license;}boolPush(CarStack&S,CarNode&car)//此函數(shù)用來入棧一個CarNode節(jié)點{if(S.top-S.base>=S.stacksize){cout<<"此棧已滿,不能壓入新的信息"<<endl;returnfalse;}(*S.top).ArriveTime=car.ArriveTime;(*S.top).Condition=car.Condition;(*S.top).LeaveTime=car.LeaveTime;(*S.top).License=car.License;++S.top;//棧頂指針上移returntrue;}boolPop(CarStack&S,CarNode&t)//此函數(shù)用來彈出棧內(nèi)元素{if(S.top==S.base){cout<<"???,不能執(zhí)行出棧操作!"<<endl;returnfalse;}--S.top;//棧頂指針下移t.ArriveTime=(*S.top).ArriveTime;t.Condition=(*S.top).Condition;t.LeaveTime=(*S.top).LeaveTime;t.License=(*S.top).License;returntrue;}boolIsStackFull(CarStack&S)//此函數(shù)用來判斷堆棧是否已滿{if(S.top-S.base>=S.stacksize)returntrue;elsereturnfalse;}boolIsStackEmputy(CarStack&S)//此函數(shù)用來判斷堆棧是否為空{(diào)if(S.top==S.base)returntrue;elsereturnfalse;}boolIsQueueEmputy(Queue&Q)//此函數(shù)用來判斷隊列是否為空{(diào)if(Q.front==Q.rear)returntrue;elsereturnfalse;}boolSearchInStack(CarStack&S,inta){booltag=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;}returntag;}boolSearchInQueue(Queue&Q,inta)//a表示要查找的車牌號,{booltag=false;if(!IsQueueEmputy(Q))//如果隊列非空{(diào)QNode*p=Q.front->next;while(p!=Q.rear){if((*p).License==a)tag=true;}//退出此while循環(huán)時p指向最后一個元素if((*p).License==a)tag=true;}returntag;}voidInCar(CarStack&S,Queue&Q,inta1,inta2)//此函數(shù)用來表示進入車輛,參數(shù)a1用來表示到達時間,參數(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))//如果堆棧已滿,說明停車場已滿,需要停車在通道{QNodeqnode;qnode.ArriveTime=-1;//在通道時間不收費,所以不計時qnode.Condition='A';qnode.LeaveTime=-1;//定義為-1,說明還沒有開始離開qnode.License=a2;EnQueue(Q,qnode);//停在通道上++CountForQueue;cout<<"車號:"<<qnode.License<<"停在通道的第"<<CountForQueue<<"號位置"<<endl;}else{CarNodecarnode;carnode.ArriveTime=a1;carnode.Condition='A';carnode.LeaveTime=-1;carnode.License=a2;Push(S,carnode);++CountForStack;cout<<"車號:"<<carnode.License<<"到達時間"<<carnode.ArriveTime<<"停在停車場的第"<<CountForStack<<"號位置"<<endl;}}voidOutCar(CarStack&S,Queue&Q,inta1,inta2)//此函數(shù)用來出車,參數(shù)a1用來表示離開時間,參數(shù)a2表示車牌號碼{if(SearchInQueue(Q,a2)){cout<<"車號"<<a2<<"存在于通道內(nèi),還未進入停車場,不能離開"<<endl;return;}if(!SearchInStack(S,a2)){cout<<"車號"<<a2<<"不在停車場內(nèi),輸入有誤"<<endl;return;}CarStacktempstack;InitStack(tempstack);//建立并且初始化用于暫存出車時讓車的堆棧booltag1=false;//標志這個停車場出車以前是否已滿,默認為沒有滿tag1=IsStackFull(S);booltag2=true;//標志通道是否有汽車在等待,默認為通道為空tag2=IsQueueEmputy(Q);CarNodetemp;//用來保存暫時取出的汽車booltag3=false;//用來標志是否是離開時間小于到達時間而導致離開失敗,true表示離開失敗while(1)//讓車離開{Pop(S,temp);if(temp.License==a2){if(a1<temp.ArriveTime){cout<<"輸入有誤,離開時間不能小于到達時間,離開失敗"<<endl;tag3=true;Push(tempstack,temp);}elsecout<<"車號"<<a2<<"現(xiàn)在離開停車場,所用的時間為"<<a1-temp.ArriveTime<<"收費為"<<(a1-temp.ArriveTime)*FARE<<endl;break;}elsePush(tempstack,temp);//進入暫存棧}while(!IsStackEmputy(tempstack))//倒出的車再次進入停車場{Pop(tempstack,temp);Push(S,temp);}QNodetempqnode;//用來暫時保存從通道出來的汽車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)//如果停車場沒有滿,并且離開成功--CountForStack;}voidshowmenu(CarStack&S,Queue&Q){cout<<"******************************選擇菜單*******************************"<<endl;cout<<"1:停車"<<endl;cout<<"2:離開"<<endl;cout<<"3:退出"<<endl;cout<<"*****************************請按鍵選擇******************************"<<endl;inttag;cin>>tag;while(tag!=1&&tag!=2&&tag!=3)cin>>tag;inta1;unsignedinta2;switch(tag){case1:cout<<"請輸入到達的車號"<<endl;cin>>a1;cout<<"請輸入到達時間"<<endl;cin>>a2;InCar(S,Q,a2,a1);break;case2:cout<<"請輸入離開的車號"<<endl;cin>>a1;cout<<"請輸入離開的時間"<<endl;cin>>a2;OutCar(S,Q,a2,a1);break;case3:return;break;}charch;cout<<"*******************按E/e退出,按任意鍵返回菜單**************************"<<endl;cin>>ch;if(ch!='E'&&ch!='e')showmenu(S,Q);}intmain(){CarStackcarstack;InitStack(carstack);//建立并且初始化用于停車場的堆棧Queuecarqueue;InitQueue(carqueue);//建立并且初始化用于通道的隊列showmenu(carstack,carqueue);}三:#include<iostream>#include<string>usingnamespacestd;#defineMAX2//停車場車位數(shù)#defineprice0.05//每分鐘收取的費用typedefstructtime{ inthour; intmin;}Time;//定義時間結(jié)點typedefstructnode{ stringnum; Timereach; Timeleave;}CarNode;//定義每輛車的牌號,進入時刻,開出時刻typedefstructNODE{ CarNode*stack[MAX+1]; inttop;}SeqStackCar;//用棧定義,構造停車場typedefstructcar{ CarNode*data; structcar*next;}QueueNode;//用隊列結(jié)點定義,構造停車場外的單個等候車輛typedefstructNode{ QueueNode*head; QueueNode*rear;}LinkQueueCar;//用隊列定義,構造停車場外的等候便道voidInitStack(SeqStackCar*);//初始化堆棧函數(shù)聲明intInitQueue(LinkQueueCar*);//初始化隊列頭結(jié)點函數(shù)聲明intArrival(SeqStackCar*,LinkQueueCar*);//車輛進入時登記函數(shù)聲明voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);//車輛離開時函數(shù)聲明voidList(SeqStackCar,LinkQueueCar);/*查看停車場內(nèi)車輛情況及便道上車輛情況的函數(shù)聲明*/voidmain(){ SeqStackCarEnter,Temp;//初始棧,中轉(zhuǎn)棧 LinkQueueCarWait;//便道隊列 inta; InitStack(&Enter); InitStack(&Temp); InitQueue(&Wait);//初始化while(1){ cout<<"********************************************************************"<<endl; cout<<"歡迎光臨停車場!"; cout<<"(*^__^*)!"; cout<<endl<<"車輛到達登記->請按1"; cout<<"車輛離開登記->請按2"<<endl; cout<<"車輛停靠查詢->請按3"; cout<<"退出系統(tǒng)->請按4"<<endl;//系統(tǒng)選項設置while(1){ cin>>a;if(a>=1&&a<=4)break;elsecout<<endl<<"請選擇:1~4.";}switch(a){ case1:Arrival(&Enter,&Wait);break;//調(diào)用入停車場函數(shù) case2:Leave(&Enter,&Temp,&Wait);break;//調(diào)用出停車場函數(shù) case3:List(Enter,Wait);break;//調(diào)用查看函數(shù) case4:exit(0); default:break;}}}voidInitStack(SeqStackCar*s)//堆棧初始化{s->top=0;s->stack[s->top]=NULL;}intInitQueue(LinkQueueCar*Q)//隊列初始化{Q->head=newQueueNode;if(Q->head!=NULL){Q->head->next=NULL;Q->rear=Q->head;

溫馨提示

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

評論

0/150

提交評論