01-JAVA基础—>流程控制—>出租车计费

早起的鸟儿有虫吃,瞎写的代码有Bug!

出租车计费训练任务

//JAVA 技术方向支线任务-出租车计费训练任务
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;


public class XXX(自己取类名) {

	public static void main(String[] args) throws Exception {
		
		//调用方法,计算里程费
		System.out.print("请输入打车总里程(km):");
		Scanner inputKm = new Scanner(System.in);
		double km = inputKm.nextDouble();
		
		double kmMoney = 0.0;
		kmMoney = kmDriving(km);

		//调用方法,计算夜间行驶费
		double nightMoney = 0.0;
		nightMoney = nightDriving(km);
		
		//调用方法,计算预约叫车服务费
		double appointmentMoney = 0.0; 
		appointmentMoney = appointmentDriving();
		
		//调用方法,计算低速行驶费,其他时间收费,早晚高峰期收费
		//map方法返回多个值
		Map<String, Integer> mapSum = new HashMap<String, Integer>();
		mapSum = slowDriving();
		double noHeightDrivingMoney = (double)mapSum.get("noHeightDrivingMoney");
		double heightDrivingMoney = (double)mapSum.get("heightDrivingMoney");
		double slowDrivingMoney = (double)mapSum.get("slowDrivingMoney");

		//调用方法计算往返载客费用
		double returnDrivingMoney = 0.0;
		returnDrivingMoney = returnDriving(km);
		
		//燃油附加费
		double olimoney = 1.0;
		
		//总车费=里程费用+低速行驶费+预约叫车服务费+空驶费+夜间收费+燃油 附加费。
		//总车费
		double moneySum = 0.0;
		moneySum = kmMoney + slowDrivingMoney + appointmentMoney + 
				returnDrivingMoney + nightMoney + olimoney;
		System.out.println("总车费:"+moneySum+"元");
		
		System.out.println("---产生费用项目详细情况---");
		//输出里程费用
		if (kmMoney>13.0) {
			System.out.println("里程超过3公里,里程价格:"+kmMoney);
		}else {
			System.out.println("里程小于3公里,里程价格:"+kmMoney);
		}
		//输出低速行驶费
		if (slowDrivingMoney>0.0) {
			System.out.println("低速行驶费一共:"+slowDrivingMoney+"元,其中:");
			if (noHeightDrivingMoney>0.0) {
				System.out.println("其他时间段低速行驶费:"+noHeightDrivingMoney);
			}
			if (heightDrivingMoney>0.0) {
				System.out.println("早晚高峰时间段低速行驶费:"+heightDrivingMoney);
			}
		}else {
			System.out.println("无低速行驶费");
		}
		//输出预约叫车费
		if (appointmentMoney>0.0) {
			System.out.println("预约叫车服务费:"+appointmentMoney);
		}else {
			System.out.println("无预约费用");
		}
		//输出空驶费(往返载客费)
		if (returnDrivingMoney>0) {
		System.out.println("空驶费"+returnDrivingMoney);
		}else {
			System.out.println("无空驶费");
		}
		//输出夜间费用
		if (nightMoney>0.0) {
			System.out.println("夜间收费"+nightMoney);
		}else {
			System.out.println("无夜间费用");
		}
		//输出燃料附加费
		System.out.println("燃油附加费:"+olimoney+"元");
	}
	
	
//方法计算里程费
	private static Double kmDriving(double km){
		if (km>3.0) {
			//里程费=(里程-3)x基本单价2.3元 +13元
			double kmMoney = (km-3.0)*2.3+13.0;
			//保留整数
			kmMoney = (double) Math.round(kmMoney);

			return kmMoney;
		}else {
			//未满3公里收13元
			double kmMoney = 13.0;

			return kmMoney;
		}
	}
	
	//方法计算预约叫车费
	public static double appointmentDriving(){
		System.out.print("请输入是否预约叫车(是|否)?");
		Scanner inputChoose = new Scanner(System.in);
		String choose = inputChoose.next();
		if (choose.equals("是")) {
			System.out.print("预约是否在4个小时以内(是|否)?");
			Scanner inputAppointment = new Scanner(System.in);
			String appointment = inputAppointment.next();
			
			if (appointment.equals("是")) {
				//预约叫车费为5元
				double appointmentMoney = 5.0;
	
				return appointmentMoney;
					
			}else if (appointment.equals("否")) {
				//预约叫车费为6元
				double appointmentMoney = 6.0;
	
				return appointmentMoney;
			}else {
				//退出程序
				System.out.println("“是否在4个小时以内”请输入“是”或者“否”!!!");
				System.exit(0);
			}
		}else if (choose.equals("否")) {
			double appointmentMoney = 0.0;

			return appointmentMoney;
		}else {
			//退出程序
			System.out.println("“预约叫车”请输入“是”或者“否”!!!");
			System.exit(0);
		}
		
		//不知道为什么要传个变量才不报错
		return 0;
		
	}
	
	//低速行驶方法
	public static Map<String, Integer> slowDriving(){
		
		System.out.print("请输入是否有低速行驶(是|否)?");
		Scanner inputChoose = new Scanner(System.in);
		String choose = inputChoose.next();
		
		if (choose.equals("是")) {
			
			System.out.print("请输入不含早晚高峰期间低速行驶时长(分钟):");
			Scanner noHeight = new Scanner(System.in);
			int noHeightDriving = noHeight.nextInt();
			System.out.print("请输入早晚高峰期间低速行驶时长(分钟):");
			Scanner height = new Scanner(System.in);
			int heightDriving = height.nextInt();
			
			//早晚高峰期每5分钟加收4.6元,其它时间加收2.3元,我是这么理解的,但是好像跟截图不太相符
			heightDriving = heightDriving/5;
			noHeightDriving = noHeightDriving/5;
			double heightDrivingMoney = heightDriving*4.6;
			double noHeightDrivingMoney = noHeightDriving*2.3;
			//保留整数
			heightDrivingMoney = Math.round(heightDrivingMoney);
			noHeightDrivingMoney = Math.round(noHeightDrivingMoney);
			double slowDrivingMoney =  heightDrivingMoney+noHeightDrivingMoney;

			//map方法把三个值存入map命名再返回,不知道怎么存double型
			//所以就先传整型,出去再改回double
			Map<String, Integer> map = new HashMap<String, Integer>();
			map.put("noHeightDrivingMoney", (int) noHeightDrivingMoney);
			map.put("heightDrivingMoney", (int) heightDrivingMoney);
			map.put("slowDrivingMoney", (int) slowDrivingMoney);
			return map;
			
			
			
		}else if (choose.equals("否")) {
			int heightDrivingMoney = 0;
			int noHeightDrivingMoney = 0;
			int slowDrivingMoney = 0;
			
			Map<String, Integer> map = new HashMap<String, Integer>();
			map.put("noHeightDrivingMoney", noHeightDrivingMoney);
			map.put("heightDrivingMoney", heightDrivingMoney);
			map.put("slowDrivingMoney", slowDrivingMoney);
			return map;

		}else {
			System.out.println("“是否低速行驶”请输入“是”或者“否”!!!");
			System.exit(0);
		}
		return null;	
	}
	
	//往返载客方法,计算空使费
	//“往返”:指的是乘客乘坐出租车到目的地之后返回,因此超过规定的里程之后依然按照标准价格收费,
	//因为这种情况下司机不需要空驶返回,因此乘客不用多负担50%的回程费。
	
	public static double returnDriving(double km){
		System.out.print("请输入是否往返载客(是|否)?");
		Scanner inputChoose = new Scanner(System.in);
		String choose = inputChoose.next();
		
		if (choose.equals("是")) {
			//往返载客不需要空驶费
			double returnDrivingMoney = 0.0;
			return returnDrivingMoney;
			
		}else if (choose.equals("否")) {
			
			if (km<=15) {
			//不超过15公里不需要空驶费
			double returnDrivingMoney = 0.0;
			return returnDrivingMoney;
			
			}else {
				//只收超过15公里部分的费用
				double returnDrivingMoney = (km-15)*1.15;
				returnDrivingMoney = (double) Math.round(returnDrivingMoney);

				return returnDrivingMoney;
			}

		}else {
			System.out.println("“是否往返”请输入“是”或者“否”!!!");
			System.exit(0);
		}
		return 0;
		
	}
	
	public static double nightDriving(double km) throws Exception{
		System.out.print("请输入开始乘车时间,24小时制(hh:mm:ss):");
		Scanner first = new Scanner(System.in);
		String firstTime = first.next();
		System.out.print("请输入结束乘车时间,24小时制(hh:mm:ss):");
		Scanner last = new Scanner(System.in);
		String lastTime = last.next();
		
		//调用DateFormat的方法把字符串变为时间格式
		DateFormat df = new SimpleDateFormat("HH:mm:ss");
		Date timeFirst = df.parse(firstTime);
		Date timeLast = df.parse(lastTime);
		Date nightTime = df.parse("23:00:00");
		Date moningTime = df.parse("05:00:00");
		//开始乘车时间和结束乘车时间在5~23点之间则不算夜间乘车

		if (nightTime.getTime() >= timeFirst.getTime() && timeFirst.getTime() > moningTime.getTime() &&
				nightTime.getTime() >= timeLast.getTime() && timeLast.getTime() > moningTime.getTime()) {
			
			double nightMoney = 0.0;
			
			return nightMoney;
			}else {
				
				//夜间乘车费=20%的基本单价x里程
				double nightMoney = 0.0;
				nightMoney = km*2.3*0.2;
				nightMoney = (double) Math.round(nightMoney);

				return nightMoney;	
			}
	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
关于java出租车计价器设计与实现 总共4个模块 (1)出租车计价系统可以实现出租车信息的管理。 1.1出租车信息的查询:通过数据库查询出租车的车型,车号,以及是否可用 1.2出租车信息的增加:向数据库中添加出租车的车型,车号,以及是否可用 1.3出租车信息的修改:对数据库中已经存在的出租车的车型,车号,以及是否可用的信息进行修改 1.4出租车信息的删除:删除数据库中已经存储的出租车的信息 (2)出租车计价系统可以实现司机信息的管理。 2.1司机信息的查询:通过数据库查询出司机的年龄,性别,学历,名字等信息 2.2司机信息的增加:向数据库中添加司机的年龄,性别,学历,名字等信息 2.3司机信息的修改:对数据库中已经存在的司机的年龄,性别,学历,名字等信息进行修改 2.4司机信息的删除:删除数据库中已经存储的司机的信息 (3)出租车计价系统可以实现出租车计价功能。 3.1通过java多线程,模拟出租车在路上的情景 3.2通过距离计费的方式,将订单的时间,乘客的信息,订单的价格等插入数据库中 (4)出租车计价系统可以实现订单信息的维护 4.1订单信息的查询:通过数据库查询出订单的时间,价格等信息 4.2订单信息的删除:删除数据库中已经存储的订单信息 4.3订单信息的修改:对数据库中已经存在的订单的时间,价格等信息进行修改

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高高飞起的勇敢麦当

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值