阅读量: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; }