Java实现租车管理系统
这篇文章主要为大家详细介绍了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;
this.date =new string;
this.isloan =new boolean;
this.loansize =new long;
}
}
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 = "陆巡";
car.isloan = true;
car.date = "2017-7-1";
car.loansize = 30;
car.name = "霸道";
car.isloan = false;
car.loansize = 30;
car.name = "汉兰达";
car.isloan = false;
car.loansize = 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==null){
car.name=name;
car.date=null;
car.isloan=false;
car.loansize=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==null){
break;
}
else if(isyes){
if(car.isloan && name.equals(car.name)){
system.out.println("\""+name+"\""+"处于借出状态,不能删除!正在查找其他符合要求的车辆...");
}
car.name=null;
car.date=null;
car.isloan=false;
car.loansize=0;
}
else if(name.equals(car.name) && !car.isloan){
j=j==0?i+1:j+1;
flag=true;
while(j<car.name.length && car.name!=null && name.equals(car.name) && !car.isloan)
j++;
if(j<car.name.length && car.name!=null){
car.name=car.name;
car.date=car.date;
car.loansize=car.loansize;
car.isloan=car.isloan;
system.out.println("删除"+"\""+name+"\""+"成功!");
}
else{
isyes=true;
i--;
}
}
else if(car.isloan && name.equals(car.name)){
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 == null) {
break;
} else if (car.isloan == true) {
system.out.println((i + 1) + "\t已借出\t" + car.name + "\t\t"
+ car.date);
} else if (car.isloan == false) {
system.out.println((i + 1) + "\t可 借\t" + car.name);
}
}
returnmain();
}
public void car_print_rank(){
string[] name=new string;
long[] loansize=new long;
int i;
for (i = 0; i < car.name.length; i++) { //copyarray
if(car.name==null){
break;
}
else{
name=car.name;
loansize=car.loansize;
}
}
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<loansize){
flag=j2;
}
}
if(flag!=j){ //swap
string temps = name;
long tempi = loansize;
name = name;
loansize = loansize;
name = temps;
loansize = tempi;
}
system.out.println((j+1)+"\t\t"+name+"\t\t"+loansize);
}
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==null){
break;
}
else if(name.equals(car.name)){
flag=true;
if(car.isloan){
system.out.println("对不起,"+"\""+name+"\""+"已外借,正在为您查询其他同类型车辆,请稍后...");
}
else{
car.isloan=true;
car.date=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==null){
break;
}
else if(name.equals(car.name) && car.isloan){
isyes=true;
flag=true;
simpledateformat sj=new simpledateformat("yyyy-mm-dd");
try{
date d1=sj.parse(car.date);
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=false;
car.loansize+=time;
car.date=null;
}
}
break;
}
else if(name.equals(car.name) && !car.isloan){
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方法就不要运行它。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持CodeAE代码之家。
原文链接:https://blog.csdn.net/calculate23/article/details/80113890
http://www.zzvips.com/article/176036.html
页:
[1]