基于C++实现(控制台)停车场管理系统

news2024/9/21 3:01:19

停车场管理系统设计报告

1 需求分析

1.1问题描述

停车场内只有一个可停放 n 辆汽车的狭长通道,且只有一个大门可供汽车进出。

汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若车场内已停满 n 辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入。

当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开车场时必须按它停留的时间长短交纳费用。

试为停车场编制按上述要求进行管理的模拟程序。

1.2基本要求

以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理;

每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费);

栈以顺序结构实现,队列以链表实现。

2 概要设计

2.1数据结构

2.1.1时间类

时间是进行收费的依据,此处假定时间在一天之内。时间类既可以表示一个时刻,也可以表示一段时间长度。

时间类数据成员:

  • hour:指示时钟
  • minute:指示分钟

时间类成员函数:

  • Time:构造函数
  • operator+=:进行时间的复合加法,即将相加后的结果赋给当前对象,并返回当前对象
  • operator-=:进行时间的复合减法,即将相减后的结果赋给当前对象,并返回当前对象

时间类非成员函数:

  • operator+:时间加法
  • operator-:时间减法
  • operator==:判断时间是否相等
  • operator<:判断前一个时间是否小于后一个时间
  • operator<=:判断前一个时间是否小于等于后一个时间
  • operator>:判断前一个时间是否大于后一个时间
  • operator>=:判断前一个时间是否大于等于后一个时间
  • operator<<:将时间输出到输出流中

2.1.2汽车类

汽车是后续操作的基础元素,结合题目要求,汽车应包含牌照号码、停车时间等数据。汽车类数据成员:

  • number:汽车牌照号码
  • lastTime:最后一次在停车场(栈)内的时刻
  • parking: 停车时间

lastTime 和 parking 并非实时更新,而是当有车辆到达或离去时才会做相应的改变。

汽车类成员函数:

  • Car:构造函数
  • operation==:判断是否为同一辆汽车(只判断牌照号码)
  • updateLastTime:设置最后一次在停车场(栈)内的时刻,并增加停车时间
  • setLastTime:设置最后一次在停车场(栈)内的时刻
  • getLastTime:获取最后一次在停车场(栈)内的时刻
  • addParkingTime:增加停车时间
  • getParingTime:获取停车时间

汽车类非成员函数:

  • operator<<:将汽车信息输出到输出流中

2.1.3栈类模板

栈是一种“先进后出”的数据结构,此处用于组织停车场内汽车的停放。我们选用线性结构实现栈,并进行模板化,以便下次复用。

模板参数 T1,表示基础元素类型,在编写代码时,可设为 Car。

从模板参数 T,定义出以下几种嵌套类型:

  1. T −→ value___type,基础元素类型
  2. T∗ −→ pointer,指针
  3. const T∗ −→ const___pointer,常指针
  4. T & −→ reference,引用
  5. const T & −→ const___reference,常引用

栈类数据成员:

  • _top 栈顶
  • _base 栈底
  • _cap 当前栈存储空间的尾部

特别指出,栈顶指针 _top,其初值指向栈底,即 _top == _base 可作为栈空的标记,每当插入新的栈顶元素时,指针 _top 增 1;删除栈顶元素时,指针 _top 减 1,因此,非空栈中的栈顶指针始终在栈顶元素的下一个位置上。

_cap 指针则仅指示当前栈存储空间的尾部,其真实地址则是尾部的下一个位置。这两种设计都是为了方便程序的编写。

栈类成员函数:

  • Stack:构造函数
  • _∼_Stack:析构函数
  • operator[]:访问器
  • top:访问栈顶

size_type 是无符号超长整型,源于 std::size_t。

设置访问器仅用于方便本次项目的代码编写,破坏了栈的设计原则,在编写一般程序时,不应在栈中设置访问器。

  • empty:判断栈是否为空
  • size:获取栈长
  • capacity:获取栈的存储容量
  • push:入栈
  • pop:出栈
  • index:寻找元素的第一个位置
  • print:打印栈
  • reserve:重新分配存储空间容量

2.1.4队列类模板

队列,是一种“先进先出”的数据结构,此处可用于模拟停车场外的便道。我们选用链式结构实现队列,并进行模板化,以便下次复用。

模板参数 T1,表示基础元素类型,在编写代码时,可设为 Car。

首先设计一个队列节点类,与链表节点类似:

队列节点类数据成员:

_data:数据域

从模板参数 T 定义出的嵌套类型与 Stack 类相似,但增加了 4 个嵌套定义:

  • QNode < T > ∗ −→ node___ptr*,节点指针
  • const QNode < T > ∗ −→ const___node___ptr*,节点常指针
  • QNode < T > & −→ node___ref ,节点引用
  • const QNode < T >_ & _−→ const___node___ref* ,节点常引用

_next:指针域,指向下一节点

队列节点类成员函数:

  • QNode:构造函数
  • data:返回数据域
  • setData:设置数据域
  • next:返回下一节点
  • setNext:设置下一节点

然后以队列节点为基础设计队列类模板:

队列类数据成员:

  • _front:队头指针
  • _back:队尾指针

队列类成员函数:

  • Queue:构造函数
  • ∼* Queue:析构函数
  • front:返回队头
  • back:返回队尾
  • empty:返回队列是否为空
  • size:返回队列的大小
  • push:入队列
  • pop:出队列
  • erase:直接擦除第一个值为 data 的节点1
  • print:打印队列

2.1.5停车场类

依据题意,整个停车场包含一个有限容量的停车场(栈)和场外的便道(队列)。将栈和队列综合,封装成一个停车场类。

停车场类数据成员:

  • s:停车场 (栈)
  • q:便道 (队列)
  • size:停车场容量 (栈最大大小)

停车场类函数成员:

  • ParkLot:构造函数
  • add:到达汽车
  • reduce:离开汽车
  • print:打印停车场

设计此函数仅用于方便本项目代码的编写,破坏了队列的设计原则,在编写一般程序时,不应在队列中设置此函数。

2.2程序模块

详见代码

4测试分析

使用 G++ 编译器编译本实例,运行测试。

图 1: 初始化及菜单

图 2: 到达停车场

图 3: 到达便道

图 4: 从停车场离去车辆

图 5: 没有找到车辆

图 6: 从便道离去车辆

图 7: 显示停车情况

5总结

通过本次项目实践,熟练地掌握了栈、队列这两种数据结构,并实现了顺序栈、链队列模板的编写,增强了编码能力。

结合栈、队列设计停车场管理系统,使得栈和队列得到实际应用。在实践过程中,需要借助栈和队列对停车场内以及便道上的车辆进行有序地调度,增强了离散事件问题的模拟算法设计与求解的能力。同时,设计入栈、出栈、入队列、出队列、计时收费等系列算法的设计,对计算机如何模拟实际问题有了较好的感性理解。

此次项目实践,仍有不足之处,如:只设计了一天以内的计时收费,这与生活实际有出入。这是项目的改进方向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2134548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python_两个jpg图片文件名称互换

项目场景 处理Adobe Photoshop导出的两个切片的顺序错误问题 小编在进行图片切片处理的时候&#xff0c;发现用PS导出的切片顺序错误&#xff0c;例如用PS导出的切片分别为test_01.jpg&#xff0c;test_02.jpg&#xff0c;但实际的使用需求是将两个图片的顺序调换&#xff0c…

IC开发——Verilog简明教程

1. 基础概念 1.1. 逻辑值 逻辑0&#xff0c;低电平&#xff0c;对应电路中接地GND。 逻辑1&#xff0c;高电平&#xff0c;对应电路中的电源VCC。 逻辑Z&#xff0c;高阻态&#xff0c;对应电路的悬空。 逻辑X&#xff0c;未知态&#xff0c;数据仿真中可能存在&#xff0c;如…

Delphi Web和Web服务开发目前有哪些选择

Delphi Web和Web服务开发目前有哪些选择 Delphi Web和Web服务开发目前有以下几个选择&#xff1a; Delphi MVC Framework&#xff08;https://github.com/delphimvcframework/delphimvcframework&#xff09;&#xff1a;这是一个开源的Delphi Web框架&#xff0c;基于MVC&am…

小程序uniapp关闭手势返回操作

需求&#xff1a;进入当前页面后&#xff0c;无法返回其他页面&#xff0c;禁止所有返回操作&#xff08;手势返回、左上角返回按钮等&#xff09; 解决&#xff1a; 方法一&#xff1a;wx.enableAlertBeforeUnload wx.enableAlertBeforeUnload 在onLoad里调用&#xff1a; on…

-isystem isystem 实验记录

1&#xff0c;isystem 的理论 2&#xff0c;实验方案 $ tree . ├── inc111 │ └── test.h ├── inc222 │ └── test.h └── src ├── a.out └── hello.c inc111/test.h: #pragma once#define NUM 111 inc222/test.h #pragma once#define N…

2024年9月中国数据库排行榜:openGauss系多点开花,根社区优势明显

在墨天轮发布的9月中国数据库流行度排行榜中&#xff0c;中国数据库产业格局进一步聚集刷新&#xff0c;呈现出3大显著特征&#xff1a; 开源势力力争上游显优势领先潮流&#xff1b;openGauss 开源根社区优势明显&#xff1b;阿里华为两极鼎立云上云下各争先&#xff1b; 开…

2024年第二届《英语世界》杯全国大学生英语听力大赛

下周开考&#xff01; 一、主办单位 商务印书馆《英语世界》杂志社 二、时间安排 赛事报名时间&#xff1a;即日起-2024年11月15日 正式比赛阶段&#xff1a;第一场&#xff1a;2024年9月22日10:00-22:00 第二场&#xff1a;2024年10月27日10:00-22:00 第三场&#xff1…

安装2024最新版Android Studio 最详细教程(带图展示)

一、安装JDK &#xff08;1&#xff09;首先在除C盘以外的盘建立文件夹&#xff0c;分别保存软件位置&#xff0c;JDK位置与SDK位置&#xff0c; 特别注意&#xff1a;所有文件名中不要出现空格&#xff0c;而且每个文件夹都是为空的状态 这里我是在D盘中操作。 &#xff0…

综合型医院适合什么样的数据摆渡方式,才能服务与安全兼顾?

综合型医院&#xff0c;是提供全面医疗服务的综合型医院。综合型医院的服务对象广泛&#xff0c;包括儿童、成人、老年人等各年龄段的人群&#xff0c;以及患有各种疾病的患者。它们通过提供全面的医疗服务&#xff0c;保障人民群众的健康需求&#xff0c;是医疗卫生事业的重要…

IP-adapter masking

https://github.com/huggingface/diffusers/issues/6802https://github.com/huggingface/diffusers/issues/6802

Java后端编程语言进阶篇

第一章 函数式接口 函数式接口是Java 8中引入的一个新特性&#xff0c;只包含一个抽象方法的接口。 函数式接口可以使用Lambda表达式来实现&#xff0c;从而实现函数式编程的特性。 使用 FunctionalInterface标识接口是函数式接口&#xff0c;编译器才会检查接口是否符合函数…

linux-L3-linux 复制文件

linux 中要将文件file1.txt复制到目录dir中&#xff0c;可以使用以下命令 cp file1.txt dir/复制文件 cp /path/to/source/file /path/to/destination移动 mv /path/to/source/file /path/to/destination复制文件夹内的文件 cp -a /path/to/source/file /path/to/destinati…

孟德尔随机化分析和GWAS分析有什么区别?

大家好&#xff0c;我是邓飞。 最近一直在研究孟德尔随机化分析&#xff0c;已经从概念到实操了&#xff0c;程序已经跑通了&#xff0c;很开心。这几天写的博客&#xff1a; 孟德尔随机化的术语理解 从一篇孟德尔随机化文章看MR常见结果形式 对于GWAS分析&#xff0c;从原…

LRELHLNNN;亲水性抗肝纤维化多肽作为基础肽;I型胶原蛋白靶向肽;九肽LRELHLNNN

【LRELHLNNN 简介】 LRELHLNNN是一种多肽&#xff0c;它能够选择性地结合到I型胶原蛋白&#xff0c;具有亲和力为170 nM。LRELHLNNN是由9个氨基酸组成&#xff0c;其氨基酸序列为H-Leu-Arg-Glu-Leu-His-Leu-Asn-Asn-Asn-OH。LRELHLNNN因其与I型胶原蛋白的高亲和力而在生物医学领…

密码学---黄道十二宫

✨简单理解的概念&#xff1a;是一种换位密码。 &#x1f380;破解需要用到对角线的方式&#xff1a;第一个H&#xff0c;先向下移动1位&#xff0c;再向右移动2位&#xff0c;依次类推。 &#x1f380;接着对对角线重新排列&#xff0c;就能得到一段有序的代码 &#x1f380; …

玩机搞机-----如何简单的使用ADB指令来卸载和冻结系统应用 无需root权限 详细操作图示教程

同类博文&#xff1a; 玩机搞机---卸载内置软件 无root权限卸载不需要的软件 安全卸载_无需root卸载彻底内置软件-CSDN博客 在很多时候我们需要卸载一些系统级的app。但如果直接手机端进行卸载的话。是无法正常卸载的。其实我们可以通过有些成品工具或者完全靠ADB指令来进行卸…

网红酒店|基于java的网红酒店预定系统(源码+数据库+文档)

酒店预定|网红酒店|网红酒店预定系统 目录 基于java的网红酒店预定系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&am…

4×4矩阵键盘详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.工作原理介绍 三、程序设计 main.c文件 button4_4.h文件 button4_4.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 ​​​​​矩阵键盘&#xff0c;又称为行列式键盘&#xff0c;是用4条I/O线作为行线&#xff0c;4…

【四范式】浅谈NLP发展的四个范式

自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是计算机科学&#xff0c;人工智能&#xff0c;语言学关于计算机和人类自然语言之间的相互作用的领域&#xff0c;是计算机科学领域与人工智能领域中的一个重要方向。NLP发展到今天已经进入到了…

[Python学习日记-19] 细讲数据类型——集合

[Python学习日记-19] 细讲数据类型——集合 简介 集合的创建 集合的增删查 集合的循环 集合的去重 集合的关系运算 简介 在前面我们学习到了列表、元组、字符串、字典这几种数据类型&#xff0c;在 Python 中还有最后一种数据类型&#xff0c;那就是集合&#xff0c;下面…