停车场管理模拟系统

1、停车场管理模拟系统
熟悉理解栈和队列的逻辑结构和存储结构,设计实现停车场管理的模拟系统,其主要内容如下:
设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出,其模型如下图所示。
汽车在停车场内按车辆到达时间的先后顺序依次由北向南排列(大门在最南端,最先到达的第一辆汽车停放在车场的最北端),若车场内已停满n辆车,那么后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆汽车要离开时,在它之后进入的车辆必须先退出停车场按顺序开入临时停放道为其让路,待其开出大门外后,再按原次序进入车场,每辆停放在停车场的汽车在它离开停车场时必须按其停留的时间长短缴纳费用(从进入停车场开始计费)。
停车场管理模拟系统

  1. 车库和临时停放车道都是栈
  2. 便道是队列
  3. 计费使用时间函数读取以秒为单位的系统时间乘上每秒的费用
  4. 停车时间以数组形式存储在车库栈的结构体中,以车位(栈序号)存储
  5. 每当有新车进入车库,读取系统时间记录于停车时间数组中
  6. 每当有车辆驶出,根据现在时间结算费用;并依次移动栈的车辆序号和时间数组
  7. 题目要求的“必须先退出停车场按顺序开入临时停放道为其让路,待其开出大门外后,再按原次序进入车场“在函数DriveOut中实现;无输出结果;
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <time.h>

using namespace std;

#define MAXSIZE 4
#define SMaxSize 5
#define ElemType int
#define FALSE 0
#define TRUE 1
#define FEE_per_s 1

typedef struct {
	ElemType Selem[SMaxSize];
	int top;
	int TIME[SMaxSize];
} SeqStack;

typedef struct {
	ElemType Qelem[MAXSIZE];
	int front;
	int rear;
} SeqQueue;


void InitStack(SeqStack *S) {
	S->top = -1;
}
void InitQueue(SeqQueue *Q) {
	Q->front = Q->rear = 0;
	for (int i = 0; i < MAXSIZE; i++)
	{
		Q->Qelem[i] = NULL;
	}
}


int COUNT_TIME() {
	time_t tmpcal_ptr;
	struct tm *tmp_ptr = NULL;
	time(&tmpcal_ptr);
	return tmpcal_ptr;
}

int COUNT_FEE(SeqStack S, int gar_NUM) {
	int fee;
	time_t tmpcal_ptr;
	struct tm *tmp_ptr = NULL;
	time(&tmpcal_ptr);
	fee = (tmpcal_ptr - S.TIME[gar_NUM])*FEE_per_s;
	return fee;
}

int Push(SeqStack *S,ElemType e) {
	if (S->top == SMaxSize -1 ) return FALSE;
	S->Selem[++S->top] = e;
	return TRUE;
}
int EnQueue(SeqQueue *Q,ElemType e) {
	if ((Q->rear + 1) % MAXSIZE == Q->front) return FALSE;
	Q->Qelem[Q->rear] = e;
	Q->rear = (Q->rear + 1) % MAXSIZE;
	return TRUE;
}

int Pop(SeqStack *S, ElemType *e) {
	if (S->top == -1) return FALSE;
	*e = S->Selem[S->top];
	S->top--;
	return TRUE;
}
int DeQueue(SeqQueue *Q, ElemType *e) {
	if (Q->front == Q->rear) return FALSE;
	*e = Q->Qelem[Q->front];
	Q->front = (Q->front + 1) % MAXSIZE;
	return TRUE;
}


int DriveOut(SeqStack *S, ElemType e, SeqStack *St) {
	ElemType S2S;
	while ( S->Selem[S->top] != e ){
		if (Pop(S, &S2S) == FALSE) {
			while (St->top != -1) {
				Push(S, St->Selem[St->top]);
				St->top--;
			}
			printf("车库内无此车,驶出失败\n");
			return FALSE;
		}
		Push(St, S2S);
	}
	if (S->Selem[S->top] == e) {
		printf("\n		%d车驶出成功\n", S->Selem[S->top]);
		printf("		应收停车费为	%d\n", COUNT_FEE(*S, S->top));
		for (int i = S->top; i < SMaxSize -1; i++){
			S->TIME[i] = S->TIME[i+1];
		}
		S->top--;
	}
	while (St->top != -1) {
		Push(S, St->Selem[St->top]);
		St->top--;
	}
	return TRUE;
}

int Drive_Qc_S(SeqQueue *Q, SeqStack *S) {
	ElemType e;
	if (DeQueue(Q, &e) == FALSE) return FALSE;
	else {
		Push(S, e);
		S->TIME[S->top] = COUNT_TIME();
		return TRUE;
	}
}

void printALL(SeqStack S, SeqQueue Q) {
	printf("\n");
	printf("当前车库为\n");
	for (int i = S.top; i > -1; i--)
	{
		printf("	| %d |	费用:%d\n",S.Selem[i], COUNT_FEE(S, i));
	}
	printf("当前便道为\n");
	for (int i = Q.front, m = 0; m < MAXSIZE -1; m++)
	{

	}
	int i = Q.front;
	while (1){
		if (i == Q.rear) break;
		printf("	| %d |\n", Q.Qelem[i]);
		i = (i + 1) % MAXSIZE;
	}
	printf("\n");
}

int main() {
	SeqStack S;
	SeqQueue Qc;
	SeqStack St;
	InitStack(&S);
	InitQueue(&Qc);
	InitStack(&St);
	char con;
	int num;
	int count = 1;
	printf("请输入:\n");
	printf("j:进入车辆\n");
	printf("c:驶出车辆\n");
	printf("e:退出系统\n");
	printf("每秒收费%d元\n", FEE_per_s);
	while (1) {
		scanf("%c", &con);
		if (con == 'c') {
			printf("请输入驶出的车辆序号\n");
			scanf("%d", &num);
		}

		if (con == 'e') {
			return 0;
		}
		if (con == 'j') {
			if (Push(&S,count) == FALSE) {
				if(EnQueue(&Qc, count) == FALSE ) printf("车库便道均已满,进入失败\n");
				else {
					printf("%d进入便道成功\n", count);
					count++;
				}
			}
			else {
				printf("%d进入车库成功\n", count);
				S.TIME[S.top] = COUNT_TIME();
				count++;
			}
		}
		if (con == 'c') {
			if (DriveOut(&S, num, &St) == TRUE) Drive_Qc_S(&Qc, &S);
		}
		printALL(S, Qc);
		getchar();
	}
}

运行结果如下

  • 22
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
      掌握基于腾讯人工智能(AI)的车牌识别技术,使用车牌识别技术实现一个完整的停车场管理系统,项目包括网页调用摄像头拍照,车牌拍照识别,上传车牌图片识别,用户管理,车辆管理(临时车与包月车),车辆出场,入场管理,停车费收费管理,按照临时车或包月车自动计算停车费,系统参数设置,修改用户密码及安全退出等功能,该系统采用Jsp技术,使用SSM框架,Mysql数据库,ajax技术及人工智能等相关技术实现。重要通知:本课程根据腾讯AI车牌识别新接口,更新了新接口源代码,发布程序,购买了课程的同学可以下载新程序,包括(运行程序及源代码),更新时间:2021-2-17项目开发技术:java,jsp,mysql,MyBatis,SpringMVC,jquery,ajax,json项目运行环境:jdk1.7及以上版本,tomcat6.0及以上版本,mysql5.5及以上版本项目开发工具: 本项目开发工具是Eclipse,也支持myEclipse,Intellij Idea等其他版本开发工具相关课程学习顺序本校课程是培养JAVA软件工程师及JSP WEB网络应用程序开发,android工程师的全套课程,课程学习顺序如下:JAVA初级工程师:    1、计算机基础    2、HTML语言基础    3、C语言从入门到精通+贪吃蛇游戏    4、贪吃蛇游戏    5、SQL SERVER数据库基础    6、JAVA从入门到精通+推箱子游戏+QQ即时通讯软件    7、推箱子游戏;    8、仿QQ即时通讯软件;JAVA中级工程师:    9、SQLSERVER数据库高级    10、SQLSERVER从入门到精通(基础+高级)              11、JavaScript从入门到精通,    12、JSP从入门到精通+点餐系统,    13、JSP从入门到精通+在线视频学习教育平台,    14、JSP从入门到精通+大型电商平台;    15、XML从入门到精通,    16、数据结构(JAVA版),JAVA高级工程师:    17、Oracle数据库从入门到精通,    18、ajax+jquery从入门到精通,    19、EasyUI从入门到精通,SSH框架:    20、Struts2从入门到精通课程,    21、Hibernate从入门到精通课程,    22、Spring从入门到精通课程;    23、Echarts从入门到精通,    24、Excel基于POI的导入导出工作流框架:    25、Activiti流程框架从入门到精通    26、JBPM流程框架从入门到精通SSM框架:    27、MyBatis从入门到精通    28、Spring MVC从入门到精通面试题:    29、职业生涯规划及面试题集锦商业项目:    30、微信公众号在线支付系统    31、微信生活缴费在线支付系统    32、支付宝生活缴费在线支付系统    33、在线考试系统    34、手机订餐管理系统,    35、CRM客户关系管理系统    36、大型房地产CRM销售管理系统    37、CMPP2,CMPP3移动网关系统人工智能:    38、人脸识别在线考试系统    39、人脸识别系统项目实战    40、车牌识别系统项目实战    41、身份证识别系统项目实战    42、营业执照识别系统项目实战          43、名片识别管理系统

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值