设计实现停车场计费程序;
(1)计算出从车辆入场时间到离场时间之间的时间差,传入的时间格式(如:2023-10-01 16:10:32),计算出的时间是以小时为单位。
(2)根据步骤1计算出的时间来划分收费标准。如果连续停车时长大于24*20小时(20天)则采用按月收费标准(1000元/月),避免按天收费来造成用户负担更多的停车费用;如果连续停车时长>=24小时且<24*20小时,则按天收费(50元/天);如果连续停车时长>=12小时并且小于24小时的话,那么按小时收费标准收费;如果停车时长小于等于12小时,那么按照以下方式来进行处理:
①判断停车的时间是否在白天的07:00-19:00之间。如果在这个时间范围内:再判断这个停车时长是否在半小时以内,半小时免费停车;超过半小时而<=10小时,按3元/小时收费;如果时长大于10小时且小于等于12小时,则按白天12小时停车(白天停车30元/车)。
②判断停车时间是否在晚上19:00到第二天07:00之间。如果在这个时间范围内:判断夜晚停车时长是否在半小时以内,半小时免费停车;超过半小时而<=4小时,按2.5元/小时收费;大于4小时且小于等于12小时,则按夜晚12小时收费标准收费(夜晚停车20元/车)。
③ 如果停车时间是在横跨白天和夜晚停车,但停车时长小于等于12小时的话,那么按昼夜交替停车标准来进行收费。
function parkingFee = parking_fee(enterTime, exitTime)
% 将输入的时间字符串转换为Matlab中的日期时间格式
enterDateTime = datetime(enterTime, 'InputFormat', 'yyyy-MM-dd HH:mm:ss');
exitDateTime = datetime(exitTime, 'InputFormat', 'yyyy-MM-dd HH:mm:ss');
% 计算停车时长,单位为小时
parkingDuration = hours(exitDateTime - enterDateTime);
% 判断停车时长并计算停车费用
if parkingDuration > 24*20
% 按月收费标准
parkingFee = 1000 * ceil(parkingDuration / (24*30));
elseif parkingDuration >= 24 && parkingDuration <= 24*20
% 按天收费标准
parkingFee = 50 * ceil(parkingDuration / 24);
elseif parkingDuration >= 12 && parkingDuration < 24
% 按小时收费标准
parkingFee = 10 * ceil(parkingDuration);
elseif parkingDuration <= 12
% 判断停车时间段
enterHour = hour(enterDateTime);
exitHour = hour(exitDateTime);
% 白天停车
if enterHour >= 7 && exitHour <= 19
if parkingDuration <= 0.5
% 半小时免费停车
parkingFee = 0;
elseif parkingDuration <= 10
% 按3元/小时收费
parkingFee = 3 * ceil(parkingDuration);
else
% 白天12小时停车
parkingFee = 30;
end
% 夜晚停车
elseif (enterHour >= 19 && exitHour <= 24) || (enterHour >= 0 && exitHour <= 7)
if parkingDuration <= 0.5
% 半小时免费停车
parkingFee = 0;
elseif parkingDuration <= 4
% 按2.5元/小时收费
parkingFee = 2.5 * ceil(parkingDuration);
else
% 夜晚12小时停车
parkingFee = 20;
end
% 昼夜交替停车
else
% 计算白天停车时长和夜晚停车时长
dayParkingDuration = hours(datetime(enterDateTime.Year, enterDateTime.Month, enterDateTime.Day, 19, 0, 0) - enterDateTime);
nightParkingDuration = parkingDuration - dayParkingDuration;
% 按昼夜交替停车标准收费
parkingFee = 3 * ceil(dayParkingDuration) + 2.5 * ceil(nightParkingDuration);
end
end
end
测试结果: