系统效果:
录入汽车信息查看汽车信息
收费信息查看
查询车库车辆
代码展示:
//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;}