【问题描述】
汽车在停车场内按车辆到达时间的先后顺序依次由南向北排列(大门在最北端,最先到达的第一辆车停放在停车场的最南端),若停车场内已停满n辆车,则后来的汽车只能在门外的便道(即候车场上)等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出停车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入停车场,每辆停放在停车场的车在它离开停车场时必须按停留的时间长短交纳费用。如果停留在便道上的车辆未进入停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。整个停车场的示意图如图所示。
【任务要求】
试设计一个停车场管理系统。要定义一个主菜单,方便用户操作。
【主要功能】
1)车辆信息的录入:每辆车“到达”或“离去”的信息、车牌号(符合真实车牌号格式,如“闽D 12345”,注意:后面五位和前面字符之间有空格!)、车辆到达或离去的时刻(时间格式为:时:分)。
2)根据用户输入的车辆到达或离去的信息,系统输出:若是到达,则输出汽车在停车场内或便道上的停车位置;若是离去,则输出汽车在停车场内的停留时间和应缴纳的费用(在便道上停留的时间不收费)。
3)可以查看停车场内或便道上车辆相关信息:停车位、车牌号、到达时间。
4)停车场内的车位数n设置不少于5个,便道的车位数不超过10个。
【程序总体框架】
定义数据结构:程序开始时,定义了车辆信息结构体,用于存储车牌号和到达时间,同时定义了存储停车场和便道信息的数组,以及记录停车场和便道车辆数量的全局变量。
主函数:有一个循环,根据用户选择调用相应的功能函数。在循环中,显示主菜单选项,并根据用户输入的选择执行相应的操作。当用户选择退出时,程序结束。
车辆到达函数:接受用户输入的车辆信息,判断停车场是否已满,如果未满则将车辆停入;如果满了,判断便道是否已满,如果未满,则停在便道,否则输出“抱歉,便道已满,无法停车”。
计算停车时间:到达时间和离开时间转换成分,便于计算。
计算停车费:半小时以内免费,超过半小时一分钟0.1元。
车辆离开:接受用户输入的车辆信息,查找车辆所在的停车场位置,计算停留时间和停车费,然后从停车场移除。
显示停车场信息:遍历停车场数组,逐个输出停车场中车辆的车牌号和到达信息。
显示便道信息:遍历便道数组,逐个输出便道中车辆的车牌号和到达时间。
【主要功能算法设计】
车辆到达算法:
如果停车场未满,则将车辆停入停车场。
如果停车场已满,便道未满,则将车辆停入便道;
便道已满,则输出“抱歉,便道已满,无法停车”。
车辆离开处理算法:
根据车牌号在停车场中查找车辆。
计算车辆的停留时间和停车费。
从停车场移除车辆。
停车场的车往前移动一个位置。
如果便道上有车,将第一辆停入停车场。
显示停车场信息算法:
遍历停车场数组,逐个输出停车场中车辆的车牌号和到达时间。
显示便道信息算法:
遍历便道数组,逐个输出便道中车辆的车牌号和到达时间。
伪代码:
函数carArrival()
输出车牌号和到达时间
如果停车场未满:
将车的车牌号和到达时间存入在停车场数组的下一个空闲位置
停车场车辆数+1
否则:
如果便道未满:
将车的车牌号和到达时间存入在便道数组的下一个空闲位置
便道车辆数+1
否则:
输出“抱歉,便道已满,无法停车”
函数ParkingDuration(到达时间,离开时间)
将到达时间转化成分
将离开时间转化成分
返回转化后的离开时间-转化后的到达时间
函数ParkingFee(停的时间)
如果停的时间<=30
return 0;
否则:
return 停的时间*0.1
函数carDeparture()
输入车牌号
遍历查找看是否在停车场数组
如果在
输入离开时间
ParkingDuration(到达时间,离开时间)
ParkingFee(停的时间)
停车场的车往前移动一个位置
停车场车辆数-1
如果便道有车
将便道的第一辆车停入停车场
便道车-1
停车场车+1
否则:
输出“该车不在停车场”
函数void printParkingLotInfo()
如果停车场车辆数==0
输出“停车场内没有车”
否则:
遍历停车场数组,依次输出车牌号和到达时间
函数printWaitingChannelInfo()
如果便道车辆数==0
输出“便道上没有车”
否则:
遍历便道数组,依次输出车牌号和到达时间
【总结】
在完成各个算法的时候遇到了很多选择,比如存储方式,要用顺序存储还是链式存储呢?各有千秋。我选择了用顺序存储,因为测试数据相对较少,用顺序存储相对链式存储比较简单,在数据比较少的前提下时间复杂度并不会相差多少,但是如果应用在实际生活中,应该采用链式存储,这样相邻的元素就能随意存放,所占的空间比较小,能大大的提高效率。
职工信息管理系统和停车场管理系统的设计过程涵盖了需求分析、系统设计、算法设计、编码实现及调试和测试阶段。该系统能有效的管理停车场和便道,并提供车辆信息的查询和计费功能,满足了停车场管理的需求。通过职工信息管理系统和停车场管理系统的设计我巩固了c语言和数据结构的相关知识,学到了如何从需求分析到系统设计,再到算法实现和测试的完整开发流程。