答答租車系統代碼--引用數組存儲租車信息,能自動計算賬單。也有自留坑,有需要的同學可以一起交流/ 請大神看看
看完第一季和第二季寫的答答租車系統代碼:
有需要的同學可以拿去試跑一下,也請和我交流一下,有什么可以改進的。因為最近做得東西大多數跟數據庫有關,做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();??//知道客人租幾天
}
} Test類,還有部分邏輯操作
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));???
}
}
}
2016-02-06
抱歉,上面的錯了,修改了一下
2016-04-30
厲害太厲害了
2016-04-28
感謝樓主,學到很多。謝謝
2016-03-28
題目里面要求要分別列出可以載客的車和可以載貨的車啊,還要算出總載人數和總載貨量,這兩個才是難點啊。兩個不同屬性,在子類里面有交叉。你卻直接把兩個量合成一個量當做字符出輸出了。。。。
2016-02-06
2016-01-06
好像還欠缺一點,如果租的天數不一樣好像程序就不能使用了;如果我2租3天,4租5天就算不了了
?????
?
2015-12-29
package?com.dada; 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+"輛車型編碼"); ????????while(carChoose[i]==0) ????????{?Scanner?inputCarNum?=?new?Scanner(System.in);?? ?????????//String[]?carChoose?=?null??;?? ????????int?a=0; ?????????a=inputCarNum.nextInt();//局部變量必須進行初始化, ????????if(a>=1&&a<=6) ????????{carChoose[i]?=a;}? ????????else{?System.out.println("請重新輸入");}//數組存儲客戶輸入的租車編碼,如果有數據庫,一般通過編碼去數據庫選取,這里只能hardcode ????????}} ????} ????? ????public?void?rentDay(){ ????????System.out.println("您好,請輸入要租車的天數:"); ????????Scanner?input?=?new?Scanner(System.in); ????????rentDur?=?input.nextInt();??//知道客人租幾天 ????} ????? ????? }