《数据结构大型实验》
实验报告
学生姓名: 学 号:
学 院:
专 业:
实验题目: 停车场管理
完成时间: 2010.09.03
指导教师:
一、 需求分析:
1、概述
本系统力求简洁,功能完善又实用,经过分析得将系统分为六个模块:车辆进入停车场,车辆驶出停车场,记录停车时间和车号,查询停车场和停车便道,计费,退出系统。
2、运行环境的需求
1) Windows XP操作系统
2) Visual C++6.0
3、功能的需求
对本系统的功能进行分析后可作如下的模块化设计:
1) 车辆进入停车场
2)记录车号和停车时间
3) 查询停车场和停车便道
4) 车辆驶出停车场
5) 计费
6) 退出系统
二、 概要设计:
1、设计思想
此停车场管理系统是在一个狭长的通道上的,且只有一个大门可以供车辆进出,并且当停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能,就可以设计两个堆栈,其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现。当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式,使通道上第一辆车进入停车场这个堆栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上。
2、实现方法
对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点而已。对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了。
3、主要模块
此停车场管理系统,分为若干模块:
首先定义用来模拟停车场的堆栈以及用来模拟通道的链队列为全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。在主函数中首先调用menu()函数,出现欢迎用户使用的主界面,然后提示用户进入此停车场管理系统后,再出现一个供用户选择的界面,在用户的选择过程中,程序又分别调用车辆的到达、车辆的离开、停车场内停放车辆的信息以及退出程序这四个函数模块。其中,在车辆的离开那个模块函数中又调用了打印离开车辆信息的函数,在停车场内停放车辆信息的那个模块函数中,又分别调用了显示停车场上车辆信息的函数以及显示便道上车辆信息的函数。最后,从这四个函数中回到主函数结束整个程序的运行。
4、模块间关系
三、 详细设计:
1、数据结构说明
1)停车场是一个可停放n辆汽车的狭长通道且只有一个大门供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端)一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,因此,需要两个栈结构,CarStack为停车场,TmpStack暂时存储为离开车辆让道的车辆,以使得先驶入的车辆可以在后驶入的车辆未离开时顺利驶出停车场。
2)判断停车场是否停满,需要用一个if语句实现。
3)查看停车场,即是判断这个栈结构是否为空,若不为空,则输出该栈结构中的数据。
2、算法说明
1)“到达”模块:到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到便道等待。
2) “显示”模块
四、 程序设计与程序调试:
调试过程中的主要问题
由于此停车场管理系统是分模块设计的,而且在程序的实现过程中又使用了清屏函数,所以,运行时用户选择任务并且执行完任务后,又会回到供用户选择功能的主界面,因此整个程序从整体上来讲结构清晰,使用方便。本程序的调试运行,总体上情况良好,但中间也出现了一些小问题。
本程序中我使用的是VC++6.0进行的编译和运行!
五、 测试结果:
六、 实验总结:
通过这次课题设计,不仅学会了如何开发软件,更重要的是教会了我如何去面对问题,如何去解决问题。在解决这些问题过程中,提高了我的自学能力和实际应用能力,学习到了许多书本以外的知识。经过俩周的设计和开发,停车场管理系统基本开发完毕,其功能基本符合用户需求,能够完成对车辆的管理和查询以及各类相关报表的打印。对于数据的一致性的问题也通过程序进行了有效的解决。
这个程序操作简单,对于车牌号,只需输入车牌号上的数字就行,而且对于进出停车场的时间,也简化了操作,只需输入当时的时刻就行,没有具体到小时和分钟,但也许这也是该程序不足之处所在。而且该程序也给用户提供了选择的机会,当点击运行该程序后,如果想退出程序,可以输入n或N退出该运行程序。
但是由于设计时间较短,该系统还有许多不尽如人意的地方,如车辆停车位的管理做得不够完善等多方面问题。这些都有待进一步改善。
七、 附录:
题目:停车场管理系统
完成日期:2010.09.03
1、停车场容量设定 停车收费设定
SqStack CarStack,TmpStack;
LinkQueue Q;
int length;
float price_stack,price_queue;/
char i;
void Menu()
{
printf("请选择以下选项之一以执行其功能:\n\n");
printf(" 1. 车辆进入停车场\n");
printf(" 2. 车辆离开停车场并且计费\n");
printf(" 3. 查看停车场\n");
printf(" 4. 查看便道\n");
printf(" 5. 退出\n\n");
}
2、车辆进入停车场
void InCarStack() /*车辆进入停车场*/
{
Car e;
printf("您选择的是 1.车辆进入停车场\n");
printf("请输入车号:");
scanf("%d",&e.number);
int i = StackLength(CarStack);
if(i >= length) /*停车场满时车辆就在便道上等待*/
{
printf("\n停车场车位已满,请在便道上等待!\n\n");
printf("请输入在便道上开始等待的时间(格式:四位数字xxxx,前两位表示小时,后两位表示分钟):");
scanf("%d",&e.intoQtime);
EnQueue(&Q,e);
}
else /*停车场没满,车辆进入*/
{
printf("请输入到达停车场时间(格式:四位数字xxxx,前两位表示小时,后两位表示分钟):");
scanf("%d",&e.inTime);
Push(&CarStack,e);
printf("\n车辆%d已于%d时%d分停放在第%d位。\n\n",e.number,e.inTime/100,e.inTime-e.inTime/100*100,i+1);
}
}
3、计费
/*计算费用并输出*/
int intoQhour,intoQminute,outhour,outminute,inhour,inminute,m1,h1,m2,h2;
float money; /*停车费*/
inhour =Carleave->inTime / 100;
inminute =Carleave->inTime - inhour * 100;
outhour =Carleave->outTime / 100;
outminute =Carleave->outTime - outhour * 100;
if(Carleave->intoQtime>=0)/*当车辆是从便道进入停车场时,使用下面的方法计算费用*/
{
intoQhour =Carleave->intoQtime / 100;
intoQminute =Carleave->intoQtime - intoQhour * 100;
if(inminute - intoQminute <0)
{
m1 =60+inminute-intoQminute;
h1 =inhour - intoQhour-1;
}
else
{
m1 =inminute-intoQminute;
h1 =inhour - intoQhour;
}
if(outminute - inminute <0)
{
m2 =60+outminute-inminute;
h2 =outhour - inhour-1;
}
else
{
m2 =outminute-inminute;
h2 =outhour - inhour;
}
money = (float)((h1 *60 +m1) * price_queue+(h2 *60 +m2) * price_stack);
}
else /*当车辆未通过便道而直接进入停车场时使用以下计算方法*/
{
if(outminute - inminute <0)
{
m2 =60+outminute-inminute;
h2 =outhour - inhour-1;
}
else
{
m2 =outminute-inminute;
h2 =outhour - inhour;
}
money = (float)((h2 *60 +m2) * price_stack);
}
printf("您本次的停车费用为 %2.1f 元。谢谢使用。\n\n", money);
/*目标车辆后面的车先离开停车场并入栈TmpStack临时存储*/
4、查看停车场
/Status InitStack(SqStack *S) /* 构造一个空栈S */
{
(*S).base = (SElemType * )malloc(STACK_INIT_SIZE * sizeof(SElemType));
if(!(*S).base) exit(OVERFLOW);
(*S).top = (*S).base;
(*S).stacksize = STACK_INIT_SIZE;
return OK;
}
Status DestroyStack(SqStack *S) /*销毁栈S*/
{
free((*S).base);
return OK;
}
Status StackEmpty(SqStack S) /* 若栈S为空栈,则返回TRUE,否则返回FALSE */
{
if(S.top == S.base) return TRUE;
else return FALSE;
}
int StackLength(SqStack S) /*返回S的元素的个数,即栈的长度*/
{
return S.top - S.base;
}
Status Push(SqStack *S,SElemType e) /* 插入元素e为新的栈顶元素 */
{
if((*S).top - (*S).base >= (*S).stacksize) /* 栈满,追加存储空间 */
{
(*S).base = (SElemType *)realloc((*S).base,
((*S).stacksize + STACKINCREMENT) * sizeof(SElemType));
if(!(*S).base) exit(OVERFLOW);//存储分配失败
(*S).top = (*S).base + (*S).stacksize;
(*S).stacksize += STACKINCREMENT;
}
*((*S).top)++ = e;
return OK;
}
Status Pop(SqStack *S,SElemType *e) /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */
{
if((*S).top == (*S).base)
return ERROR;
*e = * --(*S).top;
return OK;
}
Status StackTraverse(SqStack S) /*从栈底到栈顶依次对栈S中每个元素调用函数visit()。一旦visit()失败,则操作失败*/
{
for(SElemType *p = S.base; p < S.top; p++)
printf("%d\n",p->number);
return OK;
}
第二篇:停车场管理
停车场管理方案
停车场管理是日常管理的一个重要内容。如何使车辆有序进入、安全停放,减少事故、减少纠纷,杜绝车辆丢失,控制非业主/住户人员从停车场进入楼层以及车辆在停车场发生火灾、碰撞事故的应急处理等问题,我公司根据本物业的实际情况制定如下管理方案。
一、日常管理要点
1、制定完善的停车场管理制度,并遵照执行。
2、定期检查停车场配置足够的消防栓等灭火器械,并可通过防火卷帘将整个车场分割成若干个防火区域;车管员对易燃易爆物品、烟火等涉及安全的一切事项严格把关,提高警惕性,杜绝隐患。
3、私家车位设立明显识别标示,车管员不让其他车辆挤占私家车位;对于一些禁止停车的场所,设置显著的禁停标志,对违禁的车辆实施处罚。
4、对于临时泊车卡、月保卡与私家车位卡采用不同颜色印制,便于识别管理,在车卡背面注明有关事项如:不赔偿损失、车辆应自办保险等,尽量避免事后纠纷。
5、车场配置显著的出入口指示、限高标志、禁鸣标识、限速标志、车场管理须知、收费标准等。
6、车管员对每辆进入车场车辆作适当检查,注意车辆是否有被撞、被刮等迹象做好现场记录由车主签字确认,在此减少不必要的纠纷;主动礼貌提醒车主不要将贵重物品留在车内,同时阻止闲杂人员进入车场。
7、停车场将安排专职车管员对停车场实施巡查管理,并引导车辆停放,提供问询服务。
8、对车场出入口附近的路面实施人车分流,确保区内人员进出及活动的安全;对于易产生交通瓶颈、造成堵塞的地段及时进行有效疏导。
9、在停车管理员手中将备一份月保车主基本档案,以便车辆发生危险情况或紧急疏散时使用;车管员巡查中若发现停放车辆有异常情况(自燃等)要立刻采取措施实施补救,若车辆之间发生交通事故,要尽快处理,以不妨碍车辆通行为准则,并好事件报告。
10、对于长期乱停乱放、耍赖不交车辆保管费的车辆,车场管理部按规定给予发函提醒,再实施锁车处理,或将其强拖走交由交警部门进行处罚。
二、车场管理规定及租赁协议
对于私家车位泊车和租赁车位泊车,项目管理中心都与车主分别签定《停车场管理规定承诺书》和《停车场车位租赁协议书》,以明确双方责任和义务。
[一]停车场管理规定承诺书
1、凡在停车场进出或存放之机动车辆,其驾驶人员均应遵守本规定,服从车场管理人员的管理和指挥,按指定位置停放车辆,自觉维护场内秩序。
2、车辆入场时,驾驶员须按规定自觉出示泊车卡(IC卡),并由闸机辨认,时租车辆须由闸机弹取出时租车票,待栏杆抬起后,方可入场停放。
3、入场之机动车和驾驶员必须“广州市市容卫生管理规定”,自觉保持车场内清洁卫生。凡脏污、泥泞之机动车,本停车场有权禁止其入内及停放。
4、入场停放之任何机动车辆,应按停车卡或车管员指定之区域停放,不得异区、异位停放,否则本停车场有权将不按指定位置停放的车辆拖至适当地点,并由其车主承担一切费用。
5、停放在停车场的车辆,必须锁好车门、车窗。凡现金、重要文件、贵重物品及车内物品本停车场不负保管责任。
6、易燃、易爆、剧毒等危险物品严禁带入车场。否则,将被处以罚款,并承担可能引起的一切责任。
7、车辆离场或任何人士驾驶或移动场内任何车辆时,车场管理员有权对其进行管理、检查,驾驶员不得以任何理由拒绝,否则驾驶人员须承担由此引致的一切责任。
8、使用停车场停车之任何机动车辆,本停车场只向被泊车辆提供车位的使用权,本停车场无需为被泊车辆承担任何损坏、损毁及遗失之责任。
9、使用停车场停车之任何机动车辆及其使用人,应对由其引起的本停车场内的建筑物/设备/设施的任何损坏或损失负责;并在指定的时间内缴付被损坏、损失物件的赔偿费、修理费、安装及相关的费用。
10、使用停车场泊车之任何机动车辆及基使用人,必须遵守和执行本停车场场以书面或口头的一切合法条例和规定,如速度限制、高度限制、严禁吸烟等,违反者将按规定处以罚款。
11、停车场之停车位只供机动车辆泊车之用,其他超过停车以外的任何行为及任何形式的功能改变都将视为非法。
12、停车证为一车一证制,只限指定车辆使用,不得转借、涂改、伪造。否则,将收回停车卡。如事件、行为带有刑事性质,将送交公安机关,追究其刑事责任。
13、所有车辆均应按照本停车场现时有效之收费标准缴费,非临保车的车主须在当月的 日前到大楼管理中心收费处缴付相关费用。
14、如遇停车卡遗失,依下列方式处理:时租卡遗失立即向门岗车管员申报由车管员按规定程序处理;月租卡或私家车位车卡遗失先向门岗车管员申报登记,再到大楼管理中心办理补办手续。
15、本停车场保留修改、增删本管理规定中任何或全部条款以及制订新的管理规定的权利,经修订的管理规定一经发布,即告生效,并对所有停放的任何机动车辆及使用人具有约束力。同时,旧的管理规定即告失效。
本人/本公司清楚了解上述管理规定之条文,并自愿接受此条文之约束,在签定此承诺书后,正式生效。
申报人签名: 日 期: 年 月 日
[二]停车场车位租赁协议书
本人/公司欲从 年 月起,租赁 停车场车位 个,本人/公司之车辆资料如下: 车牌号码;
车 型:
登记车主姓名(公司名):
地 址:
联 系 人: 联系电话;
本人/公司明白并遵守下列规则:
1、使用停车场之一切责任由本人/公司自负,停车场业主及管理处不必负任何损伤、损毁及遗失之责任。
2、如有损毁停车场之任何设施,本人/公司需照价赔偿。
3、停车证乃管理中心所有,如有遗失及损毁,必照价赔偿及缴交手续费计人民币 元。
4、停车证只限所登记之车辆使用,不得转让、涂改、伪造。
5、停车证须张贴在车头挡风玻璃显眼处。
6、车位租用有效期按照本协议书上所填写日期计算,每月车位租金必须于上月最后一天前缴交,否则其优先权将给予轮候者。
7、泊车卡为IC卡,其乃管理中心所有,如有遗失及损毁,必须照价赔偿及缴交手续费及工本费共计人民币 元整。
8、停车证及泊车卡应随车携带,进出车场不能同时出示停车证及磁卡,或停车证与车身车牌不符者,将被视为临时停放车辆,必须按规定缴交停车费。
9、由于IC卡质量问题需要申请更换磁卡的车主,必须携带与同时使用的停车证,方可办理更换手续。
10、车位租金的收取一律以办理停车证手续的当月第一日开始计租,收取全月租金共计人民币 元整。
11、所有已缴付之车位租金,概不发还。
12、如有更改车辆登记资料,必须携带书面通知及原车牌号之停车证到大楼管理中心办理变更停车证手续。
13、大楼管理中心有保留签发停车证之权利。
14、倘若违反停车场之条例,可被禁止使用停车场。
15、管理中心有权保留/改变停车位申请办法之权利。
出租人签名(盖章): 租赁人签名(盖章):
认租日期: 年 月 日
[三]车位租赁通知书
致车场管理部:
兹有 幢 单元业主/租户已于 年 月 日到管理中心办理了有效的车位租赁手续,并交齐本月的车位租金。
所租用车位共 个,编号为:
管理中心已发予有效停车证,编号为
请车管部给予指引及管理。
管理中心
年 月 日
三、月保、临保、IC卡办理
停车场的出入口匀使用IC卡智能系统。有月保车辆需求的业主/租户首先到服务中心填写月保车辆申请,按收费标准交纳月保费用,由管理中心工作人员按技术要求将IC卡一卡通输入停车场月保通行指令,此时业主可享用IC卡一卡通的全程服务。若到月底未重新办理月保交费,IC卡一卡通将终止停车场通行服务。 临保车辆是用入停车场自动取卡,出车场时读卡交费。车辆临保的业主,不享受一卡通全程服务。其他外来人员使用的临时停车IC卡不具备从停车场进入楼层的功能。凡业主的大堂门IC卡皆具备从停车场进入楼层之功能。
四、负一层管理建议
负一层为住宅、商业公寓合用之地,按发展场出入口不字的要求,负一层将按照住宅109个车位,商业、公寓100个车位的划分明确区域,设置明确的行驶、停放指引牌,各行其线共享其路,并在负一层车场管理人员的配置上比负二层多设一人。
五、停车场环境管理
停车场将定期开启风机换气,保证空气流通。每日清洁人员将对车场实施保洁作业,定期对地面进行冲洗、管网实施擦抹。巡查人在其巡查过程中将随时注意地面卫生情况,并对大件垃圾立刻实施清理。
六、停车场物业管理费用收取
停车场的物业管理费用,我公司将按照行业规定对每一月保车位收取管理费100元,对每一临保车位收取管理费150元,空置车位另行商定。
七、停车场物业管理费收取的用途
停车场的物业管理费的收取费用,主要用在支付停车场管理人员的工资、福利,停车场设备、设施的养护维修,停车场用水、用电费用以及其它不可预见的费用。