基于搜索二叉树的停车收费管理系统
系统效果:
录入汽车信息查看汽车信息
收费信息查看
查询车库车辆
代码展示:
//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;
else
rightMinParent->_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;
}
原文地址:https://blog.csdn.net/2301_79201049/article/details/140477350
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!