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

avatar
作者
筋斗云
阅读量:1

系统效果:
录入汽车信息

查看汽车信息

收费信息查看

查询车库车辆

 

代码展示:

//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;     }

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!