版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C課程設(shè)計(jì)報(bào)告C語(yǔ)言課程設(shè)計(jì)報(bào)告停車場(chǎng)管理1班 級(jí): 192102學(xué) 號(hào): 20101003907姓 名: 聶 彪指導(dǎo)教師: 張冬梅時(shí) 間: 2011年6月7日目錄一、 題目及要求二、 題目及要求三、 題目及要求四、 題目分析五、 數(shù)據(jù)結(jié)構(gòu)說(shuō)明六、 各函數(shù)算法分析七、 程序測(cè)試八、 課程設(shè)計(jì)感悟與收獲九、 源代碼一、 題目及要求要求設(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)有車開(kāi)走,則排在便道
2、上的第一輛國(guó)就進(jìn)入停車場(chǎng)。停車場(chǎng)內(nèi)如有某輛車要走,在它之后進(jìn)來(lái)的車都必須退出停車場(chǎng)為它讓路,待其開(kāi)出停車場(chǎng)后,這些車輛再依原來(lái)的次序進(jìn)場(chǎng)。每輛車在離開(kāi)停車場(chǎng)時(shí),都應(yīng)根據(jù)它在停車場(chǎng)內(nèi)停留的時(shí)間長(zhǎng)短交費(fèi)。如果停留在便道上的車未進(jìn)停車場(chǎng)就要離去,允許其離去,不收停車費(fèi),并且其他在便道上等待的車輛的次序不變。編制一程序模擬停車場(chǎng)管理。提示汽車的模擬輸入信息格式可以是:(到達(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é)束?;疽螅阂蟪绦蜉敵雒枯v車到達(dá)后的停車位
3、置(停車場(chǎng)或便道上),以及某輛車離開(kāi)停車場(chǎng)時(shí)應(yīng)交的費(fèi)用和它在停車場(chǎng)內(nèi)停留的時(shí)間。根據(jù)題目要求,停車場(chǎng)可以用一個(gè)長(zhǎng)度為n的堆棧來(lái)模擬。由于停車場(chǎng)內(nèi)如有某輛車要開(kāi)走,在它之后進(jìn)來(lái)的車都必須先退出停車場(chǎng)為它讓路,待其開(kāi)出停車場(chǎng)后,這些車輛再依原來(lái)的次序進(jìn)場(chǎng)。所以可以設(shè)兩個(gè)堆棧。二、題目分析由于停車場(chǎng)是一個(gè)狹窄通道,而且只有一個(gè)大門可供汽車進(jìn)出,問(wèn)題要求汽車在停車場(chǎng)內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列。由此很容易聯(lián)想到用結(jié)構(gòu)體數(shù)組來(lái)存儲(chǔ)車庫(kù)信息。又每個(gè)汽車的車牌號(hào)都不一樣,這樣一來(lái)就可以根據(jù)車牌號(hào)準(zhǔn)確找到汽車位置。當(dāng)停車場(chǎng)內(nèi)某輛車要離開(kāi)時(shí),在他之后進(jìn)入的汽車必須再按原次序進(jìn)入車庫(kù)。這是一個(gè)一退
4、一進(jìn)的過(guò)程,而且讓道的汽車必須保持原有的先后順序,因此可再設(shè)計(jì)一個(gè)結(jié)構(gòu)體數(shù)組,用來(lái)暫時(shí)存放為出站汽車暫時(shí)讓道的汽車車牌號(hào)。當(dāng)車庫(kù)滿后,繼續(xù)進(jìn)來(lái)的汽車需要停放在車庫(kù)旁邊的便道上等候,若車庫(kù)滿后,繼續(xù)進(jìn)來(lái)的汽車需要停放在車庫(kù)旁邊的便道上等候,若車有汽車開(kāi)走,這完全是一個(gè)先進(jìn)先出模型,因此可以設(shè)計(jì)一個(gè)隊(duì)列來(lái)模擬便道,隊(duì)列中的數(shù)據(jù)元素仍然設(shè)計(jì)成汽車的車牌號(hào)。另外,停車場(chǎng)是根據(jù)汽車在停車場(chǎng)內(nèi)停放的總長(zhǎng)來(lái)收費(fèi)的,在便道上的時(shí)間不計(jì)費(fèi),因此必須記錄車輛進(jìn)入車庫(kù)時(shí)的時(shí)間,車輛離開(kāi)車庫(kù)時(shí)的時(shí)間不需要記錄,當(dāng)從終端輸入時(shí)可直接使用。另外,題目提示中的表示方法(A,1,5)表示1號(hào)牌照車在5這個(gè)時(shí)刻到達(dá)有兩點(diǎn)不好;
5、一、對(duì)用戶友好程度不高,用起來(lái)并不方便;二、不接近實(shí)際情況,生活中表示時(shí)間的格式為“-:-”,完全可以建立一個(gè)時(shí)間結(jié)點(diǎn)來(lái)實(shí)現(xiàn)。因此,實(shí)際編程中將對(duì)這一方面予以優(yōu)化。三、數(shù)據(jù)結(jié)構(gòu)說(shuō)明根據(jù)題意,停車場(chǎng)中的空間分為車庫(kù)和便道。這里用結(jié)構(gòu)體來(lái)模擬車庫(kù)和便道,按照從端讀入數(shù)據(jù)序進(jìn)行管理。模擬車庫(kù)和模擬便道中分別用結(jié)構(gòu)體數(shù)組和鏈表來(lái)存儲(chǔ)車輛信息。模擬車庫(kù)和模擬便道的數(shù)據(jù)結(jié)構(gòu)如下表1和表2所示:Moni_cheku結(jié)構(gòu)體CarNode *stackMAX+1結(jié)構(gòu)體數(shù)組char num10Time reach結(jié)構(gòu)體int hourint minTime leave結(jié)構(gòu)體int hourint minint t
6、op表1 模擬車庫(kù)的數(shù)據(jù)結(jié)構(gòu)Moni_biandao結(jié)構(gòu)體QueueNode*head鏈表CarNode *data數(shù)組char num 10Time reach結(jié)構(gòu)體int hourint minTime leave結(jié)構(gòu)體int hourint minStruct car *nextQueueNode *rear鏈表CarNode *data數(shù)組char num 10Time reach結(jié)構(gòu)體int hourint minTime leave結(jié)構(gòu)體int hourint minStruct car *next表2 模擬便道的數(shù)據(jù)結(jié)構(gòu)用C語(yǔ)言實(shí)現(xiàn)這一部分為:typedef struct tim
7、e int hour; int min; Time; /*時(shí)間結(jié)點(diǎn)*/typedef struct node char num10; Time reach; Time leave; CarNode;/*車輛信息結(jié)點(diǎn)*/ typedef struct NODE CarNode *stackMAX+1; int top; Moni_Cheku; typedef struct car CarNode *data; struct car *next; QueueNode; typedef struct Node QueueNode *head; QueueNode *rear; Moni_Bianda
8、o;四、 各函數(shù)算法分析(1)主函數(shù)void main() Moni_Cheku Enter,Temp; Moni_Biandao Wait; int ch; InitStack(&Enter); /*初始化車站*/ InitStack(&Temp); /*初始化讓路的臨時(shí)鏈表*/ InitQueue(&Wait); /*初始化便道*/ printf(n); printf( _歡迎進(jìn)入停車場(chǎng)管理系統(tǒng)1!_n); printf(n); printf(提示! (1).該車庫(kù)的最大容量為:%d;n ,MAX); printf( (2).該車庫(kù)的收費(fèi)標(biāo)準(zhǔn)為:%4.2f元/(輛*分鐘).n,price)
9、; while(1) printf(*主菜單*n); printf(1.車輛到達(dá)); printf( 2.車輛離開(kāi)); printf( 3.列表顯示); printf( 4.退出系統(tǒng)n); printf(*n); printf(請(qǐng)選擇(1-4): bb); while(1) scanf(%d,&ch); if(ch=1&chnum); if(Enter-toptop+; printf(該車在車庫(kù)位置%d.n,Enter-top); printf(請(qǐng)輸入到達(dá)時(shí)間(*:*):); scanf(%d:%d,&(p-reach.hour),&(p-reach.min); Enter-stackEnte
10、r-top=p; return(1); else /*車庫(kù)已滿,車進(jìn)便道*/ printf(該車須在便道等待!n); t=(QueueNode *)malloc(sizeof(QueueNode); t-data=p; t-next=NULL; W-rear-next=t; W-rear=t; return(1); 車輛到達(dá)輸入車牌號(hào)車庫(kù)滿否否是車進(jìn)車庫(kù)車進(jìn)便道(3)車輛離開(kāi)函數(shù)void Leave(Moni_Cheku *Enter,Moni_Cheku *Temp,Moni_Biandao *W) /*車輛離開(kāi)*/ int i, room; CarNode *p,*t; QueueNode
11、 *q; /*判斷車庫(kù)內(nèi)是否有車*/ if(Enter-top0) /*有車*/ printf(請(qǐng)輸入車在車庫(kù)的位置(1-%d):,Enter-top);/*輸入車輛離開(kāi)的信息*/while(1) scanf(%d,&room); if(room=1&roomtop) break; else printf(錯(cuò)誤!請(qǐng)重選:); while(Enter-toproom) /*車輛離開(kāi)*/ Temp-top+; Temp-stackTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; p=Enter-stackEn
12、ter-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,room); /*判斷通道上是否有車及車庫(kù)是否已滿*/ if(W-head!=W-rear)&Enter-tophead-next; t=q-data; Enter-top+; printf(n便道的%s號(hào)車進(jìn)入車場(chǎng)第%d位置.,t-num,Enter-top); prin
13、tf(n請(qǐng)輸入現(xiàn)在的時(shí)間(*:*):); scanf(%d:%d,&(t-reach.hour),&(t-reach.min); W-head-next=q-next; if(q=W-rear) W-rear=W-head; Enter-stackEnter-top=t; free(q); else printf(n便道里沒(méi)有車.n); else printf(車庫(kù)里沒(méi)有車!n); /*沒(méi)車*/該位置的車離開(kāi),且輸出該車的收費(fèi)等信息車庫(kù)有車否車輛離開(kāi)有輸入車的位置是否輸入錯(cuò)誤是否輸出“便道里沒(méi)有車”無(wú)便道若有車,便道的第一輛車進(jìn)入車庫(kù),若便道無(wú)車,則不做處理(3)列表顯示函數(shù)void List
14、(Moni_Cheku S,Moni_Biandao W) int flag,tag; flag=1; while(flag) printf(*查看*n); printf(1.車庫(kù) 2.便道 3.返回n); printf(*n); printf(請(qǐng)選擇(1-3): bb); while(1) scanf(%d,&tag); f(tag=1&tagtop0) /*判斷車庫(kù)內(nèi)是否有車*/ printf(車庫(kù):); printf(n位置 到達(dá)時(shí)間 車牌號(hào)n); for(i=1;itop;i+) printf( %d ,i); printf( %d:%d ,S-stacki-reach.hour,S-
15、stacki-reach.min); puts(S-stacki-num); else printf(車庫(kù)里沒(méi)有車n); 輸出“車庫(kù)里沒(méi)有車”輸出車庫(kù)里的車輛作息否是車庫(kù)是否有車 void List2(Moni_Biandao *W) /*列表顯示便道信息*/ QueueNode *p; p=W-head-next; if(W-head!=W-rear) /*判斷便道上是否有車*/ printf(在便道里等待的車輛的號(hào)碼為:n); while(p!=NULL) puts(p-data-num); p=p-next; else printf(便道里沒(méi)有車.n); 便道上是否有車是否輸出等待車輛的
16、號(hào)碼輸出“便道里沒(méi)有車”五、 程序測(cè)試(1) 測(cè)試系統(tǒng)對(duì)錯(cuò)誤信息的處理(2) 進(jìn)入2輛車,車均進(jìn)車庫(kù),便道上無(wú)車,并進(jìn)行列表顯示(3)再進(jìn)入3輛車,第一輛車進(jìn)車庫(kù),后2輛車在便道等待,同時(shí)輸出等待的提示作息,最后列表顯示以查尋結(jié)果,此時(shí)車庫(kù)已滿,便道上有2輛車在等待。(4)離開(kāi)停車位1和停車位2上的2輛車,同時(shí)輸入它們離開(kāi)的時(shí)間,并計(jì)算它們的應(yīng)交費(fèi)用。離開(kāi)后,車庫(kù)里便有空出2個(gè)停車位,這時(shí)便道里的前2輛車就可進(jìn)入車庫(kù),便道里的進(jìn)入車庫(kù)里要記錄它們進(jìn)去的時(shí)間,開(kāi)始計(jì)時(shí)收費(fèi)。最后進(jìn)行列表顯示,車庫(kù)里應(yīng)仍有3輛車,便道應(yīng)無(wú)車。說(shuō)明:該系統(tǒng)仍可繼續(xù)工作,隨時(shí)在主菜單中選擇4便可退出系統(tǒng)。六、 課程設(shè)計(jì)
17、感悟與收獲(1)在此次課程設(shè)計(jì)中第一次真正體會(huì)到了編程的感覺(jué),當(dāng)投入其中時(shí),感覺(jué)不到時(shí)間的流逝,只有突然會(huì)發(fā)現(xiàn)一個(gè)下午或是一個(gè)晚上過(guò)去了。(2)由于課本上只介紹了數(shù)組、結(jié)構(gòu)體、鏈表的用法,而此次課程設(shè)計(jì)中要用到堆、棧、隊(duì)列的知識(shí),因此我利用課余時(shí)間查找這方面的內(nèi)容,通過(guò)自學(xué)不僅了解到了一些這方面的知識(shí),還鍛煉了自己的自學(xué)能力。(3)這次課程設(shè)計(jì)不同于平時(shí)的練習(xí),平時(shí)的練習(xí)都是一些小程序,雖然知道模塊化編程的好處,但從沒(méi)有這一次體會(huì)得深。七、 源代碼#include #include #include #define MAX 3 /*車庫(kù)容量*/#define price 0.5 /*每車每分鐘
18、費(fèi)用*/ typedef struct time int hour; int min; Time; /*時(shí)間結(jié)點(diǎn)*/typedef struct node char num10; Time reach; Time leave; CarNode;/*車輛信息結(jié)點(diǎn)*/ typedef struct NODE CarNode *stackMAX+1; int top; Moni_Cheku; typedef struct car CarNode *data; struct car *next; QueueNode; typedef struct Node QueueNode *head; Queue
19、Node *rear; Moni_Biandao; void InitStack(Moni_Cheku *); /*初始化車庫(kù)*/int InitQueue(Moni_Biandao *); /*初始化便道*/int Arrival(Moni_Cheku *,Moni_Biandao *); /*車輛到達(dá)*/void Leave(Moni_Cheku *,Moni_Cheku *,Moni_Biandao *); /*車輛離開(kāi)*/void List(Moni_Cheku,Moni_Biandao); /*顯示車庫(kù)和便道的存車信息*/void main() Moni_Cheku Enter,Te
20、mp; Moni_Biandao Wait; int ch; InitStack(&Enter); /*初始化車站*/ InitStack(&Temp); /*初始化讓路的臨時(shí)鏈表*/ InitQueue(&Wait); /*初始化便道*/ printf(n); printf( _歡迎進(jìn)入停車場(chǎng)管理系統(tǒng)1!_n); printf(n); printf(提示! (1).該車庫(kù)的最大容量為:%d;n ,MAX); printf( (2).該車庫(kù)的收費(fèi)標(biāo)準(zhǔn)為:%4.2f元/(輛*分鐘).n,price); while(1) printf(*主菜單*n); printf(1.車輛到達(dá)); printf
21、( 2.車輛離開(kāi)); printf( 3.列表顯示); printf( 4.退出系統(tǒng)n); printf(*n); printf(請(qǐng)選擇(1-4): bb); while(1) scanf(%d,&ch); if(ch=1&chtop=0; for(i=0;istacks-top=NULL; int InitQueue(Moni_Biandao *Q) /*初始化便道*/ Q-head=(QueueNode *)malloc(sizeof(QueueNode); if(Q-head!=NULL) Q-head-next=NULL; Q-rear=Q-head; return(1); else
22、return(-1); void PRINT(CarNode *p,int room) /*輸出出庫(kù)車的信息*/ int A1,A2,B1,B2; printf(請(qǐng)輸入離開(kāi)的時(shí)間:/*:*/); scanf(%d:%d,&(p-leave.hour),&(p-leave.min); printf(離開(kāi)車輛的車牌號(hào)為:); puts(p-num); printf(其到達(dá)時(shí)間為: %d:%dn,p-reach.hour,p-reach.min); printf(離開(kāi)時(shí)間為: %d:%dn,p-leave.hour,p-leave.min); A1=p-reach.hour; A2=p-reach.
23、min; B1=p-leave.hour; B2=p-leave.min; printf(應(yīng)交費(fèi)用為:%4.2f元,(B1-A1)*60+(B2-A2)*price); free(p); int Arrival(Moni_Cheku *Enter,Moni_Biandao *W) /*車輛到達(dá)*/ CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); flushall(); printf(請(qǐng)輸入車牌號(hào)(例如:中CUG888):); gets(p-num); if(Enter-toptop+; printf(該車在車庫(kù)位置%
24、d.n,Enter-top); printf(請(qǐng)輸入到達(dá)時(shí)間(*:*):); scanf(%d:%d,&(p-reach.hour),&(p-reach.min); Enter-stackEnter-top=p; return(1); else /*車庫(kù)已滿,車進(jìn)便道*/ printf(該車須在便道等待!n); t=(QueueNode *)malloc(sizeof(QueueNode); t-data=p; t-next=NULL; W-rear-next=t; W-rear=t; return(1); void Leave(Moni_Cheku *Enter,Moni_Cheku *Te
25、mp,Moni_Biandao *W) /*車輛離開(kāi)*/ int i, room; CarNode *p,*t; QueueNode *q; /*判斷車庫(kù)內(nèi)是否有車*/ if(Enter-top0) /*有車*/ printf(請(qǐng)輸入車在車庫(kù)的位置(1-%d):,Enter-top);/*輸入車輛離開(kāi)的信息*/ while(1) scanf(%d,&room); if(room=1&roomtop) break; else printf(錯(cuò)誤!請(qǐng)重選:); while(Enter-toproom) /*車輛離開(kāi)*/ Temp-top+; Temp-stackTemp-top=Enter-sta
26、ckEnter-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,room); /*判斷通道上是否有車及車庫(kù)是否已滿*/ if(W-head!=W-rear)&Enter-tophead-next; t=q
27、-data; Enter-top+; printf(n便道的%s號(hào)車進(jìn)入車場(chǎng)第%d位置.,t-num,Enter-top); printf(n請(qǐng)輸入現(xiàn)在的時(shí)間(*:*):); scanf(%d:%d,&(t-reach.hour),&(t-reach.min); W-head-next=q-next; if(q=W-rear) W-rear=W-head; Enter-stackEnter-top=t; free(q); else printf(n便道里沒(méi)有車.n); else printf(車庫(kù)里沒(méi)有車!n); /*沒(méi)車*/void List1(Moni_Cheku *S) /*列表顯示車庫(kù)信息*/ int i; if(S-top0) /*判斷車庫(kù)內(nèi)是否有車*/ printf(車庫(kù):); printf(n位置 到達(dá)時(shí)間 車牌號(hào)n); for(i=1;itop;i+) printf( %d ,i); printf( %d:%d ,S-stacki-reach.hour,S-stacki-reach.min); puts(S-stacki-num); else
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)互聯(lián)對(duì)全球化經(jīng)濟(jì)的影響力
- 愛(ài)洗手的好寶寶健康活動(dòng)
- 河南省2024九年級(jí)語(yǔ)文上冊(cè)第五單元19懷疑與學(xué)問(wèn)課件新人教版
- 紅細(xì)胞增多癥的診斷與治療
- 結(jié)核骨影像鑒別病
- 吉林省2024七年級(jí)數(shù)學(xué)上冊(cè)第2章整式及其加減2.4整式的加減4.整式的加減課件新版華東師大版
- 黃瓜生長(zhǎng)期枯萎病與防治
- 骨傷科的治療方法
- 氧化碳制取的研究的說(shuō)課稿
- 紅樓夢(mèng)說(shuō)課稿
- 臨戰(zhàn)轉(zhuǎn)換措施
- 氧化還原反應(yīng)電化學(xué)基礎(chǔ)
- GB/T 5269-1999傳動(dòng)及輸送用雙節(jié)距精密滾子鏈和鏈輪
- GB/T 30790.8-2014色漆和清漆防護(hù)涂料體系對(duì)鋼結(jié)構(gòu)的防腐蝕保護(hù)第8部分:新建和維護(hù)技術(shù)規(guī)格書(shū)的制定
- GB/T 25217.4-2019沖擊地壓測(cè)定、監(jiān)測(cè)與防治方法第4部分:微震監(jiān)測(cè)方法
- GB/T 23887-2009食品包裝容器及材料生產(chǎn)企業(yè)通用良好操作規(guī)范
- 2010年以前-課后習(xí)題答案
- GB/T 1355-2021小麥粉
- 社會(huì)網(wǎng)絡(luò)分析課件
- 抗微生物藥物課件
- 大學(xué)生就業(yè)簡(jiǎn)歷制作與面試技巧課件
評(píng)論
0/150
提交評(píng)論