我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

本文小编为大家详细介绍“C++如何实现停车场管理系统”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++如何实现停车场管理系统”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    一、案例需求描述

    停车场管理系统就是模拟停车场进行车辆管理的系统,该系统分为汽车信息模块,用户使用模块和管理员用户模块,各模块功能如下所示:

    1.1、汽车信息模块

    添加汽车信息:添加汽车属性。

    删除汽车信息:输入停车场中存在的车牌号,删除汽车信息。

    查找汽车信息:输入停车场存在的车牌号,显示汽车详细信息。

    修改汽车信息:输入停车场内存在的车牌号,修改汽车属性信息。

    停车时长统计:显示汽车在停车场中停留的时间和车辆总数。

    停车场信息显示:显示停车场所有汽车的属性信息。

    汽车信息保存:将汽车信息保存到本地文件中。

    1.2、普通用户模块

    可以查询、显示所有汽车信息及停车费信息,另外还包含停车时长统计与退出普通用户登录功能。由于是多次操作,因此需要有循环判断功能,这种情况多使用while嵌套switch case语句实现。

    1.3、管理员用户模块

    此模块具有普通用户模块的所有功能,此外还应有增、删、改的功能。

    二、案例分析

    通过案例描述我们得到了非常清晰的模块信息,因此在设计类时应该包含普通用户类、管理员用户类、汽车信息类。

    大致思路:

    在汽车信息类中实现基本功能并封装起来,以便后续调用。

    在普通用户类中定义菜单功能,通过键入不同数字实现不同功能。

    在管理员用户类中定义菜单功能,通过键入不同数字实现不同功能。

    三、案例代码实现

    这里我采用分文件编写的方式,建立user.h、admin.h、car.h及对应的三个.cpp文件和main.cpp文件,在main里面循环调用user和admin的方法就能实现停车场管理系统。

    3.1、汽车信息类及方法实现

    car.h

    #pragma once // 防止头文件被重复调用#include<string>#include<ctime>using namespace std;class Car {private:string carNum; // 汽车编号string carType; // 汽车型号string color; // 汽车颜色time_t inTime; // 汽车停车时间点public:void addCar();  // 下面四行对应增删改查void delCar();void modCar();void findCar();void timeAmount(); // 计算停车时长并统计汽车总数void showInfor(); // 显示车辆信息(读文件)void saveInfor(); // 保存车辆信息(写文件)};

    car.cpp

    #include"car.h"#include<fstream> // 读写操作#include<iostream>#include<iomanip> // IO流控制头文件,类似C里的格式化输出using namespace std;void Car::addCar() {time_t _time; // 定义时间变量,秒数,调用time()获取while (1) {AA:cout << "请输入车牌号:";cin >> carNum;// 判断文件中是否已存在相同车牌号ifstream ifs("carData.txt", ios::in); // 读文件if (ifs) {char buf[1024];string strs[20];int index = 0; // 标识数组索引while (!ifs.eof()) { // 读取文件直到末尾ifs.getline(buf, 100); // 每次读取一行数据,放入buf数组 注:第二个参数为字符数,缓冲区尽量大,否则循环会异常结束strs[index++] = buf[0]; // buf[0]为车牌号,存入strs数组,索引自增}// 遍历strs数组,auto 自动推导数据类型,这里等价于 stringfor (auto& num : strs) {// 判断输入车牌号是否与文件里重复if (num == carNum) {cout << "车牌号重复!" << endl;goto AA; // 重复后重新输入车牌号}}}// 车牌号不重复继续加下来的输入cout << "请输入车的种类:";cin >> carType;cout << "请出入车的颜色:";cin >> color;inTime = time(&_time); // 记录停车时间// 保存新增车辆信息saveInfor();char ch; cout << "\t是否继续?(y/n)"; // 判断是否继续输入,\t 制表符,通常八个空格cin >> ch;if (ch == 'n' || ch == 'N') {break;}}}void Car::delCar() {// 读文件ifstream carData("carData.txt", ios::in); // 创建文件写入流,缓冲文件ofstream outData("tempCarData.txt", ios::out);if (!outData || !carData) {cout << "文件打开失败!" << endl;return;}string carId, name, str;bool flag = true;cout << "请输入要删除的车牌号:";cin >> carId;// 读取文件第一个字段(车牌号) >> 遇空格结束读取while (carData >> name) {getline(carData,str); // 将该行数据读取到 str// 如果相同,输出要删除的车辆信息:颜色,型号,停车时间if (name == carId) {cout << "要删除的车辆信息:" << endl << str << endl;flag = false;break;}// 如果不相同,将车辆信息写入到temp,否则舍弃该行outData << name << " " << str << endl;}if (flag) cout << "该车牌号不存在" << endl;else {while (getline(carData, str)) { // 继续按行读取,此时第一行outData << str << endl; // 写入到temp}carData.close();outData.close();// 读取 temp,写入 carDataifstream in("tempCarData.txt", ios::in);ofstream out("carData.txt", ios::out);if (!in || !out) {cout << "文件读取失败!" << endl;return;}else {while (getline(in, str)) { // 按行读取,写入out << str << endl;}}in.close();out.close();}}void Car::modCar() {string chepai1, chepai2, str;time_t  time1;int i = 1;cout << "请输入你要修改的车辆的车牌号" << endl;cin >> chepai1;ifstream indata("carData.txt", ios::in);ofstream outdata("tempCarData.txt", ios::out);if (!indata || !outdata){cerr << "文件打开错误" << endl;exit(1);}while (indata >> chepai2){indata >> carType >> color >> inTime; // 读取该行剩余元素if (chepai1 == chepai2){i = 0;cout << "已找到所要修改的车辆" << endl;cout << "修改后的车牌号" << endl;cin >> carNum;cout << "修改后的车辆型号" << endl;cin >> carType;cout << "修改后的车辆颜色" << endl;cin >> color;inTime = time(&time1);// 写入carData.txtoutdata << carNum << " " << carType << "  " << color << "  " << inTime << endl;break;}// 车牌号不同,将车辆信息存到tempoutdata << chepai2 << " " << carType << "  " << color << "  " << inTime << endl;}if (i) { cout << "停车场中没有找到要修改的车辆" << endl; }outdata.close();indata.close();ifstream in("tempCarData.txt", ios::in);ofstream out("carData.txt", ios::out);if (!in || !out){cout << "文件打开错误" << endl;exit(1);}while (getline(in, str)){out << str << endl;}in.close();out.close();}void Car::findCar() {ifstream carData("carData.txt", ios::in);if (!carData){cout << "文件打开失败" << endl;return;}else {string carId;time_t _time, t1;bool flag = true;cout << "请输入要查找的车牌号" << endl;cin >> carId;while (carData >> carNum) // 读取车牌号{carData >> carType >> color >> inTime;t1 = time(&_time); // 获取系统当前时间if (carId == carNum){flag = false;break;}}if (flag) {cout << "未找到该车辆信息!" << endl;}else {cout << "车牌号" << carNum <<" "<<"车的型号:" << carType <<" " <<" 车的颜色:" << color << " "<<"停车时长:" << (t1 - inTime) << "秒" <<" "<< "停车费 " << (t1 - inTime) * 0.05 << "元" << endl;}carData.close();}}void Car::timeAmount() {time_t it, time1;int c1 = 0, c2 = 0;ifstream indata("carData.txt", ios::in);if (!indata){cerr << "文件打开失败" << endl;exit(1);}while (indata >> carNum){indata >> carType >> color >> inTime;it = time(&time1);if ((it - inTime) / (60 * 60 * 24) >= 24){c1++;}else c2++;}cout << "车辆总数是:" << c1 + c2 << endl;cout << "其中停放超过24小时的有" << c1 << "辆" << endl;cout << "其中停放不超过24小时的有" << c2 << "辆" << endl;indata.close();}void Car::showInfor() {int i = 1;string chepai;time_t it, time1;ifstream indata("carData.txt", ios::in);if (!indata){cerr << "文件打开错误" << endl;exit(1);}cout << "停车场中所有汽车信息如下所示:" << endl;cout << "-----------------------------" << endl;while (indata >> chepai){indata >> carType >> color >> inTime;it = time(&time1);cout << "第" << i << "辆车信息如下" << endl;cout << "车牌号" << chepai << "  车的型号:" << carType << "  车的颜色:" << color << "  停车时间" << (it - inTime) << "秒" << "  停车费 " << (it - inTime) * 0.05 << "元" << endl;i++;}indata.close();}void Car::saveInfor() {ofstream outData("carData.txt", ios::app); // app 追加方式写文件,即在文件末尾添加if (!outData) {cout << "文件打开失败!" << endl;return;}else {// 将新增车辆信息写入carDataoutData << carNum << " " << carType << " " << color << " " << inTime << endl;}outData.close();}

    3.2、普通用户类及方法实现

    user.h

    #pragma once#include<string>using namespace std;// 普通用户类,只能查看、统计、显示车辆,无法实现增删改class User {public:void checkCar(); // 普通用户登录菜单};

    user.cpp

    #include<iostream>#include<Windows.h>#include"user.h"#include"car.h"using namespace std;void User::checkCar() {Car car;while (1) {system("cls"); // 清空屏幕cout << "1.显示车辆状况" << endl;cout << "2.查询车辆信息" << endl;cout << "3.统计车辆" << endl;cout << "4.退出普通用户" << endl;int c;cout << "输入要执行的操作:";cin >> c;switch (c) {case 1: car.showInfor(); break;case 2: car.findCar(); break;case 3: car.timeAmount(); break;case 4: return;default: cout << "请输入正确的操作" << endl;}system("pause");}}

    3.3、管理员用户类及方法实现

    admin.h

    #pragma once // 避免同一个头文件被包含多次#include<string>#include"user.h"using namespace std;// 管理员类,公有继承普通用户类,可以添加,修改,删除class Admin:public User {public:void Manager(); // 显示管理员登录的菜单};

    admin.cpp

    #include"admin.h"#include"car.h"#include<iostream>#include<fstream>#include<string>using namespace std;void Admin::Manager() {Car car;while (1) {system("cls"); // 清空屏幕cout << "1.增加车辆" << endl;cout << "2.显示所有车辆信息" << endl;cout << "3.查询" << endl;cout << "4.修改" << endl;cout << "5.删除" << endl;cout << "6.统计" << endl;cout << "7.退出管理用户" << endl;int choice;cout << "请输入要执行的操作:";cin >> choice;switch (choice) {case 1: car.addCar(); break;case 2: car.showInfor(); break;case 3: car.findCar(); break;case 4: car.modCar(); break;case 5: car.delCar(); break;case 6: car.timeAmount(); break;case 7: return;default: cout << "输入错误!" << endl; }system("pause");}}

    3.4、主函数调用情况

    #include"user.h"#include"admin.h"#include<iostream>using namespace std;int main() {User user; // 普通用户对象Admin admin; // 管理员对象int choice;while (1) {system("cls");cout << "1.普通用户登录" << endl;cout << "2.管理员登录" << endl;cout << "3.退出系统" << endl;cout << "请输入要执行的操作:" << endl;cin >> choice;switch (choice) {case 1: user.checkCar(); break;case 2: admin.Manager(); break;case 3: exit(0); // 退出系统default: cout << "请输入正确的操作" << endl;}system("pause");}return 0;}

    四、运行界面截图

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

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

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

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

    读到这里,这篇“C++如何实现停车场管理系统”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

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

    本文小编为大家详细介绍“C++如何实现停车场管理系统”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++如何实现停车场管理系统”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、案例需求描述停车场管理系统就是模拟
    2023-07-06

    如何用C语言实现简单的停车场管理系统

    本篇内容主要讲解“如何用C语言实现简单的停车场管理系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用C语言实现简单的停车场管理系统”吧!1.问题描述1)有一个两层的停车场,每层有6个车位,
    2023-06-29

    C++实现停车场管理系统的示例代码

    停车场管理系统就是模拟停车场进行车辆管理的系统,该系统分为汽车信息模块,用户使用模块和管理员用户模块,本文将用C++实现这一简单的系统,希望对大家有所帮助
    2023-05-15

    怎么用C语言实现简易停车场管理系统

    本篇内容主要讲解“怎么用C语言实现简易停车场管理系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用C语言实现简易停车场管理系统”吧!问题描述:设停车场内只有一个可停放n辆汽车的狭长通道,且
    2023-06-29

    C语言怎么实现停车场管理

    这篇文章主要介绍了C语言怎么实现停车场管理的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言怎么实现停车场管理文章都会有所收获,下面我们一起来看看吧。1.问题描述停车场内只有一个可停放n辆汽车的狭长通道,且只
    2023-06-29

    C++如何实现班车管理系统

    这篇文章主要讲解了“C++如何实现班车管理系统”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++如何实现班车管理系统”吧!设计要求:一交通公司,班车系统的数据包括如下两部分:①班车信息:班
    2023-06-29

    C语言如何实现车票管理系统

    今天小编给大家分享一下C语言如何实现车票管理系统的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、项目简介设计一个车票管理系
    2023-06-30

    C语言实现停车管理系统的代码怎么写

    本篇内容主要讲解“C语言实现停车管理系统的代码怎么写”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言实现停车管理系统的代码怎么写”吧!设计题目设停车场是一个可以停放n辆汽车的南北方向的狭长通
    2023-06-29

    C++怎么实现车票管理系统

    这篇文章主要介绍“C++怎么实现车票管理系统”,在日常操作中,相信很多人在C++怎么实现车票管理系统问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++怎么实现车票管理系统”的疑惑有所帮助!接下来,请跟着小编
    2023-06-29

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录