c++实现停车场管理系统(栈和队列)

今天数据结构课设就答辩完了,我跟大家分享一下我的课程设计,c++实现停车场管理系统。一个头文件和一个main函数。

Node.h文件代码如下:

#ifndef NODE_H
#define NODE_H
#include <iostream>
#include<cstring>
#include<string>  
#include<map>
#include<stack> 
#include<queue>
#include<vector>
#include <iomanip>
#include "Node.h"
using namespace std;

 
struct node 
{ 
 string no;//车牌号 
 int time;//车辆进入的时间(以小时为单位) 
 int sub;//车辆在停车场的位置 
} nod; 
map<string,int>mp;//用来检测车辆在停车场或者在便道内 
deque<node>q1;//模拟停车场 
deque<node>q2;//模拟便道 
stack<node>sk;//交换媒介 
string str1="park",str2="pavement"; 
void Push(int n)//车辆驶入操作 
{
	cout<<"请输入要进入车辆的车牌号"<<endl; 
	string x; 
	int y;
	cin>>x; 
	cout<<"请输入该车辆进入停车场的时间(例如0210 1530)"<<endl; 
	cin>>y; 
	if(!mp[x])//如果此车不在停车场或者便道内执行以下命令 
	{ 
		 if(q1.size()<n)//如果停车场未满 
		 {
			nod.no=x; 
			nod.time=y; 
			nod.sub=q1.size()+1; 
			q1.push_back(nod); 
			mp[x]=q1.size();
			cout<<"成功停入停车场!"<<endl;
		 }
		 else//停车场满了之后进入便道 
		 {
			 nod.no=x; 
			 nod.time=y; 
			 nod.sub=q2.size()+1; 
			 q2.push_back(nod); 
			 mp[x]=n+q2.size(); 
			 cout<<"您的车辆正位于便道等待"<<endl;
		 } 
	}
	else
	cout<<"错误:该车辆已在停车场内!"<<endl; 
} 
void Pop(int n)//车辆驶出操作 
{
	cout<<"请输入要驶出车辆的车牌号"<<endl; 
	string x; 
	int y,ans,minutes,hours,inhour;
	float payment;
	cin>>x; 
	cout<<"请输入该车辆驶出停车场的时间(例如0210 1530)"<<endl; 
	cin>>y; 
	if(!mp[x])
		cout<<"错误:该辆并不在停车场内!"<<endl; 
	else if(mp[x]<=n)//如果该车在停车场内 
	{
		mp[x]=0; 
		while(q1.back().no!=x)//车出 
		{
			q1.back().sub--; 
			sk.push(q1.back()); 
			q1.pop_back(); 
		}
		 ans=y-q1.back().time;
		 hours=ans/100;
		 minutes=ans-hours*100+hours*60;
		 inhour=minutes/60;
		 minutes=minutes%60;

		 payment=hours*5+minutes*5.0/60;
		 q1.pop_back(); 
		 while(!sk.empty()) 
		 {		 
			 q1.push_back(sk.top()); 
			 sk.pop(); 
			 mp[q1.back().no]=q1.back().sub; 
		 }
		 if(!q2.empty())//如果便道里也有车,那么进入停车场,并且便道后面的车向前移动 
		 { 
			 q2.front().time=y; 
			 q2.front().sub=q1.size()+1; 
			 q1.push_back(q2.front()); 
			 q2.pop_front();
			 while(!q2.empty()) 
			 { 
				 q2.back().sub--; 
				 sk.push(q2.back()); 
				 q2.pop_back(); 
			 }
			 while(!sk.empty())
			 { 
				 q2.push_back(sk.top()); 
				 sk.pop(); 
				 mp[q2.back().no]=q1.back().sub; 
			 }
			 mp[q1.back().no]=q1.size(); 
		 } 
	 cout<<"该车辆一共停了 "<<hours<<" 个小时"<<minutes<<"分钟"<<endl; 
	 cout<<"所以该车辆需要缴纳 "<<setprecision(4)<<payment<<"元"<<endl; 
	}
	else if(mp[x]>n)//如果车在便道里,那么直接离开,后面的车向前移动 
	{ 
		mp[x]=0; 
		while(q2.back().no!=x) 
		{ 
			 q2.back().sub--; 
			 sk.push(q2.back()); 
			 q2.pop_back(); 
		} 
		q2.pop_back(); 
		while(!sk.empty()) 
		{ 
			 q2.push_back(sk.top()); 
			 sk.pop(); 
		}
		cout<<"由于该车辆并未进入停车场,所以不进行收费"<<endl; 
	} 	
} 
void Query1(int n)//查询停车场的停车状态 
{
	cout<<"请输入要查询状态的车牌号"<<endl; 
	cout<<endl; 
	string x; 
	cin>>x; 
	if(!mp[x]) 
		cout<<"该车辆并未在停车场"<<endl; 
	else if(mp[x]<=n) 
		cout<<"该车辆位于停车场"<<mp[x]<<"号位"<<endl; 
	else
		cout<<"该车辆位于"<<mp[x]-n<<"号便道"<<endl; 
} 
void Query2(int n)//查询停车场的空车位 
{ 
	cout<<endl; 
	if(q1.size()==n)
	{
		cout<<"停车场已满"<<endl;
	}
	else
	{ 
		cout<<"停车场的"<<q1.size()+1; 
		for(int i=q1.size()+2; i<=n; i++) 
		cout<<"、"<<i; 
		cout<<"号位车为空"<<endl; 
	} 
} 

#endif

main.cpp文件如下:

#include  <cctype>
#include "Node.h"
using namespace std;
int main() 
{ 
 int n; 
 cout<<"  **************停车场管理系统**************"<<endl; 
cout<<endl; 
cout<<"停车场管理系统说明:"<<endl; 
cout<<"1.当停车场车位已满之后,车将会停在便道"<<endl; 
cout<<"2.停车场按照每小时五元的标准收费(不足一小时按照一小时计算)"<<endl; 
cout<<"3.停在便道的车辆不收费。"<<endl; 
cout<<endl; 
Start:cout<<"请设置停车场的总共的车位数:"<<endl; 
cin>>n;
if (cin.good()!=1||n<=0) 
	{
		cout <<"输入有误请重新输入!" << endl;	
		cin.clear();  	
		cin.sync();   
		goto Start;
	}
 
 cout<<endl; 
 cout<<"****************车位设置完毕!下面开始停车场管理系统模拟***************"<<endl; 
 cout<<endl; 
 cout<<"*******************************操作说明********************************"<<endl; 
 cout<<endl; 
 cout<<"车辆驶入登记:请按1                 车辆驶出登记:请按2      "<<endl; 
 cout<<endl; 
 cout<<"查询停车场的停车状态:请按3         查询停车场空闲车位:请按4"<<endl; 
 cout<<endl; 
 cout<<"                 退出停车场管理系统:请按0"<<endl; 
 cout<<endl; 
 cout<<"***********************************************************************"<<endl; 
 cout<<endl; 
 while(1) 
 { 
	cout<<"           告示牌:";
	Query2(n); 
	cout<<endl;
	cout<<endl;
	cout<<endl;
	cout<<endl;
	cout<<endl;
	cout<<endl;
	cout<<"********请选择操作1~4,若您想退出请按0********"<<endl; 
	cout<<endl; 
	cin.clear();  	
	cin.sync();  
	int t; 
	cin>>t; 
	 if(t==1) 
		Push(n); 
	 else if(t==2) 
		Pop(n); 
	 else if(t==3) 
		Query1(n); 
	 else if(t==4) 
		Query2(n); 
	 else if(t==0)
		break; 
	 else 
		 cout<<"输入有误,请重新输入!"<<endl;
 cout<<endl; 
 cout<<"**********************ヾ( ̄▽ ̄)Bye~**********************"<<endl; 
 cout<<"**********************ヾ( ̄▽ ̄)Bye~**********************"<<endl; 
 cout<<endl; 
 } 
 cout<<"欢迎使用停车场管理系统,期待您的下次使用^_^"<<endl; 
 return 0;
}

设计实现思路就是用栈和队列实现的。具体代码和课设报告在我的github上https://github.com/coder23263/Parking_lot_management_system,谢谢观看。

1需求分析……………………………………………………………………(页码) 2概要设计……………………………………………………………………(页码) 3详细设计……………………………………………………………………(页码) 4 测试与分析………………………………………………………………………(页码) 5 用户使用说明……………………………………………………………………(页码) 6.发现问题及错误分析 7总…………………………………………………………………………………(页码)  参考文献 ……………………………………………………………………………(页码)  附录:程序源代码 …………………………………………………………………(页码) 1、需求分析:   根据题目要求,充分地分析和理解问题,描述系统的功能要求,明确问题要求做什么?以及限制条件是什么? 问题描述 随着我国人民生活水平提高和汽车工业的高速发展.越来越多的家庭拥有了汽车,但受到土地的限制,所以采用立体停车场是解决停车难的必然出路。立体停车场占地少,容量大.利用效率高;泊车与取车全自动化,省时省力,安全防盗。本文主要以两层停车场为例,设计一能完成存车与取车的停车场系统。 有一个两层的停车场, 每层有6个车位, 当第一层车停满后才允许使用第二层. ( 停车场可用一个二维数组实现, 每个数组元素存放一个车牌号 ) 每辆车的信息包括车牌号、 层号、 车位号、停车时间共4项, 其中停车时间按分钟计算 。 假设停车场初始状态为第一层已经停有4辆车, 其车位号依次为1—4 , 停车时间依次为20, 15, 10 , 5 . 即先将这四辆车的信息存入文件”car.dat”中( 数组的对应元素也要进行赋值 ) 。  停车操作:当一辆车进入停车场时, 先输入其车牌号, 再为它分配一个层号和一个车位号, 停车时间设为5 , 最后将新停入的汽车的信息添加文件”car.dat”中, 并将在此之前的所有车的停车时间加5。 收费管理(取车): 当有车离开时, 输入其车牌号, 先按其停车时间计算费用, 每5分钟0.2元. (停车费用可设置一个变量进行保存), 同时从文件”car.dat”中删除该车的信息, 并将该车对应的车位设置为可使用状态(即二维数组对应元素清零). 按用户的选择来判断是否要输出停车收费的总计。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值