#include <iostream>
#include <Windows.h>
#include <cstdlib>
#include <ctime>
#include "Queue.h"
#include "Stack.h"
using namespace std;
int main()
{
int creat_command(int a);//产生随机数
void doAction( int &maxstack,int &command,Stack &park,Stack &temp,Queue &wait,Queue &leave,int &number);
int creat_number(int a);
int maxstack;
int sec_number;
double money;
cout<<"***************************欢迎进入模拟停车场管理系统***************************"<<endl;
cout<<"请设置停车场可容量最大汽车数:"<<endl;
cin >> maxstack;
cout << "请输入您需要操作的时间(min)" << endl;
cin >> sec_number;
cout << "请输入收费标准(元/秒)" << endl;
cin >> money;
cout << endl;
Stack park;//停车场
park.get_maxstack(maxstack);
Stack temp;//临时停放为给要离去的汽车让路而从停车场退出来的汽车
temp.get_maxstack(maxstack);
Queue wait;//便道
Queue leave;//离开车辆
int command;
int counter=0;
int number=1;//汽车牌号
while(true)
{
if(counter == (((sec_number*60)/15))*3)
break;
command = creat_command(4);
cout << command << endl;
doAction(maxstack,command,park,temp,wait,leave,number);
//每隔15秒输出停车场信息
Stack temp_p(park);
Queue temp_q(wait);
Queue temp_l(leave);
if((counter>=3) && (counter%3==0))
{
cout << '\n'<< "*******车场内的车为*******" << endl;
if(!temp_p.empty())
{
cout << "车场中的车辆为:" << temp_p.get_number() << endl << endl;
while(!temp_p.empty())
{
temp_p.top_print();
temp_p.pop();
cout << endl;
}
}
if(park.empty())
cout << "车场内为空,没有车停留。" << endl ;
cout << endl;
cout << "*******便道里的车为:*******" << endl;
if(!temp_q.empty())
{
cout << "便道内的车辆为:" << temp_q.get_position() << endl ;
while (!temp_q.empty())
{
temp_q.retrieve_print();
temp_q.serve();
cout << endl;
}
}
if(wait.empty())
cout << "便道内为空,没有车停留." << endl ;
cout << endl;
cout << "*******离开的车为 *******" << endl;
if(!temp_l.empty())
{
while( !temp_l.empty())
{
temp_l.leave_print(money);
temp_l.serve();
}
cout << endl;
}
if(leave.empty())
cout << "停车场中没有车离开." << endl;
cout << endl;
leave.clear();
}
Sleep(5000);
counter++;
}
return 0;
}
int creat_command(int a)
{
//产生随机数并返回给主函数
srand((unsigned) time(NULL));
int x;
x = rand() % a;
if( x == 3)
{
return 1;
}
else
return x;
}
void doAction( int &maxstack,int &command,Stack &park,Stack &temp,Queue &wait,Queue &leave,int &number)
{
switch(command)
{
//无进无出
case 0:
break;
//有车辆进入
case 1:
if(park.get_number() == maxstack)
{
//如果停车场已满则将新进来的车放入便道
tm c;//定义0时间
c.tm_hour=0;
c.tm_min=0;
c.tm_sec=0;
//定义进入便道的时刻
time_t t = time(NULL);
tm wait_t = *(localtime(&t));
wait.append(number,wait_t,c,c);
number++;
}
//如果停车场没有满
else
{
tm c;
c.tm_hour=0;
c.tm_min=0;
c.tm_sec=0;
time_t t = time(NULL);
tm park_t = *(localtime(&t));//定义进入车场的时间
park.push(number,c,park_t);//将车开入停车场
number++;
}
break;
//有车辆出去
case 2:
if(park.empty())//如果停车场为空的话,则不能进行删除
{
cout << "停车场为空,没有车离开" << endl;
break;
}
else
{
if(!park.empty())//如果停车场不是空的则可以进行删除(车驶离)
{
//如果便道中有车等待
//则进行删除并将便道内的车放入停车场中
if(!wait.empty())
{
int creat_number(int a);
//离开的时间
time_t t = time(NULL);
tm leave_t = *(localtime(&t));
//获得便道的车进入停车场的时间
tm park_t = *(localtime(&t));
//车在停车场中的位置
int num;
num=creat_number(maxstack);
cout << "出站的车为:第" << num << "辆车"<< endl;
//车离开的编号
int th_number;
//离开车场的车的到达时间
tm wt;
tm pt;
tm lt;
park.get_car_infor(num,th_number,wt,pt);
//将离开停车场的车辆信息压入Queue leave中
leave.append(th_number,wt,pt,leave_t);
int r = park.get_number();
//将number-num辆车放到临时栈里
if(num == park.get_number())
{
park.get_car_top(th_number,wt,pt);
temp.push(th_number,wt,pt);
park.pop();
}
else
{
if(num < park.get_number())
{
for(int i = 0;i<r-num;i++)
{
park.get_car_top(th_number,wt,pt);
temp.push(th_number,wt,pt);
park.pop();
}
park.pop();
}
}
//将临时栈里的车压入停车场
for(int i = 0;i<r-num;i++)
{
temp.get_car_top(th_number,wt,pt);
park.push(th_number,wt,pt);
temp.pop();
}
//将离开便道要去车场的信息压入车场中
wait.get_wait_leave_infor(th_number,wt,pt,lt);
park.push(th_number,wt,park_t);
wait.serve();
}
else
{
//如果便道内没有成等待
if( wait.empty() )
{
int creat_number(int a);
//离开的时间
time_t t = time(NULL);
tm leave_t = *(localtime(&t));
//车在停车场中的位置
int num;
num=creat_number(park.get_number());
/*cout << "*******离开的车为 *******" << endl;*/
cout << "出站的车为: 第" << num << "辆车" << endl;
//车离开的编号
int th_number;
//离开车场的车的到达时间
tm wt;
tm pt;
park.get_car_infor(num,th_number,wt,pt);
//cout << "离开的车的编号" << th_number << endl;
//将离开停车场的车辆信息压入Queue leave中
leave.append(th_number,wt,pt,leave_t);
//将number-num辆车放到临时栈里
if( (park.get_number()-1)!= 0)
{
int r = park.get_number();
//
if(num == park.get_number())
{
park.get_car_top(th_number,wt,pt);
//cout << "进入临时车站的车的编号" <<th_number << endl;
temp.push(th_number,wt,pt);
park.pop();
}
else
{
if(num < park.get_number())
{
for(int i = 0;i<r-num;i++)
{
park.get_car_top(th_number,wt,pt);
//cout << "进入临时车站的车的编号" <<th_number << endl;
temp.push(th_number,wt,pt);
park.pop();
//cout << "count=" << park.get_number() << endl;
}
park.pop();
}
}
//将临时栈里的车压入停车场
for(int i = 0;i< r-num;i++)
{
temp.get_car_top(th_number,wt,pt);
park.push(th_number,wt,pt);
//cout<<"临时站压入车场编号"<<th_number<<endl;
temp.pop();
}
}
else
{
//如果停车站中只有一辆车
//则只需将第一辆车删除即可
if( park.get_number()-1 == 0)
{
park.pop();
break;
}
}
}
}
}
}
break;
default:
break;
}
}
int creat_number(int a)
{
//产生随机数
srand((unsigned) time(NULL));
return (1 + rand() % a);
}
没有合适的资源?快使用搜索试试~ 我知道了~
Parking System(一个C++写的停车系统)
共52个文件
tlog:26个
cpp:3个
obj:3个
需积分: 16 11 下载量 77 浏览量
2012-10-25
13:17:56
上传
评论
收藏 13.79MB RAR 举报
温馨提示
停车场是一个可以放n辆车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按照到达时间的先后顺序排列,若车场内已经停满n辆车,则后来的车辆只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车可以进入;当停车场内某辆车要离开时,在它之后进入车场的车辆必须先退出车场为它让路,待该车辆开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车,在它离开的时候必须按它停留的时间长短缴纳费用。 用Stack和Queue来模拟
资源推荐
资源详情
资源评论
收起资源包目录
Parking System.rar (52个子文件)
Parking System
Parking System
Stack.cpp 3KB
Parking System.vcxproj.user 143B
Queue.cpp 3KB
Parking System.vcxproj 4KB
Queue.h 917B
Stack.h 742B
main.cpp 7KB
Debug
vc100.idb 579KB
link.3020-cvtres.read.1.tlog 2B
link.12792.read.1.tlog 2B
link.12792-cvtres.write.1.tlog 2B
Stack.obj 54KB
link.9500-cvtres.read.1.tlog 2B
Parking System.log 4KB
CL.write.1.tlog 3KB
Parking System.exe.embed.manifest.res 472B
CL.read.1.tlog 38KB
mt.read.1.tlog 378B
Parking System.exe.embed.manifest 406B
rc.write.1.tlog 358B
rc.read.1.tlog 350B
Queue.obj 57KB
mt.command.1.tlog 446B
link.3020.read.1.tlog 2B
Parking System.lastbuildstate 69B
cl.command.1.tlog 2KB
link.9500-cvtres.write.1.tlog 2B
link-cvtres.read.1.tlog 2B
main.obj 90KB
link.3020-cvtres.write.1.tlog 2B
link.9500.write.1.tlog 2B
link.write.1.tlog 1KB
link.3020.write.1.tlog 2B
link-cvtres.write.1.tlog 2B
link.command.1.tlog 2KB
rc.command.1.tlog 634B
link.read.1.tlog 3KB
mt.write.1.tlog 378B
Parking System_manifest.rc 218B
link.12792-cvtres.read.1.tlog 2B
Parking System.exe.intermediate.manifest 381B
link.12792.write.1.tlog 2B
vc100.pdb 292KB
link.9500.read.1.tlog 2B
Parking System.vcxproj.filters 1KB
Parking System.sdf 26.64MB
Parking System.sln 909B
Parking System.suo 14KB
ipch
parking system-dba4ba9d
parking system-8bdf279d.ipch 43.5MB
Debug
Parking System.exe 55KB
Parking System.pdb 763KB
Parking System.ilk 445KB
共 52 条
- 1
资源评论
luhanzang
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 航天器遥测数据故障检测系统python源码+文档说明+数据库(课程设计)
- 北京航空航天大学操作系统课设+ppt+实验报告
- 基于Vue+Echarts实现风力发电机中传感器的数据展示监控可视化系统+源代码+文档说明(高分课程设计)
- 基于单片机的风力发电机转速控制源码
- 基于C++实现的风力发电气动平衡监测系统+源代码+测量数据(高分课程设计)
- 毕业设计- 基于STM32F103C8T6 单片机,物联网技术的太阳能发电装置+源代码+文档说明+架构图+界面截图
- 基于 LSTM(长短期记忆)(即改进的循环神经网络)预测风力发电厂中风力涡轮机产生的功率+源代码+文档说明
- 基于stm32f103+空心杯电机+oled按键+运动算法
- 《CKA/CKAD应试指南/从docker到kubernetes 完全攻略》学习笔记 第1章docker基础(1.1-1.4)
- 基于python实现的水下压缩空气储能互补系统建模仿真与经济效益分析+源代码+论文
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功