针对于数组的复习所制作的小项目(DVD借阅系统)

  针对及基础知识数组。特意花费半天时间制作一个小项目进行了练习与复习

以下为小项目的所有源代码,为方便以后查看(有错误之处还请指出,共同进步)

 

1.实体类:

package entity;

public class DVD{
        private int id;//编号
        private String name;// DVD名称
        private int count; // 借出次数
        private int status; // ״̬,DVD此时的状态,默认为只有一个DVD
        private String date;//借出日期

    @Override
    public String toString() {
        return "DVD{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", count=" + count +
                ", status=" + status +
                ", date='" + date + '\'' +
                '}';
    }

    public DVD() {
            super();
        }


        public DVD(int id, String name, int count, int status,String date) {
            super();
            this.id = id;
            this.name = name;
            this.count = count;
            this.status = status;
            this.date = date;
        }


        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 getCount() {
            return count;
        }

        public void setCount(int count) {
            this.count = count;
        }

        public int getStatus() {
            return status;
        }

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


        public String getDate() {
            return date;

        }


        public void setDate(String date) {
            this.date = date;
        }


}
package entity;

public class User {
    private String username;
    private String password;
    
    

    public User() {
        super();
    }

    public User(String username, String password) {
        super();
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

2.工具类:

package util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtil {
    private static final SimpleDateFormat SDF_DATE = new SimpleDateFormat("yyyy-MM-dd");
    private static final SimpleDateFormat SDF_DATE_TIME = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public static String dateTimeToString(Date date) {
        return SDF_DATE_TIME.format(date);
    }

    public static Date stringToDateTime(String dateStr) throws ParseException {
        return SDF_DATE_TIME.parse(dateStr);
    }

    public static String dateToString(Date date) {
        return SDF_DATE.format(date);
    }

    public static Date stringToDate(String dateStr) throws ParseException {
        return SDF_DATE.parse(dateStr);
    }
}

3.逻辑实现类

package manage;

import entity.DVD;
import entity.User;
import util.DateUtil;

import java.text.ParseException;
import java.util.Arrays;
import java.util.Date;
import java.util.Scanner;

public class managep {
    private User[] users = new User[5];
    private DVD[] dvds = new DVD[50];// 存放DVD信息的 数组
    private Scanner input = new Scanner(System.in);
    private double price = 2.0;

    /**
     * 完成 dvds的 初始化操作
     */
    public managep() {
        dvds[0] = new DVD(1001, "三国", 5, 1, "2018-07-29 10:00:00");
        dvds[1] = new DVD(1002, "西游", 2, 0, "2018-07-25 10:00:00");
        dvds[2] = new DVD(1003, "红楼梦", 3, 1, "2018-07-27 10:00:00");
        dvds[3] = new DVD(1004, "水浒传", 10, 1, "2018-07-28 10:00:00");
        users[0] = new User("admin", "123");
        users[1] = new User("tom", "123");
    }


    /**
     * 打印显示 主页菜单选项
     *
     * @throws ParseException
     */
    public void showHomeMenu() throws ParseException {
        boolean flag = true;// 控制循环的执行和停止
        while (flag) {
            System.out.println("********************主菜单**************************");
            System.out.println("1.查看DVD信息");
            System.out.println("2.新增DVD信息");
            System.out.println("3.修改DVD名称");
            System.out.println("4.删除DVD信息");
            System.out.println("5.借出DVD");
            System.out.println("6.归还DVD");
            System.out.println("7.查看排行");
            System.out.println("8.用户登录");
            System.out.println("9.退出");
            System.out.println("***************************************************");
            System.out.println("请选择 功能:(1-9)");
            if (!input.hasNextInt()) {
                System.out.println("输入有误!!!!!!!!!");
                input.next();//将 非数字 内容 读 走
                continue;
            }
            int option = input.nextInt();
            switch (option) {
                case 1:
                    queryAllDvd(null);// 查看所有DVD
                    break;
                case 2:
                    addDvd(); // 新增DVD
                    break;
                case 3:
                    updateDvd();// 修改DVD名称
                    break;
                case 4:
                    deleteDvd();// 删除DVD
                    break;
                case 5:
                    lendDvd();// 借出DVD
                    break;
                case 6:
                    returnBackDvd();// 归还DVD
                    break;
                case 7:
                    dvdSort(); // 排行榜
                    break;
                case 8:
                    userLogin(); // 登录
                    break;
                case 9:
                    flag = false; // 改变循环控制变量的值, 终止循环
                    System.out.println("系统退出!!!!!");
                    break;
                default:
                    System.out.println("选项无效!!!");
                    break;
            }
            printSpace();//输出空行
        }
    }

    /**
     * 用户登录验证
     */
    public void userLogin() throws ParseException {
        boolean isExist = false;//标记用户 是否存在
        String username = "";
        String userPwd = "";
        while (true) {
            if (!isExist) {
                System.out.println("请输入用户名:");
                username = input.next();
            }
            System.out.println("请输入密码:");
            String pwd = input.next();
            //System.out.println("密码:"+pwd);
            for (int i = 0; i < users.length; i++) {
                if (users[i] != null && username.equals(users[i].getUsername())) {
                    isExist = true;
                    //System.out.println(pwd+"@@@@@@@@@@@@@@@@@"+users[i].getPassword());
                    if (pwd.equals(users[i].getPassword())) {
                        System.out.println("登录成功!!!");
                        showHomeMenu();
                    } else {
                        System.out.println("密码错误!!!");
                        continue;
                    }
                }
            }
            if (!isExist) {
                System.out.println("用户名不存在!!!");
                continue;
            }
        }
    }

    /**
     * 输出换行符
     */
    public void printSpace(){
        System.out.print("\n\n");
    }
    /**
     * 查看所有的DVD状态
     */
    public void queryAllDvd(DVD[] dvds) {
        if (dvds == null) {
            dvds = this.dvds;
        }
        for (int i = 0; i < dvds.length; i++) {
            if (dvds[i] != null) {
                if (dvds[i].getStatus() == 0) {
                    System.out.println(dvds[i].getId() + "\t《" + dvds[i].getName() + "》\t" + dvds[i].getCount() + "\t"
                            + "已借出\t" + dvds[i].getDate());
                } else {
                    System.out.println(dvds[i].getId() + "\t《" + dvds[i].getName() + "》\t" + dvds[i].getCount() + "\t"
                            + "未借出\t" + dvds[i].getDate());
                }
            }
        }
    }

    /**
     * DVD数组 扩容, 空间扩 一倍
     */
    public void extendDvds() {
        dvds = Arrays.copyOf(dvds, dvds.length * 2);
    }

    /**
     * 获取 dvd数组中 实际 的 dvd对象 个数
     *
     * @return dvd对象个数(非空元素的个数)
     */
    public int getDvdNum() {
        for (int i = dvds.length - 1; i >= 0; i--) {
            if (dvds[i] != null) {
                return i + 1;
            }
        }
        return 0;
    }

    /**
     * 获取最大 id 值
     *
     * @return 最大ID值
     */
    public int getMaxId() {
        int dvdNum = getDvdNum();
        if (dvdNum == 0) {
            return 0;
        }
        int max = dvds[0].getId();
        for (int i = 1; i < dvdNum; i++) {
            if (dvds[i].getId() > max) {
                max = dvds[i].getId();
            }
        }

        return max;
    }

    /**
     * 添加新的DVD
     */
    public void addDvd() {
        while (true) {
            if (dvds[dvds.length - 1] != null) {
                extendDvds(); // 扩容
            }
            int id = getMaxId();
            id++;
            System.out.println("请输入要添加DVD的名称:");
            String name = input.next();
            for (int i = 0; i < dvds.length; i++) {
                if (dvds[i] == null) {
                    dvds[i] = new DVD(id, name, 0, 1, "0000-00-00 00:00:00");
                    break;
                }

            }
            System.out.println("是否继续新增? y/n");
            if (input.next().equalsIgnoreCase("n")) {
                break;
            }
        }
    }

    /**
     * 更新DVD的信息
     */
    public void updateDvd() {
        while (true) {
            boolean isFind = false;// 记录是否找到 要更新的元素
            System.out.println("请输入要修改DVD的名称:");
            String name = input.next();
            for (int i = 0; i < dvds.length; i++) {
                if (dvds[i] != null && dvds[i].getName().equals(name)) {
                    System.out.println("已找到要修改的DVD,请输入修改后的名字");
                    String nameNew = input.next();
                    dvds[i].setName(nameNew);
                    isFind = true;
                    System.out.println("修改成功~~");
                    break;
                }
            }
            if (!isFind) {
                System.out.println("该DVD不存在!!");
            }
            queryAllDvd(null);
            System.out.println("是否继续修改? y/n");
            if (input.next().equalsIgnoreCase("n")) {
                break;
            }
        }
    }

    public void deleteDvd() {
        while (true) {
            int index = -1; // 记录 删除DVD的 元素 下标位置
            //int lastNotNull = -1; // 记录最后一个非空元素的下标位置
            int dvdNum = getDvdNum(); //获取数组中实际存放的 dvd对象个数, 相当于lastNotNull+1
            System.out.println("请输入要删除的DVD的名称:");
            String name = input.next();
            for (int i = 0; i < dvds.length; i++) {
                if (dvds[i] != null && dvds[i].getName().equals(name)) {
                    dvds[i] = null;
                    index = i;
                    System.out.println("删除成功~~");
                    break;
                }
            }
            if (index < 0) {
                System.out.println("该DVD不存在!!");
            } else {
                for (int i = index; i < dvdNum - 1; i++) {
                    dvds[i] = dvds[i + 1];
                }
                dvds[dvdNum - 1] = null;
            }
            queryAllDvd(null); // 遍历 原始数组
            System.out.println("是否继续删除? y/n");
            if (input.next().equalsIgnoreCase("n")) {
                break;
            }
        }
    }

    /**
     * 借出DVD
     */
    public void lendDvd() {
        while (true) {
            boolean isFind = false;
            System.out.println("请输入要借的DVD的名字");
            String name = input.next();
            for (int i = 0; i < dvds.length; i++) {
                if (dvds[i] != null && dvds[i].getName().equals(name)){
                    if (dvds[i].getStatus() == 0) { // 已被别人借出, 暂未归还
                        System.out.println("该DVD已被其他人借出,暂未归还,请选择其他DVD~~");
                    } else {// DVD处于 可借状态
                        dvds[i].setStatus(0);
                        dvds[i].setDate(DateUtil.dateTimeToString(new Date()));
                        isFind = true;
                        System.out.println("借出成功~~");
                    }
                    break;
                }
            }
            if (!isFind) {
                System.out.println("该DVD不存在!!");
            }
            System.out.println("是否继续借DVD? y/n");
            if (input.next().equalsIgnoreCase("n")) {
                break;
            }
        }
    }

    /**
     * 归还DVD
     *
     * @throws ParseException
     */
    public void returnBackDvd() throws ParseException {
        while (true) {
            boolean isFind = false;
            System.out.println("请输入要归还的DVD的名称:");
            String name = input.next();
            for (int i = 0; i < dvds.length; i++) {
                if (dvds[i] != null && dvds[i].getName().equals(name)) {
                    dvds[i].setStatus(1);
                    long end = (new Date()).getTime();
                    long start = DateUtil.stringToDateTime(dvds[i].getDate()).getTime();
                    double jinE = 0;
                    int dayNum = 1;
                    String dateStart = dvds[i].getDate();
                    String dateEnd = DateUtil.dateTimeToString(new Date());
                    if (dateStart.substring(0, 10).equals(dateEnd.substring(0, 10))) {//同一天
                        jinE = price * 1;
                    } else if ((end - start) % (1000 * 60 * 60 * 24) != 0) {//大于一天, 且
                        int hours = (int) (end - start) % (1000 * 60 * 60 * 24);
                        if (hours <= 5) {
                            dayNum = (int) (end - start) / (1000 * 60 * 60 * 24);
                            jinE = price * (dayNum + 0.2);
                        } else {// 大于5小时, 小于24
                            dayNum = (int) (end - start) / (1000 * 60 * 60 * 24) + 1;
                            jinE = price * dayNum;
                        }
                    }
                    isFind = true;
                    System.out.println("归还成功~~");
                    System.out.println("须交费:" + jinE + "元.");
                    break;
                }
            }
            if (!isFind) {
                System.out.println("该DVD不存在!!");
            }
            System.out.println("是否继续归还DVD? y/n");
            if (input.next().equalsIgnoreCase("n")) {
                break;
            }
        }
    }
/**
 * 按照借出次数 降序排序
 */
        public void dvdSort() {
            DVD[] dvdsTemp = Arrays.copyOf(dvds, dvds.length); // 拷贝数组, 只对临时数组进行排序
            int dvdNum = getDvdNum();
            for (int i = 0; i < dvdNum - 1; i++) {
                for (int j = 0; j < dvdNum - 1 - i; j++) {
                    if (dvdsTemp[j].getCount() < dvdsTemp[j + 1].getCount()) { //降序
                        // 交换相邻元素
                        DVD temp = dvdsTemp[j];
                        dvdsTemp[j] = dvdsTemp[j + 1];
                        dvdsTemp[j + 1] = temp;
                    }
                }
            }
            queryAllDvd(dvdsTemp); // 遍历 排好序的  临时 数组
        }
    }

4.主函数运行:

package start;

import manage.managep;

import java.text.ParseException;
public class managestart {
    public static void main(String[] args) throws ParseException{

        managep dm=new managep();
        dm.userLogin();
        dm.showHomeMenu();

    }
}

 

posted @ 2019-07-23 10:22  迷你熊爱你  阅读(188)  评论(0编辑  收藏  举报