系統效果:
錄入汽車信息
查看汽車信息
收費信息查看
查詢車庫車輛
?
代碼展示:
//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;}