停车场管理系统报告
更新时间:2023-08-20 11:57:01 阅读量: 高等教育 文档下载
实验二 栈和队列及其应用
一、 实验题目:
栈和队列及其应用——停车场管理
二、 实验内容:
设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北段),若停车厂内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车迹可开入;停车场内某辆车要离开时,在它之后进入的车连必须先退出车厂为它让路,待该车辆开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车时必须按它停留的时间长短缴纳费用。编写按上述要求进行管理的模拟程序。
可以将停车场定义成一个顺序栈s0,便道定义成一个链队列q,而停车场中的某辆车要离开,则在它后面进停车场的车必须让道,让其离开,所以必须有一个临时的顺序栈s1,存放让道的车辆。
当有车辆进停车场时,若栈s0不满,则直接进入栈s0;若栈s0满,则进入便道(链队列q)。若有s0中车辆x离开时,先让在x后面进栈的车从s0退栈并进入栈s1中,让x离开并收取停车费(在便道上停留的时间不收费),然后再把s1中所有元素退栈并重新进入s0栈,最后,将链队列q中的队头元素出队并进栈到s0中。
三、 程序源代码:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>
#define car_stop_max 2
struct Time//定义时间类型结构体
{
int year;
int month;
int day;
int hour;
int miniute;
int second;
};
struct cars//定义汽车类型结构体 包括车牌号 时间
{
char *car_id;
Time car_time;
};
struct sqStack//建立汽车栈的指针
{
cars *base;
cars *top;
};
int InitStack(sqStack &s)//初始化汽车
{
s.base=(cars*)malloc((car_stop_max)*sizeof(cars));
if(!s.base)
{
return 1;
}
s.top=s.base;
return 0;
}
cars Get_Stack_top(sqStack s)//得到汽车栈顶元素
{
if(s.top==s.base)
{
printf("没有车");
exit(1);
}
else
return *(s.top-1);
}
void Push_car(sqStack &s ,cars e)//汽车栈插入新的汽车
{
if(s.top-s.base>=car_stop_max)
{
printf("停车满\n");
}
else
{
s.top->car_id=new char [15];
strcpy(s.top->car_id,e.car_id);
s.top->car_time=e.car_time;
s.top++;
}
}
void Pop_car(sqStack &s)//汽车栈的汽车离开
{
if(s.base==s.top)
printf("没有车");
else
s.top--;
}
typedef struct QNode//汽车队列结构体
{
cars date;
struct QNode *next;
}QNode,*QueuePtr;
struct LinkQueue//汽车队列指针
{
QueuePtr front;
QueuePtr rear;
};
int InitQueue(LinkQueue &Q)//汽车队列的初始化
{
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front)
{
printf("不能初始化队列");
exit(1);
}
Q.front->next=NULL;
return 0;
}
void EnQueue(LinkQueue &Q,QNode e)//汽车队列添加新元素
{
QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
p->date.car_id=new char [15];
strcpy(p->date.car_id,e.date.car_id);
p->date.car_time=e.date.car_time;
Q.rear->next=p;
Q.rear=p;
}
int DeQueue(LinkQueue &Q)//删除汽车队头元素
{
if(Q.front==Q.rear)
{
printf("空车,不能删除");
exit(1);
}
QueuePtr p;
p=Q.front->next;
if(Q.front->next==Q.rear)
{
Q.rear=Q.front;
}
Q.front->next=p->next;
free(p);
return 0;
}
cars Get_Queue_top(LinkQueue &Q)//得到汽车队头元素
{
if(Q.front==Q.rear)
{
printf("空车");
exit(1);
}
else
return (Q.front->next->date);
}
void Get_time(int &year,int &month,int &day,int &hour ,int &miniute,int &second)//产生时间函数
{
time_t t = time(0);
char tmp[64];
strftime( tmp, sizeof(tmp), "%Y %m %d %X %A %j %z",localtime(&t) );
sscanf(tmp,"%d%d%d%d:%d:%d",&year,&month,&day,&hour,&miniute,&second);
}
void main()
{
int i,j=0;
int sum=0;
double money=5;
int Choose ;
char c;
char b[10];
cars e,e2;
cars *p;
e.car_id=new char[15];
QNode E,E2;
LinkQueue Q;
sqStack s1,s2;
InitQueue(Q);
InitStack(s1);
InitStack(s2);
printf(" 欢迎进入停车场管理系统\n");
printf(" 按1进入车辆 \n");
printf(" 按2离开车辆 \n");
printf(" 按0退出系统 \n");
printf("*************************************************\n");
printf("请输入您的选择 ");
scanf("%d",&Choose);
while(Choose!=0)
{
switch(Choose)
{
case 1:
printf("请输入你的车牌号 ");
i=0;
while((c=getchar())!=' ')
{
b[i++]=c;
}
b[i]='\0';
strcpy(e.car_id,b);
Get_time(e.car_time.year,e.car_time.month,e.car_time.day,e.car_time.hour,e.car_time.miniute,e.car_time.second);
if(sum>=car_stop_max)
{
E.next=NULL;
E.date=e;
printf("停车场已停满。请您在便道等候。\n");
EnQueue(Q,E);
}
else
{
printf("您在%d 年%d月%d日 %d:%d:%d 时刻进入\n",e.car_time.year,e.car_time.month,e.car_time.day,e.car_time.hour,e.car_time.miniute,e.car_time.second); //测试结果
Push_car(s1,e);
sum++;
}
printf("***************************************************\n");
printf("输入你的选择 ");
scanf("%d",&Choose);
break;
case 2:
printf("请输入出停车场的车牌号 ");
i=0;
while((c=getchar())!=' ')
{
b[i++]=c;
}
b[i]='\0';
strcpy(e.car_id,b);
Get_time(e.car_time.year,e.car_time.month,e.car_time.day,e.car_time.hour,e.car_time.miniute,e.car_time.second);
p=s1.top;
j=0;
while(j<sum&&(strcmp((p-1)->car_id,e.car_id))!=0)
{
j++;
p--;
}
if(j<sum)
{
i=0;
money=((e.car_time.second-(p-1)->car_time.second)+(e.car_time.miniute-(p-1)->car_time.miniute)*60);
printf("车牌号为%s的车离开,缴纳费用%f元\n",b,money);
while(i<j)
{
e2=Get_Stack_top(s1);
Pop_car(s1);
Push_car(s2,e2);i++;
}
Pop_car(s1);
i=0;
while(i<j)
{
e2=Get_Stack_top(s2);
Pop_car(s2);
Push_car(s1,e2);i++;
}
sum--;//汽车总是要减少了
if(sum<car_stop_max&&(Q.front!=Q.rear) )
{
E2.date=Get_Queue_top(Q);
strcpy(e.car_id,E2.date.car_id);
Get_time(e.car_time.year,e.car_time.month,e.car_time.day,e.car_time.hour,e.car_time.miniute,e.car_time.second);
DeQueue(Q);
Push_car(s1,e);
printf("您%s在%d 年%d月%d日 %d:%d:%d 时刻进入\n",e.car_id,e.car_time.year,e.car_time.month,e.car_time.day,e.car_time.hour,e.car_time.miniute,e.car_time.second); //测试结果
sum++;
}
}
else
printf("此辆车不存在\n");
printf("***************************************************\n");
printf("输入你的选择 ");
scanf("%d",&Choose);
break;
case 0:
printf("您要离开此系统 ");break;
default:
{
printf("***************************************************\n");
printf("输入错误重新输入 ");
}
scanf("%d",&Choose);break;
}
}
}
四、 测试结果:
五、小结(包括收获、心得体会、存在的问题及解决问题的方法、建议等)
注:内容一律使用宋体五号字,单倍行间距
1)定义汽车类型的结构体,包括汽车车牌号为char*类型,进入停车场的时间 类型又是时间类型的结构体。用函数void Get_time(int &year,int &month,int &day,int &hour ,int &miniute,int &second)//产生时间函数,返回需要的时间。
2)初始化栈时, s.top=s.base;将两者的顺序写反了,造成建立的的失败;
3)定义结构体时,两个结构体类型的变量可以直接赋值,如果结构体中不包含数组类型的变量,如果结构体中有指针也可以直接赋值。但是如果其中一个指针发生改变,则另一个也要改变
4)用全局变量sum控制停车场中车的数量。如果车进入sum++,如果车要离开时则sum--;
5)删除队列中的元素时
if(Q.front->next==Q.rear)
{
Q.rear=Q.front;
}
Q.front->next=p->next;两句话不能颠倒
6)如果有汽车要离开时,要判断便道是否有车,如果有,则要进入停车场,并记录进入时间;
7)汽车进入停车场时,
void Push_car(sqStack &s ,cars e)//汽车栈插入新的汽车
{
if(s.top-s.base>=car_stop_max)
{
printf("停车满\n");
}
else
{
s.top->car_id=new char [15];
strcpy(s.top->car_id,e.car_id);
s.top->car_time=e.car_time;
s.top++;
}
}
要给汽车的车牌号记录,开辟空间来放字符串。
正在阅读:
停车场管理系统报告08-20
水务局年度工作总结及下步工作计划精选范文08-13
新机器试生产报告12-03
2016年山东大学文学与新闻传播学院新闻传播学基础复试笔试仿真模拟题06-05
温州市教育局关于小中高04-02
网课答案全球变化与地球系统科学新版06-21
北京东三环住宅项目投标书doc2212-02
机械设计试卷答案分章大全12-01
广东省正地厅级干部简历03-24
企业所得税法实施细则(最新)(1)10-31
- 2012诗歌鉴赏讲座 师大附中张海波
- 2012-2013学年江苏省苏州市五市三区高三(上)期中数学模拟试卷(一)
- 市政基础设施工程竣工验收资料
- 小方坯连铸机专用超越离合器(引锭杆存放用)
- 荀子的学术性质之我见
- 氩弧焊管轧纹生产线操作说明
- 小学科学六年级上册教案
- (商务)英语专业大全
- 外汇储备的快速增长对我国经济发展的影响
- 幼儿园中班优秀语言教案《小猴的出租车》
- 第七章 仪表与显示系统
- 身份证号码前6位行政区划与籍贯对应表
- 单位(子单位)工程验收通知书
- 浅谈地铁工程施工的项目成本管理
- 沉积学知识点整理
- 前期物业管理中物业服务企业的法律地位
- 2014微量养分营养试卷
- 地质专业校内实习报告范文(通用版)
- 内部审计视角下我国高校教育经费支出绩效审计研究
- 高次插值龙格现象并作图数值分析实验1
- 停车场
- 管理系统
- 报告
- 第五章 自测练习题
- 心理学研究方法-2009-0926
- 无抵押贷款资料
- 一元整式方程
- 大学 形势与政策2012 世界经济
- 激光打标机毕业论文
- 缓冲区溢出攻击的分析及防范策略
- WPS表格操作练习题集
- 旅游景点排行
- 法兰标准 GB9119-2000
- 2013-2014学年七年级英语上册 Unit 7 Days and Months单元综合检测试题 (新版)冀教版
- 小学生篮球学习计划及教案
- 科学谋划 夯实提升 赢在高效
- 中级职称个人专业技术工作总结 Microsoft Word 文档
- 良好行为习惯养成教育
- 小学语文知识大全-对联谜语
- 中外设计史复习资料修改版
- 在全县秋季植树造林暨经济林综合管理工作动员大会上的讲话
- MSTAR液晶开发工具
- android 蓝牙 单片机 显示波形