Java实现租车管理系统

需求:

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

功能设计:

在工程的包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方法就不要运行它。

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

(0)

相关推荐

  • java实现客房管理系统

    本文实例为大家分享了java实现客房管理系统的具体代码,供大家参考,具体内容如下 AddClient.java import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.A

  • Java实现酒店客房管理系统

    本文实例为大家分享了Java实现酒店客房管理系统的具体代码,供大家参考,具体内容如下 LoginFrame.java package loginManage; import java.awt.Color; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing

  • 图书管理系统java代码实现

    本文实例为大家分享了java实现图书管理系统的具体代码,供大家参考,具体内容如下 /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:    <图书管理系统--java>                          * 作    者:       刘江波                       * 完成日期:    2012     年  3    

  • Java实现医院管理系统

    本文实例为大家分享了Java实现医院管理系统的具体代码,供大家参考,具体内容如下 1.开发工具 NetBeans8.2 Mysql5.7 mysql-connector-java-5.1.6.jar 2.演示 登录界面 增删查改界面 3.源码 CREATE TABLE user ( username varchar(255) NOT NULL, password varchar(255) DEFAULT NULL, PRIMARY KEY (username) ) ENGINE=InnoDB D

  • java实现科研信息管理系统

    一.前言 本学期学习了JAVA语言,在学期的结束,写一个有操作界面,与数据库关联的管理系统,用来巩固自己本学习所学的知识. 用到的知识:JAVA基础,JAVA界面设计(GUI),Oracle数据库(需要掌握数据库的基本操作语句),链接数据库. 使用的开发工具:MyEclipse Professional 2014 二.设计 我们管理的属性有:项目编号,项目名称,参与人员,负责人,项目开始时间,结束时间.科研项目系统主要有四个功能,对科研项目的增加.删除.修改.查询.以及为增加系统安全性所设计的登

  • 简单实现Java版学生管理系统

    本文实例为大家分享了Java实现学生管理系统的具体代码,供大家参考,具体内容如下 package BookDemo_1; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Test { public static void main(String[] args) { StudentSys stuSys=new StudentSys("学生管理系统"); stuSys.initWi

  • 一个简陋的java图书管理系统

    本文代码为原创一个简陋的管理系统,只做功能的测试.并没有去完善所有应有的功能,只做了输入输出查找,仅供参考! 菜单部分: import java.util.Scanner; public class Menu { int Min = 1; int Max = 3; public void getMenu(){ System.out.println("1.显示/2.输入/3.查找"); } public void getFindMenu(){ System.out.println(&qu

  • 图书管理系统java版

    本文的目的就是通过图书管理系统掌握数据库编程技术,能正确连接数据库,能对数据库中信息进行查询.插入.删除.修改. 内容:在数据库中创建一张书目信息表,包括书名.作者.出版社.出版日期.书号.价格字段.设计一个GUI界面进行书目管理.在该界面上有四个选项卡,分别是查询.插入.删除.修改.点击查询选项卡,出现的界面上有书名.作者.出版社.书号四个文本框,一个按钮和一个只读文本区.文本框内容可以为空,输入相应的查询信息后(例如根据书名查询可以仅输入书名),点击界面上的"查询"按钮,可以在界面

  • Java swing实现酒店管理系统

    今天给大家提供一个由今天给大家提供一个由Java swing实现的酒店管理系统,数据库采用sqlserver,我会贴上部分代码,完整的代码请看文章最下方下载,下面看代码: 1.主框架代码: package 主框架窗口; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEven

  • Java+Mysql学生管理系统源码

    最近正在学java和数据库,想起以前写的学生管理系统,都是从网上下载,敷衍了事.闲来无事,也就自己写了一个,不过功能实现的不是很多. 开发语言:java: 开发环境:Mysql, java: 开发工具:eclipse 开发此案例,首先得在电脑上有java开发环境和Mysql, java开发环境与Mysql的搭建,就不再叙述了,如果需要,请联系我最下面的联系方式:dingyelf@aliyun.com 此次系统比较简易:数据库中只有一个表:stu;功能:能够对学生增加.删除.修改. 开发步骤:  

随机推荐