答答租车系统代码--引用数组存储租车信息,能自动计算账单。也有自留坑,有需要的同学可以一起交流/ 请大神看看

来源:12-1 综合练习

梁XX

2015-12-28 19:38

看完第一季和第二季写的答答租车系统代码:

有需要的同学可以拿去试跑一下,也请和我交流一下,有什么可以改进的。因为最近做得东西大多数跟数据库有关,做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();  //知道客人租几天
	}
	
	
}	


最后就是测试类(但是也涉及了小部分逻辑操作,这个可以在分离吗):

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));   
		
	}
	
	
	}
		
}


写回答 关注

1回答

  • Blackmourner
    2015-12-30 11:42:38

    少用public的成员变量,不安全哦,用private吧

    梁XX

    嗯,明白。安全性确实还没有考虑进去,但是考虑po出来读代码就很累,就不想用get/set来增加代码长度。 或许深入点会考虑这个问题,谢谢

    2016-01-02 12:52:24

    共 1 条回复 >

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530696 学习 · 6091 问题

查看课程

相似问题