梁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));
}
}
}
少用public的成员变量,不安全哦,用private吧
Java入门第二季
531404 学习 · 6328 问题
相似问题