停车场管理系统

一、设计内容

  1. 设计有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出,车辆按照到达停车场时间的先后次序依次从停车场最里面向大门口出停放(即最先到达的第一辆车停放在停车场最里面),如果停车场已放满n辆车,则以后到达的车辆只能在停车场大门外的便道上等待,一旦停车场内有车离开,则排在便道上的第一辆车可以进入停车场,停车场内如有某辆车要开走,则在它之后进入停车场的车都要先退出停车场为它让路,待其开出停车场后,这些车辆再按照原来的次序进场。

二、设计分析

1.实现停车场的结构

    因为停车场它只有一个大门可以供车辆进出,车辆按照到达停车场时间的先后次序依次从停车场最里面向大门口出停放(即最先到达的第一辆车停放在停车场最里面),很容易让人联想的栈,所以我们停车场内部用来实现。如果停车场已放满n辆车,则以后到达的车辆只能在停车场大门外的便道上等待,一旦停车场内有车离开,则排在便道上的第一辆车可以进入停车场,那么很明显停车场外的便道是一个队列的结构,先进先出,也就是先到先进。这样就确定了停车场的基本机构,即停车场内用栈来贮存,停车场外便道用队列来贮存。

2.停车场的功能

    个人认为一个停车场该有的功能:

1.车辆开进停车场

2.车辆开出停车场

3.查询停车场内车的数量

4.查询停车场内车的编号

5.查询停车场外车的数量

6.查询停车场外车的编号

7.查询停车场内是否有空余

8.查询停车场外一辆车需等待几辆车

    1. 第一个功能是车辆开进停车场,这是一个停车场最基本的功能,实现对车辆的停放。
    2. 第二个功能是车辆开出停车场,这个功能值得注意的是,开出停车场的车辆可以是停在停车场的任意一辆,并且车辆开出去后,所有在这辆车开进之后的车辆均要向前移位,最后还需要判断停车场外(即便道内)是否有车可以停进停车场内。
    3. 第三个功能是查询停车场内车的数量,这个功能其实在功能4—查询停车场车的编号就可以看出来,但假如数字过大,人为计数就会显得复杂,所以增加这个功能能让停车场车的数量很清晰呈现在我们面前。
    4. 第四个功能是查询停车场内车的编号,首先这个编号顺序应该是车辆停入的先后时间确定,其次,我们有了这个功能,我们实现车辆开出停车场时,能很明显感受到车辆的变化。
    5. 第五个功能是查询停车场外车的编号,因为停车场外并没有规定能容纳多少车辆,所以这个功能是作为一个参考。
    6. 第六个功能是查询停车场外车的编号(是由进入停车场的优先顺序进行输出),这样我们就可以清楚的观察当有停车场外车进入停车场时,停车场外车辆的变化。
    7. 第七个功能是查询停车场内是否有空余,这样就可以给开入停车场的车辆提示,是否它们能开进停车场。
    8. 第八个功能是查询停车场外一辆车需等待几辆车,停车场外的车辆时任意的,没有要求的,我们只需要你给出车的编号,我们就可以查询车辆前方需等带几辆车,这样就可以给暂时不能停入停车场的车辆一个时间预期。

3.停车场代码的实现

    一.构建停车场内栈结构和停车场内队结构:一开始我想用结构体动态模拟一个栈和队列,但是两个结构的动态构建会让代码很复杂,而且所需的空间和时间复杂度都很高,所以我换用数组静态模拟栈和队列,不仅节省了大量空间,也提高了时间效率,增加了代码的简洁性和可读性。

      1. 构建停车场内栈结构:我用静态数组模拟栈的实现,首先定义一个stk[]数组,里面贮存的值是车辆的编号,再定义int tt,tt类似于栈的头指针,当有元素进栈栈,栈顶指针往后移,并将元素值赋予stk[tt],简化可以写为stk[++tt]=m,这样我们就实现了栈的功能,比如栈内元素个数就等于tt,stk[tt]就是最后一辆车的编号。
      2. 构建停车场外的队列结构:我也是用数组静态模拟来实现队列结构。首先定义数组q[],int hh=0,int gg=-1,数组q里面贮存的也是车辆的编号,hh类似于头指针,gg类似于尾指针,这样我就构建了一个队列结构。比如,队内的元素个数为:gg-hh+1,q[hh]代表队头元素,hh--表示出队。

二.实现停车场功能的结构:我选择采用主菜单的格式呈现再页面上,然后你无论如何都要进行一次操作,我就采用了do-while循环,循环内部使用switch-case结构一一对应每种操作,并且加入default来判断是否正确输入操作编号。

三.实现停车场的功能:

      1. 车辆开进停车场:首先我们应该判断停车场内是否有空位,有的话车辆停入停车场内,否侧车辆停入停车场外侧便道内,所以我们可以将功能1和功能7结合在一起实现,因为tt代表栈中元素个数,如果tt<n的话,即停车场内有空余,可以停进停车场,否侧停进外侧便道,我们每停入一辆车就相当与进栈即stk[++tt]=m,再让tt与n进行判断。
      2. 车辆开出停车场:首先要判断你想要开出的车辆是否再停车场内,如果在就将车开出停车场,否侧提示重新输入。其次车辆开出停车场需要在它之后开进停车场的车让路,我的做法是将我需要开出的那辆车进行移位,将它移入栈头,在tt—将它出栈,它后面的车都前进一位。最后我们还要将队列中的车进栈,停车场开出一辆车有一个空余,我先判断队列中是否有车,即队列是否为空(hh<=gg),队列空就就不需要出队,反之,需要将对头元素进入栈头stk[++tt]=q[hh++]。这样我就完成了整个车辆开出停车场的过程。
      3. 查询停车场内车的数量:这个很简单,直接输出tt即可。
      4. 查询停车场内车的编号:对我的栈进行一次循环遍历即可。
      5. 查询停车场外车的数量:这个也很简单,直接输出gg-hh+1即可。
      6. 查询停车场外车的编号:也是对队列进行一次循环遍历即可。
      7. 查询停车场内是否有空余:结合功能i实现。
      8. 查询停车场外一辆车需等待几辆车:首先判断停车场外是否有车,即队不为空,再进一步查询车辆编码是否存在,我用一个变量flag=1进行判断,对队列进行一次循环遍历,如果能查找到相同的编号,就让flag=0,最后通过flag判断是否存在,最后一定要回溯,让flag再次等于1,不然下次判断的时候会判断失误。查询车辆编码时,我再用变量count进行计数,从队头开始查找,如果没找到count++,找到直接就break结束循环。

四、代码展示

#include <iostream>using namespace std;int stk[100000],q[100000],tt=0,hh=0,gg=-1;int main()
{int n,x,m,k,flag = 1;;cout << "请输入停车场的容量" << endl;cin >> n;do{cout << "----------------------------------------------" << endl;cout << "---***课程设计-停车场管理系******************---" << endl;cout << "---***请输入你的操作***********************---" << endl;cout << "---***1.车辆开进停车场*********************---" << endl;cout << "---***2.车辆开出停车场*********************---" << endl;cout << "---***3.查询停车场内车的数量***************---" << endl;cout << "---***4.查询停车场内车的编号***************---" << endl;cout << "---***5.查询停车场外车的数量***************---" << endl;cout << "---***6.查询停车场外车的编号***************---" << endl;cout << "---***7.查询停车场外一辆车需等待几辆车*****---" << endl;cout << "---***0.结束操作***************************---" << endl; cout << "----------------------------------------------" << endl;cin >> x;switch(x){case 1:cout << "请输入开进车的编号" << endl;cin >> m;if(tt<n){cout << "停车场内有空余,车辆可以开进停车场" << endl;stk[++tt] = m;}else {cout << "停车场内没有空余,车辆请开进便道等待" << endl;q[++gg] = m;    } break;case 2:cout << "请输入第几辆车开出停车场" << endl;cin >> k;if(tt==0) cout << "停车场目前没有车,无法开出停车场" << endl;else{if(k==tt) {cout << "停车场内有车,可以开出停车场,编号为" << stk[tt] << endl;tt--;}else{int j;cout << "停车场内有车,可以开出停车场,编号为" << stk[k] << endl;for(int i=k;i<tt;i++) {j = stk[i];stk[i] = stk[i+1];stk[i+1] = j;}tt--;}   } if(hh<=gg&&tt<=n) {cout << "便道内有车,可以开进停车场" << endl;cout << "开进停车场的车编号为" << q[hh] << endl; stk[++tt] = q[hh++];}else cout << "便道内无车,车辆可以直接开进停车场" << endl;break;case 3:if(tt<n) {cout << "目前停车场内车编号为:" << tt << endl;cout << "车未停满,可以在开进车辆" << endl;}else {cout << "目前停车场内车有:" << tt << endl;cout << "车已停满,请开进便道" << endl;}break;case 4:cout << "停车场内的车编号为:(按开进时间快慢)" << endl; for(int i=1;i<=tt;i++)cout << stk[i] << ' ';cout << endl;   break;case 5:if(hh<=gg)cout << "便道内有车,数量为:" << gg-hh+1 << endl;elsecout << "便道内无车,可以直接开进停车场" << endl; break;case 6:cout << "停车场外车的编号为:(按先进停车场的顺序)" << endl;for(int i=hh;i<=gg;i++)cout << q[i] << ' ';cout << endl;break;case 7:cout << "请输入停车场外任意一个车的编号" << endl;cin >> m; if(hh>gg) cout << "便道内没有车!无法查询." << endl;else {for(int i=hh;i<=gg;i++)if(q[i]==m) flag=0; if(flag) cout << "便道内没有该车,请重新输入" << endl;else {cout << "便道内有该车" << endl;   int count = 0;for(int i=hh;i<=gg;i++){if(q[i]==m) break;else count++;}if(count==0) cout << "下一辆进停车场的车就是你" << endl;else cout << "你还需要等待" << count << "车" << endl;}flag = 1;} break;case 0: break;default: cout << "输入错误!请重新输入!" << endl;break;}}while(x);return 0;
} 

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

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

相关文章

Android Frameworks 开发总结之七

1.修改android 系统/system/下面文件时权限不够问题 下面提到的方式目前在Bobcat的userdebug image上测试可行&#xff0c;还没有在user上测试过. 修改前: leifleif:~$ adb root restarting adbd as root leifleif:~$ adb disable-verity verity is already disabled using …

Find My鼠标|苹果Find My技术与鼠标结合,智能防丢,全球定位

随着折叠屏、多屏幕、OLED 等新兴技术在个人计算机上的应用&#xff0c;产品更新换代大大加速&#xff0c;进一步推动了个人计算机需求的增长。根据 IDC 统计&#xff0c;2021 年全球 PC 市场出货量达到 3.49 亿台&#xff0c;同比增长 14.80%&#xff0c;随着个人计算机市场发…

亚马逊云科技re:Invent大会:云计算与生成式AI共筑科技新局面,携手构建未来

随着科技的飞速发展&#xff0c;云计算和生成式 AI 已经成为了推动科技进步的重要力量。这两者相互结合&#xff0c;正在为我们创造一个全新的科技局面。 亚马逊云科技的re:Invent大会再次证明了云计算和生成式AI的强大结合正在塑造科技的新未来。这次大会聚焦了云计算的前沿技…

C++动态规划算法:最多可以参加的会议数目

本周推荐阅读 C二分算法&#xff1a;得到子序列的最少操作次数 本题的其它解法 C二分算法&#xff1a;最多可以参加的会议数目 II 本文涉及的基础知识点 二分查找算法合集 题目 给你一个 events 数组&#xff0c;其中 events[i] [startDayi, endDayi, valuei] &#xf…

Python库设置HTTP请求头字段User-Agent

User-Agent 字段是一个 HTTP 请求头&#xff0c;用于标识发起请求的客户端&#xff08;例如浏览器、应用程序等&#xff09;。服务器可以根据 User-Agent 字段来识别客户端的类型和版本&#xff0c;以便提供适当的响应。 User-Agent 字符串通常包含以下内容&#xff1a; 客户…

为什么要隐藏id地址?使用IP代理技术可以实现吗?

随着网络技术的不断发展&#xff0c;越来越多的人开始意识到保护个人隐私的重要性。其中&#xff0c;隐藏自己的IP地址已经成为了一种常见的保护措施。那么&#xff0c;为什么要隐藏IP地址&#xff1f;使用IP代理技术可以实现吗&#xff1f;下面就一起来探讨这些问题。 首先&am…

Qt 软件调试(二)使用dump捕获崩溃信息

Qt应用程序异常崩溃该怎么办&#xff0c;生成dump文件再回溯分析&#xff0c;可以快速且准确的帮助我们定位到崩溃的点。那么&#xff0c;本章我们分享下如何在Qt中生成dump文件。 一、使用minudump捕获崩溃信息 #include <QCoreApplication> #include <QDir> #i…

k8s docker总结特殊点

k8s docker总结特殊点 前言一、docker 的驱动。1、cgroup:&#xff08;Control Groups&#xff09;2、日志驱动&#xff08;log driver&#xff09;3、存储驱动4、网络驱动&#xff1a; 二、k8s中网络插件&#xff08;常用calico&#xff0c;次flannel&#xff09;**Flannel:**…

【洛谷 P1636】Einstein学画画 题解(图论+欧拉通路)

Einstein学画画 题目描述 Einstein 学起了画画。 此人比较懒~~&#xff0c;他希望用最少的笔画画出一张画…… 给定一个无向图&#xff0c;包含 n n n 个顶点&#xff08;编号 1 ∼ n 1 \sim n 1∼n&#xff09;&#xff0c; m m m 条边&#xff0c;求最少用多少笔可以画…

nodejs微信小程序+python+PHP-书吧租阅管理系统的设计与实现-安卓-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

深度学习+不良身体姿势检测+警报系统+代码+部署(姿态识别矫正系统)

正确的身体姿势是一个人整体健康的关键。然而&#xff0c;保持正确的身体姿势可能很困难&#xff0c;因为我们经常忘记这一点。这篇博文将引导您完成为此构建解决方案所需的步骤。最近&#xff0c;我们在使用 POSE 进行身体姿势检测方面玩得很开心。它就像一个魅力&#xff01;…

Ubuntu20安装ssh服务

Ubuntu20上执行如下命令查看是否存在ssh服务 #ps -e | grep ssh 只有ssh-agent&#xff0c;没有sshd; 因此要安装openssh-server. 搜索openssh-server,得到下载链接&#xff1a; openssh-server 复制这个Binary Package链接即可下载&#xff0c;然后使用如下命令安装 sudo…

Ruoyi项目传List到后台并使用Excel模板下载数据的方法以及遇到的各种前后端数据交互问题

import { download } from @/utils/requestconst app = createApp(App)// 全局方法挂载 app.config.globalProperties.download = download 首先因为ruoyi-ui中的main.js有配置如上全局注册: 因此只需要在vue中定义一个方法直接使用this.download调用下载即可: (download的3…

Hausdorff是什么距离,怎样计算的

Hausdorff距离是一种用于度量两个集合之间的相似性或差异性的距离度量指标。它基于数学家Felix Hausdorff的工作而得名。 对于给定的两个集合A和B&#xff0c;Hausdorff距离定义为集合A中的每个点到集合B的最近点的最大距离&#xff0c;与集合B中的每个点到集合A的最近点的最大…

C++列表初始化

1.列表初始化 注意和初始化列表区分开来&#xff0c;在 C 98 中允许使用花括号对数组或者结构体元素进行统一的初始值设定。 struct Point {int _x;int _y; };int main() {int array1[] { 1, 2, 3, 4, 5 };int array2[5] { 0 };Point p { 1, 2 };return 0; }而 C 11 扩大了…

PyQt6库和工具库QTDesigner安装与配置

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计12条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

c语言第七弹--扫雷小游戏!

今天做一个有趣的扫雷小游戏 现在正式开始设计。 思路&#xff1a;想要根本上实现必须拥有 实现函数的主体.c文件 头文件.h 及头文件实现.c。 头文件.h #pragma once #include <stdio.h> #include <stdlib.h> #include <time.h> #define EASY_COUNT 10 #d…

【knife4j-spring-boot】Springboot + knife4j-spring-boot 整合swagger脚手架

swagger-boostrap-ui从1.x版本到如今2.x&#xff0c;同时也更改名字Knife4j 在此记录下 knife4j-spring-boot-starter 的整合。 只需要引入knife4j-spring-boot-starter&#xff0c;无需引入其他的swagger包&#xff0c;knife4j-spring-boot-starter已经包含。 官方版本说明…

mysql1124实验七索引管理

实验任务七 索引管理实验任务书 1. 实验目的 掌握在MySQL中使用MySQL Workbench或者SQL语句创建和使用索引的方法&#xff08;以SQL命令为重点&#xff09;。 掌握在MySQL中使用MySQL Workbench或者SQL语句查看和删除索引的方法&#xff08;以SQL命令为重点&#xff09;。 …

详细解答T-SNE程序中from sklearn.manifold import TSNE的数据设置,包括输入数据,绘制颜色的参数设置,代码复制可用!!

文章目录 前言——TSNE是t-Distributed Stochastic Neighbor Embedding的缩写1、可运行的T-SNE程序2. 实验结果3、针对上述程序我们详细分析T-SNE的使用方法3.1 加载数据3.2 TSNE降维3.3 绘制点3.4 关于颜色设置&#xff0c;颜色使用的标签数据的说明cy 总结 前言——TSNE是t-D…