欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > > 文章正文

java SE DVD简易管理系统及简单优化,javase

来源: javaer 分享于  点击 16233 次 点评:175

java SE DVD简易管理系统及简单优化,javase


前期学习中,java 的语法和C语言还是有很多相似的地方,在写这个DVD管理系统的时候,就想起了当时用C语言有写过(那时候,基本都是从网上荡来几篇功能基本实现的代码。就图个通关。),现在自己重新拿起这东西,还是蛮怀旧的。

首先,来说说这DVD管理系统的基本要求。底层是用数组实现的,在初始化的时候,声明数组,然后给数组静态赋值。接下来就是对它的增删改查操作了,完事之后,加上个界面,在面向对象的时候,界面一般是写在一个方法里的,直接调用就行了。

首先说说这里边所用到的知识点。

首先站在一个“白纸”的位置,想想思路。
我们要干什么?
你可能会说,是要管理DVD,那么DVD呢?在哪?
就像是你们家是开超市的,然后你得有东西来卖吧。
所以我们用到的第一个知识点:

  • 声明数组,并且赋初值。DVD有名字,状态(是否借出),借出的日期,借出的次数。

    那好我们现在有了DVD了,而且也在我们的管理范围之内了。然后呢?卖东西的话,我们需要知道自己都有些什么东西可以借或者卖。还有就是我们需要知道DVD是不是还在自己这,就可以在这加上一个状态位置,flag来表示DVD是不是已经借出去了。

  • 所以第二项就是查看一下,我们都有哪些东西。也就是学过的数组遍历了。根据数组的下标变化,从0到length。

  • 然后我们再分析,如果没借出的话,应该就能够直接的去借它,这时给这个已经在的DVD的flag初值,我这里是声明了一个State的数组,长度也确定了。
  • 接着就到了该要增加 一个DVD的操作,就是数组的增加,借出一个DVD就是数组的改,把一个DVD彻底丢掉,删除,就是数组的删除了。
  • 如果进行一次操作后,还想继续操作,那就用到了循环语句,这里是一个while的死循环。这里再提一下:最简单的死循环有
package d;

import java.util.Scanner;

public class For_01 {

    public static void main(String[] args) {

        @SuppressWarnings("resource")
        Scanner input = new Scanner(System.in);
        for (;;) {
            // for的死循环,最简
            System.out.println("请输入你的名字");
            String name = input.next();
            System.out.println("名字是:" + name);
        }

        // while(true){
        // //while的死循环
        // System.out.println("请输入你的名字");
        // String name =input.next();
        // System.out.println("名字是:"+name);
        // }
    }
}

上边这2种死循环,用的多的一般是while的死循环。
废话就不多BB了,上代码,不过这是初始版本的,从头写到尾。都是些for循环,while死循环,数组的一些操作,页面的输出。switch case语句的使用。

package DVD;

import java.util.Scanner;

public class DVD {
    /**
     * 这是一个DVD管理系统,设定是店每个名字的DVD只有1个 一共只有6个空间存放DVD,当增加的DVD数目大于这一限定时会给出提示 有
     * 初始化,新增,查看,删除,借出,归还,退出等功能。 使用一维数组存放DVD的名称,状态(是否被借出),借出的日期,借出的次数
     * 选择界面使用了switch,do-while。
     */

    static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        // 初始化
        String[] Name = new String[6];// 名字
        int[] State = new int[6];// 状态,0表示无书可借。
        int[] days = new int[6];// 借出的日期
        int[] count = new int[6];// 借出的次数
        // 初始2个DVD
        Name[0] = "天下第一";
        State[0] = 0;
        days[0] = 4;
        count[0] = 1;

        Name[1] = "武林";
        State[1] = 1;
        count[1] = 2;
        // 打印选择界面

        int choose = 0;
        do {
            System.out.println("欢迎使用迷你DVD管理系统");
            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("------------------------------");
            System.out.println("请选择:");

            int num = sc.nextInt();
            switch (num) {
            case 1:
                System.out.println("-->新增DVD");
                // 增加DVD的方法
                System.out.println("请输入DVD的名称:");
                String name = sc.next();
                //
                if (Name[5] != null) {
                    System.out.println("已经满了");
                    System.out.print("新增《" + name + "》失败!");
                    break;
                }
                for (int i = 0; i < Name.length; i++) {
                    if (Name[i] == null) {
                        Name[i] = name;
                        State[i] = 1;
                        count[i] = 0;

                        System.out.print("新增《" + Name[i] + "》成功!");
                        System.out.println();

                        break;
                    }

                }
                System.out.println("*****************************");
                break;
            case 2:
                System.out.println("-->查看DVD");
                // 遍历,查看
                for (int i = 0; Name[i] != null; i++) {

                    if (State[i] == 0) {// 已借出
                        System.out.print("第" + (i + 1) + "个DVD的名字是:" + Name[i] + ",");
                        System.out.print("状态是" + "已借出" + ",");
                        System.out.print("借出日期是" + days[i] + ",");
                        System.out.println("借出次数是" + count[i]);

                    } else if (State[i] == 1) {
                        System.out.print("第" + (i + 1) + "个DVD的名字是:" + Name[i] + ",");
                        System.out.print("状态是" + "可借" + ",");
                        System.out.print("借出日期是" + "null" + ",");
                        System.out.println("借出次数是" + count[i]);
                    }
                }
                System.out.println("*****************************");
                break;
            case 3:
                System.out.println("-->删除DVD");
                // 删除的方法
                System.out.println("请输入要删除的DVD名称:");
                name = sc.next();
                boolean flag = false;
                // 三种情况
                /**
                 * 1、数组中没有此DVD,无法删除 2、数组中有此DVD,但是状态是借出,无法完成删除操作
                 * 3.数组中有此DVD,可以删除,使用数组的删除方法。
                 */
                for (int i = 0; i < Name.length; i++) {
                    if (name.equals(Name[i]) && State[i] == 1) {
                        // 第3种情况,可删除。
                        for (int j = i; j < Name.length - 1; j++) {
                            Name[j] = Name[j + 1];
                            State[j] = State[j + 1];
                            days[j] = days[j + 1];
                            count[j] = count[j + 1];
                        }
                        Name[Name.length - 1] = null;
                        State[Name.length - 1] = 0;
                        days[Name.length - 1] = 0;
                        count[Name.length - 1] = 0;
                        System.out.println("删除成功!本DVD已经被删除。");
                        flag = true;
                        break;
                    } else if (name.equals(Name[i]) && State[i] == 0) {
                        // 第2种情况,无法完成删除操作。
                        System.out.println("本DVD已经被借出,无法完成删除操作!");
                        flag = true;
                    }
                }
                if (!flag) {
                    // 第三种情况,店中无此DVD。
                    System.out.println("本店无此DVD信息");
                    break;
                }
                System.out.println("*****************************");
                break;
            case 4:
                System.out.println("-->借出DVD");
                // 借出的方法
                System.out.println("请输入要借出的DVD名称:");
                name = sc.next();
                for (int i = 0; i < Name.length; i++) {
                    if (Name[i] == null) {
                        // 没有找到信息
                        System.out.println("本店无此DVD信息");
                        break;
                    } else if (name.equals(Name[i]) && State[i] == 1) {
                        // 本店的此DVD没有被借出,可以借。
                        State[i] = 0;
                        System.out.println("请输入借出日期:");
                        days[i] = sc.nextInt();
                        while (days[i] < 1 || days[i] > 30) {
                            System.out.println("重新输入借出时间(1-30)");
                            days[i] = sc.nextInt();
                        }
                        System.out.println("借出成功,此DVD已经被借,请爱护它!");
                        count[i]++;
                        break;
                    } else if (name.equals(Name[i]) && State[i] == 0) {
                        //
                        System.out.println("此DVD已经被借出了!");
                        break;
                    }
                }
                System.out.println("*****************************");
                break;
            case 5:
                System.out.println("-->归还DVD");
                // 归还的方法
                System.out.println("请输入要归还的DVD名称:");
                name = sc.next();
                for (int i = 0; i < Name.length; i++) {
                    if (Name[i] == null) {
                        // 没有找到信息
                        System.out.println("本店无此DVD信息");
                        break;
                    } else if (name.equals(Name[i]) && State[i] == 1) {
                        // 没借出,不能还
                        System.out.println("没借出此DVD,无法完成归还!");
                        break;
                    } else if (name.equals(Name[i]) && State[i] == 0) {
                        // 可以还
                        State[i] = 1;
                        System.out.println("输入归还日期:");
                        int backDay = sc.nextInt();
                        while (backDay < days[i] || backDay > 30) {
                            if (backDay < days[i]) {
                                System.out.println("归还日期不能小于借出日期!请重新输入!");
                            } else {
                                System.out.println("归还日期不能大于30!请重新输入!");
                            }
                            backDay = sc.nextInt();
                        }
                        System.out.println("归还《" + name + "》成功!");
                        System.out.println("借出时间:" + days[i] + "天");
                        System.out.println("归还时间:" + backDay + "天");
                        System.out.println("应付租金" + (backDay - days[i]) * 2 + "元");
                        break;
                    }

                }
                break;
            case 6:
                System.out.println("-->已退出");
                System.out.println("谢谢使用!");
                System.exit(0);// 参数为0,是正常情况下的强制退出,还可以是其他数字(异常情况)。
                // 或者: choose=1;
                break;
            default:
                System.out.println("错误");
                choose = 1;// 改变 do-while 循环条件
                break;
            }
            System.out.println("输入     0   返回!");
            int back = sc.nextInt();
            if (back != 0) {
                System.out.println("输入错误");
                choose = 1;// 错误时,退出循环
            }
        } while (choose == 0);

        System.out.println("-->已退出");
        System.out.println("谢谢使用!");
    }
}

可以看出,除了输入输出语句,其他的代码与C语言无二。

程序运行的部分结果图:



另附优化:升级版。就是简单的把这些实现好的代码块放到不同的方法体中,然后再调用这些方法。基本代码是没有多少变化的。而且因为输出界面是没有变化的,所以优化过的代码执行的结果截图就和之前是一样的。不同的是,要建2个类,面向对象麻烦点就是一个方法一个类,然后你会发现自己一个简单的系统写完了,有7、8个类,看着就烦,我这里是把方法都放在一个类中了,另一个测试类就只负责实例化那个例的对象,之后调用就行。

附录


package DVD;

import java.util.Scanner;

public class Operation {

    Scanner sc = new Scanner(System.in);

    String[] Name;// 名字
    int[] State;// 状态,0表示无书可借。
    int[] days;// 借出的日期
    int[] count;// 借出的次数

    public void init() {
        Name = new String[6];// 名字
        State = new int[6];// 状态,0表示无书可借
        days = new int[6];// 借出的日期
        count = new int[6];// 借出的次数

        // 初始2个DVD
        Name[0] = "天下第一";
        State[0] = 0;
        days[0] = 4;
        count[0] = 1;

        Name[1] = "武林";
        State[1] = 1;
        count[1] = 2;
    }

    public void select() {
        for (int i = 0; Name[i] != null; i++) {

            if (State[i] == 0) {// 已借出
                System.out.print("第" + (i + 1) + "个DVD的名字是:" + Name[i] + ",");
                System.out.print("状态是" + "已借出" + ",");
                System.out.print("借出日期是" + days[i] + ",");
                System.out.println("借出次数是" + count[i]);

            } else if (State[i] == 1) {
                System.out.print("第" + (i + 1) + "个DVD的名字是:" + Name[i] + ",");
                System.out.print("状态是" + "可借" + ",");
                System.out.print("借出日期是" + "null" + ",");
                System.out.println("借出次数是" + count[i]);
            }
        }
    }

    public void add() {
        System.out.println("请输入DVD的名称:");
        String name = sc.next();
        //
        if (Name[5] != null) {
            System.out.println("已经满了");
            System.out.print("新增《" + name + "》失败!");
            return;
        }
        for (int i = 0; i < Name.length; i++) {
            if (Name[i] == null) {
                Name[i] = name;
                State[i] = 1;
                count[i] = 0;

                System.out.print("新增《" + Name[i] + "》成功!");
                System.out.println();

                break;
            }

        }
    }

    public void remove() {
        System.out.println("请输入要删除的DVD名称:");
        String name = sc.next();
        boolean flag = false;
        // 三种情况
        /**
         * 1、数组中没有此DVD,无法删除 2、数组中有此DVD,但是状态是借出,无法完成删除操作
         * 3.数组中有此DVD,可以删除,使用数组的删除方法。
         */
        for (int i = 0; i < Name.length; i++) {
            if (name.equals(Name[i]) && State[i] == 1) {
                // 第3种情况,可删除。
                for (int j = i; j < Name.length - 1; j++) {
                    Name[j] = Name[j + 1];
                    State[j] = State[j + 1];
                    days[j] = days[j + 1];
                    count[j] = count[j + 1];
                }
                Name[Name.length - 1] = null;
                State[Name.length - 1] = 0;
                days[Name.length - 1] = 0;
                count[Name.length - 1] = 0;
                System.out.println("删除成功!本DVD已经被删除。");
                flag = true;
                break;
            } else if (name.equals(Name[i]) && State[i] == 0) {
                // 第2种情况,无法完成删除操作。
                System.out.println("本DVD已经被借出,无法完成删除操作!");
                flag = true;
            }
        }
        if (!flag) {
            // 第三种情况,店中无此DVD。
            System.out.println("本店无此DVD信息");
            return;
        }
    }

    public void send() {
        System.out.println("请输入要借出的DVD名称:");

        for (int i = 0; i < Name.length; i++) {
            if (Name[i] == null) {
                // 没有找到信息
                System.out.println("本店无此DVD信息");
                break;
            } else if (sc.next().equals(Name[i]) && State[i] == 1) {
                // 本店的此DVD没有被借出,可以借。
                State[i] = 0;
                System.out.println("请输入借出日期:");
                days[i] = sc.nextInt();
                while (days[i] < 1 || days[i] > 30) {
                    System.out.println("重新输入借出时间(1-30)");
                    days[i] = sc.nextInt();
                }
                System.out.println("借出成功,此DVD已经被借,请爱护它!");
                count[i]++;
                break;
            } else if (sc.next().equals(Name[i]) && State[i] == 0) {
                //
                System.out.println("此DVD已经被借出了!");
                break;
            }
        }
    }

    public void reback() {
        System.out.println("请输入要归还的DVD名称:");

        for (int i = 0; i < Name.length; i++) {
            if (Name[i] == null) {
                // 没有找到信息
                System.out.println("本店无此DVD信息");
                break;
            } else if (sc.next().equals(Name[i]) && State[i] == 1) {
                // 没借出,不能还
                System.out.println("没借出此DVD,无法完成归还!");
                break;
            } else if (sc.next().equals(Name[i]) && State[i] == 0) {
                // 可以还
                State[i] = 1;
                System.out.println("输入归还日期:");
                int backDay = sc.nextInt();
                while (backDay < days[i] || backDay > 30) {
                    if (backDay < days[i]) {
                        System.out.println("归还日期不能小于借出日期!请重新输入!");
                    } else {
                        System.out.println("归还日期不能大于30!请重新输入!");
                    }
                    backDay = sc.nextInt();
                }
                System.out.println("归还《" + sc.next() + "》成功!");
                System.out.println("借出时间:" + days[i] + "天");
                System.out.println("归还时间:" + backDay + "天");
                System.out.println("应付租金" + (backDay - days[i]) * 2 + "元");
                break;
            }

        }
    }

    public void exit() {
        System.out.println("-->已退出");
        System.out.println("谢谢使用!");
        System.exit(0);// 参数为0,是正常情况下的强制退出,还可以是其他数字(异常情况)。
        // 或者: choose=1;
    }

    public void show() {
        System.out.println("欢迎使用迷你DVD管理系统");
        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("------------------------------");
        System.out.println("请选择:");
    }

    public void showSelect() {
        int choose = 0;
        do {
            show();
            switch (sc.nextInt()) {
            case 1:
                System.out.println("-->新增DVD");
                // 增加DVD的方法
                add();
                System.out.println("*****************************");
                break;
            case 2:
                System.out.println("-->查看DVD");
                // 遍历,查看
                select();
                System.out.println("*****************************");
                break;
            case 3:
                System.out.println("-->删除DVD");
                // 删除的方法
                remove();
                System.out.println("*****************************");
                break;
            case 4:
                System.out.println("-->借出DVD");
                // 借出的方法
                send();
                System.out.println("*****************************");
                break;
            case 5:
                System.out.println("-->归还DVD");
                // 归还的方法
                reback();
                System.out.println("*****************************");
                break;
            case 6:
                exit();
                break;
            default:
                System.out.println("错误");
                choose = 1;// 改变 do-while 循环条件
                break;
            }
            System.out.println("输入     0   返回!");
            int back = sc.nextInt();
            if (back != 0) {
                System.out.println("输入错误");
                choose = 1;// 错误时,退出循环
            }
        } while (choose == 0);

        exit();
    }

}

测试类

package DVD;
/**
 * 测试类,用来调用Operation 中的方法。
 * @author Feng
 * 2018年1月23日上午9:56:02
 */
public class TestDVD {

    public static void main(String[] args) {

        Operation op = new Operation();
        // TODO 自动生成的方法存根

        op.init();
        op.showSelect();

    }

}

以上就是我的对DVD 管理的认识了,主要是可以练习数组的使用。

相关文章

    暂无相关文章

用户点评