刚看到这个项目的时候你可能和我一样不知道从何入手。事实上我看了好几篇其他慕友的手记,虽然每行代码都能看懂但是整篇看下来很难消化。后来自己动手发现问题并不难,有一些代码略有借鉴但是主要还是自己的思想。如果一开始看不懂也很正常,我建议自己动手练一下,然后你也可以跟我一样写这篇文章了。(仅面向和我一样的小白)
我在这里小小的吐槽一下老师的思路:购物的常规操作都是先选商品再输入数量,而老师是先决定数量再一件一件选择商品。这样会出现一个问题,你只能尽可能减少数量来避免自己被累死(开个玩笑),而这种情况无论对商家和买家都是不利的。当然练习题毕竟以考核学习内容为主,所以我还是循规蹈矩一点(其实是因为懒😂)。
先贴运行效果
接下来是父类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人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦