數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)停車場(chǎng)管理系統(tǒng)設(shè)計(jì)報(bào)告_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)停車場(chǎng)管理系統(tǒng)設(shè)計(jì)報(bào)告_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)停車場(chǎng)管理系統(tǒng)設(shè)計(jì)報(bào)告_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)停車場(chǎng)管理系統(tǒng)設(shè)計(jì)報(bào)告_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)停車場(chǎng)管理系統(tǒng)設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上武漢輕工大學(xué)數(shù)學(xué)與計(jì)算機(jī)學(xué)院數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)說(shuō)明書題 目: 專 業(yè): 班 級(jí): 學(xué) 號(hào): 姓 名: 指導(dǎo)老師: 2013年月日目 錄課程設(shè)計(jì)目的1、 通過(guò)課程設(shè)計(jì),加深對(duì)數(shù)據(jù)結(jié)構(gòu)這一課程所學(xué)內(nèi)容的進(jìn)一步理解與鞏固。2、 通過(guò)課程設(shè)計(jì),加深對(duì)結(jié)構(gòu)化設(shè)計(jì)思想的理解,能對(duì)系統(tǒng)功能進(jìn)行分析,并設(shè)計(jì)合理的模塊化結(jié)構(gòu)。3、 通過(guò)課程設(shè)計(jì),提高程序開發(fā)功能,能運(yùn)用合理的控制流程編寫清晰高效的程序。4、 通過(guò)課程設(shè)計(jì),訓(xùn)練C程序調(diào)試能力,能將一個(gè)中小型各級(jí)組織系統(tǒng)聯(lián)調(diào)通過(guò)。5、 通過(guò)課程設(shè)計(jì),開發(fā)一個(gè)中小型系統(tǒng),掌握系統(tǒng)研發(fā)全過(guò)程。6、 通話課程設(shè)計(jì),培養(yǎng)分析問題、解決實(shí)際問題的能力

2、。二、課程設(shè)計(jì)內(nèi)容 問題描述:設(shè)有一個(gè)可以停放n輛汽車的狹長(zhǎng)停車場(chǎng),它只有一個(gè)大門可以供車輛進(jìn)出。車輛按到達(dá)停車場(chǎng)時(shí)間的早晚依次從停車場(chǎng)最里面向大門口處停放(最先到達(dá)的第一輛車放在停車場(chǎng)的最里面)。如果停車場(chǎng)已放滿n輛車,則后來(lái)的車輛只能在停車場(chǎng)大門外的便道上等待,一旦停車場(chǎng)內(nèi)有車開走,則排以便道上的第一輛車就進(jìn)入停車場(chǎng)。停車場(chǎng)內(nèi)如有某輛車要開走,在它之后進(jìn)入停車場(chǎng)的車都必須先退出停車場(chǎng)為它讓路,待其開出停車場(chǎng)后,這些輛再依原來(lái)的次序進(jìn)場(chǎng)。每輛車在離開停車場(chǎng)時(shí),都應(yīng)根據(jù)它在停車場(chǎng)內(nèi)停留的時(shí)間長(zhǎng)短交費(fèi)。如果停留在便道上的車未進(jìn)停車場(chǎng)時(shí),允許其離去,不收停車費(fèi),并且仍然保持在便道上等待的車輛的次序

3、。編制一程序模擬該停車場(chǎng)的管理。 基本要求:要求程序輸出每輛車到達(dá)后的停車位置(停車場(chǎng)或便道上),以及某輛車離開停車場(chǎng)應(yīng)交納的費(fèi)用和它在停車場(chǎng)內(nèi)停留的時(shí)間。 實(shí)現(xiàn)提示:汽車的模擬輸入信息格式可以是:(到達(dá)/離去,汽車牌照號(hào)碼,到達(dá)/離去的時(shí)刻)。例如,(A,1,5)表示1號(hào)牌照車在5這個(gè)時(shí)刻到達(dá),而(D,5,20)表示5號(hào)牌照車在20這個(gè)時(shí)刻離去。整個(gè)程序可以在輸入信息為(E,0,0)時(shí)結(jié)束。本題可用棧和隊(duì)列來(lái)實(shí)現(xiàn)。三、概要設(shè)計(jì)1、設(shè)計(jì)思想此停車場(chǎng)管理系統(tǒng)是在一個(gè)狹長(zhǎng)的通道上的,而且只有一個(gè)大門可以供車輛進(jìn)出,并且要實(shí)現(xiàn)停車場(chǎng)內(nèi)某輛車要離開時(shí),在它之后進(jìn)入停車場(chǎng)的車都必須先退出停車場(chǎng)為它讓路,

4、待其開出停車場(chǎng)后,這些輛再依原來(lái)的次序進(jìn)場(chǎng)的功能,就可以設(shè)計(jì)兩個(gè)堆棧,其中一個(gè)堆棧用來(lái)模擬停車場(chǎng),另一個(gè)堆棧用來(lái)模擬臨時(shí)停車場(chǎng),該臨時(shí)停車場(chǎng)用來(lái)存放當(dāng)有車輛離開時(shí),原來(lái)停車場(chǎng)內(nèi)為其讓路的車輛。至于當(dāng)停車場(chǎng)已滿時(shí),需要停放車輛的通道可以用一個(gè)鏈隊(duì)列來(lái)實(shí)現(xiàn)。當(dāng)停車場(chǎng)內(nèi)開走一輛車時(shí),通道上便有一輛車進(jìn)入停車場(chǎng),此時(shí)只需要改變通道上車輛結(jié)點(diǎn)的連接方式就可以了,使通道上第一輛車進(jìn)入停車場(chǎng)這個(gè)堆棧,并且使通道上原來(lái)的第二輛車成為通道上的第一輛車,此時(shí)只需將模擬通道的鏈隊(duì)列的頭結(jié)點(diǎn)連到原來(lái)的第二輛車上就可以了。2、實(shí)現(xiàn)方法對(duì)于此停車場(chǎng)管理系統(tǒng)的實(shí)現(xiàn),就是用兩個(gè)堆棧來(lái)分別模擬停車場(chǎng)以及停車場(chǎng)內(nèi)車輛為其它車輛讓

5、路時(shí)退出停車的臨時(shí)停放地點(diǎn)。至于通道上車輛的停放則用一個(gè)鏈隊(duì)列來(lái)實(shí)現(xiàn),此時(shí),通道上車輛的離開或者進(jìn)入停車場(chǎng)只需改變此鏈隊(duì)列上的結(jié)點(diǎn)而已。對(duì)于要對(duì)停車場(chǎng)內(nèi)的車輛根據(jù)其停放時(shí)間收取相應(yīng)的停車費(fèi)用,可以記錄下車輛進(jìn)入以及離開停車場(chǎng)的時(shí)間,再用時(shí)間差乘以相應(yīng)的單價(jià)并且打印出最后的費(fèi)用就可以實(shí)現(xiàn)了。3、主要模塊此停車場(chǎng)管理系統(tǒng),主要分為以下若干模塊:首先定義用來(lái)模擬停車場(chǎng)的堆棧以及用來(lái)模擬通道的鏈隊(duì)列為全局變量,然后編寫主函數(shù),在此主函數(shù)中實(shí)現(xiàn)對(duì)其它各個(gè)模塊的調(diào)用。在主函數(shù)中首先調(diào)用option()函數(shù),出現(xiàn)歡迎用戶使用的主界面,然后提示用戶進(jìn)入此停車場(chǎng)管理系統(tǒng)后,再出現(xiàn)一個(gè)供用戶選擇的界面,在用戶的選

6、擇過(guò)程中,程序又分別調(diào)用車輛的到達(dá)、車輛的離開、停車場(chǎng)內(nèi)停放車輛的信息以及退出程序這四個(gè)函數(shù)模塊。其中,在車輛的離開那個(gè)模塊函數(shù)中又調(diào)用了打印離開車輛信息的函數(shù),在停車場(chǎng)內(nèi)停放車輛信息的那個(gè)模塊函數(shù)中,又分別調(diào)用了顯示停車場(chǎng)上車輛信息的函數(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)

7、;void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W);void PRINT(CarNode *p);void List(SeqStackCar S,LinkQueueCar W);void List1(SeqStackCar *S);void List2(LinkQueueCar *W);4、模塊間關(guān)系四、調(diào)試分析(1) 調(diào)試過(guò)程中的主要問題由于此停車場(chǎng)管理系統(tǒng)是分模塊設(shè)計(jì)的,而且在程序的實(shí)現(xiàn)過(guò)程中又使用了清屏函數(shù),所以,運(yùn)行時(shí)用戶選擇任務(wù)并且執(zhí)行完任務(wù)后,又會(huì)回到供用戶選擇功能的主界面,因此整個(gè)程序從整體上來(lái)講結(jié)構(gòu)

8、清晰,使用方便。本程序的調(diào)試運(yùn)行,總體上情況良好,但中間也出現(xiàn)了一些小問題。其中比較有代表性的主要問題有:當(dāng)停車場(chǎng)已經(jīng)達(dá)到最大容量,但仍有車輛進(jìn)入停車場(chǎng)的時(shí)候,運(yùn)行界面上沒有出現(xiàn)或者說(shuō)出現(xiàn)了但又跳掉了“停車場(chǎng)已滿,該車輛需在便道上等待!”的提示信息。我們小組成員經(jīng)過(guò)反復(fù)商量討論,并且在查閱了多種資料后,在那一個(gè)printf語(yǔ)句后加了一個(gè)getch(),此時(shí),程序運(yùn)行結(jié)果就符合要求了。(2) 測(cè)試結(jié)果的分析與討論歡迎界面車輛到達(dá)車輛離開車輛信息(車場(chǎng))車輛信息(便道)五、用戶手冊(cè)這個(gè)程序用來(lái)實(shí)現(xiàn)對(duì)停車場(chǎng)內(nèi)車輛的管理,整個(gè)操作界面為中文,更加符合人性化的標(biāo)準(zhǔn),使得用戶使用方便,而且每一個(gè)操作都有提

9、示,使得初次接觸該程序的用戶也能很快適應(yīng)程序的操作。這個(gè)程序操作簡(jiǎn)單,對(duì)于車牌號(hào),只需輸入車牌號(hào)上的數(shù)字就行,而且對(duì)于進(jìn)出停車場(chǎng)的時(shí)間,也簡(jiǎn)化了操作,只需輸入當(dāng)時(shí)的時(shí)刻就行,沒有具體到小時(shí)和分鐘,但也許這也是該程序不足之處所在。而且該程序也給用戶提供了選擇的機(jī)會(huì),當(dāng)點(diǎn)擊運(yùn)行該程序后,如果想退出程序,可以輸入n或N退出該運(yùn)行程序。至于使用過(guò)程中的更具體的問題,可以參照該報(bào)告書中調(diào)試分析那一項(xiàng)的屏幕截圖,整個(gè)程序的運(yùn)行界面大致就如上述屏幕截圖的內(nèi)容。六、附錄1、源程序代碼#include<stdio.h> #include<stdlib.h>#include<stri

10、ng.h>#define MAX 2 /*車庫(kù)容量*/ #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; /*模擬車站*/typedef struct car CarNode *data; struct car *next; QueueNode; typedef struct Node QueueNode

11、 *head; QueueNode *rear; LinkQueueCar; /*模擬通道*/*-*/ /*函數(shù)聲明部分*/ void InitStack(SeqStackCar *); /*初始化棧*/ int InitQueue(LinkQueueCar *); /*初始化便道*/ int Arrival(SeqStackCar *,LinkQueueCar *); /*車輛到達(dá)*/ void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*車輛離開*/ void List(SeqStackCar,LinkQueueCar); /*

12、顯示存車信息*/ void PRINT(CarNode *p) ;/*-*/ void option() int i; char choice; gotoxy(0,0); for(i=1;i<=240;i+) printf("004"); gotoxy(33,8); printf("停車場(chǎng)管理系統(tǒng)"); gotoxy(25,12); printf("小組成員:范雯姣 李月敏 丁飛飛"); gotoxy(33,16); printf("班級(jí):信息0701"); gotoxy(1,20); printf(&quo

13、t;n*"); printf("t1.車輛到達(dá)-1 2.車輛離開-2 3.車輛信息-3 4.退出程序-4"); printf("n*"); printf("nnnt 是否進(jìn)入該系統(tǒng)(y/n)? "); choice=getchar(); if(choice='N'|choice='n') exit(0); void main() SeqStackCar Enter,Temp; LinkQueueCar Wait; int ch; system("graftabl 936")

14、; option();InitStack(&Enter); /*初始化車站*/ InitStack(&Temp); /*初始化讓路的臨時(shí)棧*/ InitQueue(&Wait); /*初始化通道*/ while(1) clrscr(); printf("nnttt1. 車輛到達(dá) 請(qǐng)選擇 1"); printf("nnttt2. 車輛離開 請(qǐng)選擇 2"); printf("nnttt3. 車輛信息 請(qǐng)選擇 3"); printf("nnttt4. 退出程序 請(qǐng)選擇 4"); printf(&q

15、uot;nnttt現(xiàn)在請(qǐng)選擇以上信息 : ");while(1) scanf("%d",&ch); printf("n"); if(ch>=1&&ch<=4)break; else printf("nttt錯(cuò)誤!請(qǐng)?jiān)俅巫龀鲞x擇!nnttt"); switch(ch) case 1:Arrival(&Enter,&Wait); break; /*車輛到達(dá)*/ case 2:Leave(&Enter,&Temp,&Wait); break; /*車輛離開

16、*/ case 3:List(Enter,Wait); break; /*列表打印信息*/ case 4:exit(0); /*退出主程序*/ default: break; /*-*/ void InitStack(SeqStackCar *s) /*初始化棧*/ 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-&

17、gt;head!=NULL) Q->head->next=NULL; Q->rear=Q->head; return(1); else return(-1); void PRINT(CarNode *p) /*打印出站車的信息*/ int A1,A2; printf("nttt請(qǐng)輸入離開時(shí)間: "); scanf("%d",&(p->leavetime); printf("nttt離開車輛的車牌號(hào): %d",p->num); printf("nnttt離開車輛到達(dá)時(shí)間: %d &q

18、uot;,p->reachtime); printf("nnttt離開車輛離開時(shí)間: %d",p->leavetime); A1=p->reachtime; A2=p->leavetime; printf("nnttt停車場(chǎng)管理費(fèi)用: %d",(A2-A1)*price); free(p); int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*車輛到達(dá)*/ CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); f

19、lushall(); printf("ttt請(qǐng)輸入到達(dá)車輛車牌號(hào): "); scanf("%d",&(p->num); if(Enter->top<MAX) /*車場(chǎng)未滿,車進(jìn)車場(chǎng)*/ Enter->top+; printf("nttt該車輛在停車場(chǎng)的位置是: %dn",Enter->top); printf("nttt請(qǐng)輸入該車輛到達(dá)的時(shí)間: "); scanf("%d",&(p->reachtime); Enter->stackEnt

20、er->top=p; return(1); else /*車場(chǎng)已滿,車進(jìn)便道*/ printf("nttt停車場(chǎng)已滿 該車輛需在便道上等待!"); 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,SeqStackCar *Temp,LinkQueueCar *W) /*車輛離開*/ int i, roo

21、m; CarNode *p,*t; QueueNode *q; /*判斷車場(chǎng)內(nèi)是否有車*/ if(Enter->top>0) /*有車*/ while(1) /*輸入離開車輛的信息*/ printf("ttt停車場(chǎng)里停放的車輛總數(shù): %d",Enter->top); printf("nnttt請(qǐng)輸入要離開車輛的位置: "); scanf("%d",&room); if(room>=1&&room<=Enter->top) break; while(Enter->top&

22、gt;room) /*車輛離開*/ Temp->top+; Temp->stackTemp->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-

23、>stackTemp->top; Temp->stackTemp->top=NULL; Temp->top-; PRINT(p);/*判斷通道上是否有車及車站是否已滿*/ if(W->head!=W->rear)&&Enter->top<MAX) /*便道的車輛進(jìn)入車場(chǎng)*/ q=W->head->next; t=q->data; Enter->top+; printf("nnttt便道的%d號(hào)車進(jìn)入車場(chǎng)第%d位置.",t->num,Enter->top); printf

24、("nnttt請(qǐng)輸入現(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車場(chǎng)里沒有車."); /*沒車*/ void List1(SeqStackCar *S)

25、 /*列表顯示車場(chǎng)信息*/ int i; if(S->top>0) /*判斷車站內(nèi)是否有車*/ printf("nttt車場(chǎng):"); printf("nnttt位置 到達(dá)時(shí)間 車牌號(hào)n"); for(i=1;i<=S->top;i+) printf("%26d",i); printf("%6d",S->stacki->reachtime); printf("%10d",S->stacki->num); printf("n");

26、else printf("nttt車場(chǎng)里沒有車"); void List2(LinkQueueCar *W) /*列表顯示便道信息*/ QueueNode *p; p=W->head->next; if(W->head!=W->rear) /*判斷通道上是否有車*/ printf("nttt等待車輛的號(hào)碼為: "); 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請(qǐng)選擇 1|2|3:"); printf("nnttt1.車場(chǎng)nnttt2.便道nnttt3.返回nnttt"); while(1) scanf("%d",&

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論