首页 > 编程 > Java > 正文

Java实现租车管理系统

2019-11-26 09:18:26
字体:
来源:转载
供稿:网友

需求:

完成一个和用户互动的租车管理系统,当中包括基础的增删改查,以及输出实时地热度排行榜!

功能设计:

在工程的包com.Test02中,搭建4个类,分别是程序启动(carSysStart)、控制台(carConsole)、数据存储内存库(carData_base)、系统的功能类(carFunction)

具体代码如下:

1.程序启动

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.控制台

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(){ //声明静态方法,之后其他类调用也不用先new System.out.println("欢 迎 使 用自助车辆 管 理 系统"); 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("对不起,您要申请的内存规模有误!"); } }  public carFunction getP(){ return p; }  public void getInfo(){ if(isBase){ Prompt(); boolean isStart=true; while(isStart){ System.out.println("请选择:"); int choice=cin.nextInt(); switch(choice){ case 1:  System.out.println("请输入新增车辆的名称:");  p.car_Add(cin.next());  break; case 2:  p.car_book_Find();  break; case 3:  System.out.println("请输入要删除车辆的名字:");  p.car_Delete(cin.next());  break; case 4:  System.out.println("请输入要借出的车辆名称:");  String name=cin.next();  System.out.println("请输入借出的日期:");  String date=cin.next();  p.car_lend(name, date);  break; case 5:  System.out.println("请输入要归还的车辆:");  String name1=cin.next();  System.out.println("请输入归还的日期:");  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("借车系统退出成功!欢迎您下次继续使用本系统!");  break; default:  System.out.println("输入有误,请重新输入!");  Prompt();  break; } }  } else System.out.println("对不起,目前该系统的数据库程序员小哥还在拼命打造中!详情请联系工作人员..."); }}

3.数据存储内存库

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.系统各功能类

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] = "汉兰达"; 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("输入错误, 异常终止!"); System.exit(0); } }  /* * 汽车系统的功能类 * 1.增加车辆信息 * 2.删除车辆信息 * 3.改动车辆信息(包括借出、归还) * 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相同的车辆信息 //具体思路两个游标:i表示当前要操作(覆盖,查询)的下标,j表示之后可以往前移动的元素下标; 时间复杂度 ≈ 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+"/""+"处于借出状态,不能删除!正在查找其他符合要求的车辆..."); } 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+"/""+"处于借出状态,不能删除!正在查找其他符合要求的车辆..."); } } if(!flag){ System.out.println("库中没有您要删除的车辆信息!"); } returnMain(); }  public void car_book_Find(){ System.out.println("-----------> 查看---------->/n"); System.out.println("序号/t状 态/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.库中有多辆符合要求的车辆。 * 解决:默认借出第一辆符合要求的车 * 2.库中有多辆正在借出的同名车。(不知道还哪辆)  * 解决: * 1.用户输入的时候输入借车的日期。 * 2.默认归还第一辆找到的车。以下采用第二种 * */ 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("对不起,"+"/""+name+"/""+"已外借,正在为您查询其他同类型车辆,请稍后..."); } else{  car.isLoan[i]=true;  car.date[i]=date;  isYes=true;  System.out.println("恭喜您!"+"/""+name+"/""+"借出成功!");  break; } } } if(!flag){ System.out.println("对不起,库中尚未有"+"/""+name+"/""+"的信息!"); } else if(!isYes){ System.out.println("对不起,目前库中的所有"+"/""+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("计算时间时发生异常"); }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+"/""+"车辆均已归还,请您核对下输入的信息是否有误!"); } } else{ System.out.println("对不起,系统中尚未对"+"/""+name+"/""+"车辆的备案,请联系后台人员核实信息!"); } returnMain(); }  public boolean exit(){ return false; }}

总结:

对于面向对象的学习在这两天有更近一步的学习,学会了封装类中的成员,其实就是将其权限设为私有,然后设置接口即声明一个对其操作的方法以及得到它的方法。

在系统的编码中遇到以下几点问题需要改进自己:

1.类似于C/C++中的结构体排序的内容,Java也有sort的自定义排序compare的方法,本来思路是想直接用集合的sort类排序,奈何不会用这个compare,就调转船头改用选择排序了,日后还是要把这块内容掌握的;

2.时间的计算Java中也有对应的DATE类,不过自己只是粗略学了计算两个日期的差的运算(用声明的格式将string转为Date,然后利用getTime计算1970年1月1号到所设日期的差值,注意的点是单位是毫秒,要得到天数还要进行单位转化,并且返回的类型是long);

3.Java中有try..catch..finally..捕捉异常,这点是之前没学过的,在转化时间的时候为了防止异常终止程序,将其放在try中执行!

4.还有一个类中如果没有main方法就不要运行它。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表