Java Implements a Car Rental Management System

  • 2021-06-28 12:26:31
  • OfStack

Requirements:

Complete a rental management system that interacts with users, including basic addition and deletion checks, and output real-time geothermal charts!

Functional design:

In the project package com.Test02, four classes are built, namely program startup (carSysStart), console (carConsole), data storage memory library (carData_base), Functional Class of the System (carFunction)

The code is as follows:

1. Program startup


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. Console


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. Data Storage Memory Repository


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. Functional Classes of the System


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些情况探讨
 * 1.库中有多辆符合要求的车辆。
 * 解决:默认借出第1辆符合要求的车
 * 2.库中有多辆正在借出的同名车。(不知道还哪辆) 
 * 解决:
 * 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;
 }
}

Summary:

For object-oriented learning, there are nearly one step in these two days, learning to encapsulate members of a class by setting their privileges to private, and then setting an interface declares a way to operate on it and how to get it.

There are several problems in the coding of the system that need to be improved:

1. Similar to the structure ordering in C/C++, Java also has sort's method of customized ordering compare. Originally, the idea was to sort directly with the sort class of the collection. However, instead of using compare, it would be better to use the selective ordering for the turning bow, or master the content in the future.

2. Time calculation Java also has a corresponding DATE class, but I have only roughly learned how to calculate the difference between two dates (converting string to Date in the declared format, and then using getTime to calculate the difference between January 1, 1970 and the set date, noting that the units are milliseconds, the days are converted into units, and the type returned is long);

3.Java has try..catch..finally..Catching exceptions, which you haven't learned before. To prevent abnormal termination of the program at the time of conversion, put it in try to execute!

4. There is also a class that should not be run without the main method.


Related articles: