数据结构停车场管理系统设计

这篇具有很好参考价值的文章主要介绍了数据结构停车场管理系统设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据结构与算法分析课程设计之数据结构停车场管理系统设计。主要应用到数据结构中的栈与队列。运用到的编程语言为C++。

目录

一  设计要求 

二 思路分析

三 设计流程


先附上完整代码:

#include<stdio.h>
#include<malloc.h>
#include<iostream>
using namespace std;
int position = 0;//便道内位置


typedef struct CarData
{
	char ch;//车辆的识别符,到达or离去
	int cartime[100];//车辆停车时间
	int carnumber[100];//车辆车牌号 
	int top;
	int n;//容量 
}cardata;


//队列
typedef struct qNode {
	int carnumber;
	int cartime;
	struct qNode* next;
}qNode, * queue;
typedef struct {
	queue front;
	queue rear;
}Queue;


//栈*********
//初始化栈
void initStack(cardata &S, int n) 
{
	S.top = -1;
	S.n = n;
}
//判断栈是否为空
int stackempty(cardata &S)     
{
	if (S.top == -1)
		return false;
	else return true;
}
//判断栈是否为满
int stackfull(cardata &S)     
{
	if (S.top == S.n - 1) {
		return true;
	}
	else {
		return false;
	}
}
//入栈
void push(cardata &S, int carnumber, int cartime)      
{
	S.top++;
	S.carnumber[S.top] = carnumber;
	S.cartime[S.top] = cartime;
}
//出栈 
void pop(cardata& S, int &carnumber, int &cartime)    
{
	carnumber = S.carnumber[S.top];
	cartime = S.cartime[S.top];
	S.top--;
}
//判断栈内是否有该车
int ifthecar(cardata& S, int carnumber)
{
	for (int i = 0; i <= S.top; i++)
	{
		if (S.carnumber[i] == carnumber)
		{
			return 1;
		}
		else
		{
			cout << "停车场无车牌号为 " << carnumber << " 的车!" << endl;
			return 0;
		}
	}

}


//队列*********
//初始化队列
void initQueue(Queue& Q) 
{
	Q.front = Q.rear = (queue)malloc(sizeof(qNode));//队头指针、队尾指针指向同一空结点 ,队列为空。
	if (!Q.front) {
		exit(-1);//内存分配失败,退出
	}
	Q.front->next = NULL;
}
//判断队列是否为空
bool emptyQueue(Queue& Q) {
	if (Q.front == Q.rear) {
		return false;
	}
	else {
		return true;
	}
}
//入队列
void inQueue(Queue& Q, int carnumber, int cartime)
{
	queue p;
	p = (queue)malloc(sizeof(qNode));//分配一个辅助结点空间
	p->carnumber = carnumber;
	p->cartime = cartime;
	p->next = NULL;
	Q.rear->next = p;//队尾指针指向p
	Q.rear = p;//队尾指针后移一位
	position++;
}
//出队列
void outQueue(Queue& Q, int &carnumber, int &cartime)
{
	queue p;
	p = (queue)malloc(sizeof(qNode));//分配一个结点空间
	p = Q.front->next;//指定一个新的结点指向队头指针指向的结点
	carnumber = p->carnumber;//返回结点数据值
	cartime = p->cartime;
	Q.front->next = p->next;//将p指向的下一数据给队头指针,令下一数据前移到队头 
	if (Q.rear == p) {
		Q.rear = Q.front;//使队尾指针回到初始位置 
	}
	delete(p);//释放p所指结点空间 
	position--;
}



//进入和离开*******************

//车辆进入停车场
void arrive(cardata& S,Queue& Q, int carnumber, int cartime)
{
	if (!stackfull(S))
	{
		push(S, carnumber, cartime);//进入停车场
		cout << "车牌号是 " << carnumber << " 的车停在停车场的位置是 " << S.top + 1 << endl;
	}
	else
	{
		inQueue(Q, carnumber, cartime);//进入便道
		cout << "车牌号是 " << carnumber << " 的车在便道的位置是 " << position << endl;
	}
}

//车辆离开停车场
void live(cardata& S, cardata& W, Queue& Q, int carnumber, int cartime, int fee)
{
	int y2 = 0;//车辆是否可以直接驶离栈,需保证车辆后方没有车。
	int leaveTime = cartime;

	for (int j = S.top; j >= 0; j--)
	{
		if (!ifthecar(S,carnumber))
		{
			break;
		}
		if (ifthecar(S, carnumber))//未找到该车,将该车后面的车移入临时栈中
		{
			pop(S, carnumber, cartime);
			push(W, carnumber, cartime);
			if (S.top == 0)//停车场只有一辆车,跳出
			{
				y2 = 1;
				break;
			}
		}
		else
		{
			y2 = 1;
			break;
		}
	}

	if (y2)
	{		//找到了该车
		pop(S, carnumber, cartime);//该车离开停车场
		cout << "车牌号是 " << carnumber << " 的车离开停车场,停留时间是:" << (leaveTime - cartime) <<
			"小时,共花费了 " << fee * (leaveTime - cartime) << " 元。" << endl;

		//将临时栈里的车放进停车场
		while (stackempty(W))
		{
			pop(W, carnumber, cartime);
			push(S, carnumber, cartime);
		}
		//如果便道上有车,进停车场 
		if (emptyQueue(Q))
		{
			outQueue(Q, carnumber, cartime);
			push(S, carnumber, cartime);
		}
	}
}



//主函数*******************

int main() 
{
    //定义所需变量,栈,以及队列
	int carnumber,cartime,n, fee;//n停车场容量,fee每小时停车费
	char ch;
	cardata S, W;//S指停车场,W指临时栈 
	Queue Q;//队列(便道)

	//输入变量
	cout << "请输入停车场最大容量(/小时)以及车在停车场每小时的费用(/元):" << endl;
	cin >> n >> fee;

    //初始化停车场 
	initStack(S, n);
	initStack(W, n);
	//初始化便道 
	initQueue(Q);

	cout << "请输入车的状态(A进站/D出站),车牌号和时间(进站时间/出站时间):" << endl;
	cin >> ch >> carnumber >> cartime;
	while(ch != 'E' && time != 0)
	{
		
		if (ch == 'A')//进入
		{
			arrive(S, Q, carnumber, cartime);
		}
		else if (ch == 'D')//离开
		{
			live(S,W,Q, carnumber, cartime,fee);
		}
		else 
		{
			printf("请输入正确的编号,A是进库,D是出库!\n");
		}
		cin >> ch >> carnumber >> cartime;
	}
	return 0;
}

运行结果图:

数据结构停车场管理系统代码,数据结构

一  设计要求 

1.1 问题描述:设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。汽车在停车常内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第1辆车停放在车场的最北端),若车场内以停满n辆汽车,则后来的汽车只能在门外的便道上候车,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车厂为它让路,待该辆车开出大门外,其他车辆再按原次序进入车厂。每辆停放在车场的车在它离开停车场时必须按照它停留的时间长短缴纳费用。试为停车场编制按上述要求进行管理的模拟程序。

1.2 基本要求:以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、车牌号以及到达或离开时间。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离开,则输出汽车在停车场内停留的时间和应缴纳费用。栈以顺序结构实现,队列以链表结构实现。

1.3 测试数据:设n=2,输入(A,1,5),(A,2,10),(D,1,5),(A,3,20),(A,4,25),(A,5,30),(D,4,40),(E,0,0)。其中A表示到达,D表示离开,E表示输入结束。

1.4 实现提示:需另设一个栈,临时停放为给离去的汽车让路,而从停车场退出来的汽车,也用顺序存储结构存储,便道用队列实现。

二 思路分析

因为停车场中的车辆离开时,其后面的车辆要全部暂时驶离停车场,符合栈先进后出的特点。暂时驶离停车场的车辆之后要按照顺序进入停车场,于是再另外建立一个栈,用于存放临时驶离的车辆,这样暂时驶离的车辆回到停车场时还是原来的的顺序。而便道使用队列,是因为其先进先出的特点,保证先到的车辆可以先进入停车场。

流程图:

数据结构停车场管理系统代码,数据结构

三 设计流程

第一步定义栈和队列的结构

typedef struct CarData
{
	char ch;//车辆的识别符,到达or离去
	int cartime[100];//车辆停车时间
	int carnumber[100];//车辆车牌号 
	int top;
	int n;//容量 
}cardata;


//队列
typedef struct qNode {
	int carnumber;
	int cartime;
	struct qNode* next;
}qNode, * queue;
typedef struct {
	queue front;
	queue rear;
}Queue;

2.2第二步编写栈的基本处理,包括初始化栈,判断栈是否为空,判断栈是否为满,入栈和出栈

//初始化栈
void initStack(cardata &S, int n) 
{
	S.top = -1;
	S.n = n;
}
//判断栈是否为空
int stackempty(cardata &S)     
{
	if (S.top == -1)
		return false;
	else return true;
}
//判断栈是否为满
int stackfull(cardata &S)     
{
	if (S.top == S.n - 1) {
		return true;
	}
	else {
		return false;
	}
}
//入栈
void push(cardata &S, int carnumber, int cartime)      
{
	S.top++;
	S.carnumber[S.top] = carnumber;
	S.cartime[S.top] = cartime;
}
//出栈 
void pop(cardata& S, int &carnumber, int &cartime)    
{
	carnumber = S.carnumber[S.top];
	cartime = S.cartime[S.top];
	S.top--;
}

第三步编写队列的基本操作,包括队列的初始化,判断队列是否为空,入队列和出队列。

//初始化队列
void initQueue(Queue& Q) 
{
	Q.front = Q.rear = (queue)malloc(sizeof(qNode));//队头指针、队尾指针指向同一空结点 ,队列为空。
	if (!Q.front) {
		exit(-1);//内存分配失败,退出
	}
	Q.front->next = NULL;
}
//判断队列是否为空
bool emptyQueue(Queue& Q) {
	if (Q.front == Q.rear) {
		return false;
	}
	else {
		return true;
	}
}
//入队列
void inQueue(Queue& Q, int carnumber, int cartime)
{
	queue p;
	p = (queue)malloc(sizeof(qNode));//分配一个辅助结点空间
	p->carnumber = carnumber;
	p->cartime = cartime;
	p->next = NULL;
	Q.rear->next = p;//队尾指针指向p
	Q.rear = p;//队尾指针后移一位
	position++;
}
//出队列
void outQueue(Queue& Q, int &carnumber, int &cartime)
{
	queue p;
	p = (queue)malloc(sizeof(qNode));//分配一个结点空间
	p = Q.front->next;//指定一个新的结点指向队头指针指向的结点
	carnumber = p->carnumber;//返回结点数据值
	cartime = p->cartime;
	Q.front->next = p->next;//将p指向的下一数据给队头指针,令下一数据前移到队头 
	if (Q.rear == p) {
		Q.rear = Q.front;//使队尾指针回到初始位置 
	}
	delete(p);//释放p所指结点空间 
	position--;
}

第四步,自定义几个所需的函数,包括判断停车场内是否有该车,车辆进入停车场和车辆驶离停车场。

//判断停车场内是否有该车
int ifthecar(cardata& S, int carnumber)
{
	for (int i = 0; i <= S.top; i++)
	{
		if (S.carnumber[i] == carnumber)
		{
			return 1;
		}
		else
		{
			cout << "停车场无车牌号为 " << carnumber << " 的车!" << endl;
			return 0;
		}
	}

}

//车辆进入停车场
void arrive(cardata& S,Queue& Q, int carnumber, int cartime)
{
	if (!stackfull(S))
	{
		push(S, carnumber, cartime);//进入停车场
		cout << "车牌号是 " << carnumber << " 的车停在停车场的位置是 " << S.top + 1 << endl;
	}
	else
	{
		inQueue(Q, carnumber, cartime);//进入便道
		cout << "车牌号是 " << carnumber << " 的车在便道的位置是 " << position << endl;
	}
}

//车辆离开停车场
void live(cardata& S, cardata& W, Queue& Q, int carnumber, int cartime, int fee)
{
	int y2 = 0;//车辆是否可以直接驶离栈,需保证车辆后方没有车。
	int leaveTime = cartime;

	for (int j = S.top; j >= 0; j--)
	{
		if (!ifthecar(S,carnumber))
		{
			break;
		}
		if (ifthecar(S, carnumber))//未找到该车,将该车后面的车移入临时栈中
		{
			pop(S, carnumber, cartime);
			push(W, carnumber, cartime);
			if (S.top == 0)//停车场只有一辆车,跳出
			{
				y2 = 1;
				break;
			}
		}
		else
		{
			y2 = 1;
			break;
		}
	}

	if (y2)
	{		//找到了该车
		pop(S, carnumber, cartime);//该车离开停车场
		cout << "车牌号是 " << carnumber << " 的车离开停车场,停留时间是:" << (leaveTime - cartime) <<
			"小时,共花费了 " << fee * (leaveTime - cartime) << " 元。" << endl;

		//将临时栈里的车放进停车场
		while (stackempty(W))
		{
			pop(W, carnumber, cartime);
			push(S, carnumber, cartime);
		}
		//如果便道上有车,进停车场 
		if (emptyQueue(Q))
		{
			outQueue(Q, carnumber, cartime);
			push(S, carnumber, cartime);
		}
	}
}

最后,定义主函数即可。文章来源地址https://www.toymoban.com/news/detail-757389.html

int main() 
{
    //定义所需变量,栈,以及队列
	int carnumber,cartime,n, fee;//n停车场容量,fee每小时停车费
	char ch;
	cardata S, W;//S指停车场,W指临时栈 
	Queue Q;//队列(便道)

	//输入变量
	cout << "请输入停车场最大容量(/小时)以及车在停车场每小时的费用(/元):" << endl;
	cin >> n >> fee;

    //初始化停车场 
	initStack(S, n);
	initStack(W, n);
	//初始化便道 
	initQueue(Q);

	cout << "请输入车的状态(A进站/D出站),车牌号和时间(进站时间/出站时间):" << endl;
	cin >> ch >> carnumber >> cartime;
	while(ch != 'E' && time != 0)
	{
		
		if (ch == 'A')//进入
		{
			arrive(S, Q, carnumber, cartime);
		}
		else if (ch == 'D')//离开
		{
			live(S,W,Q, carnumber, cartime,fee);
		}
		else 
		{
			printf("请输入正确的编号,A是进库,D是出库!\n");
		}
		cin >> ch >> carnumber >> cartime;
	}
	return 0;
}

到了这里,关于数据结构停车场管理系统设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 停车场管理系统

    开发   以下为停车场管理系统的代码:   首先定义Car类,记录车辆信息:   ```java public class Car {     private String plateNumber;  // 车牌号     private long enterTime;  // 进入停车场时间     private long exitTime;  // 离开停车场时间       public Car(String plateNumber, long enterTime) {      

    2024年02月09日
    浏览(41)
  • 停车场管理系统(C++)

    大二写的肯定会有很多很多很多缺点~希望大佬们能指出~给大家提供一个可以改的一个小东西,改成其他的什么什么也是可以的~有bug在评论区里说一下~952行~基本重要的都有注释~ 本“项目”实现了: 1.大中小车型分类 2.进场候车道 3.时间的自动提取 4.车牌的判定 5.查询、进车

    2024年01月16日
    浏览(50)
  • C#停车场管理系统

    现如今随着经济的发展, 私家车越来越多, 系统管理停车场变得尤为重要。所以我写了这个系统用来系统化的管理停车场的车辆的停入、驶出和计费,停车位的使用情况,停车证件的信息管理以及工作员工的信息管理,使得停车场的管理可以变的更加的方便快捷和人性化。

    2024年02月07日
    浏览(47)
  • 停车场管理系统(C语言)

    1、问题描述 设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待

    2024年02月04日
    浏览(41)
  • 用JAVA实现停车场管理系统

    该程序使用ArrayList存储停车记录,并通过switch-case语句实现菜单选择功能。主要功能包括: 停车:输入车牌号和进入时间,自动分配停车位编号, 结算:根据停车位编号计算停车费用,计费标准为停车时长(秒)乘以每秒费用0.05元,同时记录车辆离开时间和费用; 查看记录

    2024年02月11日
    浏览(40)
  • 基于python的停车场管理系统的设计与实现/智能停车管理系统

    车位信息 是 停车场供应用户 必不可少的一个部分。在 停车场发展 的整个过程中, 车位信息 担负着最重要的角色。为满足如今日益复杂的管理需求,各类 系统管理 程序也在不断改进。本课题所设计的 停车场管理系统 , 使用 Django 框架 , Python语言 进行开发,它的优点代

    2024年02月10日
    浏览(40)
  • 停车场管理系统文件录入(C++版)

    ❤️作者主页:微凉秋意 ✅作者简介:后端领域优质创作者🏆,CSDN内容合伙人🏆,阿里云专家博主🏆 之前写的停车场管理系统或者是通讯录管理系统都没有使用 文件 录入、保存数据,今天带来一个文件录入信息的C++版停车场管理系统。代码部分都会有详细注释,稍加思

    2024年02月03日
    浏览(40)
  • 基于Web的停车场管理系统(Java)

    目录 一、系统介绍 1.开发的环境 2.本系统实现的功能 3.数据库用到的表 4.工程截图 二、系统展示 1、登录页面  2、首页 3、系统信息管理模块   4、车位信息管理模块  5、IC卡信息管理模块 ​编辑6、固定车主停车管理模块 7、临时车主停车管理模块 8、系统功能操作模块 三

    2024年02月10日
    浏览(36)
  • Python 实验报告,实现停车场收费管理系统

    3.某小型收费停车场有50个车位,有一个入口与一个出口,满1小时收费1元,不足1小时不收费,10元封顶,超过1天罚款200元。编写程序实现停车场出入口管理。 要求: (1)定义出入口类,将车位总数与目前停在停车场的车辆信息(每辆车包括车牌和入场时间)定义为类属性;

    2024年02月12日
    浏览(42)
  • JAVA毕业设计119—基于Java+Springboot+vue的智能停车场管理系统(源代码+数据库+9000字论文)

    毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 本项目前后端不分离 登录、控制台、停车场管理、车牌识别、车辆管理 角色管理、系统菜单、全局配置、停车记录、财务管理 控制台管理、系统日志、账号管理、用户管理、合作单位管理、密码修改、个人信息

    2024年02月03日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包