有一个可以停放n 辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n 辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在他之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆在依原来的次序进场。每辆车在离开停车场时,都应依据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。
1. 以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
2. 每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。
3. 对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费,功能可自己添加)。
1.头文件

#define _AFXDLL
#include <afx.h>
#include<iostream>
#include<string>
#define MAX 3
using namespace std;struct Time      //时间结构体,用于车辆进场,出场时间记录
{int year;int month;int day;int hour;int min;
};struct CarNode     //车辆结构体
{char num[10];   //车牌号Time reach;      //到达时间Time leave;      //离开时间
};
struct StackCar   //停车场栈
{int top;CarNode *CarStack[MAX + 1];
};
struct QCarNode   //链队中的汽车结点结构体
{CarNode *data;    //汽车信息struct QCarNode *next;
};
struct LinkQueueCar  //便道
{QCarNode *head;   //对头指针QCarNode *rear;    //队尾指针
};
class CarSystem{StackCar *CarBase, *QuitTemp;   //停车场栈,车辆出停车场时的临时栈LinkQueueCar *WaitQueue;    //便道
public:CarSystem();      //构造函数~CarSystem();           //析构函数int Arrival();          //车辆进站void Leave();            //车辆出站void ShowLeaveInfo(CarNode *p, int item);   //离开车辆缴费相关信息void ShowInfo();          //显示车位情况void Carstack();   //停车场中车位状况void Carqueue();    //便道中车位状况void QueueCarLeave(char a[]);   //便道中车辆离开
};
void ShowMenu()
{cout << "********************************************" << endl;cout << "******      停 车 场 管 理 系 统     ******" << endl;cout << "******       0.安全退出系统          ******" << endl;cout << "******       1.汽车停车登记          ******" << endl;cout << "******       2.汽车离开登记          ******" << endl;cout << "******       3.便道汽车离开          ******" << endl;cout << "******       4.车位信息查看          ******" << endl;cout << "\n\t\n\t\t请选择:";
}CarSystem::CarSystem()         //构造函数
{CarBase = new StackCar;            //停车场栈CarBase->top = 0;CarBase->CarStack[CarBase->top] = NULL;QuitTemp = new StackCar;         //车辆临时栈QuitTemp->top = 0;QuitTemp->CarStack[QuitTemp->top] = NULL;WaitQueue = new LinkQueueCar;       //便道WaitQueue->head = new QCarNode;if (WaitQueue->head != NULL){WaitQueue->head->next = NULL;WaitQueue->rear = WaitQueue->head;}
}CarSystem::~CarSystem()
{QCarNode *ptemp;while (CarBase->top != 0)CarBase->CarStack[--CarBase->top] = NULL;while (WaitQueue->head != WaitQueue->rear){ptemp = WaitQueue->head;WaitQueue->head = WaitQueue->head->next;delete ptemp;}
}int CarSystem::Arrival()    //车辆进站登记
{CarNode *p;       //汽车临时指针QCarNode *t;      //队列中汽车临时指针CTime start_time = CTime::GetCurrentTime();   //获取系统当前时间作为车辆进站时间p = new CarNode;    cout << "登记车牌号:";cin >> p->num;if (CarBase->top < MAX)       //有空车位{CarBase->top++;cout << "车辆在停车场第 " << CarBase->top  << " 号车位" ;p->reach.year = start_time.GetYear();p->reach.month = start_time.GetMonth();p->reach.day = start_time.GetDay();p->reach.hour = start_time.GetHour();p->reach.min = start_time.GetMinute();CarBase->CarStack[CarBase->top] = p;return 1;}else           //没有空车位{cout << "停车场已满,请在便道等待...";t = new QCarNode;t->data = p;t->next = NULL;WaitQueue->rear->next = t;WaitQueue->rear = t;return 1;}
}void CarSystem::Leave()     //车辆出站登记
{int item;CarNode *p, *t;   QCarNode *q;if (CarBase->top > 0)      //车站有车时{while (1){cout << "请输入车在车场的位置:";cin >> item;if (item >= 1 && item <= CarBase->top) break;    //判断输入位置}while (CarBase->top > item)  //位置不在栈顶的汽车出站{QuitTemp->top++;QuitTemp->CarStack[QuitTemp->top] = CarBase->CarStack[CarBase->top];CarBase->CarStack[CarBase->top] = NULL;CarBase->top--;}p = CarBase->CarStack[CarBase->top];CarBase->CarStack[CarBase->top] = NULL;CarBase->top--;while (QuitTemp->top >= 1)  //当暂时存储汽车的栈结构中有汽车时汽车重新进站{CarBase->top++;CarBase->CarStack[CarBase->top] = QuitTemp->CarStack[QuitTemp->top];QuitTemp->CarStack[QuitTemp->top] = NULL;QuitTemp->top--;}ShowLeaveInfo(p, item);if ((WaitQueue->head != WaitQueue->rear) && CarBase->top<MAX)    //停车场有车位且便道有车时,便道中车辆进入停车场{CTime start_time = CTime::GetCurrentTime();   //获取系统当前时间作为车辆进站时间q = WaitQueue->head->next;t = q->data;CarBase->top++;cout << "\n便道的" << t->num << "号车进入车场第" << CarBase->top << "号车位.";t->reach.year = start_time.GetYear();t->reach.month = start_time.GetMonth();t->reach.day = start_time.GetDay();t->reach.hour = start_time.GetHour();t->reach.min = start_time.GetMinute();WaitQueue->head->next = q->next;if (q == WaitQueue->rear)WaitQueue->rear = WaitQueue->head;CarBase->CarStack[CarBase->top] = t;free(q);}else cout << "便道里没有车..." << endl;}else cout << "挺车场里没有车..." << endl;
}void CarSystem::ShowLeaveInfo(CarNode *p, int room)     //汽车离站时缴费显示
{CTime end_time = CTime::GetCurrentTime();p->leave.year = end_time.GetYear();p->leave.month = end_time.GetMonth();p->leave.day = end_time.GetDay();p->leave.hour = end_time.GetHour();p->leave.min = end_time.GetMinute();printf("\n离开车辆的车牌号为:");cout << p->num;cout << "\n到达时间为: " << p->reach.year << " 年 " << p->reach.month << " 月 " << p->reach.day << " 日 " << p->reach.hour << " 时  " << p->reach.min << " 分";cout << "\n离开时间为: " << p->leave.year << " 年 " << p->leave.month << " 月 " << p->leave.day << " 日 " << p->leave.hour << " 时  " << p->leave.min << " 分";cout << "\n应交费用为: " << ((p->leave.hour - p->reach.hour) * 60 + (p->leave.min - p->reach.min)) * 100 << " 元";free(p);
}void CarSystem::QueueCarLeave(char a[])    //便道中的车直接离开
{QCarNode *p,*q;p = WaitQueue->head->next;q = WaitQueue->head;if (WaitQueue->head != WaitQueue->rear){while (strcmp(p->data->num, a) && p != NULL){q = p;p = p->next;}q->next = p->next;free(p);}else{cout << "便道中无车!" << endl;}
}void CarSystem::ShowInfo()    //查询车位状态
{int choice = 0;cout << "请输入查看列表:" << endl;cout << "---   1.停车场车位状况     ---" << endl;cout << "---   2.便道停车位状况     ---" << endl;cout << "---   3.返回主菜单         ---" << endl;while (choice!=3){while (1){cin >> choice;if (choice >= 1 || choice <= 3) break;else cout << "请检查输入!" << endl;}switch (choice){case 1:Carstack();break;case 2:Carqueue();break;case 3:return;break;default:break;}}
}void CarSystem::Carstack()     //车场车位显示
{int i;if (CarBase->top>0){cout << "停车场车位状态:";cout << "\n车位号\t" << "         到达时间    \t" << "车牌号\n";for (i = 1; i <= CarBase->top; i++){cout << "  " << i << "\t  ";cout << CarBase->CarStack[i]->reach.year << "年" << CarBase->CarStack[i]->reach.month << "月" << CarBase->CarStack[i]->reach.day<< "日" << CarBase->CarStack[i]->reach.hour << "时" << CarBase->CarStack[i]->reach.min << "分";cout << "\t  " << CarBase->CarStack[i]->num << endl;}}else cout << "\n车场里没有车";
}void CarSystem::Carqueue()     //便道车位显示
{QCarNode *p;p = WaitQueue->head->next;cout << "便道车位状况:" << endl;if (WaitQueue->head != WaitQueue->rear){cout << "-->-->-->-->-->-->-->-->-->-->-->-->-->-->" << endl;while (p != NULL){cout << p->data->num << "\t";p = p->next;}cout << endl;cout << "-->-->-->-->-->-->-->-->-->-->-->-->-->-->" << endl;}else{cout << "-->-->-->-->-->-->-->-->-->-->-->-->-->-->" << endl;cout << "便道中无车!" << endl;cout << "-->-->-->-->-->-->-->-->-->-->-->-->-->-->" << endl;}
}

2.源文件

#include "CarSystem.h"
#include<iostream>using namespace std;
int main()
{CarSystem CAR;         //停车场类int x = 100;char a[10];while (x != 0){system("pause");system("cls");      //清屏ShowMenu();cin >> x;switch (x){case 0:exit(0);break;case 1:CAR.Arrival();cout << endl << "-----------------------------------------" << endl;cout << "停车场更新..." << endl;CAR.Carstack();cout << "-----------------------------------------" << endl;break;case 2:CAR.Leave();cout << endl << "-----------------------------------------" << endl;cout << "停车场更新..." << endl;CAR.Carstack();cout << "-----------------------------------------" << endl;break;case 3:cout << "请输入要离开的车牌号:" ;cin >> a;CAR.QueueCarLeave(a);cout << "便道更新..." << endl;CAR.Carqueue();break;case 4:CAR.ShowInfo();break;}}system("pause");return 0;
}

C++实现停车场管理系统相关推荐

  1. Jsp实现停车场管理系统

    系统采用了B/S架构,Tomcat8.0作为运行服务器,基于J2EE标准.Eclipse4.6开发环境,数据库采用Mysql-5.5.37.开发过程利用MVC开发模式,层次分明.成功实现了该系统.试运 ...

  2. 海康威视智能机器人泊车_干货|海康威视智能停车场管理系统(含技术指导手册+施工图)...

    随着汽车消费的持续增长,城市停车设施.规划.管理等方面不够完善,导致机动车停车供需矛盾.伴随着停车难问题的日益凸显,面对停车位有限资源与无限需求之间的矛盾,物联网时代就要充分利用物联网技术的力量解决有 ...

  3. 停车管理系统汽车到达汽车离去c语言,停车场管理系统 C语言实现

    用堆栈模拟实际的停车场管理系统 一.问题描述 1.实验题目: 设停车场是一个可停放 n 辆汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最 ...

  4. 停车场管理系统c语言程序,c语言程序设计 停车场管理系统 停车场有1-20个车位号,设计一个停车场管理系统,实现停车场管理...

    #include #include #include #include #define max 3 #define price 1 int b=1; typedef struct { int day; ...

  5. 网络虚拟化有几种实现方式_停车场管理系统的防砸车功能有几种方式?如何实现?...

    原标题:停车场管理系统的防砸车功能有几种方式?如何实现? 前言 01 01 正文 一.压力波防砸装置 也叫遇阻防砸,主要是安装遇阻返回装置,当道闸杆下落过程中接触到车辆或者行人(接触力度是可以调节的) ...

  6. java菜单管理的实现方式_智能停车场管理系统的收费实现方式有哪些?

    面对需求市场的拉动,用户对停车场管理系统提出更新更高的要求.实现自动进出车辆.自动判别车辆放行.自动缴费管理,将是实现全智能化停车场管理的发展方向,那么智能停车场管理系统的收费实现方式有哪些? 自动计 ...

  7. 智慧停车场管理系统、停车位、停车费、停车场系统、寻车、抬杆、入位车、出位车、车流量统计、停车、收费、缴费、预警管理、业务统计、报警统计、运维管理、报警系统、异常页面、数据配置、智慧停车原型、停车场

    智慧停车场管理系统.停车位.停车费.停车场系统.寻车.抬杆.入位车.出位车.车流量统计.停车.收费.缴费.预警管理.业务统计.报警统计.运维管理.报警系统.异常页面.数据配置.智慧停车原型.Axure ...

  8. 停车场管理系统 java_使用java编写一个停车场管理系统

    使用java编写一个停车场管理系统 发布时间:2020-11-30 16:00:28 来源:亿速云 阅读:145 作者:Leah 这篇文章给大家介绍使用java编写一个停车场管理系统,内容非常详细,感 ...

  9. 停车场管理系统linux实现,基于Linux的停车场管理系统的设计与实现

    摘要: 随着机动车数量的不断攀升,我国居民对停车场以及场内停车位的需求也随之增加,这种趋势大大增加了停车场管理系统的负荷.与此同时,在停车场内,驾驶员寻找空位泊车以及返回时寻找停车位置和出口遇到困难的 ...

  10. 基于微信小程序的智能停车场管理系统的研究与设计

    前言 2017年一组数据显示, 我国停车位缺口率已经达到50%, 停车场的平均空置率也高达51. 3%. 区域拥堵. 乱停车.找车难. 收费难. 停车管理成本搞. 停车场管理效率底下.市政停车规划采集 ...

最新文章

  1. 考研加油!考研的兄弟姐妹们!
  2. curl重写php file_get_contents
  3. 通过css类/选择器选取元素 文档结构和遍历 元素树的文档
  4. 经典算法——KMP模式匹配
  5. mysql 索引合并_MySQL 索引合并(Index Merge)优化
  6. 电脑重启f12怎么处理_电脑开机按f12怎么恢复系统(详解f12的使用方法)
  7. c#调用c++ delegate callback
  8. 利用 AFN 上传相册或拍照图片
  9. 机器人学 —— 机器人感知(Mapping)
  10. android 日历图,Android中的自定义日历视图
  11. hdu 6108 小C的倍数问题
  12. headerutf php_php header设置编码的方法
  13. Multi-Scale Boosted Dehazing Network with Dense Feature Fusion笔记和代码
  14. java OA办公管理系统 Springboot vue 前后分离 跨域 工作流 集成代码生成器java OA系统 流程审批 电子印章 手写文字识别 电子签名
  15. 【组合优化】旅行商问题Traveling Salesman Problem(TSP)-概述
  16. C++训练:自由落体问题
  17. MATLAB clc clear
  18. 怎样设置默认浏览器,绝对干货!
  19. vue+file-saver+xlsx 封装导出Excel表格方法
  20. 《Visual Prompting: Modifying Pixel Space to Adapt Pre-trained Models》论文阅读笔记

热门文章

  1. 写一个项目的具体流程
  2. 雷军的哽咽:致小米终将逝去的青春
  3. 在线客服系统怎么帮助企业?
  4. ITSM-Ivanti体验报告
  5. JavaScriptDay08:js运动基础,单物体运动框架,多物体运动框架,改变单一任意值运动框架,改变多值运动框架,完美运动框架
  6. 深入浅出解释旋转变换矩阵
  7. GitHub 详细使用【 详细 】
  8. oracle 一个实例创建多个数据库_创建多个Oracle数据库及相应的实例
  9. 多个数组笛卡尔积-js算法
  10. Java输出数组内容