Java实现租车管理系统
程序员文章站
2024-02-29 22:39:04
需求:
完成一个和用户互动的租车管理系统,当中包括基础的增删改查,以及输出实时地热度排行榜!
功能设计:
在工程的包com.test02中,搭建4个类,分别是程序启动...
需求:
完成一个和用户互动的租车管理系统,当中包括基础的增删改查,以及输出实时地热度排行榜!
功能设计:
在工程的包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方法就不要运行它。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。