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

C++实现停车场管理系统停车场管理 1 问题描述 自动停车场由一个可停放 n 辆车的狭长通道构成 且只有一个入口可供汽车进出 在停车场内 汽车按到达的先后次序 由北向南一次排列 假设入口在最南端 若停车场内已停满 n 辆车 则后来的汽车需在入口外的临时等候便道上等候 当有车要离开时

大家好,我是讯享网,很高兴认识大家。

停车场管理

1.问题描述
自动停车场由一个可停放n辆车的狭长通道构成,且只有一个入口可供汽车进出。在停车场内,汽车按到达的先后次序,由北向南一次排列(假设入口在最南端)。若停车场内已停满n辆车,则后来的汽车需在入口外的临时等候便道上等候,当有车要离开时,临时等候便道上的第一辆车即可进入。当自动停车场内某辆车要离开时,必须先将在它之后进入的车辆移出为其让路,待该辆车离开后,其他车辆再按原次序移入自动停车场。每辆车离开自动停车场时,应按其停留时间的长短缴费(在临时等候便道上停留的时间不收费)
2.问题分析
在该问题中,主要需利用栈与队列进行实现,停车场使用栈结构,临时等候便道使用队列。
3.代码
//main.cpp
#include
#include “Parking.h”
using namespace std;

int main() {
Stack Enter;//停车场栈
Queue W;//临时队列
Car p;
InitStack(Enter);//初始化停车场
InitQueue(W);//初始化临时队列
InitCar§;//初始化车辆信息
int choice;
cout << “欢迎使用停车场系统” << endl;
do {
cout << “*1.车辆到达登记 *” << endl;
cout << “*2.车辆离开登记 *” << endl;
cout << “*3.停车场信息显示 *” << endl;
cout << “*4.临时便道信息显示 *” << endl;
cout << “*101.退出系统 *” << endl;
cout << “Enter choice:”;
cin >> choice;
switch (choice) {
case 1://车辆到达
Arrive(Enter, W, p);
cout << endl;
break;
case 2://车辆离开
Leave(Enter, W, p);
cout << endl;
break;
case 3://显示停车场信息
ShowStack(Enter);
cout << endl;
break;
case 4://显示临时便道信息
ShowQueue(W);
cout << endl;
break;
}
} while (choice != 101);
return 0;
}

//Parking.h
#pragma once
#ifndef _PARKING_H
#define _PARKING_H
#define maxstacksize 4
#define maxqueuesize 6
#define fee 0.1//一分钟0.1元
#include

struct Time {//时间节点
int hour;
int min;
};

struct Car {//车辆信息
std::string num;
Time reach;//车辆到达时间
Time leave;//车辆离开时间
int pos;//车在停车场或者临时便道上的位置
};

struct Stack {//停车场栈
Car C[maxstacksize];
int top;//栈顶元素的下标,top为-1表示栈空
};

struct Queue {//临时便道队列
Car S[maxqueuesize];
int front;//队列第一个元素下标
int rear;//队列最后一个元素下标,front==rear队列为空6
};

void InitStack(Stack& P);//初始化栈
void Push(Stack& P, Car& e);//入栈
void Pop(Stack& P, Car& e);//出栈
void InitQueue(Queue& Q);//初始化队列
void EnterQueue(Queue& Q, Car& e);//入队
void DeleteQueue(Queue& Q, Car& e);//出队
void Arrive(Stack& Enter, Queue& W, Car& p);//车辆到达
void Leave(Stack& Enter, Queue& W, Car& p);//车辆离开
void ShowStack(Stack& S);//显示停车场信息
void ShowQueue(Queue& Q);//显示临时便道信息
void InitCar(Car& p);//初始化车辆信息

#endif //_PARKING_H

//Parking.cpp
#include
#include “Parking.h”
using namespace std;

void InitStack(Stack& P) {
//初始化栈,构造一个空栈
P.top = -1;
}


讯享网

void Push(Stack& P,Car& e) {
//入栈,将元素e置入P栈的栈顶
P.C[++P.top] = e;
}

void Pop(Stack& P, Car& e) {
//出栈,将栈顶元素用e返回
e = P.C[P.top–];
}

void InitQueue(Queue& Q) {
//初始化队列,构造一个空队列
Q.front = Q.rear = 0;
}

void EnterQueue(Queue& Q, Car& e) {
//将元素e入队
Q.S[Q.rear] = e;
Q.rear = (Q.rear + 1) % maxqueuesize;
}

void DeleteQueue(Queue& Q, Car& e) {
//出队,用e返回
e = Q.S[Q.front];
Q.front = (Q.front + 1) % maxqueuesize;
}

void Arrive(Stack& Enter, Queue& W,Car& p) {
//车辆进入停车场
if (Enter.top == maxstacksize - 1) {
cout << “停车场已满,进入临时便道!” << endl;
if ((W.rear + 1) % maxqueuesize == W.front) {
cout << “临时便道已满,请您去其他的停车场!” << endl;
}
else {
cout << “请输入车牌号<例:京A-88888>:”;
cin >> p.num;
EnterQueue(W, p);
}
}
else {
cout << “请输入车牌号<例:京A-88888>:”;
cin >> p.num;
cout << “请输入车牌号为” << p.num << “的车进入停车场的时间,hour:”;
cin >> p.reach.hour;
cout << “min:”;
cin>>p.reach.min;
p.pos = Enter.top + 2;
Push(Enter, p);
cout << “车牌号为“” << p.num << “”的车在停车场中的位置为:” << p.pos << endl;
}
}

void Leave(Stack& Enter, Queue& W, Car& p) {
//车辆出停车场,用p返回,若临时便道不为空,则临时便道第一辆车进入停车场
string num;
int flag = 0, pos = 0, time;
double pay=0;
Stack S;
InitStack(S);
Car e;
if (Enter.top == -1) cout << “停车场为空!” << endl;
else {
cout << “请输入离开车辆的车牌号<例:京A-88888>:”;
cin >> num;
for (int i = 0; i <= Enter.top; i++) {
if (Enter.C[i].num == num) {
flag++;
pos = Enter.C[i].pos;
}
}
if (!flag) cout << “车牌号为“” << num << “”的车不在停车场中!” << endl;
else {
for (int i = Enter.top; i >= pos; i–) {
Pop(Enter, e);
Push(S, e);
}
Pop(Enter, p);
cout << “请输入车牌号为“” << p.num << “”的车离开停车场的时间,hour:”;
cin >> p.leave.hour;
cout << “min:”;
cin >> p.leave.min;
cout << “车牌号为“” << p.num << “”的车进入停车场的时间为,” << p.reach.hour << ‘:’ << p.reach.min << endl;
cout << “车牌号为“” << p.num << “”的车驶出停车场的时间为,” << p.leave.hour << ‘:’ << p.leave.min << endl;
time = (p.leave.hour - p.reach.hour) * 60 + (p.leave.min - p.reach.min);
pay = time * fee;
cout << “车牌号为“” << p.num << “”的车需付停车费” << pay << “元” << endl;
cout << endl;
while (S.top >= 0) {
Pop(S, e);
e.pos–;
Push(Enter, e);
}
if (W.front != W.rear) {
DeleteQueue(W, e);
cout << “请输入车牌号为“” << e.num << “”的车进入停车场的时间,hour:”;
cin >> e.reach.hour;
cout << “min:”;
cin >> e.reach.min;
e.pos = Enter.top + 2;
Push(Enter, e);
cout << “车牌号为“” << e.num << “”的车在停车场中的位置为:” << e.pos << endl;
}
}
}
}

void ShowStack(Stack& S) {
//输出停车场信息
if (S.top == -1) cout << “停车场为空!” << endl;
else {
//Car e;
cout << “停车场中的车辆信息为:” << endl;
for (int i = 0; i <= S.top; i++) {
//e = S.C[i];
cout << “车辆位置为:” << S.C[i].pos << " ";
cout << “车牌号为:” << S.C[i].num << " ";
cout << “车辆进入的时间为:” << S.C[i].reach.hour << ‘:’ << S.C[i].reach.min << endl;
}
}
cout << endl;
}

void ShowQueue(Queue& Q) {
//输出临时便道信息
int i=0;
if (Q.front == Q.rear) cout << “临时便道为空!” << endl;
else {
cout << “临时便道中的车辆信息为:” << endl;
int t = Q.front % maxqueuesize;
Car e;
while (t != Q.rear) {
e = Q.S[t];
i++;
cout << “车辆位置:” << i << " ";
cout << “车牌号为:” << e.num << endl;
t = (t + 1) % maxqueuesize;
}
}
cout << endl;
}

void InitCar(Car& p) {
//初始化车辆信息
p = { “”,{0,0},{0,0},0 };
}

小讯
上一篇 2025-02-05 19:30
下一篇 2025-03-21 12:50

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/116817.html