首先定义Car抽象类;
package dadasystem2; public abstract class Car { private String name; private int num; private int person; private int weight; private int price; //定义4个私有成员变量,名字,数量,载客量,载重量,单价 public abstract void show(); //定义输出车辆信息的抽象函数 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public int getPerson() { return person; } public void setPerson(int person) { this.person = person; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } }
然后定义小车类Scar,
package dadasystem2; public class Scar extends Car { public Scar (String name,int num,int person,int price) { this.setName(name); //这里也可以不要this this.setNum(num); this.setPerson(person); this.setPrice(price); } @Override public void show() { // TODO Auto-generated method stub System.out.println(getName()+"\t"+getNum()+"\t"+getPerson()+"\t"+"-"+"\t"+getPrice()); } }
定义载货车Lcar,
package dadasystem2; public class Lcar extends Car { public Lcar (String name,int num,int weight,int price) { setName(name); //可以不要this setNum(num); setWeight(weight); setPrice(price); } @Override public void show() { // TODO Auto-generated method stub System.out.println(getName()+"\t"+getNum()+"\t"+"-"+"\t"+getWeight()+"\t"+getPrice()); } }
定义载人载货两用车Bcar,
package dadasystem2; public class Bcar extends Car { public Bcar (String name,int num,int person,int weight,int price) { setName(name); //好像可以不要this setNum(num); setPerson(person); setWeight(weight); setPrice(price); } @Override public void show() { // TODO Auto-generated method stub System.out.println(getName()+"\t"+getNum()+"\t"+getPerson()+"\t"+getWeight()+"\t"+getPrice()); } }
最后看看测试类,
package dadasystem2; import java.util.Scanner;; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Car car[] = { new Scar("野马", 10, 5, 500), new Scar("奔奔", 10, 8, 300), new Lcar("东方", 10, 10, 1000), new Lcar("重汽", 10, 40, 3000), new Bcar("皮卡", 10, 2, 3, 500), new Bcar("卡车", 10, 5, 5, 800) }; //创建car车型数组,存放6个不同的车型对象 System.out.println("***欢迎使用答答租车系统***"); System.out.println("租车请按1,退出请按其他键。"); Scanner in1 = new Scanner(System.in); while (in1.nextInt()==1) { System.out.println("序号"+"\t"+"车名"+"\t"+"可租车量"+"\t"+"载人量"+"\t"+"载货量"+"\t"+"价格"); for (int i=0; i<=5; i++) { System.out.print((i+1)+"\t"); car[i].show(); } System.out.println("------------------------------------------------"); System.out.print("请输入您要租车的数量:"); Scanner in2 = new Scanner(System.in); int NUM = in2.nextInt(); //用 NUM 表示需要租车的数量 Car [] Zcar = new Car[NUM]; //创建Zcar数组,存放租车对象 for(int j=0; j<NUM; j++ ) { System.out.println("请输入您要租的第"+(j+1)+"辆车的序号:"); //循环进行 NUM 辆车的录用和输出信息 Scanner in3 = new Scanner(System.in); int flag = in3.nextInt(); // flag 表示当前第j辆车的 租车的序号 Zcar[j]=car[flag-1]; car[flag-1].setNum(car[flag-1].getNum()-1); // 车型数组car中,第 flag 类车的数量-1,保证数量问题 System.out.println("第"+(j+1)+"辆车租车完成"); } System.out.println("------------"+NUM+"辆车租车完成------------"+"\n"+"下面开始统计数据.........."); //租车完成,开始统计数据并输出 int per=0, wei=0, pri=0, NUM2=0; for (int i=0; i<NUM; i++) { per += Zcar[i].getPerson(); wei += Zcar[i].getWeight(); pri += Zcar[i].getPrice(); NUM2 += Zcar[i].getNum(); } System.out.println("一共租车"+NUM+"辆"); System.out.println("共可载"+per+"人"); System.out.println("共可载货"+wei+"吨"); System.out.println("共需付款"+pri+"元"); System.out.print("请输入付款金额:"); //加的小程序 O(∩_∩)O哈哈~ Scanner in4 = new Scanner(System.in); while (pri!=in4.nextInt()) System.out.println("输入错误,请重新输入金额!"); System.out.print("请输入付款密码:"); Scanner in5 = new Scanner(System.in); while (in5.nextInt()!=123456) System.out.println("密码错误,请重新输入!"); System.out.println("交易成功!"); System.out.println("继续租车请按1,退出请按其他键。"); } System.out.println("***欢迎再次使用本系统,再见!***"); } }
本系统加了一个剩余车辆数量的程序,再输入付款密码,交易成功之后,可继续租车,此时可租车辆就不再是默认的10辆了,会减去已租车辆数。
//程序还可以修改,加一个判断 当租车数大于车辆剩余数量的时候 返回错误
刚开始学java,还希望大家多多指导!!!
测试车辆数量是否有更新:
现在想问问大神们,如何修改程序,可以在程序的任意位置,直接退出??
比如说租车完成后,要选择继续租车,才能看到车辆列表的更新状态,但是看了之后,有必须要再执行一遍租车系统,就很迷了,真的是迷~~~
又看了一遍代码,楼主恐怕对Scanner的调用有些误会,Scanner in1=new Scanner中in1并不是一个具体数值而是一个类似方法调用中的对象,并不需要多次调用而是可以调用后整个类用一个对象使用方法的,就是说不需要in1,in2反复调用方法,新手看了楼主的代码很可能对Scanner方法的使用产生误会
感谢楼主的代码,顺便一提测试类53行的代码应该移到22到23行之间,在输入1重复运行时才能正确累计数值
非常感谢楼主的代码
真厉害
构造器和构造方法时同一个概念,只是不同称谓而已吧
请问为什么在构造方法时没有加上void 呢,不是没有返回值吗 ?我不加的话会报错
有几个问题比较困惑. 求解.
Car car[]= {} 这个创建组 为什么要用到父集中的Car呢?怎么思考到用这个的呢.
new Scar new Lcar. 我不太懂子集里面为什么构造方法的方法名要跟子类的类名一样呢?
我尝试用public void Sscar 构造 test里面new Sscar 就会出错 不太懂..
求教了谢谢.
哥 厉害
厉害 赞一个
厉害啊
定义一个布尔类型再用IF语句抛出异常?throw new RuntimeEXception(" ");
Em......我也是新手......