您好,登錄后才能下訂單哦!
需求:
完成一個(gè)和用戶互動(dòng)的租車管理系統(tǒng),當(dāng)中包括基礎(chǔ)的增刪改查,以及輸出實(shí)時(shí)地?zé)岫扰判邪?
功能設(shè)計(jì):
在工程的包c(diǎn)om.Test02中,搭建4個(gè)類,分別是程序啟動(dòng)(carSysStart)、控制臺(tái)(carConsole)、數(shù)據(jù)存儲(chǔ)內(nèi)存庫(carData_base)、系統(tǒng)的功能類(carFunction)
具體代碼如下:
1.程序啟動(dòng)
package com.Test02; public class carSysStart { public static void main(String[] args) { carConsole p=new carConsole(); p.setP(100); p.getP().initBaseinfo(); p.getInfo(); } }
2.控制臺(tái)
package com.Test02; import java.util.Scanner; public class carConsole { private Scanner cin=new Scanner(System.in); private carFunction p; private boolean isBase=false; public static void Prompt(){ //聲明靜態(tài)方法,之后其他類調(diào)用也不用先new System.out.println("歡 迎 使 用自助車輛 管 理 系統(tǒng)"); System.out.println("-------------------------------------"); System.out.println("1. 新 增 車輛"); System.out.println("2. 查 詢 車輛"); System.out.println("3. 刪 除 車輛"); System.out.println("4. 借 出 車輛"); System.out.println("5. 歸 還 車輛"); System.out.println("6. 排 行"); System.out.println("7. 退 出 "); System.out.print("--------------------------------------\n"); } public void setP(int maxSize) { if(maxSize>0){ this.p=new carFunction(maxSize); this.isBase=true; } else{ System.out.println("對(duì)不起,您要申請(qǐng)的內(nèi)存規(guī)模有誤!"); } } public carFunction getP(){ return p; } public void getInfo(){ if(isBase){ Prompt(); boolean isStart=true; while(isStart){ System.out.println("請(qǐng)選擇:"); int choice=cin.nextInt(); switch(choice){ case 1: System.out.println("請(qǐng)輸入新增車輛的名稱:"); p.car_Add(cin.next()); break; case 2: p.car_book_Find(); break; case 3: System.out.println("請(qǐng)輸入要?jiǎng)h除車輛的名字:"); p.car_Delete(cin.next()); break; case 4: System.out.println("請(qǐng)輸入要借出的車輛名稱:"); String name=cin.next(); System.out.println("請(qǐng)輸入借出的日期:"); String date=cin.next(); p.car_lend(name, date); break; case 5: System.out.println("請(qǐng)輸入要?dú)w還的車輛:"); String name1=cin.next(); System.out.println("請(qǐng)輸入歸還的日期:"); String date1=cin.next(); p.car_return(name1, date1); break; case 6: p.car_print_Rank(); break; case 7: isStart=p.exit(); System.out.println("借車系統(tǒng)退出成功!歡迎您下次繼續(xù)使用本系統(tǒng)!"); break; default: System.out.println("輸入有誤,請(qǐng)重新輸入!"); Prompt(); break; } } } else System.out.println("對(duì)不起,目前該系統(tǒng)的數(shù)據(jù)庫程序員小哥還在拼命打造中!詳情請(qǐng)聯(lián)系工作人員..."); } }
3.數(shù)據(jù)存儲(chǔ)內(nèi)存庫
package com.Test02; public class carData_base { String[] name; String[] date; boolean[] isLoan; long[] loanSize; public carData_base(int maxSize) { this.name =new String[maxSize]; this.date =new String[maxSize]; this.isLoan =new boolean[maxSize]; this.loanSize =new long[maxSize]; } }
4.系統(tǒng)各功能類
package com.Test02; import java.util.*; //import java.text.ParseException; import java.text.SimpleDateFormat; public class carFunction { carData_base car; public carFunction(int m){ car=new carData_base(m); } public void initBaseinfo(){ car.name[0] = "陸巡"; car.isLoan[0] = true; car.date[0] = "2017-7-1"; car.loanSize[0] = 30; car.name[1] = "霸道"; car.isLoan[1] = false; car.loanSize[1] = 30; car.name[2] = "漢蘭達(dá)"; car.isLoan[2] = false; car.loanSize[2] = 30; } public void returnMain(){ Scanner cin =new Scanner(System.in); System.out.println("*********************"); System.out.print("輸入0返回:"); if (cin.nextInt() == 0){ carConsole.Prompt(); } else { System.out.println("輸入錯(cuò)誤, 異常終止!"); System.exit(0); } } /* * 汽車系統(tǒng)的功能類 * 1.增加車輛信息 * 2.刪除車輛信息 * 3.改動(dòng)車輛信息(包括借出、歸還) * 4.查詢車輛信息 * */ public void car_Add(String name){ for (int i = 0; i < car.name.length; i++) { if(car.name[i]==null){ car.name[i]=name; car.date[i]=null; car.isLoan[i]=false; car.loanSize[i]=0; System.out.println("新增車輛"+"\""+name+"\""+"成功!"); break; } } returnMain(); } public void car_Delete(String name){ //功能:刪除目前在庫中的所有名字與name相同的車輛信息 //具體思路兩個(gè)游標(biāo):i表示當(dāng)前要操作(覆蓋,查詢)的下標(biāo),j表示之后可以往前移動(dòng)的元素下標(biāo); 時(shí)間復(fù)雜度 ≈ O(n) boolean isYes=false,flag=false; for (int i = 0,j = 0; i < car.name.length; i++) { if(car.name[i]==null){ break; } else if(isYes){ if(car.isLoan[j] && name.equals(car.name[j])){ System.out.println("\""+name+"\""+"處于借出狀態(tài),不能刪除!正在查找其他符合要求的車輛..."); } car.name[i]=null; car.date[i]=null; car.isLoan[i]=false; car.loanSize[i]=0; } else if(name.equals(car.name[i]) && !car.isLoan[i]){ j=j==0?i+1:j+1; flag=true; while(j<car.name.length && car.name[j]!=null && name.equals(car.name[j]) && !car.isLoan[j]) j++; if(j<car.name.length && car.name[j]!=null){ car.name[i]=car.name[j]; car.date[i]=car.date[j]; car.loanSize[i]=car.loanSize[j]; car.isLoan[i]=car.isLoan[j]; System.out.println("刪除"+"\""+name+"\""+"成功!"); } else{ isYes=true; i--; } } else if(car.isLoan[i] && name.equals(car.name[i])){ System.out.println("\""+name+"\""+"處于借出狀態(tài),不能刪除!正在查找其他符合要求的車輛..."); } } if(!flag){ System.out.println("庫中沒有您要?jiǎng)h除的車輛信息!"); } returnMain(); } public void car_book_Find(){ System.out.println("-----------> 查看---------->\n"); System.out.println("序號(hào)\t狀 態(tài)\t名稱\t\t借出日期"); for (int i = 0; i < car.name.length; i++) { if (car.name[i] == null) { break; } else if (car.isLoan[i] == true) { System.out.println((i + 1) + "\t已借出\t" + car.name[i] + "\t\t" + car.date[i]); } else if (car.isLoan[i] == false) { System.out.println((i + 1) + "\t可 借\t" + car.name[i]); } } returnMain(); } public void car_print_Rank(){ String[] Name=new String[car.name.length]; long[] loanSize=new long[car.name.length]; int i; for (i = 0; i < car.name.length; i++) { //copyArray if(car.name[i]==null){ break; } else{ Name[i]=car.name[i]; loanSize[i]=car.loanSize[i]; } } System.out.println("名次\t\t名稱\t\t熱度"); for (int j = 0,flag; j < i; j++) { //選擇排序+打印排行榜 flag=j; for (int j2 = j+1; j2 < i; j2++) { if(loanSize[flag]<loanSize[j2]){ flag=j2; } } if(flag!=j){ //swap String temps = Name[flag]; long tempi = loanSize[flag]; Name[flag] = Name[j]; loanSize[flag] = loanSize[j]; Name[j] = temps; loanSize[j] = tempi; } System.out.println((j+1)+"\t\t"+Name[j]+"\t\t"+loanSize[j]); } returnMain(); } /* * 借出和歸還一些情況探討 * 1.庫中有多輛符合要求的車輛。 * 解決:默認(rèn)借出第一輛符合要求的車 * 2.庫中有多輛正在借出的同名車。(不知道還哪輛) * 解決: * 1.用戶輸入的時(shí)候輸入借車的日期。 * 2.默認(rèn)歸還第一輛找到的車。以下采用第二種 * */ public void car_lend(String name,String date){ boolean isYes=false,flag=false; for (int i = 0; i < car.name.length; i++) { if(car.name[i]==null){ break; } else if(name.equals(car.name[i])){ flag=true; if(car.isLoan[i]){ System.out.println("對(duì)不起,"+"\""+name+"\""+"已外借,正在為您查詢其他同類型車輛,請(qǐng)稍后..."); } else{ car.isLoan[i]=true; car.date[i]=date; isYes=true; System.out.println("恭喜您!"+"\""+name+"\""+"借出成功!"); break; } } } if(!flag){ System.out.println("對(duì)不起,庫中尚未有"+"\""+name+"\""+"的信息!"); } else if(!isYes){ System.out.println("對(duì)不起,目前庫中的所有"+"\""+name+"\""+"車輛都已外借!"); } returnMain(); } public void car_return(String name,String date){ boolean isYes=false,flag=false; long Time=-1; for (int i = 0; i < car.name.length; i++) { if(car.name[i]==null){ break; } else if(name.equals(car.name[i]) && car.isLoan[i]){ isYes=true; flag=true; SimpleDateFormat sj=new SimpleDateFormat("yyyy-MM-dd"); try{ Date d1=sj.parse(car.date[i]); Date d2=sj.parse(date); Time=(d2.getTime()-d1.getTime())/(24*60*60*1000); }catch(Exception e){ System.out.println("計(jì)算時(shí)間時(shí)發(fā)生異常"); }finally{ if(Time!=-1){ System.out.println("您借出了"+Time+"天!"); car.isLoan[i]=false; car.loanSize[i]+=Time; car.date[i]=null; } } break; } else if(name.equals(car.name[i]) && !car.isLoan[i]){ isYes=true; } } if(isYes){ if(!flag){ System.out.println("本車庫的所有"+"\""+name+"\""+"車輛均已歸還,請(qǐng)您核對(duì)下輸入的信息是否有誤!"); } } else{ System.out.println("對(duì)不起,系統(tǒng)中尚未對(duì)"+"\""+name+"\""+"車輛的備案,請(qǐng)聯(lián)系后臺(tái)人員核實(shí)信息!"); } returnMain(); } public boolean exit(){ return false; } }
總結(jié):
對(duì)于面向?qū)ο蟮膶W(xué)習(xí)在這兩天有更近一步的學(xué)習(xí),學(xué)會(huì)了封裝類中的成員,其實(shí)就是將其權(quán)限設(shè)為私有,然后設(shè)置接口即聲明一個(gè)對(duì)其操作的方法以及得到它的方法。
在系統(tǒng)的編碼中遇到以下幾點(diǎn)問題需要改進(jìn)自己:
1.類似于C/C++中的結(jié)構(gòu)體排序的內(nèi)容,Java也有sort的自定義排序compare的方法,本來思路是想直接用集合的sort類排序,奈何不會(huì)用這個(gè)compare,就調(diào)轉(zhuǎn)船頭改用選擇排序了,日后還是要把這塊內(nèi)容掌握的;
2.時(shí)間的計(jì)算Java中也有對(duì)應(yīng)的DATE類,不過自己只是粗略學(xué)了計(jì)算兩個(gè)日期的差的運(yùn)算(用聲明的格式將string轉(zhuǎn)為Date,然后利用getTime計(jì)算1970年1月1號(hào)到所設(shè)日期的差值,注意的點(diǎn)是單位是毫秒,要得到天數(shù)還要進(jìn)行單位轉(zhuǎn)化,并且返回的類型是long);
3.Java中有try..catch..finally..捕捉異常,這點(diǎn)是之前沒學(xué)過的,在轉(zhuǎn)化時(shí)間的時(shí)候?yàn)榱朔乐巩惓=K止程序,將其放在try中執(zhí)行!
4.還有一個(gè)類中如果沒有main方法就不要運(yùn)行它。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。