數據結構停車場管理系統課程設計_第1頁
數據結構停車場管理系統課程設計_第2頁
數據結構停車場管理系統課程設計_第3頁
數據結構停車場管理系統課程設計_第4頁
數據結構停車場管理系統課程設計_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目 錄課程設計目的1、 通過課程設計,加深對數據結構這一課程所學內容的進一步理解與鞏固。2、 通過課程設計,加深對結構化設計思想的理解,能對系統功能進行分析,并設計合理的模塊化結構。3、 通過課程設計,提高程序開發(fā)功能,能運用合理的控制流程編寫清晰高效的程序。4、 通過課程設計,訓練C程序調試能力,能將一個中小型各級組織系統聯調通過。5、 通過課程設計,開發(fā)一個中小型系統,掌握系統研發(fā)全過程。6、 通話課程設計,培養(yǎng)分析問題、解決實際問題的能力。二、課程設計內容 問題描述:設有一個可以停放n輛汽車的狹長停車場,它只有一個大門可以供車輛進出。車輛按到達停車場時間的早晚依次從停車場最里面向大門口處

2、停放(最先到達的第一輛車放在停車場的最里面)。如果停車場已放滿n輛車,則后來的車輛只能在停車場大門外的便道上等待,一旦停車場內有車開走,則排以便道上的第一輛車就進入停車場。停車場內如有某輛車要開走,在它之后進入停車場的車都必須先退出停車場為它讓路,待其開出停車場后,這些輛再依原來的次序進場。每輛車在離開停車場時,都應根據它在停車場內停留的時間長短交費。如果停留在便道上的車未進停車場時,允許其離去,不收停車費,并且仍然保持在便道上等待的車輛的次序。編制一程序模擬該停車場的管理。 基本要求:要求程序輸出每輛車到達后的停車位置(停車場或便道上),以及某輛車離開停車場應交納的費用和它在停車場內停留的時

3、間。 實現提示:汽車的模擬輸入信息格式可以是:(到達/離去,汽車牌照號碼,到達/離去的時刻)。例如,(A,1,5)表示1號牌照車在5這個時刻到達,而(D,5,20)表示5號牌照車在20這個時刻離去。整個程序可以在輸入信息為(E,0,0)時結束。本題可用棧和隊列來實現。三、概要設計1、設計思想此停車場管理系統是在一個狹長的通道上的,而且只有一個大門可以供車輛進出,并且要實現停車場內某輛車要離開時,在它之后進入停車場的車都必須先退出停車場為它讓路,待其開出停車場后,這些輛再依原來的次序進場的功能,就可以設計兩個堆棧,其中一個堆棧用來模擬停車場,另一個堆棧用來模擬臨時停車場,該臨時停車場用來存放當有

4、車輛離開時,原來停車場內為其讓路的車輛。至于當停車場已滿時,需要停放車輛的通道可以用一個鏈隊列來實現。當停車場內開走一輛車時,通道上便有一輛車進入停車場,此時只需要改變通道上車輛結點的連接方式就可以了,使通道上第一輛車進入停車場這個堆棧,并且使通道上原來的第二輛車成為通道上的第一輛車,此時只需將模擬通道的鏈隊列的頭結點連到原來的第二輛車上就可以了。2、實現方法對于此停車場管理系統的實現,就是用兩個堆棧來分別模擬停車場以及停車場內車輛為其它車輛讓路時退出停車的臨時停放地點。至于通道上車輛的停放則用一個鏈隊列來實現,此時,通道上車輛的離開或者進入停車場只需改變此鏈隊列上的結點而已。對于要對停車場內

5、的車輛根據其停放時間收取相應的停車費用,可以記錄下車輛進入以及離開停車場的時間,再用時間差乘以相應的單價并且打印出最后的費用就可以實現了。3、主要模塊此停車場管理系統,主要分為以下若干模塊:首先定義用來模擬停車場的堆棧以及用來模擬通道的鏈隊列為全局變量,然后編寫主函數,在此主函數中實現對其它各個模塊的調用。在主函數中首先調用option()函數,出現歡迎用戶使用的主界面,然后提示用戶進入此停車場管理系統后,再出現一個供用戶選擇的界面,在用戶的選擇過程中,程序又分別調用車輛的到達、車輛的離開、停車場內停放車輛的信息以及退出程序這四個函數模塊。其中,在車輛的離開那個模塊函數中又調用了打印離開車輛信

6、息的函數,在停車場內停放車輛信息的那個模塊函數中,又分別調用了顯示停車場上車輛信息的函數以及顯示便道上車輛信息的函數。最后,從調鼐的這四個函數中回到主函數結束整個程序的運行。在以上各個模塊中,出現的調用的函數為:void InitStack(SeqStackCar *s);int InitQueue(LinkQueueCar *Q);option();int Arrival(SeqStackCar *Enter,LinkQueueCar *W);void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W);void PRINT

7、(CarNode *p);void List(SeqStackCar S,LinkQueueCar W);void List1(SeqStackCar *S);void List2(LinkQueueCar *W);4、模塊間關系四、調試分析(1) 調試過程中的主要問題由于此停車場管理系統是分模塊設計的,而且在程序的實現過程中又使用了清屏函數,所以,運行時用戶選擇任務并且執(zhí)行完任務后,又會回到供用戶選擇功能的主界面,因此整個程序從整體上來講結構清晰,使用方便。本程序的調試運行,總體上情況良好,但中間也出現了一些小問題。其中比較有代表性的主要問題有:當停車場已經達到最大容量,但仍有車輛進入停車場

8、的時候,運行界面上沒有出現或者說出現了但又跳掉了“停車場已滿,該車輛需在便道上等待!”的提示信息。我們小組成員經過反復商量討論,并且在查閱了多種資料后,在那一個printf語句后加了一個getch(),此時,程序運行結果就符合要求了。(2) 測試結果的分析與討論歡迎界面車輛到達車輛離開車輛信息(車場)車輛信息(便道)五、用戶手冊這個程序用來實現對停車場內車輛的管理,整個操作界面為中文,更加符合人性化的標準,使得用戶使用方便,而且每一個操作都有提示,使得初次接觸該程序的用戶也能很快適應程序的操作。這個程序操作簡單,對于車牌號,只需輸入車牌號上的數字就行,而且對于進出停車場的時間,也簡化了操作,只

9、需輸入當時的時刻就行,沒有具體到小時和分鐘,但也許這也是該程序不足之處所在。而且該程序也給用戶提供了選擇的機會,當點擊運行該程序后,如果想退出程序,可以輸入n或N退出該運行程序。至于使用過程中的更具體的問題,可以參照該報告書中調試分析那一項的屏幕截圖,整個程序的運行界面大致就如上述屏幕截圖的內容。六、附錄1、源程序代碼#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 2 /*車庫容量*/#define price 3 /*每車每時刻費用*/typedef struct node

10、int num;int reachtime;int leavetime;CarNode; /*車輛信息結點*/typedef struct NODE CarNode *stackMAX+1;int top;SeqStackCar; /*模擬車站*/typedef struct car CarNode *data;struct car *next;QueueNode;typedef struct Node QueueNode *head;QueueNode *rear;LinkQueueCar; /*模擬通道*/*-*/ /*函數聲明部分*/void InitStack(SeqStackCar

11、*); /*初始化棧*/int InitQueue(LinkQueueCar *); /*初始化便道*/int Arrival(SeqStackCar *,LinkQueueCar *); /*車輛到達*/void 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<

12、;=240;i+)printf("004");gotoxy(33,8);printf("停車場管理系統");gotoxy(25,12);printf("小組成員:范雯姣 李月敏 丁飛飛");gotoxy(33,16);printf("班級:信息0701");gotoxy(1,20);printf("n*");printf("t1.車輛到達-1 2.車輛離開-2 3.車輛信息-3 4.退出程序-4");printf("n*");printf("nn

13、nt 是否進入該系統(y/n)? ");choice=getchar();if(choice='N'|choice='n')exit(0);void main() SeqStackCar Enter,Temp;LinkQueueCar Wait;int ch;system("graftabl 936");option();InitStack(&Enter); /*初始化車站*/InitStack(&Temp); /*初始化讓路的臨時棧*/InitQueue(&Wait); /*初始化通道*/while(1)

14、clrscr();printf("nnttt1. 車輛到達 請選擇 1");printf("nnttt2. 車輛離開 請選擇 2");printf("nnttt3. 車輛信息 請選擇 3");printf("nnttt4. 退出程序 請選擇 4");printf("nnttt現在請選擇以上信息 : ");while(1) scanf("%d",&ch);printf("n");if(ch>=1&&ch<=4)break;

15、elseprintf("nttt錯誤!請再次做出選擇!nnttt"); switch(ch) case 1:Arrival(&Enter,&Wait); break; /*車輛到達*/case 2:Leave(&Enter,&Temp,&Wait); break; /*車輛離開*/ case 3:List(Enter,Wait); break; /*列表打印信息*/case 4:exit(0); /*退出主程序*/default: break; /*-*/void InitStack(SeqStackCar *s) /*初始化棧*/

16、int i;s->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);elsereturn(-1);void PRINT(CarNode *p) /*打印出站車的信息*/ int A1,A2;printf

17、("nttt請輸入離開時間: ");scanf("%d",&(p->leavetime);printf("nttt離開車輛的車牌號: %d",p->num);printf("nnttt離開車輛到達時間: %d ",p->reachtime);printf("nnttt離開車輛離開時間: %d",p->leavetime);A1=p->reachtime;A2=p->leavetime;printf("nnttt停車場管理費用: %d"

18、;,(A2-A1)*price);free(p);int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*車輛到達*/ CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode);flushall();printf("ttt請輸入到達車輛車牌號: ");scanf("%d",&(p->num);if(Enter->top<MAX) /*車場未滿,車進車場*/ Enter->top+;printf("nttt該車

19、輛在停車場的位置是: %dn",Enter->top);printf("nttt請輸入該車輛到達的時間: ");scanf("%d",&(p->reachtime);Enter->stackEnter->top=p;return(1);else /*車場已滿,車進便道*/ printf("nttt停車場已滿 該車輛需在便道上等待!");getch();t=(QueueNode *)malloc(sizeof(QueueNode);t->data=p;t->next=NULL;W-&

20、gt;rear->next=t;W->rear=t;return(1);void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) /*車輛離開*/ int i, room;CarNode *p,*t;QueueNode *q;/*判斷車場內是否有車*/if(Enter->top>0) /*有車*/ while(1) /*輸入離開車輛的信息*/ printf("ttt停車場里停放的車輛總數: %d",Enter->top); printf("nnttt請輸入要離開車

21、輛的位置: ");scanf("%d",&room);if(room>=1&&room<=Enter->top)break;while(Enter->top>room) /*車輛離開*/ Temp->top+;Temp->stackTemp->top=Enter->stackEnter->top;Enter->stackEnter->top=NULL;Enter->top-;p=Enter->stackEnter->top;Enter->stac

22、kEnter->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<MAX) /*便道的車輛進入車場*/ q=W->head->next

23、;t=q->data;Enter->top+;printf("nnttt便道的%d號車進入車場第%d置.",t->num,Enter->top);printf("nnttt請輸入現在的時間:");scanf("%d",&(t->reachtime);位W->head->next=q->next;if(q=W->rear)W->rear=W->head;Enter->stackEnter->top=t;free(q);elseprintf("

24、nnttt便道里沒有車.n");elseprintf("nnttt車場里沒有車."); /*沒車*/void List1(SeqStackCar *S) /*列表顯示車場信息*/ int i;if(S->top>0) /*判斷車站內是否有車*/ printf("nttt車場:");printf("nnttt位置 到達時間 車牌號n");for(i=1;i<=S->top;i+) printf("%26d",i);printf("%6d",S->stacki

25、->reachtime);printf("%10d",S->stacki->num);printf("n");elseprintf("nttt車場里沒有車");void List2(LinkQueueCar *W) /*列表顯示便道信息*/ QueueNode *p;p=W->head->next;if(W->head!=W->rear) /*判斷通道上是否有車*/ printf("nttt等待車輛的號碼為: ");while(p!=NULL) printf("%

26、-10d",p->data->num);p=p->next;printf("n");elseprintf("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);i

溫馨提示

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

評論

0/150

提交評論