自学内容网 自学内容网

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

系统效果:
录入汽车信息

查看汽车信息

收费信息查看

查询车库车辆

 

代码展示:

//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)!