日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

停车场汽车管理系统

發(fā)布時間:2023/12/20 windows 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 停车场汽车管理系统 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 一、停車場管理
    • 二、算法設(shè)計
    • 三、數(shù)據(jù)結(jié)構(gòu)選擇
    • 四、功能設(shè)計
    • 五、特色

最近花時間寫了一個停車場管理系統(tǒng)。算是比較完善的一個小系統(tǒng),在這里分享一下該系統(tǒng)的一些設(shè)計。

一、停車場管理

設(shè)停車場內(nèi)只有一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進(jìn)出。汽車在停車場內(nèi)按車輛到達(dá)時間的先后順序,依次由北向南排列(大門在最南端,最先到達(dá)的第一輛車停放在車場的最北端),若車場內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當(dāng)停車場內(nèi)某輛車要離開時,在它之后開入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其它車輛再按原次序進(jìn)入車場,每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。
試為停車場編制按上述要求進(jìn)行管理的模擬程序。
(1)汽車可有不同種類,則它們的占地面積不同,收費標(biāo)準(zhǔn)也不同,如1輛客車和1.5輛小汽車的占地面積相同,1輛十輪卡車占地面積相當(dāng)于3輛小汽車的占地面積。如何處理該問題?
解決方案:為了簡化問題,根據(jù)車型(本題中有三種:小汽車,大卡車,十輪客車)的不同,收費標(biāo)準(zhǔn)直接和占地面積成正比例。
(2)汽車可以直接從便道上開走,此時排在它前面的汽車要先開走讓路,然后再依次排到隊尾。如何處理該問題?
解決方案:汽車從便道開到停車場時,可使用隊列的數(shù)據(jù)結(jié)構(gòu)(先進(jìn)先出,且只能在隊尾增加元素,隊頭不能增加元素);當(dāng)汽車直接從便道開走時,排在他前面的汽車要開走在排到隊尾,可見,先開入便道的車輛 ,即隊頭,先離開便道,然后到隊尾入隊。因此,在允許汽車可以直接從便道開走時,應(yīng)該使用隊列來存儲便道上的汽車。

二、算法設(shè)計

1、利用棧和隊列模擬車輛進(jìn)出;
2、充分考慮停車時間的復(fù)雜計算,包括平年和閏年,大月和小月以及任意日期之間的小時數(shù)計算;
3、運用順序查找和折半查找對比查詢功能的時間復(fù)雜度;

三、數(shù)據(jù)結(jié)構(gòu)選擇

對象car:
自定義一個Car的類,包含汽車的車牌號,車的顏色,車型,停車時間。

class Car{ public:string licensePlate;//車牌號 string color;//車的顏色 string model;//車型 string time;//停車時間 };

停車場
根據(jù)汽車在停車場的特點(后進(jìn)先出),存儲停車場內(nèi)的各種汽車選擇棧stack來存儲。考慮到棧無法遍歷(遍歷時無法存儲已有的數(shù)據(jù))的特點,同時定義一個Car類型的數(shù)組a[100]來存儲停車場內(nèi)的車輛信息,里面的數(shù)據(jù)和stack的數(shù)據(jù)是同步的。

Car a[100];//防止遍歷清空數(shù)據(jù),與Parking同步 stack<Car> Parking;//停車場,有初始值

便道
根據(jù)汽車在便道的進(jìn)出特點(先進(jìn)入便道的車先進(jìn)入停車場),選擇隊列queue來存儲在便道上的車輛信息。

queue<Car> Waiting;//便道等待停車的車輛在排隊,有初始值

停車時間
考慮到要從文件中讀取車輛信息,讀取的信息是string類型,但時間計算是數(shù)值型,為了方便通過時間計算停車費用,沒有單獨對年月日進(jìn)行定義,而是將時間格式(形如2019-7-30,12:30)統(tǒng)一,定義為string類型。讀取信息后對字符串進(jìn)行分割處理,得到汽車停車時間(年、月、日、時、分)。

四、功能設(shè)計

class Manage{ public:void add();//停車 void inquire();//查詢 void show();//顯示函數(shù) void modification();//信息修改函數(shù) void del();//出停車場void statistics();//統(tǒng)計車輛信息函數(shù) void save();//寫入文件函數(shù) void loadsave();//修改信息后重新寫入文件函數(shù) void load();//運行程序后加載最新數(shù)據(jù)函數(shù) };

具體函數(shù)實現(xiàn)可下載我上傳的資源進(jìn)行查看,里面包含輸入輸出的TXT文件以及各個文件的作用說明。
資源鏈接:https://download.csdn.net/download/chengxuyuanliwanwan/11461187

五、特色

出停車場時,時間格式的轉(zhuǎn)化、時間的準(zhǔn)確計算以及折半查找的應(yīng)用都在一定程度上優(yōu)化了代碼。
出停車場模擬

void Manage::del() {int j;string c;cout<<"歡迎出停車場!"<<endl;cout<<"請輸入您想出停車場車輛的車牌號碼:"<<endl;cin>>c;for(j=0;j<i;j++){//從數(shù)組a里刪除 if(c.compare(a[j].licensePlate)==0){cout<<"您的停車時間為"<<a[j].time<<endl;cout<<"請輸入您離開停車場的時間:"<<endl; string endtime;cin>>endtime;//計算繳納的費用int data1[3],data2[3],time1[2],time2[2];char *s1=(char*)a[j].time.data();//停車時間 char *t1[5];int count1=0;while((t1[count1]=strtok(s1,"-,:"))!=NULL){count1++;s1=NULL;} //構(gòu)造停車時間的參數(shù) data1[0]=atoi(t1[0]);data1[1]=atoi(t1[1]);data1[2]=atoi(t1[2]);time1[0]=atoi(t1[3]);time1[1]=atoi(t1[4]);char *s2=(char*)endtime.data();//離開停車場的時間 char *t2[5];int count2=0;while((t2[count2]=strtok(s2,"-,:"))!=NULL){count2++;s2=NULL;} //構(gòu)造離開停車場的時間的參數(shù) 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]); double mtime;mtime = HoursCount(data1,time1,data2,time2);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);cout<<"您的車在停車場停留了 "<<mtime<<" hours"<<endl;string ccar="小汽車";string PassengerCar="大卡車";string Truck="十輪客車";double perprice;if(ccar.compare(a[j].model)==0){perprice=1;}if(PassengerCar.compare(a[j].model)==0){perprice=1*1.5;}if(Truck.compare(a[j].model)==0){perprice=1*10;}double cost=mtime*perprice;cout<<"請繳納"<<fixed<<setprecision(2)<<cost<<"元的停車費"<<endl; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);for(int k=j;k<i-1;k++){a[k].licensePlate=a[k+1].licensePlate;a[k].color=a[k+1].color;a[k].model=a[k+1].model;a[k].time=a[k+1].time;}break;}} i--;//從Parking里刪除 //讓路的車寫入back.txt里ofstream backFile("back.txt");//加到文本文件里 ofstream newFile("new.txt");//加到文本文件new.txt里 for(j=0;j<Parking.size();j++){if(c.compare(Parking.top().licensePlate)!=0){Backing.push(Parking.top());//讓路backFile<<Parking.top().licensePlate<<"\t"<<Parking.top().color<<"\t"<<Parking.top().model<<"\t"<<Parking.top().time<<endl; Parking.pop();//彈出}else{ Parking.pop();//彈出 //退出讓路的車輛的重新開到停車場回來while(!Backing.empty()){Parking.push(Backing.top());//將棧頂元素放入停車場 Backing.pop(); //彈出棧頂元素 }int s=Parking.size(),g=0;while(g<s) {newFile<<Parking.top().licensePlate<<"\t"<<Parking.top().color<<"\t"<<Parking.top().model<<"\t"<<Parking.top().time<<endl;if(Parking.empty()) {break;}Parking.pop();g++;}break;} } backFile.close();newFile.close(); }

折半查找實現(xiàn)查詢功能

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;} //構(gòu)造停車時間的參數(shù) 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;} //構(gòu)造離開停車場的時間的參數(shù) 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; }

本次設(shè)計過程中學(xué)會了很多東西,很多庫函數(shù)的應(yīng)用大大簡化了代碼,自己還需努力!

總結(jié)

以上是生活随笔為你收集整理的停车场汽车管理系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。