停车场管理系统的设计与实现数据结构课程设计.docx
《停车场管理系统的设计与实现数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《停车场管理系统的设计与实现数据结构课程设计.docx(30页珍藏版)》请在冰豆网上搜索。
停车场管理系统的设计与实现数据结构课程设计
《数据结构》课程设计
题目:
停车场管理系统
班级:
网络工程
******
学号:
E********
完成日期:
2015年11月15日
一.需求分析
1.停在便道;
2.停在车库;
3.从车库移到便道;
4.从便道移到车库;
5.从车库取车;
6.从便道取车;
综上所述可知,总共有4种停车方式。
1.若一直停在便道中,需要在进入便道时以浮点数输入进入时间,当选择6取车时,需要输入在便道中停车的时间。
在便道中提车时会显示进入的时间,以及是否需要发票,在计算完停车费用后退出主菜单。
2.若一直停在车库中,会在进入时检测车库是否满,若不满,允许进入,同样提示输入到达时间,当选择5取车时,需要输入在车库停车时间。
提车时,会显示进入的时间,以及是否需要发票,在计算完停车费用后退到主菜单。
3.若先在车库停车后又转到便道停车,则会先检测车库是否满了,这是这个情况满足的最大前提,之后需要输入到达车库时间,其实这也没什么用,因为最后计算费用时,只会加上转移位置的20元费用和在便道停的费用。
在提车时会显示有在本停车场转移位置的信息。
4.若先在便道上停车,后又到车库停,原理同3,在此不再赘述。
二.概要设计
1.由于栈的特殊出栈入栈顺序,所以所有进入车库的车辆必须遵守“先进后出”的顺序来停车和提车,由于栈是顺序结构,所以在进入车库时需要检测车库是否饱和,在提车时也需要检测车库是否为空;
2.同时,队列需要满足“先进先出”的思想,但此次试验用的链式结构,一般来说,不存在饱和情况,但在提车时候需要检测便道是否有车。
3.栈的数据域存放进入车库的时间,车牌,队列节点数据域存放进入便道的时间车牌,设置标记是否在停车场内更改停车位置,有更改则置为1,否则为0。
4.如果一辆车车库移到便道,除了更换进入便道的时间外,车牌号从链表的数据里得到,从便道移到车库也类似。
另外,更改位置前停放费用不计入最后的费用。
5.除了要输入进入时间,在更换停车位置时需要输入进入时间,在最后提车时需要输入离开时间,方便计算总费用。
三.详细设计
1.主函数设置两个选择:
最外层的选择显示是用户自己选择停车还是系统选择停车位置,最里层的选择为主菜单。
2.进入车库(入栈)
();
:
进入车库时间
;车牌号
:
显示是否更改过停车位置
3.离开车库(出栈)
();
将后面三个形参设置为引用调用是为了得到数据域里的数据,供主函数使用
4.进入便道
();
5.离开便道
();
将后面三个形参设置为引用调用是为了得到数据域里的数据,供主函数使用。
(其实在主函数传地址给调用函数也可以,但是不知道为什么没有试验成功。
)
6.()和()都是显示菜单函数
7.
8.();
函数是计算费用函数,是在最近一个停车位置的停车时间,在主函数已经由离开时间减去进入时间计算好,为标志位,为1,需要多支付20元的管理费用,是需要发票的标志,需要为1,则最后费用为原有费用的基础上增加%15,同时用一个浮点型的返回值返回给主函数使用,同时主函数用%.2f来控制最后只显示小数点最后两位。
四.源程序
/*
2015年11月15日21:
21:
37
本次试验主要熟悉栈和队列的存储方式,同时结合顺序表和链表知识
具体试验要求见代码底部
*/
#<>
#<>
#<>
#<>
<>
车库
{
;到达在车库时间
;汽车牌照
;标记位置,在车库为1,在便道为0
};
1便道
{
;到达便道上的时间,以小时为单位(下同)
;汽车牌照
;
1*;
}1;
顺序栈
{
*;栈顶指针
*;栈底指针
};此次代码形参与实参之间是引用调用,故不需要传地址
链式队列
{
1*;队头指针
1*;队尾指针
};
(z);计算停车费用
();初始化车库的顺序栈!
();
();
();
();
();
();
();
();
();
();计费函数
()
{
;在停车场的时间
;到达便道上的时间,以小时为单位(下同)
;离开便道世间
;到达在车库时间
;离开车库时间
;汽车牌照
;是否需要发票,需要为1,不需要为0
((0));
;
;
;
;
1;
1;
;
();初始化车库
;
();初始化便道
2;
();
(""2);
(2'Q'2'q')
{
(2)
{
'p':
'P':
1;
();
(""1);
(10)
{
(1)
{
1:
("欢迎您到便道停车,我们将竭诚为您服务!
\n");
("请输入到达时间:
\n");
("");
("请输入车牌照(阿拉伯数字)");
("");
(,0);
("恭喜!
牌照为的车主在便道停车成功!
");
;
2:
("欢迎您到车库停车,我们将竭诚为您服务!
\n");
(())
{
("车道已经停满,请选择便道停车!
");
}
{
("请输入到达车库时间:
\n");
("");
("请输入车牌照(阿拉伯数字)");
("");
(,0);
("恭喜!
牌照为的车主在车库停车成功!
");
}
;
3:
("欢迎您更换到便道停车!
\n");
(())
{
("车库里没有车,你的选择有误!
");
}
{
();
("您的爱车到达车库时间是\n");
("您的爱车牌照是:
\n");
("请输入到达便道的时间:
\n");
("");
(,1);
("恭喜!
您的车辆已经移动到便道!
");
}
;
4:
("欢迎您更换到车库停车!
\n");
()
{
("便道上没有车,您的选择有误!
");
}
{
(11);
("您的爱车到达便道时间是\n");
("您的爱车牌照是:
\n"1);
("请输入到达车库的时间:
\n");
("");
(1,1);
("恭喜!
您的车辆已经移动到车库!
");
}
;
5:
("欢迎您到车库取车!
\n");
(())
{
("车库里没有车,你的选择有误!
");
}
{
();
("牌照是:
的车主您好,您的车到达车库时间是\n");
(1)
("您的车在停车场中有更换停放位置!
\n");
("请输入您的爱车的离开时间:
");
("");
=-;
("请选择是否需要发票1:
表示需要发票,0表示不需要发票");
("");
(1)
{
("您好,请缴费%.2f元\n"(,1));
("请保管好您的发票!
\n");
("感谢您使用本系统,祝您一路顺风!
\n");
}
{
("您好,请缴费%.2f元\n"(,0));
("感谢您使用本系统,祝您一路顺风!
\n");
}
}
;
6:
("欢迎您到便道取车!
\n");
()
{
("便道上没有车,您的选择有误!
");
}
{
(11);
("牌照是:
的车主您好,您的车到达便道时间是\n"1);
(11)
("您的车在停车场中有更换停放位置!
\n");
("请输入您的爱车的离开时间:
");
("");
=-;
("请选择是否需要发票1:
表示需要发票,0表示不需要发票");
("");
(1)
{
("您好,请缴费%.2f元\n"(,1)/2);
("请保管好您的发票!
\n");
("感谢您使用本系统,祝您一路顺风!
\n");
}
{
("您好,请缴费%.2f元\n"(,0)/2);
("感谢您使用本系统,祝您一路顺风!
\n");
}
}
}结束大括号
("\n");
("\n");
("下面是菜单,请继续选择或者按0退出!
");
();
(""1);
}结束大括号
;自主选择菜单结束
's':
'S':
("您好,已经由系统为您做出了选择!
\n");
1=()%2+1;
(10)
{
(1)
{
1:
("欢迎您到便道停车,我们将竭诚为您服务!
\n");
("请输入到达时间:
\n");
("");
("请输入车牌照(阿拉伯数字)");
("");
(,0);
("恭喜!
牌照为的车主在便道停车成功!
");
;
2:
("欢迎您到车库停车,我们将竭诚为您服务!
\n");
(())
{
("车道已经停满,请选择便道停车!
");
}
{
("请输入到达车库时间:
\n");
("");
("请输入车牌照(阿拉伯数字)");
("");
(,0);
("恭喜!
牌照为的车主在车库停车成功!
");
}
;
3:
("欢迎您更换到便道停车!
\n");
(())
{
("车库里没有车,你的选择有误!
");
}
{
();
("您的爱车到达车库时间是\n");
("您的爱车牌照是:
\n");
("请输入到达便道的时间:
\n");
("");
(,1);
("恭喜!
您的车辆已经移动到便道!
");
}
;
4:
("欢迎您更换到车库停车!
\n");
()
{
("便道上没有车,您的选择有误!
");
}
{
(11);
("您的爱车到达便道时间是\n");
("您的爱车牌照是:
\n"1);
("请输入到达车库的时间:
\n");
("");
(1,1);
("恭喜!
您的车辆已经移动到车库!
");
}
;
5:
("欢迎您到车库取车!
\n");
(())
{
("车库里没有车,你的选择有误!
");
}
{
();
("牌照是:
的车主您好,您的车到达车库时间是\n");
(1)
("您的车在停车场中有更换停放位置!
\n");
("请输入您的爱车的离开时间:
");
("");
=-;
("请选择是否需要发票1:
表示有发票,0表示不需要发票");
("");
(1)
{
("您好,请缴费%.2f元\n"(,1));
("请保管好您的发票!
\n");
("感谢您使用本系统,祝您一路顺风!
\n");
}
{
("您好,请缴费%.2f元\n"(,0));
("感谢您使用本系统,祝您一路顺风!
\n");
}
}
;
6:
("欢迎您到便道取车!
\n");
()
{
("便道上没有车,您的选择有误!
");
}
{
(11);
("牌照是:
的车主您好,您的车到达便道时间是\n"1);
(11)
("您的车在停车场中有更换停放位置!
\n");
("请输入您的爱车的离开时间:
");
("");
=-;
("请选择是否需要发票1:
表示有发票,0表示不需要发票");
("");
(1)
{
("您好,请缴费%.2f元\n"(,1)/2);
("请保管好您的发票!
\n");
("感谢您使用本系统,祝您一路顺风!
\n");
}
{
("您好,请缴费%.2f元\n"(,0)/2);
("感谢您使用本系统,祝您一路顺风!
\n");
}
}
}结束大括号
("\n");
("\n");
("下面是菜单,请继续选择或者按0退出!
");
();
(""1);
}结束大括号
;
}最外层结束大括号
(""2);
();
}最外层大括号
0;
}
()初始化车库的顺序栈!
{
=(*)(()*100);
()
{
("动态内存分配失败!
\n");
(-1);
}
{
=;
}
}
()
{
()
{
;栈空是返回
}
;
}
()
{
(->=100)
{
;栈满是返回
}
;
}
()
{
(())
{
("车库已满,请退出!
");
(-1);
}
{
>=;
>=;
>=;
;
}
}
()
{
(())
{
("车库已空,您的选择有错误!
");
(-1);
}
{
;
=>;
=>;
=>;
}
}
()
{
==(1*)(
(1));
()
(-1);
>=;
}
()
{
1*p;
p=(1*)(
(1));
()
(-1);
{
>=;
>=;
>=;
}
>=;
>=p;指向新进入便道的车
=p;
}
()
{
1*p;
()队列为空,无法出队
(-1);
p=>;
=>;
=>;
=>;
(p)
=;
(p);
}
()
{
("\n");
("******************************************************\n");
("*************请输入P或S来进行选择(不分大小写)*********\n");
("\t\.自助选择停车地点\n");
("\t\.系统为您选择\n");
("\t\.退出系统\n");
("******************************************************\n");
}
()
{
("\n");
("*****************************************\n");
("*************请输入0~6来进行选择*********\n");
("\t\t1.停在便道\n");
("\t\t2.停在车库\n");
("\t\t3.从车库移到便道\n");
("\t\t4.从便道移到车库\n");
("\t\t5.从车库取车\n");
("\t\t6.从便道取车\n");
("\t\t0.退出系统\n");
("*****************************************\n");
}
()
{
;
(1)需要发票,需要在原有基础上加上%15的费用
{
(1)中途有更改停车地点
{
(<0.1)小于10分钟
=(0+20)*1.15;
(<0.5)
=(5+20)*1.15;
(<1)
=(8+20)*1.15;
(()<12)
=((()1)*6+8+20)*1.15;
=((()-12)*5+8+11*6+20)*1.15;
}
一直停在车库中
{
(<0.1)小于10分钟
=(0+20);
(<0.5)
=(5+20);
(<1)
=(8+20);
(()<12)
=(()1)*6+8+20;
=(()-12)*5+8+11*6+20;
}
}
不需要发票,不需要20的管理费
{
(1)中途有更改停车地点
{
(<0.1)小于10分钟
=0*1.15;
(<0.5)
=5*1.15;
(<1)
=8*1.15;
(()<12)
=((()1)*6+8)*1.15;
=((()-12)*5+8+11*6)*1.15;
}
一直停在车库中
{
(<0.1)小于10分钟
=0;
(<0.5)
=5;
(<1)
=8;
(()<12)
=(()1)*6+8;
=(()-12)*5+8+11*6;
}
}
;
}
/*
停车场管理系统的设计与实现
问题描述:
设计一个停车场管理系统,模拟停车场的运作,此程序应具备以下功能:
(1)若车辆到达,则显示汽车在停车场车库内或便道上的停车位置;
(2)若车辆离去,则显示汽车在停车场内停留的时间和应交纳的费用。
总费用应为在便道上的费用加上在停车场车库内的费用。
基本要求:
(1)要求以栈模拟停车场车库,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理;
(2)a.车主进入停车场后,若车库和便道都有空闲,则由车主选择具体停在车库还是便道上;b.在车库和便道都有空闲的情况下,车辆停放位置也可应车主的要求选择更换(如原先停放在便道中的车辆,车主可以要求停在车库内);
c.若车主没有特别要求,则按照栈和队列的顺序由系统自动分配位子。
(3)要求处理的数据元素包括的数据项为:
汽车"到达"和"离去"的时间信息(包括在便道上和车库内的时间)、汽车牌号等;
(4)要求栈以顺序结构实现,队列以链表实现。
测试数据:
自行设计一组在停车场车库内停车的数据和在便道上停车的数据。
实现提示:
(1)该停车场车库能容纳车辆的数量,便道上的停车数量。
(2)车辆到达对应栈或队列的"入"操作,车辆离去对应栈或队列的"出"操作。
(3)费用计算问题:
a.应分等级收取费用,对于停在车库的车辆,十分钟以内免费,半小时内5元,第一个小时8元,以后每超过一个小时6元。
b.停留12小时以上者另加每小时5元的托管费(前12小时不收托管费)。
d.对索要发票者,另加总费用15%的税费。
e.对车主更换位置的车辆,收取20元的系统维护费。
f.在便道上停留的时间按照半价收取。
*/
五.用户手册
请根据主菜单操作,注意括号内的提示内容即可。