迷你共享单车——面向对象完整版

迷你共享单车——面向对象版

前言:本项目是在记录自己在尚马学习独立完成的第一个项目的笔记。
目的是学习面向对象当中如何使用参数,以及方法怎么使用比较简单。
记录自己的思路与老师思路的差别之处,学习比较,欢迎大佬指正。

项目描述:

实现一个迷你单车的管理器,实现单车的增删改查功能,具体有1.投放单车、2.查看单车、3.删除单车、4.借出单车、5.归还单车、6.借出次数排序。每个模块的具体功能不再赘述,主要考察的是对增删改查的使用。


自己的实现:

在这里插入图片描述

本人的思路是,创建test文件来完成人机的交互,company文件来完成公司相关车辆的调动使用,另外两个文件就是公司对象与单车对象。

SharedBike文件:

import java.util.Date;

public class SharedBike {
    private int bid;        //单车编号
    private String bname;   //单车名称
    private int status;     //单车状态  0.已借出 1.可借出
    private Date borrowTime; //车辆借出时间
    private Date returnTime;

    public SharedBike() {
    }

    public SharedBike(int bid, String bname, int status, Date borrowTime, Date returnTime) {
        this.bid = bid;
        this.bname = bname;
        this.status = status;
        this.borrowTime = borrowTime;
        this.returnTime = returnTime;
    }

    public int getBid() {
        return bid;
    }

    public void setBid(int bid) {
        this.bid = bid;
    }

    public String getBname() {
        return bname;
    }

    public void setBname(String bname) {
        this.bname = bname;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public Date getBorrowTime() {
        return borrowTime;
    }

    public void setBorrowTime(Date borrowTime) {
        this.borrowTime = borrowTime;
    }

    public Date getReturnTime() {
        return returnTime;
    }

    public void setReturnTime(Date returnTime) {
        this.returnTime = returnTime;
    }
}

SharedBikeCompany文件:

public class SharedBikeCompany {
    private int bikeCompanyId; //公司id
    private String name; //公司名称
    private SharedBike[] sharedBikes; //公司持有的共享单车
    private int sum; //公司单车数量
    private int count;  //公司借车次数

    public SharedBikeCompany() {
    }

    public SharedBikeCompany(int bikeCompanyId, String name, SharedBike[] sharedBikes, int sum, int count) {
        this.bikeCompanyId = bikeCompanyId;
        this.name = name;
        this.sharedBikes = sharedBikes;
        this.sum = sum;
        this.count = count;
    }

    public int getBikeCompanyId() {
        return bikeCompanyId;
    }

    public void setBikeCompanyId(int bikeCompanyId) {
        this.bikeCompanyId = bikeCompanyId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public SharedBike[] getSharedBikes() {
        return sharedBikes;
    }

    public void setSharedBikes(SharedBike[] sharedBikes) {
        this.sharedBikes = sharedBikes;
    }

    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;
    }
}

company文件:

该文件是我自己设计系统的主要文件,主要完成了人机交互界面方法的具体实现。
具体方法解析:
1.createBike(): 该方法完成的是三个公司的创建,以及三个公司当中自行车的创建,默认每个公司当中已经有3辆自行车。
2.showBike(): 该方法里面完成了 对车辆的展示,以及当空间不足的时间对数组空间的扩容。为什么扩容和打印写在这个里面,因为先写的这个是我写的第一个方法,本人就写上了。
3.addBike(): 该方法主要完成了对车辆的添加功能,本人的想法是直接进行sum值的修改,然后通过showBike()方法将新添加的数组给具体化,本方法的不足是需要频繁的扩充数组,造成资源的浪费。
4.deleteBike(): 该方法使用双指针的解法,根据单车的ID来修改车辆的名字,主要是数组的覆盖,使用下一个覆盖这个名字。
5.returnBike(),borrowBike() : 这两个方法就是对Data类的使用,相比上面的比较简单。

import java.util.Arrays;
import java.util.Date;

public class Company {

    //创建公司
    static void newCompany(SharedBikeCompany sbcom1, SharedBikeCompany sbcom2, SharedBikeCompany sbcom3) {
        //创建三个公司
        SharedBikeCompany[] sharedBikeCompanies = new SharedBikeCompany[3];
        //创建公司对应的车辆
        createBike(sharedBikeCompanies, sbcom1, sbcom2, sbcom3);


    }

    public static void showBike(SharedBike[] sharedBike, SharedBikeCompany sbcom1) {
        if (sharedBike.length < sbcom1.getSum()) {
            SharedBike[] sharedBikes = new SharedBike[sbcom1.getSum()];
            //System.out.println(sbcom1.getSum());
            sharedBikes = Arrays.copyOf(sharedBike,sbcom1.getSum());

            for (int j = sharedBike.length; j < sbcom1.getSum(); j++) {
                SharedBike sb = new SharedBike();
                sharedBikes[j] = sb;
                sb.setBid((j + 1));
                sb.setBname(sbcom1.getName() + (j + 1));
                sb.setStatus(1);
            }
            sbcom1.setSharedBikes(sharedBikes);

        }

        //
        //if (sharedBike.equals(sbcom1.getSharedBikes())){
        for (int i = 0; i < sbcom1.getSum(); i++) {
            if (sbcom1.getSharedBikes()[i].getStatus() == 1) {
                System.out.println(sbcom1.getSharedBikes()[i].getBid() + "              " + sbcom1.getSharedBikes()[i].getBname() + "         " + "可借");
            } else {
                System.out.println(sbcom1.getSharedBikes()[i].getBid() + "              " + sbcom1.getSharedBikes()[i].getBname() + "    已借出     " + sbcom1.getSharedBikes()[i].getBorrowTime());
            }
        }
        //}
    }


    static void createBike(SharedBikeCompany[] sharedBikeCompanies, SharedBikeCompany sbcom1, SharedBikeCompany sbcom2, SharedBikeCompany sbcom3) {
        sharedBikeCompanies[0] = sbcom1;
        sharedBikeCompanies[1] = sbcom2;
        sharedBikeCompanies[2] = sbcom3;
        sharedBikeCompanies[0].setName("ofo单车");
        sharedBikeCompanies[0].setBikeCompanyId(1);
        sharedBikeCompanies[0].setSum(3);
        sharedBikeCompanies[0].setCount(100);
        sharedBikeCompanies[1].setName("halo单车");
        sharedBikeCompanies[1].setBikeCompanyId(2);
        sharedBikeCompanies[1].setSum(3);
        sharedBikeCompanies[1].setCount(200);
        sharedBikeCompanies[2].setName("摩拜 单车");
        sharedBikeCompanies[2].setBikeCompanyId(3);
        sharedBikeCompanies[2].setSum(3);
        sharedBikeCompanies[2].setCount(150);
        //创建三个公司对应的自行车
        for (int i = 0; i < sharedBikeCompanies.length; i++) {
            SharedBike[] sb_arrays = new SharedBike[sharedBikeCompanies[0].getSum()];
            for (int j = 0; j < sb_arrays.length; j++) {
                SharedBike sb = new SharedBike();
                sb_arrays[j] = sb;
                sb.setBid(j + 1);
                sb.setBname(sharedBikeCompanies[i].getName() + (j + 1));
                sb.setStatus(1);
            }
            sharedBikeCompanies[i].setSharedBikes(sb_arrays);
        }
    }

    public static void addBike(int num, int newSum, SharedBikeCompany sbcom1, SharedBikeCompany sbcom2, SharedBikeCompany sbcom3) {
        if (num == 1) {
            if (newSum > (sbcom1.getSum() - 3)) {
                System.out.println("空间不足,已经参照配置进行扩容");
                sbcom1.setSum((sbcom1.getSum() + newSum));
                System.out.println("已经按照比例投放完毕");
            } else {
                System.out.println("添加成功");
            }
        }
        if (num == 2) {
            if (newSum > (sbcom2.getSum() - 3)) {
                System.out.println("空间不足,已经参照配置进行扩容");
                sbcom2.setSum((sbcom2.getSum() + newSum));
                System.out.println("已经按照比例投放完毕");
            } else {
                System.out.println("添加成功");
            }
        }
        if (num == 3) {
            if (newSum > (sbcom3.getSum() - 3)) {
                System.out.println("空间不足,已经参照配置进行扩容");
                sbcom3.setSum((sbcom3.getSum() + newSum));
                System.out.println("已经按照比例投放完毕");
            } else {
                System.out.println("添加成功");
            }
        }


    }


    public static void deleteBike(int num2,SharedBike[] sharedBike,SharedBikeCompany sbcom1) {
        //双指针删除序号,让名字前进一个,序号不变。最后打印的时间少打印一个。
        int l =0;
        int r =0;
        while (r <  sbcom1.getSum()){
            if (sharedBike[l].getBid() == num2 && num2 <= sbcom1.getSum()){
                r++;
                sharedBike[l].setBname(sharedBike[r].getBname());
            }
                sharedBike[l].setBname(sharedBike[r].getBname());
            l++;
            r++;
        }
        sbcom1.setSum(sbcom1.getSum()-1);

    }



    public static void borrowBike(int number,SharedBike[] sharedBike,SharedBikeCompany sbcom1){
        for(int i=0;i<sharedBike.length;i++){
            if (sharedBike[i].getBid() == number){
                sharedBike[i].setStatus(0);
                sharedBike[i].setBorrowTime(new Date());
                sbcom1.setCount(sbcom1.getCount() +1);
            }
        }
    }


    public static void returnBike(int choice_num3, SharedBike[] sharedBikes, SharedBikeCompany sbcom1) {
        for(int i=0;i<sharedBikes.length;i++){
            if (sharedBikes[i].getBid() == choice_num3){
                sharedBikes[i].setStatus(1);
                sharedBikes[i].setReturnTime(new Date());
                System.out.println("你的还车时间是"+sharedBikes[i].getReturnTime());
                System.out.println("你的借车时间是:"+ sharedBikes[i].getBorrowTime());
                System.out.println("用车时间是"+(sharedBikes[i].getReturnTime().getTime() -  sharedBikes[i].getBorrowTime().getTime())+"毫秒");
                System.out.println("计费标准是1毫秒1分钱");
                System.out.println("收取你"+(sharedBikes[i].getReturnTime().getTime() -  sharedBikes[i].getBorrowTime().getTime())/100+"元");
            }
        }

    }
}

Test文件

笔者在该模块完成的是人机的交互。
Begin()方法: 是开始。
putBike(): 是调用上面文件当中的addBike的方法。
该文件中的方法主要是完成人机界面的交互,通过这里的方法来调用Company文件当中的方法。
rankBike(): 该方法使用冒泡排序来完成对这三个公司车辆的排序,不严谨,需要我们重新创建一个新的公司数组来存储公司,不然会因为你排序之和,原来公司的顺序别破坏。

import org.w3c.dom.ls.LSOutput;

import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("欢迎使用迷你共享单车系统");
        int num;
        //sbcom1.setSharedBikes(new SharedBike[3]);
        start(sc);



    }

    private static void start(Scanner sc) {
        int num;

        SharedBikeCompany sbcom1 = new SharedBikeCompany();
        SharedBikeCompany sbcom2 = new SharedBikeCompany();
        SharedBikeCompany sbcom3 = new SharedBikeCompany();
        SharedBikeCompany [] arrays= new SharedBikeCompany[3];
        arrays[0] = sbcom1;
        arrays[1] = sbcom2;
        arrays[2] = sbcom3;
        sbcom1.setSharedBikes(new SharedBike[3]);

        Company.newCompany(sbcom1,sbcom2,sbcom3);//创建三个公司

        do {
            Begin();
            System.out.println("请选择");
            int choose = sc.nextInt();
            switch (choose){
                case 1:
                    System.out.println("1.投放Bike");
                    putBike(sbcom1,sbcom2,sbcom3);
                    break;
                case 2:
                    System.out.println("2.查看Bike");
                    checkBike(sbcom1,sbcom2,sbcom3);
                    break;
                case 3:
                    System.out.println("3.删除Bike");
                    deleteBike(sbcom1,sbcom2,sbcom3);
                    break;
                case 4:
                    System.out.println(" 4.借出Bike");
                    borrowBike(sbcom1,sbcom2,sbcom3);
                    break;
                case 5:
                    System.out.println("5.归还Bike");
                    returnBike(sbcom1,sbcom2,sbcom3);
                    break;
                case 6:
                    System.out.println("Bike排行榜");
                    rankBike(arrays);
                    break;
                case 7:
                    System.exit(0);
                default:
                    System.out.println("输入错误,请返回后重新输入");
            }
            System.out.println("输入0返回");
            num = sc.nextInt();
        }while (num ==0);
    }

    public static void Begin(){
        System.out.println("*********************************************************************************************");
        System.out.println("                               1.投放Bike");
        System.out.println("                               2.查看Bike");
        System.out.println("                               3.删除Bike");
        System.out.println("                               4.借出Bike");
        System.out.println("                               5.归还Bike");
        System.out.println("                               6.Bike排行榜");
        System.out.println("                               7.退出");
        System.out.println("*********************************************************************************************");
    }


    public static void putBike(SharedBikeCompany sbcom1,SharedBikeCompany sbcom2,SharedBikeCompany sbcom3) {
        System.out.println("1.ofo单车");
        System.out.println("2.halo单车");
        System.out.println("3.摩拜单车");
        System.out.println("请你输入要投入的品牌1-3");
        Scanner sc = new Scanner(System.in);
        int num =sc.nextInt();
        System.out.println("输入你要投放的数量");
        int newSum = sc.nextInt();
        Company.addBike(num,newSum,sbcom1,sbcom2,sbcom3);



    }

    public static void checkBike(SharedBikeCompany sbcom1,SharedBikeCompany sbcom2,SharedBikeCompany sbcom3) {
        System.out.println("♦----------------------------------------------------------------♦");
        System.out.println("|   公司序号   |   公司名称   |    公司单车数量    | 公司单车借出的数量");
        System.out.println("♦----------------------------------------------------------------♦");
        System.out.println("|"+"  "+sbcom1.getBikeCompanyId()+"          |   "+sbcom1.getName()+"     |   "+sbcom1.getSum()+"          |          "+sbcom1.getCount() +"           |");
        System.out.println("单车序号       单车品牌         单车状态         借出时间");
        Company.showBike(sbcom1.getSharedBikes(),sbcom1);
        System.out.println("♦----------------------------------------------------------------♦");
        System.out.println("|   公司序号   |   公司名称   |    公司单车数量    | 公司单车借出的数量");
        System.out.println("♦----------------------------------------------------------------♦");
        System.out.println("|"+"  "+sbcom2.getBikeCompanyId()+"          |   "+sbcom2.getName()+"    |   "+sbcom2.getSum()+"          |          "+sbcom2.getCount() +"           |");
        System.out.println("单车序号       单车品牌         单车状态         借出时间");
        Company.showBike(sbcom2.getSharedBikes(),sbcom2);
        System.out.println("♦----------------------------------------------------------------♦");
        System.out.println("|   公司序号   |   公司名称   |    公司单车数量    | 公司单车借出的数量");
        System.out.println("♦----------------------------------------------------------------♦");
        System.out.println("|"+"  "+sbcom3.getBikeCompanyId()+"          |   "+sbcom3.getName()+"   |   "+sbcom3.getSum()+"          |          "+sbcom3.getCount() +"           |");
        System.out.println("单车序号       单车品牌         单车状态         借出时间");
        Company.showBike(sbcom3.getSharedBikes(),sbcom3);
    }

    public static void deleteBike(SharedBikeCompany sbcom1,SharedBikeCompany sbcom2,SharedBikeCompany sbcom3) {
        System.out.println("1.ofo单车");
        System.out.println("2.halo单车");
        System.out.println("3.摩拜单车");
        System.out.println("请你输入要删除的品牌1-3");
        Scanner sc = new Scanner(System.in);
        int num =sc.nextInt();
        if (num ==1){
            System.out.println("此"+sbcom1.getName()+"如下");
            System.out.println("单车序号       单车品牌         单车状态         借出时间");
            Company.showBike(sbcom1.getSharedBikes(),sbcom1);
        }else if (num ==2){
            System.out.println("此"+sbcom2.getName()+"如下");
            System.out.println("单车序号       单车品牌         单车状态         借出时间");
            Company.showBike(sbcom2.getSharedBikes(),sbcom2);
        }else if(num ==3){
            System.out.println("此"+sbcom3.getName()+"如下");
            System.out.println("单车序号       单车品牌         单车状态         借出时间");
            Company.showBike(sbcom3.getSharedBikes(),sbcom3);
        }else {
            System.out.println("输入错误");
        }
        switch (num){
            case 1:
                System.out.println("输入要删除的序号");
                int  delete_num = sc.nextInt();
                Company.deleteBike(delete_num,sbcom1.getSharedBikes(),sbcom1);
                break;
            case 2:
                System.out.println("输入要删除的序号");
                int  delete_num2 = sc.nextInt();
                Company.deleteBike(delete_num2,sbcom2.getSharedBikes(),sbcom2);
                break;
            case 3:
                System.out.println("输入要删除的序号");
                int  delete_num3 = sc.nextInt();
                Company.deleteBike(delete_num3,sbcom2.getSharedBikes(),sbcom3);
                break;
            default:
                System.out.println("输入错误");
                break;
        }
        System.out.println("删除结束");


    }

    public static void borrowBike(SharedBikeCompany sbcom1,SharedBikeCompany sbcom2,SharedBikeCompany sbcom3) {
        System.out.println("1.ofo单车");
        System.out.println("2.halo单车");
        System.out.println("3.摩拜单车");
        System.out.println("请你输入要操作的品牌1-3");
        Scanner sc = new Scanner(System.in);
        int num =sc.nextInt();
        if (num ==1){
            System.out.println("此"+sbcom1.getName()+"如下");
            System.out.println("单车序号       单车品牌         单车状态         借出时间");
            Company.showBike(sbcom1.getSharedBikes(),sbcom1);
        }else if (num ==2){
            System.out.println("此"+sbcom2.getName()+"如下");
            System.out.println("单车序号       单车品牌         单车状态         借出时间");
            Company.showBike(sbcom2.getSharedBikes(),sbcom2);
        }else {
            System.out.println("此"+sbcom3.getName()+"如下");
            System.out.println("单车序号       单车品牌         单车状态         借出时间");
            Company.showBike(sbcom3.getSharedBikes(),sbcom3);
        }
        switch (num){
            case 1:
                System.out.println("输入要借车的序号");
                int  choice_num = sc.nextInt();
                Company.borrowBike(choice_num,sbcom1.getSharedBikes(),sbcom1);
                break;
            case 2:
                System.out.println("输入要借车的序号");
                int  choice_num2 = sc.nextInt();
                Company.borrowBike(choice_num2,sbcom2.getSharedBikes(),sbcom2);
                break;
            case 3:
                System.out.println("输入要借车的序号");
                int  choice_num3 = sc.nextInt();
                Company.borrowBike(choice_num3,sbcom2.getSharedBikes(),sbcom3);
                break;
            default:
                System.out.println("输入错误");
                break;
        }
        System.out.println("借车结束");

    }

    public static void returnBike(SharedBikeCompany sbcom1,SharedBikeCompany sbcom2,SharedBikeCompany sbcom3) {
        System.out.println("1.ofo单车");
        System.out.println("2.halo单车");
        System.out.println("3.摩拜单车");
        System.out.println("请你输入要操作的品牌1-3");
        Scanner sc = new Scanner(System.in);
        int num =sc.nextInt();
        switch (num){
            case 1:
                System.out.println("输入要还车的序号");
                int  choice_num = sc.nextInt();
                Company.returnBike(choice_num,sbcom1.getSharedBikes(),sbcom1);
                break;
            case 2:
                System.out.println("输入要还车的序号");
                int  choice_num2 = sc.nextInt();
                Company.returnBike(choice_num2,sbcom2.getSharedBikes(),sbcom2);
                break;
            case 3:
                System.out.println("输入要还车的序号");
                int  choice_num3 = sc.nextInt();
                Company.returnBike(choice_num3,sbcom2.getSharedBikes(),sbcom3);
                break;
            default:
                System.out.println("输入错误");
                break;
        }
        System.out.println("还车结束");
    }

    public static void rankBike(SharedBikeCompany [] arrays) {
        for(int i=0 ;i<2;i++){
            for (int j =i+1 ;j<3;j++){
                if (arrays[i].getCount() > arrays[j].getCount()){
                    SharedBikeCompany temp = arrays[i];
                    arrays[i] = arrays[j];
                    arrays[j] = temp;
                }
            }
        }
        System.out.println("公司名称           借车次数");
        for (int i=2;i>=0;i--) {
            System.out.println(arrays[i].getName() + "      "+arrays[i].getCount());
        }
    }
}

个人方法的总结:

本人自己实现的方法代码的冗余程度比较高,而且每个方法的传递参数过多,容易造成思路的混乱,需要改进。


老师的实现:

在这里插入图片描述

老师的代码思路清晰,代码冗余较少,且每个文件都有自己需要实现的功能,不需要那么多参数的传递。

ShareBikeInter 接口

该接口将车辆的增删改查抽象。为以后大项目的开发减少冗余度。

//面向接口编程 更高的抽象层
//接口 更像 一个角色(具备的功能)
public interface ShareBikeInter {
    /**
     * 添加单车 投放
     *
     * @param num :投放的数量
     */
    //对单车的增删改查
    void addBike(int num);

    /**
     * 查询所有单车
     *
     * @return :返回的是一个数组
     */
    ShareBike[] queryAll();

    /**
     * 根据id查询指定的单车
     *
     * @param bikeId
     * @return
     */
    ShareBike queryById(int bikeId);

    /**
     * 根据单车id 借车
     *
     * @param bikeId
     */
    void borrowBike(int bikeId);

    /**
     * 换车
     *
     * @param bikeId
     */
    void backBike(int bikeId);

    /**
     * 根据单车id删除某辆车
     *
     * @param bikeId
     */
    void deleteBike(int bikeId);
}

ShareBike文件:

文件主要是对bike对象的实现,因为车辆的操作是在公司的基础上去创建的,所以该文件当中不要实现对应的方法。



import java.util.Date;

public class ShareBike {
    //单车id: 唯一标识符 不可重复的 和人的身份证号码id类似
    private int id;
    //1:可以借出 0:已经借出了
    private int status;
    // 单车被借出的时间
    private Date borrowTime;

    public ShareBike() {
    }

    public ShareBike(int id, int status, Date borrowTime) {
        this.id = id;
        this.status = status;
        this.borrowTime = borrowTime;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public Date getBorrowTime() {
        return borrowTime;
    }

    public void setBorrowTime(Date borrowTime) {
        this.borrowTime = borrowTime;
    }
}

ShareBikeCompany文件

该文件是具体的方法的实现界面,实现了接口,重写接口当中的方法。
addBike(): 方法实现了车辆的投放功能,传入的参数是添加的数目,难点是数组长度的判断,已经数组的扩容,扩容一般扩大一点,不能像我自己写的方法一样每次投放都需要扩容。
deleteBike(): 该方法实现了车辆的删除,与我的思路不同的是,老师根据车辆id直接修改了整个数组当中车辆的值,而我只是将数组中的名字前移了,个人感觉我的方法更好一些。
borrowBike(),backBike(): 根据传入的参数来修改车辆的状态。

import java.util.Arrays;
import java.util.Date;

public abstract class ShareBikeCompany implements ShareBikeInter {
    private int id;
    private String name;
    //公司拥有的单车 12
    private ShareBike[] shareBikes;
    //sum: 公司实际拥有的单车数量
    private int sum;
    //单车被借出 的次数
    private int count;
    //用来生成单车id的
    private int bikeIndex = 1;

    public ShareBikeCompany(int id, String name, ShareBike[] shareBikes, int sum, int count) {
        this.id = id;
        this.name = name;
        this.shareBikes = shareBikes;
        this.sum = sum;
        this.count = count;
    }

    public ShareBikeCompany() {
    }

    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 ShareBike[] getShareBikes() {
        return shareBikes;
    }

    public void setShareBikes(ShareBike[] shareBikes) {
        this.shareBikes = shareBikes;
    }

    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;
    }

    /**
     * 难点: 数组是否需要扩容
     *
     * @param num
     */
    @Override
    public void addBike(int num) {
        //数组是否需要扩容
        if (sum + num > shareBikes.length) {
            //shareBikes指向更大的数组
            shareBikes = Arrays.copyOf(shareBikes, (shareBikes.length + num) * 2);
            System.out.println("扩容后的新数组的长度是 " + shareBikes.length);
        }

        for (int i = 0; i < num; i++) {
            //单车的id 是不可重复的值 一直自增
            shareBikes[sum++] = new ShareBike(bikeIndex++, 1, null);
        }
        System.out.println("投放成功");
    }

    @Override
    public ShareBike[] queryAll() {
        return shareBikes;
    }

    @Override
    public ShareBike queryById(int bikeId) {
        return null;
    }

    @Override
    public void deleteBike(int bikeId) {
        //找到这辆车
        for (int i = 0; i < sum; i++) {
            ShareBike shareBike = shareBikes[i];
            if (bikeId == shareBike.getId()) {
                //进行后面的元素的依次向前移动
                for (int j = i; j < sum-1; j++) {
                    shareBikes[j] = shareBikes[j + 1];
                }
                sum--;
                //最后一个元素设置为null
                shareBikes[sum] = null;
                System.out.println("删除成功了");
                return;
            }
        }
        System.out.println("没有此id所对应的单车 " + bikeId);
    }


    @Override
    public void borrowBike(int bikeId) {
        //单车对象的成员变量的值 找到这辆车
        for (int i = 0; i < sum; i++) {
            ShareBike shareBike = shareBikes[i];
            //找到此id所对应的单车对象 了
            if (bikeId == shareBike.getId()) {
                // 判断这个车的状态 是否可借
                if (shareBike.getStatus() == 1) {
                    shareBike.setStatus(0);
                    shareBike.setBorrowTime(new Date());
                    //return只要一执行 表示方法执行完毕 在void中 return;
                    System.out.println("单车借出成功了");
                    //单车借出次数自增
                    count++;
                    return;
                } else {
                    System.out.println("此车已经被借出 不能重复借" + bikeId);
                    return;
                }
            }
        }
        System.out.println("没有此id所对应的单车 " + bikeId);
    }

    @Override
    public void backBike(int bikeId) {
        //单车对象的成员变量的值 找到这辆车
        for (int i = 0; i < sum; i++) {
            ShareBike shareBike = shareBikes[i];
            //找到此id所对应的单车对象 了
            if (bikeId == shareBike.getId()) {
                // 判断这个车的状态 是否可借
                if (shareBike.getStatus() == 0) {

                    //计算借出时长
                    Date borrowDate = shareBike.getBorrowTime();
                    Date backDate = new Date();
                    long last = backDate.getTime() - borrowDate.getTime();
                    System.out.println(" 借出时长 S " + (last / 1000));
                    System.out.println(" 需要支付金额: " + (last / 1000) * 0.1);

                    //单车对象的状态值归位
                    shareBike.setStatus(1);
                    shareBike.setBorrowTime(null);
                    //return只要一执行 表示方法执行完毕 在void中 return;
                    System.out.println("单车归还成功了");
                    return;
                } else {
                    System.out.println("此车尚未借出 无需归还" + bikeId);
                    return;
                }
            }
        }
        System.out.println("没有此id所对应的单车 " + bikeId);
    }
}

ShareBikeMgr文件

该文件主要实现的是人机的交互功能。
chaKan(): 该方法主要是查看,因为不需要修改或者删除,直接在该方法当中就能实现车辆的查看。

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

//管理器的主要功能:和用户进行交互 接收用户的输入值 给用户反馈信息
public class ShareBikeMgr {
    private ShareBikeCompany[] shareBikeCompanies = new ShareBikeCompany[3];

    public void initial() {
        //向上转型
        shareBikeCompanies[0] = new OfoCompany(1001, "Ofo", new ShareBike[3], 0, 0);
        shareBikeCompanies[1] = new HaloCompany(1002, "Halo", new ShareBike[3], 0, 0);
        shareBikeCompanies[2] = new MoBikeCompany(1003, "MoBike", new ShareBike[3], 0, 0);
    }

    /**
     * 菜单项打印
     */
    public void menu() {
        initial();
        Scanner sc = new Scanner(System.in);
        String answer;
        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("请输入: ");
            int num = sc.nextInt();
            switch (num) {
                case 1:
                    touFang(sc);
                    break;
                case 2:
                    chaKan(sc);
                    break;
                case 3:
                    shanChe(sc);
                    break;
                case 4:
                    jieChe(sc);
                    break;
                case 5:
                    huanChe(sc);
                    break;
                case 6:
                    rank();
                    break;
                default:
                    System.out.println(" 1- 6");
                    break;
            }

            System.out.println("是否继续 Y/N");
            answer = sc.next();
        } while ("y".equals(answer));

        System.out.println("程序结束了");
    }

    private void rank() {
        ShareBikeCompany[] tmpArr = Arrays.copyOf(this.shareBikeCompanies, shareBikeCompanies.length);
        Arrays.sort(tmpArr, new Comparator<ShareBikeCompany>() {
            @Override
            public int compare(ShareBikeCompany o1, ShareBikeCompany o2) {
                return o2.getCount() - o1.getCount();
            }
        });
        //
        for (int i = 0; i < tmpArr.length; i++) {
            System.out.println(tmpArr[i].getName() + "   " + tmpArr[i].getCount());
        }

    }

    private void shanChe(Scanner sc) {
        System.out.println(" 1 Ofo");
        System.out.println(" 2 Halo");
        System.out.println(" 3 MoBike");
        System.out.println("请选择公司 : ");
        int companyNum = sc.nextInt();
        System.out.println("请录入待删除的单车id ");
        int bikeId = sc.nextInt();
        if (companyNum == 1 || companyNum == 2 || companyNum == 3) {
            shareBikeCompanies[companyNum - 1].deleteBike(bikeId);
        } else {
            System.out.println(" 1-  3 ");
        }
    }

    private void huanChe(Scanner sc) {
        System.out.println(" 1 Ofo");
        System.out.println(" 2 Halo");
        System.out.println(" 3 MoBike");
        System.out.println("请选择公司 : ");
        int companyNum = sc.nextInt();
        System.out.println("请录入待归还的单车id ");
        int bikeId = sc.nextInt();
        if (companyNum == 1 || companyNum == 2 || companyNum == 3) {
            shareBikeCompanies[companyNum - 1].backBike(bikeId);
        } else {
            System.out.println(" 1-  3 ");
        }
    }

    private void jieChe(Scanner sc) {
        System.out.println(" 1 Ofo");
        System.out.println(" 2 Halo");
        System.out.println(" 3 MoBike");
        System.out.println("请选择公司 : ");
        int companyNum = sc.nextInt();
        System.out.println("请录入待借的单车id ");
        int bikeId = sc.nextInt();
        if (companyNum == 1 || companyNum == 2 || companyNum == 3) {
            shareBikeCompanies[companyNum - 1].borrowBike(bikeId);
        } else {
            System.out.println(" 1-  3 ");
        }
       /* switch (companyNum) {
            case 1:
                //
                shareBikeCompanies[0].borrowBike(bikeId);
                break;
            case 2:
                //
                shareBikeCompanies[1].borrowBike(bikeId);
                break;
            case 3:
                //
                shareBikeCompanies[2].borrowBike(bikeId);
                break;
            default:
                System.out.println(" 1- 3");
                break;
        }*/

    }

    private void chaKan(Scanner sc) {
        for (int i = 0; i < shareBikeCompanies.length; i++) {
            System.out.println("|公司id|公司名|单车数量|借出次数|");
            System.out.print(shareBikeCompanies[i].getId() + "   ");
            System.out.print(shareBikeCompanies[i].getName() + "   ");
            System.out.print(shareBikeCompanies[i].getSum() + "   ");
            System.out.print(shareBikeCompanies[i].getCount());
            System.out.println();
            ShareBike[] shareBikes = shareBikeCompanies[i].getShareBikes();
            System.out.println("|单车id|状态|借出时间|");
            //对公司 的单车数组遍历
            for (int j = 0; j < shareBikeCompanies[i].getSum(); j++) {
                System.out.print(shareBikes[j].getId() + "  ");
                System.out.print(shareBikes[j].getStatus() + "  ");
                System.out.print(shareBikes[j].getBorrowTime() + "  ");
                System.out.println();
            }
        }
    }

    private void touFang(Scanner sc) {
        System.out.println(" 1 Ofo");
        System.out.println(" 2 Halo");
        System.out.println(" 3 MoBike");
        System.out.println("请选择公司 : ");
        int companyNum = sc.nextInt();
        System.out.println("请录入投放数量: ");
        int bikeNum = sc.nextInt();
        switch (companyNum) {
            case 1:
                //
                shareBikeCompanies[0].addBike(bikeNum);
                break;
            case 2:
                //
                shareBikeCompanies[1].addBike(bikeNum);
                break;
            case 3:
                //
                shareBikeCompanies[2].addBike(bikeNum);
                break;
            default:
                System.out.println(" 1- 3");
                break;
        }

    }

}

App 文件

该文件完成的就是程序的入口。

public class App {
    public static void main(String[] args) {
        new ShareBikeMgr().menu();
    }
}

补充

这三个类的目的是 因为不同的公司对应的增删改查肯定不同,所以创建这三个文件来完成自己相对于的增删改查,但是本程序中的增删改查相同,所以直接在公司的那个文件夹中实现即可。实现之后,这三个类继承总的公司类即可。
在这里插入图片描述


总结

1.人机交互文件不是最终的程序入口,程序入口只需像App文件当中一样去实现
2.方法的实现由小到大写入文件,比如车辆的增删改查的方法实现在车辆公司类当中,车辆公司的具体方法实现在人机交互类当中。
具体为:
在ShareBikeMgr文件当中实现公司对象的创建:
在这里插入图片描述
在这个文件当中实现公司的具体方法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
然后再在ShareBikeCompany当中去实现车辆的具体操作。
多思考思考其中的意思。

3.思考怎么传递参数较方便。怎么使用对象。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
迷你世界是一款非常受欢迎的沙盒游戏,提供了无尽的创造和冒险的可能性。而Macom版是迷你世界针对Mac操作系统的特别版本。 要下载迷你世界Macom版,您可以按照以下步骤进行操作: 首先,您可以通过搜索引擎或者苹果应用商店来搜索迷你世界Macom版的下载链接。确保选择官方和可靠的下载源,以保证软件的安全性和完整性。 一旦找到合适的下载链接,您可以点击进入下载页面,通常会提供不同的下载方式,比如压缩包或者直接安装文件。根据自己的需求和习惯选择相应的下载方式。 在下载之前,建议您先阅读一下软件的说明和系统要求,确保您的Mac电脑满足最低的硬件和软件要求。 下载完成后,您可以双击压缩包或者安装文件进行解压或者安装。根据安装文件的指引,您可以选择安装迷你世界Macom版到您的Mac电脑。 安装完成后,您可以在启动栏或者应用文件夹中找到迷你世界Macom版的图标。双击图标即可打开游戏。 在运行迷你世界Macom版之前,建议您连接互联网,以确保游戏可以正常启动和进行在线游戏。 至此,您已经成功地将迷你世界Macom版下载到您的Mac电脑上了。您可以尽情地享受这款独特的沙盒游戏带给您无限创造和冒险的乐趣。值得注意的是,在游戏过程中请关注自己的安全和隐私,遵守相关游戏规则和操作指引。祝您游戏愉快!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值