1功能介绍:
1项目要求
使用Java语言,实现共享单车的投放,借出,查看,删除,回收,以及借出次数排行榜
2各类层调用关系
启动类调用打印类,打印类调用业务层类,业务层类调用数据库类,数据库类调用实体类
2编写程序执行入口,启动类
程序的主方法所在
/**
* 启动类
* @author li
*
*/
public class App {
public static void main(String[] args) {
new pageUi().indexPageUi(); //创建匿名对象
System.out.println("=====你退出了迷你共享单车管理系统=====");
}
}
3首页页面打印类
实现程序主页面循环打印,以及具体方法的调用
import java.util.Scanner;
/**
* 页面打印类
* @author li
*
*/
public class PageUi {
/**
* 首页
*/
public void indexPageUi(){
int key;
String yn=null;
Scanner scanner =new Scanner(System.in);
do {
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("----------------------------------------");
System.out.println ("请输入需要操作项序号: ");
key=scanner.nextInt();
switch(key) {
case 1 :
addBikePage();//投放
break;
case 2:
checkBikePage();//查看,输出单车信息
break;
case 3:
deletaBikePage();//删除
break;
case 4:
boorrowBikePage();//借出
break;
case 5:
returnBikePage();//归还
break;
case 6:
rankingList();//排行榜
break;
default :
System.out.println("输入菜单错误");
}
System.out.println("是否继续 y/n");
yn=scanner.next();
}while(yn.equalsIgnoreCase("y"));
}
/**
* 1.投放单车页面
*/
public void addBikePage(){
System.out.println("++投放单车++");
//公司列表
ShareBikeCompany[] companys=DataBase.companys;
for(ShareBikeCompany company:companys) {
System.out.println(company.getId()+""+company.getName());
}
//选择公司id
Scanner scanner =new Scanner(System.in);
System.out.println("请选择公司id:");
int cpid=scanner.nextInt();
//输入要投放单车数量
System.out.println("请输入要投放单车数量:");
int count=scanner.nextInt();
//完成投放
new DateOpration().addBikeOpration(cpid, count);
}
/**
* 2.查看单车页面
*/
public void checkBikePage() {
System.out.println("++查看单车++");
new DateOpration().checkBikeOpration();
}
/**
* 3.删除单车页面
*/
public void deletaBikePage() {
System.out.println("++删除单车++");
//输入公司id,以及单车id
ShareBikeCompany[] companys=DataBase.companys;
//遍历公司列表
for(ShareBikeCompany company: companys) {
System.out.println(company.getId()+""+company.getName());
}
Scanner scanner =new Scanner(System.in);
System.out.println("请输入公司id");
int cpid =scanner.nextInt();
System.out.println("请输入单车id");
int bikeId=scanner.nextInt();
//删除单车业务
new DateOpration().deletaBikeOpration(cpid,bikeId);
}
/**
* 4.借出单车页面
*/
public void boorrowBikePage() {
System.out.println("++借出单车++");
//输入公司id,以及单车id
ShareBikeCompany[] companys=DataBase.companys;
//遍历公司列表
for(ShareBikeCompany company: companys) {
System.out.println(company.getId()+""+company.getName());
}
Scanner scanner =new Scanner(System.in);
System.out.println("请输入公司id");
int cpid =scanner.nextInt();
System.out.println("请输入单车id");
int bikeId=scanner.nextInt();
//借出单车业务
new DateOpration().boorrowBikeOpration(cpid,bikeId);
}
/**
* 5.归还单车页面
*
*/
public void returnBikePage() {
System.out.println("++归还单车++");
//输入公司id,以及单车id
ShareBikeCompany[] companys=DataBase.companys;
//遍历公司列表
for(ShareBikeCompany company: companys) {
System.out.println(company.getId()+""+company.getName());
}
Scanner scanner =new Scanner(System.in);
System.out.println("请输入公司id");
int cpid =scanner.nextInt();
System.out.println("请输入单车id");
int bikeId=scanner.nextInt();
//归还单车业务
new DateOpration().returnBikeOpration(cpid,bikeId);
}
/**
* 6.排行榜页面
*/
public void rankingList() {
System.out.println("++排行榜++");
new DateOpration().rankingOpration();
}
}
4共享单车实体类
import java.util.Date;
/**
* 共享单车实体类
* @author LI
*
*/
public class ShareBike {
/**
* 单车编号
*/
private int id;
/**
* 单车名称
*/
public String name;
/**
* 是否借出,ture表示借出.....
*/
public boolean status;
/**
* 借出时间
*/
public Date boorowTime;
public ShareBike() {
}
public ShareBike(int id,String name,boolean status,Date boorowTime) {
this.boorowTime=this.boorowTime;
this.id=id;
this.name=name;
this.status=status;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
public Date getBoorowTime() {
return boorowTime;
}
public void setBoorowTime(Date boorowTime) {
this.boorowTime = boorowTime;
}
}
5公司实体类
/**
* 公司信息实体类
* @author LI
*
*/
public class ShareBikeCompany {
/**
* 公司编号
*/
private int id;
/**
* 公司名称
*/
private String name;
/**
* 拥有单车数量
*/
private int sum;
/**
* 单车借出次数
*/
private int count;
/**
* 拥有单车列表
*/
private ShareBike[] sharebike;
public ShareBikeCompany() {
}
public ShareBikeCompany(int id,String name,int sum,int count,ShareBike[] sharebike) {
this.count=count;
this.id=id;
this.name=name;
this.sum=sum;
this.sharebike=sharebike;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSum() {
return sum;
}
public void setSum(int sum) {
this.sum = sum;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public ShareBike[] getSharebike() {
return sharebike;
}
public void setSharebike(ShareBike[] sharebike) {
this.sharebike = sharebike;
}
}
6数据库类
/**
* 数据库类
* @author LI
*
*/
public class DataBase {
/**
* 公司列表
*/
public static ShareBikeCompany[] companys;
/**
* 公司列表初始化
*/
static {
companys=new ShareBikeCompany[3];
//初始化公司信息
companys[0]=new ShareBikeCompany(1,"美团公司",2,3,null);
companys[1]=new ShareBikeCompany(2,"支付宝公司",2,2,null);
companys[2]=new ShareBikeCompany(3,"滴滴公司",2,8,null);
//初始化每个公司单车列表
ShareBike[] bikes1=new ShareBike[2];
bikes1[0]=new ShareBike(1001,"美团单车",false,null);
bikes1[1]=new ShareBike(1002,"美团单车",false,null);
companys[0].setSharebike(bikes1);
ShareBike[] bikes2=new ShareBike[2];
bikes2[0]=new ShareBike(1001,"哈罗单车",false,null);
bikes2[1]=new ShareBike(1002,"哈罗单车",false,null);
companys[1].setSharebike(bikes2);
ShareBike[] bikes3=new ShareBike[2];
bikes3[0]=new ShareBike(1001,"青桔单车",false,null);
bikes3[1]=new ShareBike(1002,"青桔单车",false,null);
companys[2].setSharebike(bikes3);
}
}
7业务层接口
/**
* 业务层接口
* @author LI
*
*/
public interface IDataOpration {
/**
* 1.投放单车
*/
public void addBikeOpration(int cpid,int count);
/**
* 2.查看单车
*/
public void checkBikeOpration() ;
/**
* 3.删除单车
*/
public void deletaBikeOpration(int cpid,int bikeId);
/**
* 4.借出单车
*/
public void boorrowBikeOpration(int cpid,int bikeId) ;
/**
* 5.归还单车
*/
public void returnBikeOpration(int cpid,int bikeId);
/**
* 排行榜
*/
public void rankingOpration();
}
8业务层类
import java.util.Arrays;
import java.util.Comparator;
import java.util.Date;
/**
* 主业务层,实现接口
* @author LI
*
*/
public class DateOpration implements IDataOpration{
1.投放单车
/**
* 1.投放单车
*/
public void addBikeOpration(int cpid,int count){
//导入数据库
ShareBikeCompany[] companys=DataBase.companys;
boolean flag=false;
for(ShareBikeCompany company:companys) {
//公司存在
if(company.getId()==cpid) {
//投放count个单车
flag=true;
//该公司旧的单车数组,导入数据库
ShareBike[] bikes=company.getSharebike();
//新数组
ShareBike[] bikes2=Arrays.copyOf(bikes, bikes.length+count);
//新增单车
for(int i=0;i<count;i++) {
ShareBike bike =new ShareBike();
bike.setId(bikes2[bikes.length+i-1].getId()+1);
bike.setName(bikes2[bikes.length+i-1].getName());
bike.setStatus(false);
bike.setBoorowTime(null);
bikes2[bikes.length+i]=bike;
}
//更新公司单车列表
company.setSharebike(bikes2);
//更新公司单车数量
company.setSum(count+company.getSum());
break;
}
}
if(!flag) {
System.out.println("公司不存在,添加单车失败");
}
}
2.查看单车
/**
* 2.查看单车
*/
public void checkBikeOpration() {
ShareBikeCompany[] companys=DataBase.companys;
//遍历数组,公司列表
for(ShareBikeCompany company:companys) {
System.out.println("公司编号 公司名称 单车数量 借出次数");
System.out.println(company.getId()+"\t"+company.getName()+"\t"+company.getSum()+"\t"+company.getCount());
//单车列表
ShareBike[] bikes =company.getSharebike();
System.out.println("单车id,单车名称,是否借出,借出时间");
for(ShareBike bike:bikes) {
System.out.println(bike.getId()+"\t"+bike.getName()+"\t"+bike.isStatus()+"\t"+bike.getBoorowTime());
}
}
}
3.删除单车
/**
* 3.删除单车
*/
public void deletaBikeOpration(int cpid,int bikeId) {
//获取公司列表
ShareBikeCompany[] companys =DataBase.companys;
boolean flag1=false;
for(ShareBikeCompany company:companys) {
if(company.getId()==cpid) {
//公司存在
flag1=true;
//获取单车列表
ShareBike[] bikes=company.getSharebike();
int index=0;
//遍历寻找目标单车
boolean flag2=false;
for(int i=0;i<bikes.length;i++) {
if(bikes[i].getId()==bikeId) {
//单车存在
index=i;
flag2=true;
//如果借出,不能删除
if(bikes[i].isStatus()) {
System.out.println("该单车借出,不能删除");
return;
}
//删除操作
bikes[i]=null;
break;
}
}
if(!flag2) {
System.out.println("该单车不存在,删除失败");
}
//删除后,后面元素前移
for(int i=index+1;i<bikes.length;i++) {
bikes[i-1]=bikes[i];
}
ShareBike[] bikes2=Arrays.copyOf(bikes, bikes.length-1);
//修改公司单车列表
company.setSharebike(bikes2);
company.setSum(company.getSum()-1);
System.out.println("删除成功");
break;
}
}
if(!flag1) {
System.out.println("该公司不存在,删除失败");
}
}
4.借出单车
/**
* 4.借出单车
*/
public void boorrowBikeOpration(int cpid ,int bikeId) {
//获取公司列表
ShareBikeCompany[] companys =DataBase.companys;
boolean flag1=false;
for(ShareBikeCompany company:companys) {
if(company.getId()==cpid) {
//公司存在
flag1=true;
//获取单车列表
ShareBike[] bikes=company.getSharebike();
int index=0;
//遍历寻找目标单车
boolean flag2=false;
for(int i=0;i<bikes.length;i++) {
if(bikes[i].getId()==bikeId) {
//单车存在
index=i;
flag2=true;
//如果借出,不能删除
if(bikes[i].isStatus()) {
System.out.println("该单车借出,不能再次借出");
return;
}
//借出操作
bikes[i].setStatus(true);
bikes[i].setBoorowTime(new Date());
company.setCount(company.getCount()+1);
break;
}
}
if(!flag2) {
System.out.println("该单车不存在,借出失败");
}
System.out.println("借出成功");
break;
}
}
if(!flag1) {
System.out.println("该公司不存在,删除失败");
}
}
5.归还单车
/**
* 5.归还单车
*/
public void returnBikeOpration(int cpid,int bikeId) {
//获取公司列表
ShareBikeCompany[] companys =DataBase.companys;
boolean flag1=false;
for(ShareBikeCompany company:companys) {
if(company.getId()==cpid) {
//公司存在
flag1=true;
//获取单车列表
ShareBike[] bikes=company.getSharebike();
int index=0;
//遍历寻找目标单车
boolean flag2=false;
for(int i=0;i<bikes.length;i++) {
if(bikes[i].getId()==bikeId) {
//单车存在
index=i;
flag2=true;
//如果未借出,不能归还
if(!bikes[i].isStatus()) {
System.out.println("该单车未借出,归还失败");
return;
}
//付钱
Date borrowTime=bikes[i].getBoorowTime();
Date returnTime =new Date();
//相差毫秒数
long time=returnTime.getTime()-borrowTime.getTime();
//一分钟两毛,按分钟计费
long time1=time/1000/60;
System.out.println("应付金额:"+time1*0.2+"元");
//归还操作
bikes[i].setStatus(false);
bikes[i].setBoorowTime(null);
break;
}
}
if(!flag2) {
System.out.println("该单车不存在,归还失败");
}
System.out.println("归还成功");
break;
}
}
if(!flag1) {
System.out.println("该公司不存在,归还失败");
}
}
6排行榜
/**
* 排行榜
*/
public void rankingOpration() {
//排序
Arrays.sort(DataBase.companys,new Comparator<ShareBikeCompany>() {
@Override
public int compare(ShareBikeCompany o1, ShareBikeCompany o2) {
return o2.getCount()-o1.getCount();
}
});
for(ShareBikeCompany company:DataBase.companys) {
System.out.println(company.getName()+""+company.getCount());
}
}
}