C++实现停车场管理系统

C++实现停车场管理系统的完整攻略

目录

  1. 简介
  2. 功能需求
  3. 设计思路
  4. 代码实现
  5. 示例说明
  6. 总结

1. 简介

停车场管理系统是一种常见的用于管理停车场的软件系统,通常包括车辆进入、出场、停车位置管理等多个功能。本文将介绍如何使用C++语言实现一个简单的停车场管理系统。

2. 功能需求

本次实验中,我们将实现以下功能:

  1. 停车:记录车辆入场时间和车牌号,并将车辆信息存储到停车场内。
  2. 取车:根据车牌号查询停车场内的车辆信息,并计算出停车费用。
  3. 显示停车场内的车辆信息:以列表的形式展示停车场内所有车辆的信息。

3. 设计思路

本系统采用基于面向对象的编程思想来设计,主要有以下几个类:

  1. Car:车辆类,包含车牌号和入场时间属性,以及计算停车费用的方法。
  2. ParkingLot:停车场类,为车辆提供停车和取车功能,以及存储车辆信息的容器。
  3. ParkingSystem:停车场管理系统,主要用于用户界面的交互和显示停车场内车辆信息。

主要操作流程如下:

  1. 用户输入指令,程序根据指令调用ParkingSystem类中的方法实现相应功能。
  2. ParkingSystem类中的方法调用ParkingLot类中的方法,完成对停车场内车辆信息的存取、计算停车费用等操作。
  3. 通过终端输出展示停车场内车辆信息等结果。

4. 代码实现

下面是各个类的具体实现代码,其中包含了类的声明和定义。

Car类

class Car {
public:
    Car(string plateNumber, time_t enterTime);
    string getPlateNumber() const;
    time_t getEnterTime() const;
    int getCost(const time_t& endTime) const;
private:
    string plateNumber;
    time_t enterTime;
};
Car::Car(string plateNumber, time_t enterTime)
    : plateNumber(plateNumber)
    , enterTime(enterTime) { }
string Car::getPlateNumber() const {
    return plateNumber;
}
time_t Car::getEnterTime() const {
    return enterTime;
}
int Car::getCost(const time_t& endTime) const {
    int seconds = (int)difftime(endTime, enterTime);
    int minutes = seconds / 60;
    int hours = minutes / 60;
    if (minutes % 60 > 0) {
        hours++;
    }
    int cost = hours * 5;  // 停车费用为每小时5元
    return cost;
}

ParkingLot类

class ParkingLot {
public:
    bool park(Car car);
    Car take(string plateNumber, time_t endTime);
    void display() const;
private:
    vector<Car> cars;
};
bool ParkingLot::park(Car car) {
    cars.push_back(car);
    return true;
}
Car ParkingLot::take(string plateNumber, time_t endTime) {
    Car result("", 0);
    int index = -1;
    for (int i = 0; i < (int)cars.size(); ++i) {
        if (cars[i].getPlateNumber() == plateNumber) {
            index = i;
            break;
        }
    }
    if (index == -1) {
        return result;
    }
    result = cars[index];
    cars.erase(cars.begin() + index);
    return result;
}
void ParkingLot::display() const {
    cout << "Parking Lot:" << endl;
    for (const Car& car : cars) {
        cout << "Plate Number: " << car.getPlateNumber()
             << ", Enter Time: " << ctime(&(car.getEnterTime()));
    }
}

ParkingSystem类

class ParkingSystem {
public:
    void run();
private:
    ParkingLot parkingLot;
    void displayMenu() const;
    time_t getCurrentTime() const;
};
void ParkingSystem::run() {
    while (true) {
        displayMenu();
        char choice;
        cin >> choice;
        switch (choice) {
            case '1': {
                string plateNumber;
                cout << "Enter Plate Number: ";
                cin >> plateNumber;
                Car car(plateNumber, getCurrentTime());
                if (parkingLot.park(car)) {
                    cout << "Park Successfully!" << endl;
                } else {
                    cout << "Park Failed!" << endl;
                }
                break;
            }
            case '2': {
                string plateNumber;
                cout << "Enter Plate Number: ";
                cin >> plateNumber;
                Car car = parkingLot.take(plateNumber, getCurrentTime());
                if (car.getPlateNumber() != "") {
                    int cost = car.getCost(getCurrentTime());
                    cout << "Take Successfully! Cost: " << cost << endl;
                } else {
                    cout << "Take Failed! The Plate Number Not Exists!" << endl;
                }
                break;
            }
            case '3': {
                parkingLot.display();
                break;
            }
            case 'x':
            case 'X': {
                cout << "Exit!" << endl;
                return;
            }
            default: {
                cout << "Invalid Input! Please Try again!" << endl;
                break;
            }
        }
    }
}
void ParkingSystem::displayMenu() const {
    cout << "<< Parking System >>" << endl;
    cout << "1. Park" << endl;
    cout << "2. Take" << endl;
    cout << "3. Display" << endl;
    cout << "x. Exit" << endl;
}
time_t ParkingSystem::getCurrentTime() const {
    return time(nullptr);
}

5. 示例说明

下面是一些示例说明,展示了系统如何处理用户的输入以及相关操作的执行结果。

示例1

进入系统后,用户选择将车停入车场,在提示框中输入车牌号码(此处以“京A88888”为例),系统会显示停入成功,如下所示:

<< Parking System >>
1. Park
2. Take
3. Display
x. Exit
Enter Your Choice: 1
Enter Plate Number: 京A88888
Park Successfully!

此时通过调用 ParkingLot::display 方法,可以看到停车场中现在停有1辆车,如下所示:

Parking Lot:
Plate Number: 京A88888, Enter Time: Sat Oct  2 13:59:40 2021

示例2

进入系统后,用户选择从车场中取出车,在提示框中输入车牌号码(例如:K12345),如果车场中存在该车辆信息,则系统计算出停车费用(按照每小时5元计算),并输出“取车成功,费用xxx元”,如下所示:

<< Parking System >>
1. Park
2. Take
3. Display
x. Exit
Enter Your Choice: 2
Enter Plate Number: K12345
Take Successfully! Cost: 10

若该车牌号码不存在,则提示“取车失败,该车牌号码不存在”。

6. 总结

C++实现停车场管理系统,主要使用了面向对象的编程思想,以类的形式组织各种功能,并通过类间的调用来完成停车、取车和显示停车场信息的功能。在实现过程中,需要考虑车辆信息的存储和费用的计算,同时还需要注意输入格式的检查和错误的提示。通过本次实验,我们深入理解了C++的面向对象编程基础,并掌握了使用C++实现系统的方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现停车场管理系统 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言 文件的随机读写详解及示例代码

    C语言文件的随机读写是一项重要的编程技巧,可以帮助你在处理大型文件时准确地定位和读取其中特定的数据。下面,我将为您提供完整的攻略,涉及的内容包括: 打开文件并定义文件指针; 利用fread()函数进行随机读取文件; 利用fwrite()函数进行随机写入文件; 通过fclose()函数关闭文件。 打开文件并定义文件指针 在C语言中,打开文件需要使用fopen(…

    C 2023年5月24日
    00
  • 基于C语言实现的aes256加密算法示例

    这里我们将详细讲解如何基于C语言实现AES256加密算法的示例代码。本文分为以下几个部分: 引言 算法原理 实现方法 示例说明1:加密文件 示例说明2:加密字符串 引言 AES(Advanced Encryption Standard),也称Rijndael加密法,是一种常见的对称密钥加密算法。AES使用对称密钥进行加密和解密,加密和解密过程完全相同。本文将…

    C 2023年5月22日
    00
  • C++如何实现简易扫雷游戏

    以下是“C++如何实现简易扫雷游戏”的完整攻略: 1. 游戏规则 扫雷游戏的规则如下:给定一个网格,每个格子可能是地雷或者数字,玩家需要翻转每个格子,如果它是地雷,则游戏结束,如果是数字,则表示周围八个格中地雷的数量,玩家需要根据数字推测哪些格子是地雷,最后揭示出所有非地雷格子以完成游戏。 2. 实现步骤 在 C++ 中,我们可以采用面向对象的思想,定义格子…

    C 2023年5月23日
    00
  • C语言实现猜数游戏

    C语言实现猜数游戏攻略 一、简介 C语言实现猜数游戏是一种比较简单的小项目,它可以帮助初学C语言的程序员更好地理解C语言的基本语法,提升程序设计能力。本攻略将介绍实现猜数游戏的完整过程,并提供两个示例。 二、游戏规则 猜数游戏的规则非常简单,程序先生成一个1~100之间的随机整数,玩家需要在规定的次数内猜出这个数字。每次猜数后,程序会根据玩家的猜测结果给出提…

    C 2023年5月23日
    00
  • 关于go语言载入json可能遇到的一个坑

    当使用 Go 语言读取 JSON 文件并解析时,需要注意的是,JSON 对象中的属性是无序的。因此,如果不使用正确的数据结构,可能会导致 JSON 数据解析失败而出现错误。 具体来说,使用 Go 语言解析 JSON 数据时,应该使用结构体而非 map 进行数据的解析。这是因为 map 在解析 JSON 对象时,会自动将属性名转换为字符串类型,而这会导致属性顺…

    C 2023年5月23日
    00
  • 解析C++中的字符串处理函数和指针

    解析C++中的字符串处理函数和指针 在C++中,字符串(String)是一种常见的数据类型。在使用字符串时,我们常常需要进行一些处理,例如拼接字符串、查找字符、截取子串等。此时,就需要用到字符串处理函数和指针。以下是详细的解析攻略。 字符串处理函数 在C++中,有一些常用的字符串处理函数,下面来一一介绍。 strlen strlen 函数用于计算字符串的长度…

    C 2023年5月23日
    00
  • C++如何获取当前系统时间及格式化输出

    获取当前系统时间和格式化输出日期时间对于C++程序员来说是一个常见需求。下面是步骤和示例说明: 1. 通过头文件中的time()函数获取当前时间戳 time_t t = time(NULL); time()函数以时间戳形式(从1970年1月1日00:00:00 UTC开始)返回当前时间。如果函数参数为NULL,则返回当前时间。time_t是time()函数返…

    C 2023年5月23日
    00
  • Javascript实用方法之json合并的场景分析

    Javascript实用方法之json合并的场景分析 在开发中,JSON合并是一项非常常见的需求。本篇攻略将介绍典型的JSON合并场景及其解决方案。 场景分析 假设有两个JSON对象,分别为: let object1 = { name: ‘John’, age: 25, location: { city: ‘New York’, country: ‘USA’…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部