停车场汽车管理系统
文章目錄
- 一、停車場管理
- 二、算法設計
- 三、數據結構選擇
- 四、功能設計
- 五、特色
最近花時間寫了一個停車場管理系統。算是比較完善的一個小系統,在這里分享一下該系統的一些設計。
一、停車場管理
設停車場內只有一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進出。汽車在停車場內按車輛到達時間的先后順序,依次由北向南排列(大門在最南端,最先到達的第一輛車停放在車場的最北端),若車場內已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當停車場內某輛車要離開時,在它之后開入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其它車輛再按原次序進入車場,每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。
試為停車場編制按上述要求進行管理的模擬程序。
(1)汽車可有不同種類,則它們的占地面積不同,收費標準也不同,如1輛客車和1.5輛小汽車的占地面積相同,1輛十輪卡車占地面積相當于3輛小汽車的占地面積。如何處理該問題?
解決方案:為了簡化問題,根據車型(本題中有三種:小汽車,大卡車,十輪客車)的不同,收費標準直接和占地面積成正比例。
(2)汽車可以直接從便道上開走,此時排在它前面的汽車要先開走讓路,然后再依次排到隊尾。如何處理該問題?
解決方案:汽車從便道開到停車場時,可使用隊列的數據結構(先進先出,且只能在隊尾增加元素,隊頭不能增加元素);當汽車直接從便道開走時,排在他前面的汽車要開走在排到隊尾,可見,先開入便道的車輛 ,即隊頭,先離開便道,然后到隊尾入隊。因此,在允許汽車可以直接從便道開走時,應該使用隊列來存儲便道上的汽車。
二、算法設計
1、利用棧和隊列模擬車輛進出;
2、充分考慮停車時間的復雜計算,包括平年和閏年,大月和小月以及任意日期之間的小時數計算;
3、運用順序查找和折半查找對比查詢功能的時間復雜度;
三、數據結構選擇
對象car:
自定義一個Car的類,包含汽車的車牌號,車的顏色,車型,停車時間。
停車場
根據汽車在停車場的特點(后進先出),存儲停車場內的各種汽車選擇棧stack來存儲。考慮到棧無法遍歷(遍歷時無法存儲已有的數據)的特點,同時定義一個Car類型的數組a[100]來存儲停車場內的車輛信息,里面的數據和stack的數據是同步的。
便道
根據汽車在便道的進出特點(先進入便道的車先進入停車場),選擇隊列queue來存儲在便道上的車輛信息。
停車時間
考慮到要從文件中讀取車輛信息,讀取的信息是string類型,但時間計算是數值型,為了方便通過時間計算停車費用,沒有單獨對年月日進行定義,而是將時間格式(形如2019-7-30,12:30)統一,定義為string類型。讀取信息后對字符串進行分割處理,得到汽車停車時間(年、月、日、時、分)。
四、功能設計
class Manage{ public:void add();//停車 void inquire();//查詢 void show();//顯示函數 void modification();//信息修改函數 void del();//出停車場void statistics();//統計車輛信息函數 void save();//寫入文件函數 void loadsave();//修改信息后重新寫入文件函數 void load();//運行程序后加載最新數據函數 };具體函數實現可下載我上傳的資源進行查看,里面包含輸入輸出的TXT文件以及各個文件的作用說明。
資源鏈接:https://download.csdn.net/download/chengxuyuanliwanwan/11461187
五、特色
出停車場時,時間格式的轉化、時間的準確計算以及折半查找的應用都在一定程度上優化了代碼。
出停車場模擬
折半查找實現查詢功能
int BinSearch(Car a[],string k){int n=i;int low=0,high=n-1,mid;int data1[3],data2[3],time1[2],time2[2];char *s1;char *t1[5];int l=0,atime[i][5];while(l<n){s1=(char*)a[l].time.data();//停車時間 int count1=0;while((t1[count1]=strtok(s1,"-,:"))!=NULL){count1++;s1=NULL;} //構造停車時間的參數 atime[l][0]=atoi(t1[0]);atime[l][1]=atoi(t1[1]);atime[l][2]=atoi(t1[2]);atime[l][3]=atoi(t1[3]);atime[l][4]=atoi(t1[4]);l++;}char *s2=(char*)k.data();//離開停車場的時間 char *t2[5];int count2=0;while((t2[count2]=strtok(s2,"-,:"))!=NULL){count2++;s2=NULL;} //構造離開停車場的時間的參數 data2[0]=atoi(t2[0]);data2[1]=atoi(t2[1]);data2[2]=atoi(t2[2]);time2[0]=atoi(t2[3]);time2[1]=atoi(t2[4]); start=clock(); while(low<=high){mid=(low+high)/2; if(data2[0]<atime[mid][0]){ high=mid-1;}else if(data2[0]>atime[mid][0]){ low=mid+1;}else {if(data2[1]<atime[mid][1]){ high=mid-1; }else if(data2[1]>atime[mid][1]){ low=mid+1; }else {if(data2[2]<atime[mid][2]){ high=mid-1; }else if(data2[2]>atime[mid][2]){ low=mid+1; }else {if(time2[0]<atime[mid][3]){ high=mid-1; }else if(time2[0]>atime[mid][3]){ low=mid+1; }else {if(time2[1]<atime[mid][4]){ high=mid-1; }else if(time2[1]>atime[mid][4]){ low=mid+1; }else { end=clock();x=end-start;return mid;}}}}}} return -1; }本次設計過程中學會了很多東西,很多庫函數的應用大大簡化了代碼,自己還需努力!
總結
- 上一篇: 干货!基于神经网络的多粒度图表征学习
- 下一篇: 在服务器上一按l键自动退出,利用 Sys