大数据结构作业停车场管理系统.docx
- 文档编号:8193457
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:19
- 大小:249.39KB
大数据结构作业停车场管理系统.docx
《大数据结构作业停车场管理系统.docx》由会员分享,可在线阅读,更多相关《大数据结构作业停车场管理系统.docx(19页珍藏版)》请在冰豆网上搜索。
大数据结构作业停车场管理系统
~
《数据结构》
课程设计
班级201315827
学号201315827
姓名谢东东
2015年9月14日
一.课程设计题目
某停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆汽车停放在最北端),若停车场内已经停满n辆车,则后来的汽车只能在门外的便道即候车场上等候,一旦有车开走,则排在便道上的第一辆车即可开入。
当停车场内某辆车要离开时。
在它之后进入的车辆必须先退出车场为它让路,该车辆开出大门外,其它车辆再按原次序进入停车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
试为该停车场编制按上述要求进行管理的模拟程序。
二.流程及图示
停车显示信息
离开收费
系统
查询显示信息
退出
a1
a2
a3
………
an
停车场(栈1)
栈2
通道(队列)
三、程序运行及截图
1.开始界面
首先是登陆界面,只要用户名跟密码一样就可以登陆,输入正确后,有一个延迟程序,让使用者感觉更真实
如果输入错误了,就是直接退出了
2.主界面登录成功后,则是如下的功能界面:
3.停车场管理系统你可以选择停车,离开,或者查看,当操作完了,可以直接选择退出。
当你输入1后,会提示你输入停车的车号:
在这里输入你想要停车的车号,然后会提示你停车的时间:
输入停车时间后,则会显示你刚停车的详细的信息:
4.离开输入2,则会提示你要离开的车号:
然后输入离开的车号后,会提示你输入该车离开的时间,输入离开的时间,则会出现如下界面:
5停车场管理系统系统则会把你刚离开的车俩的详细信息给你打印出来:
拉开的车号,所用时间以及应收的费用。
这个时间管理员,可以对照表收费了。
6.查看当你要查看停车场所停车的信息时,你可以选择3。
同样,选择3确定后会提示你要查看的车号,然后则会把信息打印在界面上:
系统会告诉你这俩停在停车场里面的那个位置上。
7.退出当你一切操作完了后,就可以选择退出了,输入4停车场管理系统随便按个键就退出该系统了。
四、程序代码
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
#defineMax_Size2//停车的最大容量
#defineHourFare2//每小时的停车费用
intCountForStack=0;//栈里现有的车数
intCountForQueue=0;//排队等候的车数
typedefstruct
{
charCondition;//到达或者离开的状态
intArrivetime;//到达时间,默认为-1,表示没有到达
intLeavetime;//离开时间,默认为-1,表示没有离开
intLicense;//车牌号
}
CarNode;//保存每辆车的信息
typedefstruct//栈的定义
{
CarNode*base;//栈底指针
CarNode*top;//栈顶指针
intStacksize;//栈的最大容量
}
CarStack;
typedefstructQNode
{
charCondition;//到达或者离开的状态
intArrivetime;//到达时间,默认为-1,表示没有到达
intLeavetime;//离开时间,默认为-1,表示没有离开
intLicense;//车牌号
QNode*next;
}
QNode;
typedefstruct//队列的定义
{
QNode*front;//对头指针
QNode*rear;//队尾指针
}
Queue;
boolInitStack(CarStack&S1)//初始化栈S1
{
S1.base=(CarNode*)malloc(Max_Size*sizeof(CarNode));
if(!
S1.base)
{
cout<<"栈S1内存分配失败"< returnfalse; } S1.top=S1.base; S1.Stacksize=Max_Size; returntrue; } boolInitQueue(Queue&Q) { Q.front=(QNode*)malloc(sizeof(QNode)); if(! Q.front) { cout<<"队列Q内存分配失败! "< returnfalse; } Q.rear=Q.front; Q.front->next=NULL; returntrue; } boolEnQueue(Queue&Q,QNode&e)//插入元素e为Q的新的队尾元素 { QNode*p=(QNode*)malloc(sizeof(QNode)); if(! p) { cout<<"p内存分配失败"< returnfalse; } p->Arrivetime=e.Arrivetime; p->Leavetime=e.Leavetime; p->Condition=e.Condition; p->License=e.License;//将e赋给P p->next=NULL; Q.rear->next=p; Q.rear=p; returntrue; } boolDeQueue(Queue&Q,QNode&t)//出队列函数 { if(Q.front==Q.rear) { cout<<"队列为空! "< returnfalse; } QNode*p=Q.front->next; t.Arrivetime=p->Arrivetime; t.Condition=p->Condition; t.Leavetime=p->Leavetime; t.License=p->License; Q.front->next=p->next; if(Q.rear==p) { Q.rear=Q.front; } free(p); returntrue; } voidInitCarNode(CarNode&C,charcondition,intarrivetime,intleavetime,intlicense) { C.Arrivetime=arrivetime; C.Condition=condition; C.Leavetime=leavetime; C.License=license; } boolPush(CarStack&S1,CarNode&car)//插入新的元素car为的栈顶元素 { if(S1.top-S1.base>=S1.Stacksize) { cout<<"此栈已满,不能压入新的信息"< returnfalse; } (*S1.top).Arrivetime=car.Arrivetime; (*S1.top).Condition=car.Condition; (*S1.top).Leavetime=car.Leavetime; (*S1.top).License=car.License; ++S1.top;//栈顶指针上移 returntrue; } boolPop(CarStack&S1,CarNode&t)//出栈操作 { if(S1.top==S1.base) { cout<<"栈S1为空,不能执行出栈操作"< returnfalse; } --S1.top;//栈顶指针下移 t.Arrivetime=(*S1.top).Arrivetime; t.Condition=(*S1.top).Condition; t.Leavetime=(*S1.top).Leavetime; t.License=(*S1.top).License; returntrue; } boolIsStackFull(CarStack&S1)//判断S1栈是否已满 { if(S1.top-S1.base>=S1.Stacksize) returntrue; else returnfalse; } boolIsStackEmpty(CarStack&S1)//判断S1栈是否已空 { if(S1.top==S1.base) returntrue; else returnfalse; } boolIsQueueEmpty(Queue&Q)//判断队列是否为空 { if(Q.front==Q.rear) returntrue; else returnfalse; } boolSearchInStack(CarStack&S1,inta)//a表示要查找的车牌号,如果在停车场里面,就返回true { booltag=false; if(! IsStackEmpty(S1))//如果栈S1非空 { CarNode*p=S1.top-1; while(p! =S1.base) { if((*p).License==a) tag=true; --p; } if((*p).License==a) tag=true; } returntag; } boolSearchInQueue(Queue&Q,inta)//a表示要查找的车牌号,如果在通道里面,就返回true { booltag=false; if(! IsQueueEmpty(Q))//如果队列非空 { QNode*p=Q.front->next; while(p! =Q.rear) { if((*p).License==a) tag=true; p=p->next; }//退出此while循环时p指向最后一个元素 if((*p).License==a) tag=true; } returntag; } voidInCar(CarStack&S1,Queue&Q,inta1,inta2)//表示进入车辆,a1表示到达时间,a2表示车牌号码 { if(SearchInStack(S1,a2)) { cout<<"车号"< return; } if(SearchInQueue(Q,a2)) { cout<<"车号"< return; } if(IsStackFull(S1))//如果堆栈已满,说明停车场已满,需要停车在通道里面 { QNodeqnode; qnode.Arrivetime=-1;//在通道里面不收费,所以不计时 qnode.Condition='A'; qnode.Leavetime=-1;//定义为-1,说明还没有开始离开 qnode.License=a2; EnQueue(Q,qnode);//停在通道上 ++CountForQueue; cout<<"车号: "< } else { CarNodecarnode; carnode.Arrivetime=a1; carnode.Condition='A'; carnode.Leavetime=-1; carnode.License=a2; Push(S1,carnode); ++CountForStack; cout<<"车号: "< "< } } voidSreach(CarStack&S1,Queue&Q,inta) { if(SearchInStack(S1,a)) { cout<<"车号:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 作业 停车场 管理 系统