![程序設(shè)計(jì)完整版_第1頁(yè)](http://file4.renrendoc.com/view/dee42156b235ecb5453bceedde95991f/dee42156b235ecb5453bceedde95991f1.gif)
![程序設(shè)計(jì)完整版_第2頁(yè)](http://file4.renrendoc.com/view/dee42156b235ecb5453bceedde95991f/dee42156b235ecb5453bceedde95991f2.gif)
![程序設(shè)計(jì)完整版_第3頁(yè)](http://file4.renrendoc.com/view/dee42156b235ecb5453bceedde95991f/dee42156b235ecb5453bceedde95991f3.gif)
![程序設(shè)計(jì)完整版_第4頁(yè)](http://file4.renrendoc.com/view/dee42156b235ecb5453bceedde95991f/dee42156b235ecb5453bceedde95991f4.gif)
![程序設(shè)計(jì)完整版_第5頁(yè)](http://file4.renrendoc.com/view/dee42156b235ecb5453bceedde95991f/dee42156b235ecb5453bceedde95991f5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2012年 1月11 32 33 34 44.1需求分析 .44.2總體設(shè)計(jì).44.3詳細(xì)設(shè)計(jì).74.4測(cè)試與分析.14 5 21 設(shè)計(jì)時(shí)間是第 20 周,即 2012 年 1 月 2 日-2012 年 1 月 6 日2 本次課程設(shè)的題目是設(shè)計(jì)停車場(chǎng)管理的模擬程序,其目的是在于加深對(duì)數(shù)據(jù)結(jié)構(gòu)課程理論與 c 語(yǔ)言課程理論實(shí)踐方面的理解。通過(guò)編寫(xiě)一定規(guī)模和難度的程序,進(jìn)行一次全面的數(shù)據(jù)結(jié)構(gòu)與 c 基本理論和基本算法,分析并正確確定數(shù)據(jù)的邏輯結(jié)構(gòu),合理地選擇相應(yīng)的存儲(chǔ)結(jié)構(gòu),并能設(shè)計(jì)出解決問(wèn)題的有效算法。提高程序設(shè)計(jì)和調(diào)試能力。學(xué)生通過(guò)上機(jī)實(shí)習(xí),驗(yàn)證自己設(shè)計(jì)的算法的正確性。學(xué)會(huì)有效利用基本調(diào)試方法,迅
2、速找出程序代碼中的錯(cuò)誤并且修改。初步掌握軟件開(kāi)發(fā)過(guò)程中問(wèn)題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等基本方法和技能。訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開(kāi)發(fā)一般規(guī)范進(jìn)行軟件開(kāi)發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。培養(yǎng)根據(jù)選題需要選擇學(xué)習(xí)書(shū)籍,查閱文獻(xiàn)資料的自學(xué)能力。3 本次課程設(shè)計(jì)的任務(wù)是停車車管理模擬程序,其中停車場(chǎng)是一個(gè)可停放 n 輛汽車的狹長(zhǎng)通道,且只有一個(gè)大門可供汽車進(jìn)出。汽車在停車場(chǎng)內(nèi)按車輛到達(dá)時(shí)間的先后順序,依停滿 n 輛汽車,則后來(lái)的汽車只能在門外的便道上等候,一旦有車開(kāi)走,則排在便道上的第一輛車即可開(kāi)入;當(dāng)停車場(chǎng)內(nèi)某輛車要離開(kāi)時(shí),在它之后進(jìn)入的車輛必須先退出車場(chǎng)為它讓路,待該輛車開(kāi)出大門外
3、,其他車輛再按原次序進(jìn)入停車場(chǎng),每輛停放在車場(chǎng)的車在3它離開(kāi)停車場(chǎng)時(shí)必須按它停留的時(shí)間長(zhǎng)短繳納費(fèi)用。4 4.1 需求分析以棧模擬停車場(chǎng),以隊(duì)列模擬停車場(chǎng)外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進(jìn)行模擬管理,且棧以順序結(jié)構(gòu)實(shí)現(xiàn),隊(duì)列以鏈表結(jié)構(gòu)實(shí)現(xiàn)。每一組輸入數(shù)據(jù)包括三個(gè)數(shù)據(jù)項(xiàng):汽車“到達(dá)”或者“離開(kāi)”信息、汽車牌照號(hào)碼以及汽車到達(dá)或離開(kāi)的時(shí)刻,這個(gè)用順序棧和鏈表隊(duì)列實(shí)現(xiàn)。車庫(kù)里的車輛信息用順序棧存放汽車到達(dá)時(shí)間,離開(kāi)時(shí)間,車牌號(hào)碼信息;便道的車信息用鏈表隊(duì)列存放汽車到達(dá)時(shí)間,停放位置,車牌號(hào)碼。對(duì)每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為:1、若是車輛到達(dá),則輸出汽車在停車場(chǎng)內(nèi)或便道上的停車位置。停車場(chǎng)
4、中的車輛則需要用順序棧依次存放停車的位置,從棧底到棧頂依次存放;超過(guò)車庫(kù)存放量的車輛放在便道中,便道的車輛則需要用鏈表結(jié)構(gòu)隊(duì)列從隊(duì)頭到隊(duì)尾依次存放停車位置。2、若是車輛離開(kāi),則輸出汽車在停車場(chǎng)內(nèi)停留的時(shí)間和應(yīng)繳的費(fèi)用(在便道上停留的理,包括停留時(shí)間應(yīng)繳費(fèi)用。若是便道的車輛,用隊(duì)列實(shí)現(xiàn),用對(duì)頭對(duì)離開(kāi)車輛的信息進(jìn)行處理,用隊(duì)尾對(duì)開(kāi)進(jìn)車輛的信息進(jìn)行處理。棧隊(duì)0 4.2 總體設(shè)計(jì)1)功能分析說(shuō)明圖:4和。是否 對(duì)否是否是2)各軟件模塊之間的調(diào)用方式5主函數(shù):void main() SeqStackCar Enter,Temp;LinkQueueCar Wait;int ch;InitStack(&En
5、ter);InitStack(&Temp);InitQueue(&Wait);while(1) printf(nt 歡迎使用停車場(chǎng)系統(tǒng). tnn);printf(nt 1. 車輛到達(dá)登記. tn);printf(nt 2. 車輛離開(kāi)登記tn);printf(nt 3. 車輛列表顯示. tn);printf(nt 4. 退出系統(tǒng). tnn);while(1)printf( 請(qǐng)選擇: );scanf(%d,&ch);if(ch=1&chtop=0;for(i=0;istacks-top=NULL;4、當(dāng)棧滿了時(shí),車輛就進(jìn)入便道上的隊(duì)列中函數(shù)int InitQueue(LinkQueueCar *Q
6、)/ 隊(duì)列的初始化Q-head=(QueueNode *)malloc(sizeof(QueueNode);if(Q-head!=NULL) Q-head-next=NULL;Q-rear=Q-head;return(1);else return(-1);5、這個(gè)函數(shù)由車輛離開(kāi)的函數(shù)調(diào)用,以分鐘計(jì)時(shí)算費(fèi),函數(shù)void PRINT(CarNode *p,int room)int A1,A2,B1,B2;/ 車輛收費(fèi)printf(n車輛離開(kāi)的時(shí)間:);scanf(%d:%d,&(p-leave.hour),&(p-leave.min);printf(n離開(kāi)車輛的車牌號(hào)為:);puts(p-num)
7、;printf(n其到達(dá)時(shí)間為: %d:%d,p-reach.hour,p-reach.min);8printf(n離開(kāi)時(shí)間為: %d:%d,p-leave.hour,p-leave.min);A1=p-reach.hour;A2=p-reach.min;B1=p-leave.hour;B2=p-leave.min;printf(n應(yīng)交費(fèi)用為: %2.1f元,(B1-A1)*60+(B2-A2)*price);free(p);6、車輛的到達(dá)登記函數(shù)int Arrival(SeqStackCar *Enter,LinkQueueCar *W)CarNode *p;QueueNode *t;p=(
8、CarNode *)malloc(sizeof(CarNode);flushall();printf(n請(qǐng)輸入車牌號(hào)例:豫 B1234):);gets(p-num);if(Enter-toptop+;printf(n車輛在車場(chǎng)第%d 位置.,Enter-top);printf(n車輛到達(dá)時(shí)間:);scanf(%d:%d,&(p-reach.hour),&(p-reach.min);Enter-stackEnter-top=p;return(1);else printf(n該車須在便道等待有車位時(shí)進(jìn)入車場(chǎng));t=(QueueNode *)malloc(sizeof(QueueNode);t-da
9、ta=p;t-next=NULL;W-rear-next=t;W-rear=t;9return(1);7、車輛離開(kāi)函數(shù)定義一個(gè)整型變量 room 記錄要離開(kāi)車輛的位置,定義兩個(gè)棧指針和一個(gè)隊(duì)列指針,用個(gè) if(Enter-top0) while(1) 確保輸入的車輛離開(kāi)位置的合法性。如果不和法,顯示輸入有誤,要重新輸入。通過(guò) while(Enter-toproom) 判斷離開(kāi)車輛的位置,如果是中間位置,就要再用一個(gè)棧前面臨時(shí)開(kāi)出來(lái)的車,等要開(kāi)出的車開(kāi)出后,再把臨時(shí)棧的車看進(jìn) 車場(chǎng)內(nèi),并要調(diào)用PRINT(p,room); 這個(gè)函數(shù)計(jì)算顯示費(fèi)用。然后還要用 if(W-head!=W-rear)&E
10、nter-toptop0) while(1)/ 判斷車場(chǎng)是否為空printf(n請(qǐng)輸入車在車場(chǎng)的位置/1-%d/:,Enter-top);scanf(%d,&room);if(room=1&roomtop) break;else printf(n 輸入有誤,請(qǐng)重輸: );while(Enter-toproom) / 把要?jiǎng)h除的車輛的前面的車開(kāi)出來(lái),進(jìn)臨時(shí)棧。 Temp-top+;Temp-stackTemp-top=Enter-stackEnter-top;Enter-stackEnter-top=NULL;Enter-top-;10p=Enter-stackEnter-top; 把要?jiǎng)h除的車
11、輛節(jié)點(diǎn)賦給p。Enter-stackEnter-top=NULL;Enter-top-;while(Temp-top=1)/ 再把臨時(shí)棧里的車輛進(jìn)停車場(chǎng)Enter-top+;Enter-stackEnter-top=Temp-stackTemp-top;Temp-stackTemp-top=NULL;Temp-top-;PRINT(p,room);/ 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);printf(n 請(qǐng)輸入%s號(hào)車進(jìn)入車場(chǎng)的
12、時(shí)間:,t-num);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(n車場(chǎng)里沒(méi)有車.);8、顯示車場(chǎng)內(nèi)和便道上的車輛情況函數(shù)用個(gè) switch();函數(shù)選擇顯示車場(chǎng)內(nèi)或是便道上的車輛情況。包括對(duì)下面兩個(gè)子函數(shù)的調(diào)用:11void List1(SeqStackCar *S);void List2(LinkQueueCar *W);/分別
13、為顯示車場(chǎng)和便道上的車輛情況void List1(SeqStackCar *S) /顯示車場(chǎng)里的車輛情況 int i;if(S-top0) printf(n車場(chǎng):);printf(n 位置 到達(dá)時(shí)間for(i=1;itop;i+) printf( %d ,i);printf( %d:%d車牌號(hào) 車類型n);,S-stacki-reach.hour,S-stacki-reach.min);puts(S-stacki-num);else printf(n車場(chǎng)里沒(méi)有車);void List2(LinkQueueCar *W) QueueNode *p;int i;/顯示便道上的車輛情況p=W-hea
14、d-next;if(W-head!=W-rear) printf(n等待車輛的號(hào)碼為:);for(i=1; (p!=NULL); i+)printf(n第 %d 車輛.,i);puts(p-data-num);p=p-next ;else printf(n便道里沒(méi)有車.);printf(n);void List(SeqStackCar S,LinkQueueCar W) /顯示,遍歷12 int flag,tag;flag=1;while(flag) printf( 查看車輛列表顯示: );printf(n 車場(chǎng)列表n 便道列表n 3.返回主菜單n);printf(n請(qǐng)選擇 13:);whil
15、e(1) scanf(%d,&tag);if(tag=1 & tag=1&ch=4)break;else printf(n 輸入有誤,請(qǐng)重新選擇: 14: );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; 4.4.1 測(cè)試停車場(chǎng)停放車輛/輛 2停車每分鐘/元 0.25輸入車輛數(shù)依次是 1 2 4 5測(cè)試結(jié)果如下1415174.4.2分析調(diào)試的過(guò)程中,對(duì)
16、程序做了幾點(diǎn)改進(jìn),增加了程序的容錯(cuò)能力,不論用戶輸入什么內(nèi)容,程序都能安全檢查。從本實(shí)習(xí)題的編制過(guò)程中容易看出,線性表的應(yīng)用廣泛,線性表可以直接作為一種數(shù)據(jù)結(jié)構(gòu)使用,也可以作為棧域隊(duì)列的存儲(chǔ)結(jié)構(gòu),構(gòu)成鏈?;蜴滉?duì)列使用。本次課程設(shè)計(jì)中算法的時(shí)間復(fù)雜度和空間復(fù)雜度與輸入車輛的數(shù)量有關(guān)。在輸入登記車輛到達(dá)時(shí)間的時(shí)候,沒(méi)有相關(guān)的小時(shí)、分鐘數(shù)字的限制范圍(小時(shí)023,分鐘 060第二天了,這樣就可能會(huì)導(dǎo)致收費(fèi)時(shí)負(fù)的或減少很多。就是說(shuō),還應(yīng)該算天數(shù),要不就要規(guī)定只能當(dāng)天停,當(dāng)天開(kāi)走。我改了幾次改不好,又鑒于程序要求中也沒(méi)有提及,所以我也就沒(méi)去找了。4.5 附錄#include#include#includ
17、e#define MAX 2#define price 0.5typedef struct timeint hour;int min;Time;typedef struct nodechar num10;Time reach;18Time leave;char kind;CarNode;typedef struct NODECarNode *stackMAX+1;int top;SeqStackCar;typedef struct carCarNode *data;struct car *next;QueueNode;typedef struct NodeQueueNode *head;Que
18、ueNode *rear;LinkQueueCar;void InitStack(SeqStackCar *);int InitQueue(LinkQueueCar *);int Arrival(SeqStackCar *,LinkQueueCar *);void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *);void List(SeqStackCar,LinkQueueCar);void main()SeqStackCar Enter,Temp;LinkQueueCar Wait;int ch;InitStack(&Enter);19In
19、itStack(&Temp);InitQueue(&Wait);while(1)printf(nt 歡迎使用停車場(chǎng)系統(tǒng). tnn);printf(n1. 車輛到達(dá)登記);printf( 2. 車輛離開(kāi)登記);printf( 3. 車輛列表顯示);printf( 4. 退出系統(tǒng)n);while(1)scanf(%d,&ch);if(ch=1&chtop=0;for(i=0;istacks-top=NULL;int InitQueue(LinkQueueCar *Q)Q-head=(QueueNode *)malloc(sizeof(QueueNode);if(Q-head!=NULL)Q-hea
20、d-next=NULL;Q-rear=Q-head;return(1);else return(-1);void PRINT(CarNode *p,int room)int A1,A2,B1,B2;double M;printf(n車輛離開(kāi)的類型:);puts(&(p-kind);printf(n車輛離開(kāi)的時(shí)間:);scanf(%d:%d,&(p-leave.hour),&(p-leave.min);printf(n離開(kāi)車輛的車牌號(hào)為:);puts(p-num);printf(n其到達(dá)時(shí)間為: %d:%d,p-reach.hour,p-reach.min);printf(n離開(kāi)時(shí)間為: %d:
21、%d,p-leave.hour,p-leave.min);A1=p-reach.hour;A2=p-reach.min;B1=p-leave.hour;B2=p-leave.min;M=(B1-A1)*60+(B2-A2)*price;printf(n應(yīng)交費(fèi)用為: %2.1f元,M);free(p);21int Arrival(SeqStackCar *Enter,LinkQueueCar *W)CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode);flushall();printf(n請(qǐng)輸入車類型:);gets(&(p-kin
22、d);printf(n請(qǐng)輸入車牌號(hào)例:豫B1234):);gets(p-num);if(Enter-toptop+;printf(n車輛在車場(chǎng)第位置.,Enter-top);printf(n車輛到達(dá)時(shí)間:);scanf(%d:%d,&(p-reach.hour),&(p-reach.min);Enter-stackEnter-top=p;return(1);elseprintf(n該車須在便道等待有車位時(shí)進(jìn)入車場(chǎng));t=(QueueNode *)malloc(sizeof(QueueNode);t-data=p;t-next=NULL;W-rear-next=t;W-rear=t;return
23、(1);22void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)int room;CarNode *p,*t;QueueNode *q;if(Enter-top0)while(1)printf(n請(qǐng)輸入車在車場(chǎng)的位置/1-%d/:,Enter-top);scanf(%d,&room);if(room=1&roomtop) break;while(Enter-toproom)Temp-top+;Temp-stackTemp-top=Enter-stackEnter-top;Enter-stackEnter-top=NUL
24、L;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-;23PRINT(p,room);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);printf(n
25、請(qǐng)輸入%s號(hào)車進(jìn)入車場(chǎng)的時(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(n車場(chǎng)里沒(méi)有車.);void List1(SeqStackCar *S)int i;if(S-top0)printf(n車場(chǎng):);printf(n 位置到達(dá)時(shí)間 車牌號(hào) 車類型n);for(i=1;itop;i+)printf( %d ,i);printf
26、( %d:%d,S-stacki-reach.hour,S-stacki-reach.min);puts(S-stacki-num);24puts(&(S-stacki-kind);else printf(n車場(chǎng)里沒(méi)有車);void List2(LinkQueueCar *W)QueueNode *p;p=W-head-next;if(W-head!=W-rear)printf(n等待車輛的號(hào)碼為:);while(p!=NULL)puts(p-data-num);p=p-next;else printf(n便道里沒(méi)有車.);void List(SeqStackCar S,LinkQueueCar W)int flag,tag;flag=1;while(flag)printf(n請(qǐng)選擇 1|2|3:);printf(n1.車場(chǎng)列表n2.便道列表返回主菜單n);while(1)25scanf(%d,&tag);if(tag=1|tag=3) break;else printf(n請(qǐng)選擇 13:);switch(tag)case 1:List1(&S);break;case 2:
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 湘教版數(shù)學(xué)九年級(jí)下冊(cè)4.2《概率及其計(jì)算》聽(tīng)評(píng)課記錄1
- 五年級(jí)上冊(cè)數(shù)學(xué)聽(tīng)評(píng)課記錄《4.5 探索活動(dòng):梯形的面積》(6)-北師大版
- 蘇科版數(shù)學(xué)九年級(jí)上冊(cè)1.4《用一元二次方程解決問(wèn)題》聽(tīng)評(píng)課記錄
- 聽(tīng)評(píng)課記錄英語(yǔ)七年級(jí)
- 人教版九年級(jí)數(shù)學(xué)上冊(cè)21.2.2《用配方法解一元二次方程》聽(tīng)評(píng)課記錄
- 五年級(jí)上冊(cè)口算
- 蘇教版一年級(jí)下冊(cè)數(shù)學(xué)口算達(dá)標(biāo)測(cè)試
- 湘教版數(shù)學(xué)九年級(jí)下冊(cè)1.2《二次函數(shù)的圖象與性質(zhì)》聽(tīng)評(píng)課記錄4
- 承包商施工安全協(xié)議書(shū)范本
- 二零二五年度出租車司機(jī)勞動(dòng)權(quán)益保護(hù)協(xié)議范本
- 四年級(jí)四年級(jí)下冊(cè)閱讀理解20篇(附帶答案解析)經(jīng)典
- 醫(yī)院-9S管理共88張課件
- 設(shè)立登記通知書(shū)
- 高考作文復(fù)習(xí):議論文論證方法課件15張
- 2022醫(yī)學(xué)課件前列腺炎指南模板
- MySQL數(shù)據(jù)庫(kù)項(xiàng)目式教程完整版課件全書(shū)電子教案教材課件(完整)
- 藥品生產(chǎn)質(zhì)量管理工程完整版課件
- 《網(wǎng)絡(luò)服務(wù)器搭建、配置與管理-Linux(RHEL8、CentOS8)(微課版)(第4版)》全冊(cè)電子教案
- 職業(yè)衛(wèi)生教學(xué)課件生物性有害因素所致職業(yè)性損害
- 降“四高”健康教育課件
- 五十鈴、豐田全球化研究
評(píng)論
0/150
提交評(píng)論