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

下載本文檔

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

文檔簡介

1、德州學院 信息管理學院 2013級 計科(軟件外包)專業(yè) 數(shù)據(jù)結構課程設計 目 錄1 實習目的12 問題描述13 需求分析23.1設計思想23.2實現(xiàn)方法24 概要設計34.1數(shù)據(jù)結構設計34.4函數(shù)及功能要求35 總體設計45.1總體設計圖45.2.1車輛成批入站65.2.2車站內信息顯示76 詳細設計86.1 采用結構體定義的相關數(shù)據(jù)類型86.2 功能函數(shù)設計97 系統(tǒng)測試及其結果147.1 程序調試中的問題147.2 結果截圖167.2.1車輛成批入站167.2.2車輛出站188 心得體會19參考文獻21附錄22停車場管理系統(tǒng)1 實習目的通過實習,了解并初步掌握設計、實現(xiàn)較大系統(tǒng)的完整過

2、程,包括系統(tǒng)分析、編碼設計、系統(tǒng)集成、以及調試分析,熟練掌握數(shù)據(jù)結構的選擇、設計、實現(xiàn)以及操作方法,為進一步的應用開發(fā)打好基礎。2 問題描述停車場是一條可以停放n輛車的狹窄通道,且只有一個大門汽車停放安到達時間的先后依次由北向南排列(大門在最南端,最先到達的第一輛車停在最北端)若停車場已經停滿n輛車,后來的汽車在便道上等候,一旦有車開走,排在便道上的第一輛車可以開入;當停車場的某輛車要離開時,停在他后面的車要先后退為他讓路,等它開出后其他車在按照原次序開入車場,每兩停在車場的車要安時間長短繳費。3 需求分析3.1設計思想此停車場管理系統(tǒng)是在一個狹長的通道上的,而且只有一個大門可以供車輛進出,并

3、且要實現(xiàn)停車場內某輛車要離開時,在它之后進入停車場的車都必須先退出停車場為它讓路,待其開出停車場后,這些輛再依原來的次序進場的功能,就可以設計兩個堆棧,其中一個堆棧用來模擬停車場,另一個堆棧用來模擬臨時停車場,該臨時停車場用來存放當有車輛離開時,原來停車場內為其讓路的車輛。至于當停車場已滿時,需要停放車輛的通道可以用一個循環(huán)隊列來實現(xiàn)。當停車場內開走一輛車時,通道上便有一輛車進入停車場,此時只需要改變通道上車輛結點的連接方式就可以了,使通道上第一輛車進入停車場這個堆棧,并且使通道上原來的第二輛車成為通道上的第一輛車,此時只需將模擬通道的循環(huán)隊列的頭結點連到原來的第二輛車上就可以了。這個程序的關

4、鍵是車輛的進站和出站操作,以及車場和通道之間的相互關系。由于車站是一個很窄的、一邊開口的車道,先進后出,類似數(shù)據(jù)結構中的棧結構,故車場用棧這種數(shù)據(jù)結構來描述。外面的狹長的通道,先進先出,故可用隊列結構來描述??紤]到車場和通道在整個程序中都要用到。故把這兩個變量定義成全局變量。本程序中的數(shù)據(jù)對象是汽車,可以認為車牌號是每個元素的關鍵項,不能重復,和現(xiàn)實中一樣,另外加了車主姓名這一數(shù)據(jù)項,為表簡潔,其他相關信息如入場時間,車的類型,收取費率等,都不再考慮,具體應用的時候可以方便地修改得到。3.2實現(xiàn)方法對于此停車場管理系統(tǒng)的實現(xiàn),就是用兩個堆棧來分別模擬停車場以及停車場內車輛為其它車輛讓路時退出停

5、車的臨時停放地點。至于通道上車輛的停放則用一個循環(huán)隊列來實現(xiàn),此時,通道上車輛的離開或者進入停車場只需改變此循環(huán)隊列上的結點而已。4 概要設計4.1數(shù)據(jù)結構設計第一個定義汽車的信息:車牌號num10和車主姓名name10:typedef struct carchar num10;char name10;Car;第二個定義汽車場的結構,在這里我把它看成是一個棧,在這里定義棧的容量等信息:typedef struct Car datamaxsize; int n;/棧容量設定 int top;Stack;/順序棧 用來存放汽車場內的車輛信息第三個定義通道的結構,在這里我把它看成是一個循環(huán)隊列,在這

6、里定義隊列胡容量等信息:typedef struct Car datamaxsize; int n;/隊列容量設定 int num;/當前通道上的車輛數(shù) int front,rear;Queue;/循環(huán)隊列 用來存放通道內的車輛信息4.4函數(shù)及功能要求1. int Push(Stack *S,Car x):創(chuàng)建入棧的操作,以實現(xiàn)車輛進入停車場的操作2. int Pop(Stack *S,Car *px):創(chuàng)建出棧的操作,以實現(xiàn)車輛離開停車場的操作3. int InsertQueue(Queue *Q,Car x):創(chuàng)建入隊的操作,以實現(xiàn)進入臨時停車場的操作4. int DeleteQueue(

7、Queue *Q,Car *x):創(chuàng)建出隊的操作,以實現(xiàn)離開臨時停車場的操作5. void ShowCar(void):創(chuàng)建顯示車站內信息的子程序。6. void InitCarpark(void):創(chuàng)建車輛成批入站的子程序。7. void InsertCar(void):創(chuàng)建單個車輛入站的子程序。8. void ExitCar(void):創(chuàng)建車輛出站的子程序。9. Pop(SCar,&x);:提供指定車輛出站的功能。10. void SetCar(void):提供車站模擬系統(tǒng)相關功能設定的功能。11. void carmenu(void):顯示出車站管理系統(tǒng)主菜單。12. void

8、 main(void):此為主函數(shù),調用其他子程序。5 總體設計5.1總體設計圖停車場車輛管理 系統(tǒng)車輛出站顯示車站內汽車信息車站管理系統(tǒng)主菜單 函 數(shù)退出 系統(tǒng)車輛成批入站單個車輛入站圖2.1 功能模塊圖 運行程序到系統(tǒng)界面,接著系統(tǒng)界面就會出現(xiàn)讓你能選擇的功能:【1】車輛成批入站【2】單個車輛入站【3】車輛出站【4】車站內信息實時顯示【5】相關功能設定【0】退出本系統(tǒng)5.2模塊流程圖5.2.1車輛成批入站開 始輸入汽車的車牌號還有車主姓名strcpy(pcar.num,pnum);strcpy(,pname);Push(SCar,pcar)=-1InsertQueue(Q

9、Car,pcar)=-1車站已滿!車輛已經入通道!通道已滿,進入通道失敗!while(strcmp(pnum,"#")!=0)結 束這批汽車已經成功進入停車場nynyny圖2.2車輛成批入站流程圖5.2.2車站內信息顯示開 始SCar->top=-1i=0i<SCar->top+1printf("%-13s",SCar->datai.num);printf("%18sn",SCar->);i+QCar->rear!=QCar->frontwhile(front!=rear)

10、printf("%-13s",SCar->datai.num);printf("%18sn",SCar->);front=(front+1)%QCar->n結 束ynnyyn圖2.3停車場內信息顯示流程圖6 詳細設計6.1 采用結構體定義的相關數(shù)據(jù)類型前面提到,要用到棧和隊列的操作。這里,由于一個車場的最大容量是一定的,且車場最多執(zhí)行的操作是插入和刪除操作,所以用順序儲存結構可以帶來更大益處。為了防止隊列中出現(xiàn)“假溢出”現(xiàn)象,這里采用了循環(huán)隊列。在模擬汽車這個對象時,進行了簡化處理,只取得最核心的兩個數(shù)據(jù)項:車牌號和

11、車主姓名。具體數(shù)據(jù)結構定義如下:首先定義maxsize為20:#define maxsize 20第二個再定義汽車的信息:車牌號num10和車主姓名name10:typedef struct carchar num10;char name10;Car;第三個定義汽車場的結構,在這里我把它看成是一個棧,在這里定義棧的容量等信息:typedef struct Car datamaxsize; int n;/棧容量設定 int top;Stack;/順序棧 用來存放汽車場內的車輛信息第四個定義通道的結構,在這里我把它看成是一個循環(huán)隊列,在這里定義隊列胡容量等信息:typedef struct Car

12、 datamaxsize; int n;/隊列容量設定 int num;/當前通道上的車輛數(shù) int front,rear;Queue;/循環(huán)隊列 用來存放通道內的車輛信息6.2 功能函數(shù)設計(1)車輛成批入站void InitCarpark(void)/車輛成批入站此函數(shù)也可以作為初始化車場的函數(shù),因為一個車場剛開始投入運行的時候會有很多的車進來,這也是設計此函數(shù)最重要的一個原因。每行輸入一個汽車信息,最后結束的時候輸入“# #”即可。汽車信息中前面表示汽車的車牌號,后面表示車主姓名,中間用空格隔開。當輸入汽車的數(shù)目超過規(guī)定的最大容量的時候(如果開始不設置最大容量,默認值為系統(tǒng)申請的最大值m

13、axsize=20),自動檢測條件,給出相關提示信息。程序如下:void InitCarpark(void)/車輛成批入站char num8,*pnum,name10,*pname;Car pcar;pnum=num;pname=name;printf("nn請輸入車子的信息(包括車牌號和車主姓名(兩者之間用空格隔開)(以'# #'這個符號結束):n");scanf("%s%s",pnum,pname);while(strcmp(pnum,"#")!=0)strcpy(pcar.num,pnum);strcpy(pca

14、,pname);if(Push(SCar,pcar)=-1) printf("n車站已滿!車輛已經入通道!n");if(InsertQueue(QCar,pcar)=-1)printf("n通道已滿,進入通道失敗!n");scanf("%s%s",pnum,pname);printf("這批汽車已經成功進入停車場n");getch();carmenu();(2)單個車輛入站void InsertCar(void)/單個車輛入站當系統(tǒng)正常投入運行后,會有零散的車輛進進出出,如還用成批輸入方式的話,將會帶來

15、一定的麻煩。此函數(shù)具有函數(shù)InitCarpark()幾乎所有的功能,程序跟InitCarpark()這個差不多,同樣先輸入,然后再判斷停車場是否滿了,通道是否滿了,最后執(zhí)行結果,程序如下:void InsertCar(void)/單個車輛入站char num10,*pnum,name10,*pname;Car pcar;pnum=num;pname=name;printf("nn請輸入車子的信息(包括車牌號和車主姓名(兩者之間用空格隔開):n");scanf("%s%s",pnum,pname);strcpy(pcar.num,pnum);strcpy(

16、,pname);if(Push(SCar,pcar)=-1)printf("n車站已滿!車輛已經入通道!n");if(InsertQueue(QCar,pcar)=-1)printf("n通道已滿,進入通道失敗!n");getch();(3)車輛內信息顯示函數(shù)void ShowCar(void)/車站內信息顯示如果車場本身是空的,沒有汽車,那么也就不存在查看汽車信息了。故本函數(shù)一開始進行合理性檢查,如果條件不成立,拒絕執(zhí)行顯示信息操作,給出出錯的信息后返回到主界面。前面提到,車站內信息包括兩部分:車場內停放的車輛,在外面通道上等停的車輛

17、。因為通道上也不一定有車,程序輸出車場內的所有汽車信息后,自動進行判斷通道上是否有車輛。如果有車輛的話,繼續(xù)輸出停在通道上的車子信息。程序如下:void ShowCar(void)/車站內信息顯示int i,front,rear;if(SCar->top=-1)printf("nn這停車場是空的!n");getch();carmenu();printf("nn目前停車場的車有:n-車牌號-車主姓名n");for(i=0;i<SCar->top+1;i+)printf(" %-13s",SCar->datai.n

18、um);printf("%18sn",SCar->);if(QCar->rear!=QCar->front)/通道內有車輛front=QCar->front;rear=QCar->rear;printf("n通道信息:n-車牌號-車主姓名n");while(front!=rear)printf(" %-13s",QCar->datafront.num);printf("%18sn",QCar->);front=(front+1

19、)%QCar->n;(4)車輛出站函數(shù)void ExitCar(void)/車輛出站同上,首先進行和利息你給檢查。這里的檢查包括兩個部分:車場非空且輸入的車牌號在車場中。如果一切條件滿足,則執(zhí)行推車操作。最后,檢查通道上是否有車輛等待。如果通道不為空,程序會自動把排在通道最前面的車調入車場內。其中,退車的算法過程如下:前面檢測條件滿足時,執(zhí)行如下操作:由于車場很窄,當一輛車要出場時,排在它后面的車輛需要先出場,等要退出的車開走后,剛才為它讓道的那些車再按原次序進入車場。不難看出,這里需要創(chuàng)建一個臨時棧,用于保存讓道車輛的信息。在前面的合理性檢查中,已經定位到出場車輛所在位置,從棧頂開始,

20、到所在位置前一個結束,車場內執(zhí)行出棧操作,臨時棧結構執(zhí)行入棧操作。在當前位置執(zhí)行出棧操作,即可實現(xiàn)指定的車輛出場。當臨時棧不為空時,依次執(zhí)行:臨時棧退棧,車場內入棧。(5)車站模擬系統(tǒng)相關功能設定函數(shù)void SetCar(void)/車站模擬系統(tǒng)相關功能設定此函數(shù)很簡單,首先用一個do-while循環(huán),得到一個合理值,修改相關參數(shù)即可。這里有一個防錯設計:當輸入的最大容量小于車場內當前的車輛數(shù)時,拒絕執(zhí)行修改。程序如下:void SetCar(void)/車站模擬系統(tǒng)相關功能設定int b; printf("選擇1:修改停車場的容量n"); printf("選擇

21、2:修改通道的容量n"); printf("請你選擇操作(1-2):n"); scanf("%d",&b); /*讀入選擇*/ if(b=1)int n,flag=1;printf("nn目前停車場最大的容納量是:%dn",SCar->n);printf("n輸入您想要的停車場的最大容納量:(<=%d)n",maxsize);doprintf("請輸入數(shù)值:");scanf("%d",&n);if(n>maxsize)printf(

22、"輸入錯誤,請重新輸入n");if(n<SCar->top+1)flag=0;n=SCar->n;break;while(n<0|n>maxsize);SCar->n=n;if(flag!=0) printf("n修改成功!n");elseprintf("n錯誤!車站車輛已經超過此數(shù)!如要再輸,請再按功能5n");getch();carmenu();if(b=2)int n,flag=1;printf("nn目前通道最大的容納量是:%dn",QCar->n-1);print

23、f("n請輸入您想要的通道的最大容納量:(<=%d)n",maxsize);doprintf("請輸入數(shù)值:");scanf("%d",&n);if(n>maxsize)printf("輸入錯誤,請重新輸入n");if(n<QCar->rear+1)flag=0;n=QCar->n;break;while(n<0|n>maxsize);QCar->n=n+1;if(flag!=0) printf("n修改成功!n");elseprintf(

24、"n錯誤!車站車輛已經超過此數(shù)!如要再輸,請再按功能5n");getch();carmenu();(6)車站管理系統(tǒng)主菜單函數(shù)void carmenu(void)/車站管理系統(tǒng)主菜單此函數(shù)是用戶與系統(tǒng)之間的一個窗口,用戶通過它來選擇相關操作。用printf語句打印出供選擇項目后,用不會顯的getch()得到一個字符,用開關語句switch進行分類,判斷用戶想要執(zhí)行的操作,然后執(zhí)行相關功能函數(shù)即可。(7)主函數(shù)void main(void)為分別表示車場和通道的兩個指針變量申請空間,分別調用相應的初始化函數(shù),得到一個合理解,然后程序流向主供選菜單,供用戶選擇執(zhí)行。void m

25、ain(void)if(SCar=(Stack *)malloc(sizeof(Stack)=NULL) printf("Failed!");exit(1);if(QCar=(Queue *)malloc(sizeof(Queue)=NULL)printf("Failed!");exit(1);InitStack(SCar);InitQueue(QCar);carmenu();exit(0);7 系統(tǒng)測試及其結果7.1 程序調試中的問題調試過程中的主要問題由于此停車場管理系統(tǒng)是分模塊設計的,而且在程序的實現(xiàn)過程中又使用了清屏函數(shù),所以,運行時用戶選擇任務

26、并且執(zhí)行完任務后,又會回到供用戶選擇功能的主界面,因此整個程序從整體上來講結構清晰,使用方便。本程序的調試運行,總體上情況良好,但中間也出現(xiàn)了一些小問題。其中比較有代表性的主要問題有:(1)當停車場已經達到最大容量,但仍有車輛進入停車場的時候,運行界面上沒有出現(xiàn)或者說出現(xiàn)了但又跳掉了“車站已滿!車輛已經入通道!”的提示信息。在查閱了多種資料后,在那一個printf語句后加了一個getch(),此時,程序運行結果就符合要求了,看起來也比較清晰了。(2)使用getch()語句必須使用頭文件#include<conio.h>剛開始因為沒有使用這個頭文件,所以會出現(xiàn)getch()這個無法辨

27、別圖4.1 錯誤報告1(3)在對字符型的數(shù)據(jù)進行賦值的時候,要用strcpy,而不能直接用pcar.num=pnum這樣的賦值形式,這樣子會產生如下的錯誤:圖4.2 錯誤報告2正確的形式應該是這樣的:strcpy(pcar.num,pnum);(4)同時,對字符型的數(shù)據(jù)進行比較的時候,也需要用strcmp。不過我認為用while(pnum="#")的形式也是可以的,我試驗了一下,結果是可以的,所以不用strcmp這個東西也是可以的。注意呀,那個#符號必須加” ”號,不加的話就有四個錯誤了:圖4.3 錯誤報告3(5)把通道看成是一個隊列,但在通道中的車輛數(shù)目總是少一輛,剛開始

28、總是感覺疑問,明明就是設定maxsize為20的,通道內的車輛為什么就只有19輛呢,后來,我突然想到原來隊列的Q->front是不存放數(shù)據(jù)的,終于找到了錯誤的地方了,所以我在定義數(shù)列的地方,把原來的Q->n=maxsize改成了Q->n=maxsize+1;結果是對的了。(6)采用清屏的功能:system("cls"); /*運行前清屏*/剛開始不知道有這個功能,在屏幕執(zhí)行的時候,總感覺屏幕非常的復雜雜亂,感覺不是很舒服,后來問了同學一下,發(fā)現(xiàn)了這個功能,就馬上加上了這個功能,屏幕就看起來比較清晰和舒服了。(7)剛開始的時候,程序的健壯性不是很強,在主菜單

29、函數(shù)中選擇case多少時,如果不是規(guī)定的數(shù)字范圍內的時候,它就會直接說按任意鍵返回。所以為了增強程序的健壯性,在最后加上default:ShowCar()這句話,在一開始運行程序的時候,由于此時停車場內信息沒有輸入,認為是空的,而當用戶選擇了退出車站的時候,程序將給出出錯的信息“這停車場是空的”。(8)在結構化程序設計中一般不主張使用goto語句, 以免造成程序流程的混亂,使理解和調試程序都產生困難,所以盡量少用goto語句。因為在網上看到了這段話,所以我就把那個車站模擬系統(tǒng)相關功能設定這個模塊改成用do-while語句的形式,其實我覺得do-while語句還是比較容易能實現(xiàn)的,而且程序也比較

30、容易去檢測出錯誤。(9)對于通道的假定,原本是沒有采用循環(huán)隊列的,只是采用了比較基本簡單的順序存儲隊列,后來發(fā)現(xiàn),這樣子會發(fā)生“假溢出”的現(xiàn)象,所謂的“假溢出” 顧名思義就是隊列出現(xiàn)了“假滿”的情況,而不是“真滿”,比如 設隊頭指針為front,隊尾指針是rear,約定front指向隊頭元素的前一位置,rear指向隊尾元素。當front等于-1時隊空,rear等于m-1時為隊滿。由于隊列的性質(“刪除”在隊頭而“插入”在隊尾),所以當隊尾指針rear等于m-1時,若front不等于-1,則隊列中仍有空閑單元,所以隊列并不是真滿。這時若再有入隊操作,會造成假“溢出”。7.2 結果截圖7.2.1車

31、輛成批入站待主界面顯示出來后,按1進入輸入車輛的界面,然后輸入你想輸入的車輛信息,然后以“# #”號結束;在此之前,你還可以先設定車站和通道的容量;如下圖:1:先修改停車場與通道的容量,都改成2;圖4.1先修改停車場與通道的容量截圖 2:成批輸入三輛汽車的信息,因為停車場內只能停兩輛汽車,所以第三輛車要停放在通道上等停,一旦停車場內有汽車開走,通道上的車輛即可進入;圖4.2車輛成批入站結果截圖3:待返回主界面后,按4,即會顯示出車站內與通道上的車輛信息;圖4.3車輛成批入站結果截圖7.2.2車輛出站1:輸入想要出站的汽車牌號,然后汽車出站,接著通道上的第一輛汽車進入停車場;圖4.4車輛出結果截

32、圖(1)2:通道內的車已經進入停車場,如下圖:圖4.5車輛出結果截圖8 心得體會通過這次的課程設計,我拓寬了知識面,鍛煉了能力。比如對于隊列的隊滿或者隊空的狀態(tài)呀,或者隊列的長度呀,記得我那時想了好久的一個問題,我在上面程序的調試分析里有提過,就是我明明定義maxsize等于20,可是通道內汽車的數(shù)量卻只能輸進19輛汽車的信息,我糾結了好久,后來,我的腦袋中突然閃過一個循環(huán)隊列的圖,那個Q->front好像是不存放數(shù)據(jù)資料的,這個Q->front這個結點確實是不存放數(shù)據(jù)的,這樣子一想,問題就游刃而解了,只要把原來的Q->n=maxsize改成了Q->n=maxsize+

33、1就可以了。也許這就是課程設計的目的吧,在于把理論和實際相結合吧,把課堂上所學到的系統(tǒng)化的理論知識投到實際中,鞏固還沒有鞏固的知識點,也有助于我們提高觀察,分析和解決問題的實際工作能力,就像那時我和趙老師在對問題進行分析時,因為雙方對汽車場通道的看法都是不同的,所以我們就進行討論了,我覺得能和老師討論這很重要,特別是能找出程序上的不足,對完善我們的程序有著莫大的幫助,那天下午,我也改進了程序,在程序上加上了一個選擇,就是停車場和通道的容量,可以由你更改,改變原來的默認值,但唯一的前提是不能比默認值大??梢哉f吧,數(shù)據(jù)結構真的也比較難,特別是知識點非常的多,很容易看那個忘記了這個,對于課設要用到的

34、綜合知識,那可是難上加上,不過,這也才激發(fā)了我的興趣,有動力比別人早完成程序。很開心我做到了,既完成了課設也學到了好多知識,經歷了這一個星期,我收獲了如下的幾點:1. 程序的設計思想的精巧的重要性,是不管怎么說都不為過的,好的程序可以讓大家很快的明白你的思想,而且很方便的來實現(xiàn)它。還有不管這程序有多長,只要你解釋了之后,別人很快就能明白,看程序也比較簡單了。2.數(shù)據(jù)結構是一門實踐性較強的課程,為了學好這門課程,必須在掌握理論知識的同時,加強上機實踐。一個人的力量是有限的,要想把課程設計做的更好,就要學會參考一定的資料,要善于捕獲資料,吸取別人的經驗,讓自己和別人的思想有機的結合起來,得出屬于你

35、自己的靈感。3.學會“遞進”的思想:程序的編寫需要有耐心,有些事情看起來很復雜,但問題需要一點一點去解決,分析問題,把問題一個一個劃分,劃分成小塊以后就逐個去解決。再總體解決大的問題。這樣做起來不僅有條理也使問題得到了輕松的解決。這次的程序訓練培養(yǎng)了我實際分析問題、編程和動手能力,使我掌握了程序設計的基本技能,提高了我適應實際,實踐編程的能力。這次的課程設計我對于專業(yè)課的學習有了更加深刻的認識,以為現(xiàn)在學的知識用不上就加以怠慢,等到想用的時候卻發(fā)現(xiàn)自己的學習原來是那么的不扎實。以后努力學好每門專業(yè)課,讓自己擁有更多的知識,才能解決更多的問題! 總的來說,這次課程設計讓我獲益匪淺,對數(shù)據(jù)結構也有

36、了進一步的理解和認識,也讓我相信,只要你要做(just do it),沒有什么困難能難倒我們參考文獻【1】嚴蔚敏,吳偉民. 數(shù)據(jù)結構(C語言版).清華大學出版社,1997.【2】李春葆,曾慧,張植民. 數(shù)據(jù)結構程序設計題典. 清華大學出版社,2002.【3】秦鋒,袁志祥. 數(shù)據(jù)結構例題詳解與課程設計指導. 中國科學技術大學出版社2007.【4】譚浩強. C程序設計. 清華大學出版社.2005.附錄/源代碼#include<stdio.h>#include<string.h>#include<conio.h>#include<stdlib.h>#d

37、efine maxsize 20typedef struct carchar num10;char name10;Car;typedef struct Car datamaxsize; int n;/棧容量設定 int top;Stack;/順序棧typedef struct Car datamaxsize; int n;/隊列容量設定 int num;/當前通道上的車輛數(shù) int front,rear;Queue;/循環(huán)隊列Stack *SCar;/全局變量:車站內車輛信息Queue *QCar;/全局變量:通道內車輛信息void carmenu(void);void InitStack(S

38、tack *S)S->top=-1;S->n=maxsize;void InitQueue(Queue *Q)Q->front=Q->rear=Q->num=0;Q->n=maxsize+1;int Push(Stack *S,Car x)/入棧操作if(S->top=S->n-1)return(-1);S->top+;S->dataS->top=x;return(0);int Pop(Stack *S,Car *px)/出棧操作if(S->top=-1)return(-1);S->top-;*px=S->da

39、taS->top+1;return(0);int InsertQueue(Queue *Q,Car x)/入隊if(Q->rear+1)%Q->n)=Q->front)return(-1);Q->num+;Q->dataQ->rear=x;Q->rear=(Q->rear+1)%Q->n;return(0);int DeleteQueue(Queue *Q,Car *x)/出隊if(Q->front=Q->rear)return(-1);Q->num-;*x=Q->dataQ->front;Q->f

40、ront=(Q->front+1)%Q->n;return(0);void ShowCar(void)/車站內信息顯示int i,front,rear;if(SCar->top=-1)printf("nn這停車場是空的!n");getch();carmenu();printf("nn目前停車場的車有:n-車牌號-車主姓名n");for(i=0;i<SCar->top+1;i+)printf(" %-13s",SCar->datai.num);printf("%18sn",SCar

41、->);if(QCar->rear!=QCar->front)/通道內有車輛front=QCar->front;rear=QCar->rear;printf("n通道信息:n-車牌號-車主姓名n");while(front!=rear)printf(" %-13s",QCar->datafront.num);printf("%18sn",QCar->);front=(front+1)%QCar->n;getch();carmenu();vo

42、id InitCarpark(void)/車輛成批入站char num8,*pnum,name10,*pname;Car pcar;pnum=num;pname=name;printf("nn請輸入車子的信息(包括車牌號和車主姓名(兩者之間用空格隔開)(以'# #'這個符號結束):n");scanf("%s%s",pnum,pname);while(strcmp(pnum,"#")!=0)strcpy(pcar.num,pnum);strcpy(,pname);if(Push(SCar,pcar)=-

43、1) printf("n車站已滿!車輛已經入通道!n");if(InsertQueue(QCar,pcar)=-1)printf("n通道已滿,進入通道失敗!n");scanf("%s%s",pnum,pname);printf("這批汽車已經成功進入停車場n");getch();carmenu();void InsertCar(void)/單個車輛入站char num10,*pnum,name10,*pname;Car pcar;pnum=num;pname=name;printf("nn請輸入車子的信

44、息(包括車牌號和車主姓名(兩者之間用空格隔開):n");scanf("%s%s",pnum,pname);strcpy(pcar.num,pnum);strcpy(,pname);if(Push(SCar,pcar)=-1)printf("n車站已滿!車輛已經入通道!n");if(InsertQueue(QCar,pcar)=-1)printf("n通道已滿,進入通道失敗!n");getch();carmenu();void ExitCar(void)/車輛出站 int i,position,flag=0;

45、Car x;Stack *S;char num10,*pnum;pnum=num;if(SCar->top=-1)/車站不能為空printf("nn這停車場是空的!n");getch();carmenu();printf("nn請輸入車子的車牌號:n");/輸入出站車輛的車牌號scanf("%s",pnum);for(i=0;i<SCar->top+1;i+)if(strcmp(SCar->datai.num,pnum)=0)position=i;flag=1;if(!flag)printf("對不起

46、,沒有找到該車的信息!");getch();carmenu();if(S=(Stack *)malloc(sizeof(Stack)=NULL)printf("Failed!");exit(1);InitStack(S);for(i=SCar->top;i>position;i-)Pop(SCar,&x);/車場出車Push(S,x);/通道入車Pop(SCar,&x);/所指定的車輛出站while(S->top!=-1)Pop(S,&x);/通道出車Push(SCar,x);/車場入車if(QCar->rear!=

47、QCar->front)/通道內有車輛DeleteQueue(QCar,&x);Push(SCar,x);printf("n退車成功!n");getch();carmenu();void SetCar(void)/車站模擬系統(tǒng)相關功能設定int b; printf("選擇1:修改停車場的容量n"); printf("選擇2:修改通道的容量n"); printf("請你選擇操作(1-2):n"); scanf("%d",&b); /*讀入選擇*/ if(b=1)int n,flag=1;printf("nn目前停車場最大的容納量是:%dn",SCar->n);printf("n請輸入您想要的停車場的最大容納量:(<=%d)n",maxsize);doprintf("請輸入數(shù)值:");scanf("%d",&n);if(n>maxsize)printf("輸入錯誤,請重新輸入n&qu

溫馨提示

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

評論

0/150

提交評論