基于搜索二叉树的停车收费管理系统

系统效果:
录入汽车信息

查看汽车信息

收费信息查看

查询车库车辆

 

代码展示:

//SearchBinaryTree.h
#pragma once
#include<iostream>
#include<string>
#include<time.h>
#include<Windows.h>
using namespace std;template<class K, class V>
struct BSTNode
{K _key;V _value;BSTNode<K, V>* _left;BSTNode<K, V>* _right;BSTNode(const K& key,const V& value):_key(key),_value(value),_left(nullptr),_right(nullptr){}
};template<class K, class V>
class BSTree
{typedef BSTNode<K, V> Node;
public:BSTree():_root(nullptr){}~BSTree(){Destroy(_root);_root = nullptr;}bool Insert(const K& key, const V& value);bool Erase(const K& key);Node* Find(const K& key){{Node* cur = _root;while (cur){if (cur->_key < key){cur = cur->_right;}else if (cur->_key > key){cur = cur->_left;}else{return cur;}}return nullptr;}}void Destroy(Node* root){if (root == nullptr)return;Destroy(root->_left);Destroy(root->_right);delete root;}void InOeder(){_InOeder(_root);}private:void _InOeder(Node* root);private:Node* _root;
};template<class K, class V>
inline bool BSTree<K, V>::Insert(const K& key, const V& value)
{if (_root == nullptr){_root = new Node(key, value);return true;}Node* parent = nullptr;Node* cur = _root;while (cur){if (cur->_key < key){parent = cur;cur = cur->_right;}else if (cur->_key > key){parent = cur;cur = cur->_left;}else{return false;}}cur = new Node(key, value);if (parent->_key > cur->_key){parent->_left = cur;}else if (parent->_key < cur->_key){parent->_right = cur;}return true;
}template<class K, class V>
inline bool BSTree<K, V>::Erase(const K& key)
{Node* cur = _root;Node* parent = nullptr;while (cur){if (cur->_key < key){parent = cur;cur = cur->_right;}else if (cur->_key > key){parent = cur;cur = cur->_left;}else{if (cur->_left = nullptr){if (parent == nullptr){_root = cur->_right;}else{if (parent->_left == cur){parent->_left = cur->_right;}else{parent->_right = cur->_right;}}delete cur;return true;}else if (cur->_right == nullptr){if (parent == nullptr){_root = cur->_left;}else{if (parent->_left == cur){parent->_left = cur->_left;}else{parent->_right = cur->_left;}}delete cur;return true;}else{Node* rightMin = cur->_right;Node* rightMinParent = cur;while (rightMin->_left){rightMinParent = rightMin;rightMin = rightMin->_left;}cur->_key = rightMin->_key;if(rightMinParent->_left == rightMin)rightMinParent->_left = rightMin->_right;elserightMinParent->_right = rightMin->_right;delete rightMin;return true;}}}return false;
}template<class K, class V>
inline void BSTree<K, V>::_InOeder(Node* root)
{if (root == nullptr)return;_InOeder(root->_left);cout << "汽车车牌号:" << root->_key << " ";struct tm info;localtime_s(&info, &root->_value);char buffer2[80];strftime(buffer2, 80, "%Y-%m-%d %H:%M:%S", &info);cout << "入库的时间:" << buffer2 << endl;_InOeder(root->_right);
}

//Parking_Fee.h
#pragma once
#include"SearchBinaryTree.h"class ParFee
{
public:void menu();void entering();void Find();void Erase();void statistics();BSTree<string, time_t> par;
};

//Parking_Fee.cpp
#include"SearchBinaryTree.h"
#include"Parking_Fee.h"void ParFee::entering()
{time_t seconds = time(NULL);time_t curLocalTime;time(&curLocalTime);struct tm info;localtime_s(&info, &curLocalTime);char buffer2[80];strftime(buffer2, 80, "%Y-%m-%d %H:%M:%S", &info);cout << "请输入识别的汽车车牌号>:" << endl;string ID; cin >> ID;cout << "====>" << endl;Sleep(1000);cout << "=========>" << endl;Sleep(1000);cout << "=================>" << endl;Sleep(1000);cout << "录入成功" << endl;system("pause");system("cls");cout << "*-----------------------*" << endl;cout << "<<><>汽车车牌号:" << ID << endl;cout << "<<><>入库的时间:" << buffer2 << endl;cout << "*-----------------------*" << endl;par.Insert(ID, seconds);system("pause");
}void ParFee::Find()
{cout << "<*请输入你要查询的车辆*>" << endl;string ID; cin >> ID;auto ret = par.Find(ID);if (ret){cout << "<<><>汽车车牌号:" << ID << endl;struct tm info;localtime_s(&info, &ret->_value);char buffer2[80];strftime(buffer2, 80, "%Y-%m-%d %H:%M:%S", &info);cout << "<<><>入库的时间:" << buffer2 << endl;}else{cout << "无此汽车,请重新输入" << endl;}system("pause");
}void ParFee::Erase()
{cout << "<*请输入将要离开的车辆*>" << endl;string ID; cin >> ID;auto ret = par.Find(ID);time_t  leave_seconds = time(NULL);time_t curLocalTime;time(&curLocalTime);struct tm info;localtime_s(&info, &curLocalTime);char buffer3[80];strftime(buffer3, 80, "%Y-%m-%d %H:%M:%S", &info);if (ret){cout << "<<><>汽车车牌号:" << ID << endl;struct tm info;localtime_s(&info, &ret->_value);char buffer2[80];strftime(buffer2, 80, "%Y-%m-%d %H:%M:%S", &info);cout << "<<><>入库的时间:" << buffer2 << endl;cout << "<<><>离开的时间:" << buffer3 << endl;long long int course_timt = difftime(leave_seconds, ret->_value);int a, b, c;a = course_timt % 60;b = course_timt / 60 % 60;c = course_timt / 60 / 60;cout << ID << "车辆 停车花费时间为:" << c << " h " << b << " min " << a << " sec " << endl;cout << "需要收取费用:" << 20 * c << " 元" << endl;}else{cout << "无此汽车,请重新输入" << endl;}par.Erase(ID);system("pause");
}void ParFee::statistics()
{par.InOeder();system("pause");
}void ParFee::menu()
{while (true){printf("\t\t\t*****************************************************\n");printf("\t\t\t*---------------------------------------------------*\n");printf("\t\t\t*                   停车场收费管理系统              *\n");printf("\t\t\t*****************************************************\n");printf("\t\t\t********************系统功能菜单*********************\n");printf("\t\t\t----------------------     --------------------------\n");printf("\t\t\t*****************************************************\n");printf("\t\t\t**    1、录入汽车信息   *     2、查看汽车信息      **\n");printf("\t\t\t*****************************************************\n");printf("\t\t\t**    3、收费信息查看   *     4、查询车库车辆      **\n");printf("\t\t\t*****************************************************\n");printf("\t\t\t----------------------     --------------------------\n");int input;cin >> input;system("cls");switch (input){case 1:{entering();system("cls");break;};case 2:{Find();system("cls");break;};case 3:{Erase();system("cls");break;};case 4:{statistics();system("cls");break;};}}
}

//main.cpp
#include"SearchBinaryTree.h"
#include"Parking_Fee.h"int main(){system("color F4");ParFee par;par.menu();return 0;}

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

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

相关文章

百分点科技入选《2024中国数据要素产业图谱1.0版》

近日&#xff0c;数据猿与上海大数据联盟发布了《2024中国数据要素产业图谱1.0版》&#xff0c;百分点科技凭借领先的数据科学技术和深入的行业洞察力&#xff0c;入选数据管理/治理、数据分析与挖掘、应急管理三大领域。 在数据要素的发展关键期&#xff0c;数据作为生产要素持…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【26】【内网穿透】cpolar

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【27】【内网穿透】cpolar 内网穿透cpolar内网穿透联调配置练习—使用公网地址访问gulimall.com参考 内网穿透 正常的外网需要访问我们项目的流程是&#xff1a; 买服务器并且有公网固定…

怎么压缩视频文件?简单的压缩视频方法分享

视频已成为我们日常生活中不可或缺的一部分。但随着视频质量的提高&#xff0c;文件大小也逐渐成为我们分享的阻碍。如何有效压缩视频文件&#xff0c;使其既能保持清晰&#xff0c;又能轻松分享&#xff1f;今天&#xff0c;给大家分享五种实用的视频压缩方法&#xff0c;快来…

安装adb和常用命令

下载ADB安装包 https://dl.google.com/android/repository/platform-tools-latest-windows.zip 解压安装包 解压如上下载的安装包&#xff0c;然后复制adb.exe所在的文件地址 配置环境变量 我的电脑——>右键属性——>高级系统设置——>环境变量——>系统变量—…

stm32学习:(寄存器1)控制寄存器来让led亮

开启时钟&#xff0c;先查找到开启时钟的寄存器&#xff0c;然后通过该寄存器操作时钟的开启或关闭&#xff0c;要打开的是GPIOA的时钟 在芯片手册&#xff0c;找到RCC寄存器描述章节找到APB2外设时钟使能寄存器&#xff08;RCC_APB2ENR)&#xff0c;现在算RCC_APB2ENR这个寄存…

基于mcu固件反汇编逆向入门示例-stm32c8t6平台

基于mcu固件反汇编逆向入门示例-stm32c8t6平台 本文目标&#xff1a;基于mcu固件反汇编逆向入门示例-stm32c8t6平台 按照本文的描述&#xff0c;应该可以在对应的硬件上通实验并举一反三。 先决条件&#xff1a;拥有C语言基础&#xff0c;集成的开发环境&#xff0c;比如&am…

《背包乱斗》为什么好玩 苹果电脑怎么玩《背包乱斗》游戏 mac怎么玩steam windows游戏

在当今竞争激烈的游戏市场中&#xff0c;《背包乱斗》以其独特的魅力在众多作品中脱颖而出&#xff0c;吸引了大量玩家的关注和喜爱。其创新的游戏机制和不断迭代的内容&#xff0c;加之出色的视觉效果和社区建设&#xff0c;使其成为了游戏界的一股清流。 一、《背包乱斗》为…

《绝区零》是一款什么类型的游戏,Mac电脑怎么玩《绝区零》苹果电脑玩游戏怎么样

米哈游的《绝区零》最近在网上爆火呀&#xff0c;不过很多人都想知道mac电脑能不能玩《绝区零》&#xff0c;今天麦麦就给大家介绍一下《绝区零》是一款什么样的游戏&#xff0c;Mac电脑怎么玩《绝区零》。 一、《绝区零》是一款什么样的游戏 《绝区零》是由上海米哈游自主研发…

ES快速开发,ElasticsearchRestTemplate基本使用以及ELK快速部署

最近博主有一些elasticsearch的工作&#xff0c;所以更新的慢了些&#xff0c;现在就教大家快速入门&#xff0c;并对一些基本的查询、更新需求做一下示例&#xff0c;废话不多说开始&#xff1a; 1. ES快速上手 es下载&#xff1a;[https://elasticsearch.cn/download/]()这…

Spring Boot集成Activity7实现简单的审批流

由于客户对于系统里的一些新增数据&#xff0c;例如照片墙、照片等&#xff0c;想实现上级逐级审批通过才可见的效果&#xff0c;于是引入了Acitivity7工作流技术来实现&#xff0c;本文是对实现过程的介绍讲解&#xff0c;由于我是中途交接前同事的这块需求&#xff0c;所以具…

uniapp开发钉钉小程序流程

下载开发工具 1、小程序开发工具 登录钉钉开发平台&#xff0c;根据自己的需求下载合适的版本&#xff0c;我这里下载的是Windows &#xff08;64位&#xff09;版本 小程序开发工具 - 钉钉开放平台 2、HBuilder X HBuilderX-高效极客技巧 新建项目及相关配置 新建项目 …

单臂路由组网实验,单臂路由的定义、适用情况、作用

一、定义 单臂路由是指通过在路由器的一个接口上配置许多子接口,从而实现原来相互隔离的不同VLAN之间的互通。 子接口:把路由器上的实际的物理接口划分为多个逻辑上的接口,这些被划分的逻辑接口就是子接口。 二、适用情况 用在没有三层交换机,却要实现不同VLAN之间的互…

axios 下载大文件时,展示下载进度的组件封装——js技能提升

之前面试的时候&#xff0c;有遇到一个问题&#xff1a;就是下载大文件的时候&#xff0c;如何得知下载进度&#xff0c;当时的回复是没有处理过。。。 现在想到了。axios中本身就有一个下载进度的方法&#xff0c;可以直接拿来使用。 下面记录一下处理步骤&#xff1a; 参考…

深度学习 | CNN 基本原理

目录 1 什么是 CNN2 输入层3 卷积层3.1 卷积操作3.2 Padding 零填充3.3 处理彩色图像 4 池化层4.1 池化操作4.2 池化的平移不变性 5 全连接层6 输出层 前言 这篇博客不够详细&#xff0c;因为没有介绍卷积操作的具体计算&#xff1b;但是它介绍了 CNN 各层次的功能…

golang AST语法树解析

1. 源码示例 package mainimport ("context" )// Foo 结构体 type Foo struct {i int }// Bar 接口 type Bar interface {Do(ctx context.Context) error }// main方法 func main() {a : 1 }2. Golang中的AST golang官方提供的几个包&#xff0c;可以帮助我们进行A…

[杂谈] 关于 Mac 电脑使用 Logitech 鼠标导致 Vscode 侧键无法进行代码前进、回退的问题

我个人使用的是一台 14 寸的 Mac_Apple_M1&#xff0c;外接键盘显示器罗技的 MX Master 3 for Mac 的鼠标。 之前一直使用的 GoLand 开发&#xff0c;查看代码时进行代码跳转就很方便&#xff0c;滚轮键 进入函数方法&#xff0c;鼠标侧键进行前进、后退。看代码完全可以右手单…

【大模型入门】LLM-AI大模型介绍

大语言模型 (LLM) 背景 &#x1f379;大语言模型 (Large Language Model) 是一种人工智能模型, 它们通常包含数千亿甚至更多的参数&#xff0c;并在大规模数据集上进行训练。大语言模型可以处理多种自然语言任务&#xff0c;如文本分类、问答、翻译、对话等等。 自然语言模型…

MQ基础1

对应B站视频&#xff1a; MQ入门-01.MQ课程介绍_哔哩哔哩_bilibili 微服务一旦拆分&#xff0c;必然涉及到服务之间的相互调用&#xff0c;目前我们服务之间调用采用的都是基于OpenFeign的调用。这种调用中&#xff0c;调用者发起请求后需要等待服务提供者执行业务返回结果后…

求立方体面积体积以及判断(c++)

代码&#xff1a; #include<iostream> using namespace std;class Cube { public:void setL(int l){m_L l;}int getL(){return m_L;}void setW(int w){m_W w;}int getW(){return m_W;}void setH(int h){m_H h;}int getH(){return m_H;}int calculateS(){return 2 * (…

netdata 监控软件安装与学习

netdata官网 netdata操作文档 前言&#xff1a; netdata是一款监控软件&#xff0c;可以监控多台主机也可以监控单台主机&#xff0c;监控单台主机时&#xff0c;开箱即用&#xff0c;web ui很棒。 环境&#xff1a; [root192 ~]# cat /etc/system-release CentOS Linux rel…