//一些说在前头的废话:
//本来打算用一个Map或者查查arrayList怎么用来解决之后的‘如何知道用户租了哪几辆车’这个问题,但后来看了看置顶的帖子发现有大神弄过了而我对这两东西又恰好不是很熟(我是没上过第一季的)……
//于是乎,心血来潮就想看看不用那种方法的话有没有其他路子!
//结果吧,写是写出来了,可自己都觉得好长,肯定是有得改进的地方,不过这些待我睡一觉起来再说啊哈哈哈……关于后面那部分坚决不使用arrayList的方法就请多指教啦,脑子笨目前只想出这种方式:(,但我想应该还有很多其他解决方法
//以及,我并没有使用interface,因为觉得似乎没什么必要
//===============关于想参考的同学,看代码前请看这儿================
//我重写了toString()这个函数,很惊讶很多人都没想到重写这个(至少我看了几个帖子都没有),我想这是我蹩脚作业的唯一可取处了。
//同时,使用了exception,但这个是看置顶大神贴里面的改进以后自己查了查用法随意加的,也许有些语法错误或者可以更加完善的地方,因此不建议复制粘贴
//另外,目前这个版本的话,不喜欢自虐的朋友们最好别去用我最后那几个笨笨的for,那是很烧效率不讨好的行为:)(再加上我自己测试时还发觉有个不算bug的小bug……总之请千万别借鉴那部分)
//UlyXor,2015/1/30
public abstract class Car
{
//Field
protected String name;
protected int price;
protected int carID;
//Mutator & Accessor
public void setName(String name)
{
this.name=name;
}
public void setID(int num)
{
this.carID=num;
}
public void setPrice (int price)
{
this.price=price;
}
public String getName()
{
return this.name;
}
public int getPrice()
{
return this.price;
}
public int getID()
{
return this.carID;
}
}
public class PassengerCar extends Car
{
//Field
private int numOfPassenger;
//Constructor
public PassengerCar(int id,String name,int price,int numOfPassenger)
{
super.setName(name);
super.setPrice(price);
super.setID(id);
this.numOfPassenger=numOfPassenger;
}
//Mutator & Accessor
public int getPassenger()
{
return this.numOfPassenger;
}
public void setPassenger(int num)
{
this.numOfPassenger=num;
}
//Utility
public String toString()
{
return this.carID+"\t"+this.name+"\t"+this.price+"元/天"+"\t载客:"+this.numOfPassenger+"人";
}
}
public class CargoCar extends Car
{
//Field
private int tonOfCargo;
//Constructor
public CargoCar(int id,String name,int price,int tonOfCargo)
{
super.setName(name);
super.setPrice(price);
this.setID(id);
this.tonOfCargo=tonOfCargo;
}
//Mutator & Accessor
public int getCargo()
{
return this.tonOfCargo;
}
public void setCargo(int num)
{
this.tonOfCargo=num;
}
//Utility
public String toString()
{
return this.carID+"\t"+this.name+"\t"+this.price+"元/天"+"\t载货:"+this.tonOfCargo+"吨";
}
}
public class PickUpCar extends Car
{
//Field
private int numOfPassenger;
private int tonOfCargo;
//Constructor
public PickUpCar(int id,String name,int price,int numOfPassenger,int tonOfCargo)
{
super.setName(name);
super.setPrice(price);
this.setID(id);
this.numOfPassenger=numOfPassenger;
this.tonOfCargo=tonOfCargo;
}
//Mutator & Accessor
public int getPassenger()
{
return this.numOfPassenger;
}
public void setPassenger(int num)
{
this.numOfPassenger=num;
}
public int getCargo()
{
return this.tonOfCargo;
}
public void setCargo(int num)
{
this.tonOfCargo=num;
}
//Utility
public String toString()
{
return this.carID+"\t"+this.name+"\t"+this.price+"元/天"+"\t载客:"+this.numOfPassenger+"人"+" 载货:"+this.tonOfCargo+"吨";
}
}
import java.util.*;
public class Tester{
public static void main(String [] args)
{
//①确认是否租车
Scanner keybo=new Scanner(System.in);
System.out.println("欢迎使用答答租车系统:");
System.out.println("您是否要租车?是=1,否=0");
int ifHire=-1;
do
{
//当用户开始捣乱时……
try{
ifHire=keybo.nextInt();
}
catch(Exception e)
{
//当用户用字母捣乱时
System.out.println("输入错误,请输入或0或1的数字。");
keybo.next();
continue;
}
//当用户用其他数字捣乱时
if(ifHire<0||ifHire>1)
{
System.out.println("输入错误,请用1或0来表达您的意愿。");
}
}while(ifHire!=1&&ifHire!=0);
if(ifHire==0)
{
System.out.println("一百块都不给我,系统自动退出:(。");
return;
}
//②展示可租车辆
else
{
System.out.println("您可租车的类型及其价目表:");
System.out.println("序号 名称 租金 容量");
Car carAvaliable[]=
{
new PassengerCar(1,"奥迪A4",500,4),
new PassengerCar(2,"马自达6",400,4),
new PickUpCar(3,"皮卡雪6",450,4,2),
new PassengerCar(4,"金龙",800,20),
new CargoCar(5,"松花江",400,4),
new CargoCar(6,"依维柯",1000,20)
};
for(int i=0;i<6;i++)
{
System.out.println(carAvaliable[i]);
}
//③ 确定用户需要的车的数量以及它们的序号
System.out.println("请输入您要租的汽车的数量:");
int numOfCar=0;
while(numOfCar<=0)
{
//当用户开始捣乱时……
try{
numOfCar=keybo.nextInt();
}
catch(Exception e)
{
//当用户用字母捣乱时
System.out.println("输入错误,请输入一个数字。");
keybo.next();
continue;
}
//当用户用数字捣乱时
if(numOfCar<=0)
{
System.out.println("输入错误,请输入一个大于等于1的数字。");
}
}
int totalDay=0;
int[] theIndex= new int[numOfCar];
for(int i = 0 ;i<numOfCar;i++)
{
System.out.println("请输入第"+(i+1)+"辆车的序号");
while(theIndex[i]<=0||theIndex[i]>6)
{
//当用户开始捣乱时……
try{
theIndex[i]=keybo.nextInt();
}
catch(Exception e)
{
//当用户用字母捣乱时
System.out.println("输入错误,请输入一个数字。");
keybo.next();
continue;
}
//当用户用数字捣乱时
if(theIndex[i]<=0||theIndex[i]>6)
{
System.out.println("输入错误,请输入一个大于等于1,小于等于6的数字。");
}
}
}
System.out.println("请输入租车天数:");
while(totalDay<=0)
{
//当用户开始捣乱时……
try{
totalDay=keybo.nextInt();
}
catch(Exception e)
{
//当用户用字母或小数捣乱时
System.out.println("输入错误,请输入一个整形数字。");
keybo.next();
continue;
}
//当用户用数字捣乱时
if(totalDay<=0)
{
System.out.println("输入错误,请输入一个大于等于1的数字。");
}
}
//④计算总金额
int totalPrice=0;
for(int i = 0 ;i<numOfCar;i++)
{
switch(theIndex[i])
{
case 1:
totalPrice+= carAvaliable[0].getPrice();
break;
case 2:
totalPrice+= carAvaliable[1].getPrice();
break;
case 3:
totalPrice+= carAvaliable[2].getPrice();
break;
case 4:
totalPrice+= carAvaliable[3].getPrice();
break;
case 5:
totalPrice+= carAvaliable[4].getPrice();
break;
case 6:
totalPrice+= carAvaliable[5].getPrice();
break;
}
}
totalPrice *= totalDay;
//⑤最终结果
int totalPassenger=0, totalTons=0;
System.out.println("您的账单:");
System.out.print("**可载人的车有:");
for(int i = 0 ;i<numOfCar;i++)
{
switch(theIndex[i])
{
case 1:
System.out.print(" "+ carAvaliable[0].getName()+totalPassenger);
totalPassenger+= ((PassengerCar)carAvaliable[0]).getPassenger();
break;
case 2:
System.out.print(" "+ carAvaliable[1].getName());
totalPassenger+= ((PassengerCar)carAvaliable[1]).getPassenger();
break;
case 3:
System.out.print(" "+ carAvaliable[2].getName());
totalPassenger+= ((PickUpCar)carAvaliable[2]).getPassenger();
break;
case 4:
System.out.print(" "+ carAvaliable[3].getName());
totalPassenger+= ((PassengerCar)carAvaliable[3]).getPassenger();
break;
default:
break;
}
}
System.out.println("\t共载人:"+totalPassenger+"人");
System.out.print("**可载货的车有:");
for(int i = 0 ;i<numOfCar;i++)
{
switch(theIndex[i])
{
case 3:
System.out.print(" "+ carAvaliable[2].getName());
totalTons+= ((PickUpCar)carAvaliable[2]).getCargo();
break;
case 5:
System.out.print(" "+ carAvaliable[4].getName());
totalTons+= ((CargoCar)carAvaliable[4]).getCargo();
break;
case 6:
System.out.print(" "+ carAvaliable[5].getName());
totalTons+= ((CargoCar)carAvaliable[5]).getCargo();
break;
default:
break;
}
}
System.out.println("\t共载物:"+totalTons+"吨");
System.out.println("**租车总价格:"+totalPrice+"元");
}
}
}