为了账号安全,请及时绑定邮箱和手机立即绑定

Java入门第二季实战——租车系统

标签:
Java

刚看到这个项目的时候你可能和我一样不知道从何入手。事实上我看了好几篇其他慕友的手记,虽然每行代码都能看懂但是整篇看下来很难消化。后来自己动手发现问题并不难,有一些代码略有借鉴但是主要还是自己的思想。如果一开始看不懂也很正常,我建议自己动手练一下,然后你也可以跟我一样写这篇文章了。(仅面向和我一样的小白)

我在这里小小的吐槽一下老师的思路:购物的常规操作都是先选商品再输入数量,而老师是先决定数量再一件一件选择商品。这样会出现一个问题,你只能尽可能减少数量来避免自己被累死(开个玩笑),而这种情况无论对商家和买家都是不利的。当然练习题毕竟以考核学习内容为主,所以我还是循规蹈矩一点(其实是因为懒😂)。

先贴运行效果
图片描述
接下来是父类Car及其各子类的代码

package com.imooc;
public abstract class Car {
	int id;//序号
	String name;//车名
	int rent;//租金
	int passengerCapacity;//载客量
	int cargoCapacity;//载货量
	int inventory;//库存量
	int sales;//销售量
	public Car(int id,String name,int rent,int passengerCapacity,int cargoCapacity,int inventory){
		this.id = id;
		this.name = name;
		this.rent = rent;
		this.passengerCapacity = passengerCapacity;
		this.cargoCapacity = cargoCapacity;
		this.inventory = inventory;
		this.sales = 0;//初始化销量为0
	}//自定义构造函数
	public void print() {
		if(passengerCapacity == 0) {
			if(rent<999)
				System.out.println(id+".\t"+name+"\t\t"+rent+"元/天\t\t"+"载货:"+cargoCapacity+"吨");
			else
				System.out.println(id+".\t"+name+"\t\t"+rent+"元/天\t"+"载货:"+cargoCapacity+"吨");
		}//以上分两种情况是为了表格整齐,本人有强迫症(不同字体输出结果可能不同)
		else if(cargoCapacity == 0)
			System.out.println(id+".\t"+name+"\t\t"+rent+"元/天\t\t"+"载客:"+passengerCapacity+"位");
		else
			System.out.println(id+".\t"+name+"\t\t"+rent+"元/天\t\t"+"载客:"+passengerCapacity+"位 "+" 载货:"+cargoCapacity+"吨");
	}//很明显这是个打印函数,用于打印菜单列表
}

package com.imooc;
public class Taxi extends Car {
	public Taxi(int id, String name, int rent, int passengerCapacity,int inventory) {
		super(id, name, rent, passengerCapacity, 0, inventory);
	}//客车,载货量自动赋值为0

}

package com.imooc;
public class Truck extends Car {
	public Truck(int id, String name, int rent, int cargoCapacity, int inventory){
		super(id, name, rent, 0, cargoCapacity, inventory);
	}//货车,载客量自动赋值为0
	
}

package com.imooc;
public class Van extends Car {
	public Van(int id, String name, int rent, int passengerCapacity, int cargoCapacity, int inventory) {
		super(id, name, rent, passengerCapacity, cargoCapacity, inventory);
	}//客货两用车
}

最后是主函数代码

package com.imooc;
import java.util.Scanner;//导入Scanner工具
public class CarRental {
	public static void main(String[] args) {
		//创建一个Car类数组,包含多个子类信息
		Car[] cars = {new Taxi(1,"奥迪A4",500,4,20),new Taxi(2,"马自达6",400,4,20),
					new Van(3,"皮卡雪6",450,4,2,20),new Taxi(4,"金龙",800,20,20),
					new Truck(5,"松花江",400,4,20),new Truck(6,"依维柯",1000,20,20)};
		System.out.println("*****欢迎使用租车系统!*****");
		System.out.println("您是否要租车?1是(其他任意键退出)");
		System.out.print("请输入:");
		Scanner scan = new Scanner(System.in);
		if(!scan.hasNextInt() || scan.nextInt() != 1) {
			System.out.println("再见!欢迎下次使用");
			return;
		}//如果探测到输入字符不是数字则结束,否则再判断数字是否为1,不为1则结束
		System.out.println("您可租的车型及其价目表");
		System.out.println("序号\t型号\t\t租金\t\t容量");
		for(Car car : cars) {
			car.print();
		}//循环打印各车型信息
		System.out.print("请输入租车数量:");
		int n = scan.nextInt();
		int totalInventory = 0;//创建总库存变量
		for(Car car : cars) {
			totalInventory += car.inventory;
		}//总库存为各车型库存之和
		while(n < 1 || n>totalInventory) {
			if(n < 1)
				System.out.print("输入有误,请重新输入:");
			else
				System.out.print("总库存不足,请输入"+totalInventory+"以下的数值:");
			n = scan.nextInt();
		}//若租车数量不合理或超过库存则报错并重新获取输入
		int totalRent = 0, totalCargo = 0, totalPassenger = 0;//创建总租金、总载货量和总载客量
		for(int i=1; i<=n; i++) {
			System.out.print("请输入第"+i+"辆车的序号:");
			int id = scan.nextInt();
			while(id<1 || id>6) {
				System.out.print("输入有误,请重新输入:");
				id = scan.nextInt();
			}//若序号不合理则报错并重新获取输入
			totalCargo += cars[id-1].cargoCapacity;
			totalPassenger += cars[id-1].passengerCapacity;
			totalRent += cars[id-1].rent;
			cars[id-1].sales++;
			cars[id-1].inventory--;//每售出一辆车,相应车型销售量加一,库存量减一
		}//循环输入n辆车的序号并作相应计算
		System.out.print("请输入租车天数:");
		n = scan.nextInt();
		while(n<1) {
			System.out.print("输入有误,请重新输入:");
			n = scan.nextInt();		
		}
		totalRent *= n;//单日租金*天数=总租金
		System.out.println("****您的账单****");
		System.out.println("#可载人的车有:");
		for(int i=0; i<6; i++) {
			if(cars[i].passengerCapacity>0) {
				if(cars[i].sales > 0)
					System.out.print(cars[i].name+"*"+cars[i].sales+"  ");
			}
		}//遍历所有车型,若载客量和车型销量大于0则将车名和数量打印到清单
		System.out.println("\n共载人:"+totalPassenger+"个");
		System.out.println("#可载货的车有:");
		for(int i=0; i<6; i++) {
			if(cars[i].cargoCapacity>0) {
				if(cars[i].sales > 0)
					System.out.print(cars[i].name+"*"+cars[i].sales+"  ");
			}
		}//同上,此处大前提改为载货量大于0
		System.out.println("\n共载货:"+totalCargo+"吨");
		System.out.println("#租车总价格:"+totalRent+"元");
		System.out.println("****确定支付吗?1确定 其他任意键取消****");
		if(!scan.hasNextInt() || scan.nextInt()!=1)
			System.out.println("再见!欢迎您下次使用");
		else 
			System.out.println("您的余额不足(0),请给作者打钱充值");
		return;
	}
}

你可能会发现上述代码中的库存量和销售量题目并没有要求,其实是为了显示清单中的租车数量而加入的(顺便加入了租车数量限制)。虽然这并不算是车的属性但是却能很好的减少代码量,所以我纠结了半天还是用了(别见笑)。

这个项目我花了将近一天才完成,其实只要3小时就能完成基础要求,其他时间主要花在细节还有功能补充上,当然添加注释和写这篇手记也花了不少时间。这可以说是我第一个自主完成的项目,内心澎湃的同时也想跟各位慕友分享一下。我不能说这个是完美的作品,但是对于现阶段的我来说也算不错了。如果你对我的代码有什么疑问和建议的话欢迎留言,我们互相学习进步吧~

点击查看更多内容
20人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消