答答租车系统代码--引用数组存储租车信息,能自动计算账单。也有自留坑,有需要的同学可以一起交流/ 请大神看看
看完第一季和第二季写的答答租车系统代码:
有需要的同学可以拿去试跑一下,也请和我交流一下,有什么可以改进的。因为最近做得东西大多数跟数据库有关,做Java项目好缺乏
有不足的地方--》如何更好地把类提取出来 // 如何更好处理需要存储客户需求的数组
首次访问页:
package com.imooc.carrentsys; import java.util.Scanner; public class ClientService { //客户服务层,首页显示都在这个类里进行修改 public int indication ; public int ClientSearch(){ System.out.println("您好,欢迎来到租车网!"); System.out.println("如要租车,请按1 ;如不租车,请按0"); Scanner input = new Scanner(System.in); indication = input.nextInt(); return indication; //返回指示,在main方法里面只接收指示——是否租车 } }
车的信息,为车分类:私家车、皮卡和货车 (运用继承知识点--》子类构造函数必须创建)
package com.imooc.carrentsys; public class Car { public int num; //车的编码 public String name; //车的名字 public double rent; //车的租金/天 public String load; //车的容量 /* * 车的构造函数 ,在我看来,这道题不需要给车的类型分类,但从长远的角度来看--》分类管理,当车不是10台,而是800台 * 此时有分类创建并存储在数据库不同的表格里会更好,易检查,易修复 */ public Car(int num,String name ,double rent,String load){ this.num=num; this.name =name; this.rent=rent; this.load=load; } @Override public String toString() { return num + " " + name + " " + rent + " " + load + " "; } }
package com.imooc.carrentsys; public class PrivateCar extends Car { public PrivateCar(int num, String name, double rent, String load) { //子类也要定义构造函数,系统不会执行默认的无参构造函数 super(num, name, rent, load); //super()显式执行父类的构造函数 ,算是创建车子类的知识点提醒 // TODO Auto-generated constructor stub } }
package com.imooc.carrentsys; public class Truck extends Car{ public Truck(int num, String name, double rent, String load) { super(num, name, rent, load); // TODO Auto-generated constructor stub } }
package com.imooc.carrentsys; public class Pickup extends Car{ public Pickup(int num, String name, double rent, String load) { super(num, name, rent, load); // TODO Auto-generated constructor stub } }
车列表信息,定义已经有的车型
package com.imooc.carrentsys; public class CarInfo { public String[] title ={"序号 "," 车型 "," 租金(元/天) "," 容量 "}; public Car[] carInfo ={new PrivateCar(001 ," 奥迪A4 ", 500," 载人:4人"), //继承关系,使用多态——》父类引用数组 new PrivateCar(002 ," 马自达006", 400," 载人:4人"), new Pickup(003 ," 皮卡雪006",450," 载人:4人 载货:2吨 "), new PrivateCar(004 ," 金龙 ",800," 载人:20人"), new Truck(005 ," 松花江 ",800," 载货:4吨 "), new Truck(006 ," 依维 ",1000," 载货:20吨 ")}; //Car信息列表初始化,Car作为数组类型 public void CarList(){ //System.out.println("Test:"+carInfo[1]); //写引用类型数组,carInfo引用中存储指向对象的地址 com.imooc.carrentsys.PrivateCar@a298b7 System.out.println("你可租用的车型以及租金列表:"); //System.out.println(title); for(int i=0;i<title.length;i++){ System.out.print(title[i]); //System.out.println(carInfo[i]); 打印carInfo的信息,com.imooc.carrentsys.PrivateCar@a298b7 } System.out.println(); //单行键,更加美观 for(int i=0;i<carInfo.length;i++){ System.out.println(carInfo[i]); //System.out.println(carInfo[i]); 打印carInfo的信息,com.imooc.carrentsys.PrivateCar@a298b7 } } }
用户的租车需求
package com.imooc.carrentsys; import java.util.Scanner; public class RentCount { //根据顾客的租车要求显示账单 int rentNum =0; //租车数量 int[] carChoose = new int[7]; //客户的需求车型,初始化数组内存空间,才可以存放数值--不算是一个聪明的做法 int rentDur=0; public void rentCar(){ System.out.println("您好,请输入要租车的数量:"); Scanner input = new Scanner(System.in); rentNum = input.nextInt(); //显示有客户需要租用几辆车,这里有个限制,客户不能同时选择一款车的多个数量,学习前端的必要性 for(int temp=1 , i=0;temp<=rentNum;temp++,i++){ System.out.println("您好,请输入你想要租的第"+temp+"辆车型编码"); Scanner inputCarNum = new Scanner(System.in); //String[] carChoose = null ; 局部变量必须进行初始化, carChoose[i] =inputCarNum.nextInt(); //数组存储客户输入的租车编码,如果有数据库,一般通过编码去数据库选取,这里只能hardcode } } public void rentDay(){ System.out.println("您好,请输入要租车的天数:"); Scanner input = new Scanner(System.in); rentDur = input.nextInt(); //知道客人租几天 } }
Test类,还有部分逻辑操作
package com.imooc.carrentsys; public class RentCarSys { public static void main(String[] args){ ClientService client = new ClientService(); //是否要租车,不租就退出,租车就继续往下执行程序 if (client.ClientSearch()==0){ System.out.println("欢迎访问答答租车网"); } else{ CarInfo carInformation = new CarInfo(); carInformation.CarList(); //显示车列表信息 System.out.println(); //空一行,仅作为视觉上的美观 RentCount rentCount = new RentCount(); //收集客户的租车需求 rentCount.rentCar(); rentCount.rentDay(); System.out.println(); System.out.println("您的订单如下:") ; //对题目做了一点改动,把客户的对车的需求列出来 System.out.println("您的租车天数:"+rentCount.rentDur) ; int temp =0; double bill = 0; //帐的数目 for(; temp<rentCount.rentNum;temp++){ //自留坑,不能用数组的length,否则会把所有空间的读一遍 for(int i =0; i<carInformation.carInfo.length;i++){ if(rentCount.carChoose[temp]==carInformation.carInfo[i].num){ System.out.println(carInformation.carInfo[i]); bill+=carInformation.carInfo[i].rent; } } } System.out.print("您的账单为:"+(bill *rentCount.rentDur)); } } }