1.这个练习算是学习java两周以来的一个总结,有了c++的基础学习java是轻松了不少。
2.到目前位置已经学到了接口,异常处理了,但涉及的深度还不够。
3.这个程序体现了面对对象程序设计的封装,继承,多态三大特性。
4.概述一下整个程序:
由6个类,2个接口组成。Car,Truck, Pickup三个类继承Auto类,并实现Cargo,manned两个接口。
Bus类继承Car类。RentSystem为主类。
5.渐渐的体会到了当码畜的感觉…….
实现功能如图:
package beans;
public class Auto {
private String name;
private int rental;
public Auto(String name, int rental) {
super();
this.name = name;
this.rental = rental;
}
public String getName() {
return name;
}
public int getRental() {
return rental;
}
}
package beans;
import customInterface.*;
public class Truck extends Auto implements Cargo{
private int cargo;
public Truck(String name, int rental, int cargo) {
super(name, rental);
this.cargo = cargo;
}
@Override
public int getCargo() {
// TODO Auto-generated method stub
return cargo;
}
}
package beans;
import customInterface.*;
public class Car extends Auto implements Manned{
private int MannedAmount;
public Car(String name, int rental, int mannedAmount) {
super(name, rental);
MannedAmount = mannedAmount;
}
@Override
public int getMannedAmount() {
// TODO Auto-generated method stub
return MannedAmount;
}
}
package beans;
import customInterface.Cargo;
import customInterface.Manned;
public class Pickup extends Auto implements Cargo,Manned{
private int cargo;
private int MannedAmount;
public Pickup(String name, int rental, int cargo, int mannedAmount) {
super(name, rental);
this.cargo = cargo;
MannedAmount = mannedAmount;
}
@Override
public int getMannedAmount() {
// TODO Auto-generated method stub
return MannedAmount;
}
@Override
public int getCargo() {
// TODO Auto-generated method stub
return cargo;
}
}
package customInterface;
public interface Cargo {
public int getCargo();
}
package customInterface;
public interface Manned {
public int getMannedAmount();
}
package beans;
import customInterface.Manned;
public class Bus extends Car {
public Bus(String name, int rental, int mannedAmount) {
super(name, rental, mannedAmount);
// TODO Auto-generated constructor stub
}
}
package main;
import beans.*;
import java.util.ArrayList;
import java.util.Scanner;
public class RentSystem {
private ArrayList<Auto> list=new ArrayList<Auto>();
private int AmountofAuto;
private int day;
private int rent=0;
private int load=0;
private int AmountofPeople=0;
//getter and setter
public ArrayList<Auto> getList(){
return this.list;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
public int getAmountofAuto() {
return AmountofAuto;
}
public void setAmountofAuto(int amountofAuto) {
AmountofAuto = amountofAuto;
}
public int getRent(){
return rent;
}
public int getLoad() {
return load;
}
public void setLoad(int load) {
this.load += load;
}
public int getAmountofPeople() {
return AmountofPeople;
}
public void setAmountofPeople(int amountofPeople) {
this.AmountofPeople += amountofPeople;
}
//method,提供的服务
public void addAuto(Auto auto){
this.list.add(auto);
}
public void printInfor(){
System.out.println("您可租车的类型和其价目表:\n序号 汽车名称\t\t租金\t\t容量/载重");
for(Auto e :list){
if(e instanceof Car){
int m=((Car) e).getMannedAmount();
System.out.printf("%d. %s\t\t%d元/天\t\t%d人\n",(list.indexOf(e)+1),e.getName(),e.getRental(),m);
}
if(e instanceof Pickup){
int m=((Pickup)e).getMannedAmount();
int c=((Pickup)e).getCargo();
System.out.printf("%d. %s\t\t%d元/天\t\t%d人/%d吨\n",(list.indexOf(e)+1),e.getName(),e.getRental(),m,c);
}
if(e instanceof Truck){
int c=((Truck)e).getCargo();
System.out.printf("%d. %s\t\t%d元/天 %d吨\n",(list.indexOf(e)+1),e.getName(),e.getRental(),c);
}
}
}
//计算金额
public void countRent(int days,int list_index){
this.rent+= (list.get(list_index)).getRental()*days;
}
//更新总载货量和总人数
public void setBillInfor(ArrayList<Auto> list,int index){
int load=0;
int AmountofPeople=0;
if(list.get(index) instanceof Car){
AmountofPeople=((Car)list.get(index)).getMannedAmount();
setAmountofPeople(AmountofPeople);
}
if(list.get(index) instanceof Pickup){
AmountofPeople=((Pickup)list.get(index)).getMannedAmount();
load=((Pickup)list.get(index)).getCargo();
setAmountofPeople(AmountofPeople);
setLoad(load);
}
if(list.get(index) instanceof Truck){
load=((Truck)list.get(index)).getCargo();
setLoad(load);
}
}
private void printBill(ArrayList<Auto> list,RentSystem system) {
// TODO Auto-generated method stub
System.out.println("您的账单:");
System.out.println("--------可载人的车有------------------------");
for(Auto e :list){
if(e instanceof Car||e instanceof Pickup){
System.out.print(" "+e.getName());
}
}
System.out.println("\t共载人:"+system.getAmountofPeople()+"人");
System.out.println("--------可载货的车有------------------------");
for(Auto e :list){
if(e instanceof Truck||e instanceof Pickup){
System.out.print(" "+e.getName());
}
}
System.out.println("\t共载货:"+system.getLoad()+"吨");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
RentSystem system=new RentSystem();
system.addAuto(new Car("奥迪A4", 500, 4));
system.addAuto(new Car("马自达6", 400, 4));
system.addAuto(new Pickup("皮卡雪6", 450, 2, 4));
system.addAuto(new Bus("金龙", 800, 20));
system.addAuto(new Truck("松花江", 400, 4));
system.addAuto(new Truck("依维柯", 1000, 20));
System.out.printf("欢迎使用租车系统!\n您是否要租车: 1是 0否\n");
Scanner in=new Scanner(System.in);
int anwser=in.nextInt();
if(anwser==1){
system.printInfor();
System.out.println("请输入您租车的天数");
system.setDay(in.nextInt());
System.out.println("请输入您要租车的数量:");
system.setAmountofAuto(in.nextInt());
int i=1;
do
{
System.out.printf("输入第%d辆车的序号\n",i);
int index=in.nextInt()-1;
system.countRent(system.getDay(),index);
system.setBillInfor(system.getList(),index);
i++;
}while(i<system.getAmountofAuto()+1);
system.printBill(system.getList(),system);
System.out.print("-----------------------------------------\n订单总金额:"+system.getRent()+"元");
}
if(anwser==0){
System.out.println("再见!");
}
if(anwser!=0&&anwser!=1)
{
System.out.println("输入有误");
}
}
}