当前位置:   article > 正文

【Java】迷你DVD管理器

迷你dvd管理器

系统概述

为某音像店开发一个迷你DVD管理器,实现DVD碟片的管理,包括如下功能:
1、新增DVD
2、查看DVD
3、删除DVD
4、借出DVD
5、归还DVD

菜单

开发计划

系统开发步骤

1、明确需求
2、设计对象保存DVD信息
3、设计技术框架:采用Java技术

编码顺序

1、数据初始化
2、菜单切换
3、完成各种DVD管理操作
4、测试

界面交互设计的原则

统一性原则

界面风格统一:用相同方式展现相同类型的数据,如:日期类型
交互风格统一:用相同方式完成相同类型的操作,如:录入日期

美观性原则
界面美观大方

易用性原则
操作方式自然、易理解

理解业务

1、如何保存DVD信息 ?

使用数组对象保存DVD信息 !

每张DVD的信息都包括名称、是否可借的状态以及借出的日期
包含多张DVD。

使用数组保存DVD信息
2、如何访问DVD信息?

创建DVD对象数组dvd后,访问第i+1张DVD信息

名称:dvd.name[i]
状态:dvd.state[i]
借出日期:dvd.date[i]

如何访问DVD信息
3、如何计算租金 ?
租金=日期差(租金/每天)

  • 计算日期差:
    借出日期利用“年-月-日”的字符串形式保存。
    可利用类SimpleDateFormat对字符串进行日期格式化。

如何计算租金

设计阶段

1、初始化DVD信息

思路分析

  • 创建项目MiniDvd
  • 创建类DVDSet,添加相应属性
  • 创建类DVDMgr,添加方法initial(),初始化三张DVD碟片信息

初始化DVD信息

2、实现菜单切换

  • 需求说明
    编写程序入口,实现菜单显示和切换

  • 思路分析
    创建方法startMenu(),实现菜单切换
    创建方法returnMain() ,返回主菜单
    编写类Start,实现程序入口

  • 难点提示
    使用switch语句实现菜单切换

在这里插入图片描述

3、实现查看DVD信息

  • 需求说明
    遍历dvd,获取数组元素信息,并进行显示

  • 思路分析
    在类DVDMgr中创建方法search(),完成功能要求
    根据状态值输出“已借出”或“可借”

在这里插入图片描述

4、实现新增DVD信息

  • 需求说明
    向dvd数组增加一条DVD信息,实现新增DVD信息

  • 思路分析
    在类DVDMgr中创建方法add(),完成功能要求
    定位新增位置
    插入DVD信息,状态值为1

  • 难点提示
    定位新增位置:第一个name为null的位置

在这里插入图片描述

5、实现删除DVD信息

  • 需求说明
    按照输入的名称,删除指定DVD信息

  • 思路分析
    查找要删除元素
    通过把后面的元素依次前移一位,实现删除;
    最后一个不为空元素置空

  • 难点提示
    不允许删除借出状态的DVD
    不存在指定DVD,给出提示

在这里插入图片描述

6、实现借出DVD业务处理

  • 需求说明
    按照输入的名称,借出指定DVD
  • 思路分析
    查找要借出的DVD
    判断是否存在
    判断是否已借出
    如果可借,修改state值

  • 难点提示
    各种情况的判断条件

在这里插入图片描述

7、实现归还DVD业务处理

  • 需求说明
    编写方法 returnDvd(),实现归还DVD,并计算租金

  • 思路分析
    查找要归还的DVD
    判断是否存在
    判断是否未借出
    如果已借出,修改state值,并计算和输出租金

  • 难点提示
    字符串-日期转换

在这里插入图片描述

代码阶段

以下代码均写入DVD类里,
因此,粘贴代码时,要粘贴到类名为DVD的项目里

1、菜单模块

 public void menu() throws ParseException {
        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.退  还");
        System.out.println("======================");
        System.out.println("请选择:");

        int index=input.nextInt();
        switch (index){
            case 1:
                case01();//添加DVD
                break;
            case 2:
                case02();//查看DVD
                break;
            case 3:
                case03();//删除DVD
                break;
            case 4:
                case04();//借出DVD
                break;
            case 5:
                case05();//归还DVD
                break;
            case 6:
                System.out.println("感谢使用本系统!");
                System.exit(1);
        }
    }
    //下面是返回菜单的代码
    public void getReturn() throws ParseException {
        System.out.println("输入0返回");
        int i = input.nextInt();
        if (i == 0) {
            menu();
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

2、初始化模块

 int[] indexs=new int[50];//用来存储DVD的索引
    String[] states=new String[50];//用来存储DVD的状态,比如"已借出"或"可借"
    String[] names=new String[50];//用来存储DVD的名称
    String[] dates=new String[50];//用来存储DVD的借出日期
    Scanner input=new Scanner(System.in);//创建了一个名为 input 的Scanner对象,用于接收用户的输入
    Date date=new Date();

    public void init(){
        indexs[0]=1;
        indexs[1]=2;
        indexs[2]=3;
        states[0]="已借出";
        states[1]="可借";
        states[2]="可借";
        names[0]="罗马假日";
        names[1]="风声鹤唳";
        names[2]="浪漫满屋";
        dates[0]="2010-7-7";
        dates[1]="";
        dates[2]="";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

3、主函数模块

 public static void main(String[] args) throws ParseException {

        DvD  dvd=new DvD();
        dvd.init();  //1.加载初始化数据
        dvd.menu();  //2.启动菜单
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4、添加DVD模块

private void case01() throws ParseException {

       for (int i=0;i<names.length;i++){//这是一个for循环,用于遍历一个存储DVD信息的数组:names数组。
           if (names[i]==null){//在每次迭代中,代码检查names[i]是否为null,以确定数组中是否有空闲位置可以新增DVD信息。
               System.out.println("--->新增DVD");
               System.out.println("输入DVD信息:名称");
               String mc=input.next();
               indexs[i]=i+1;//该行代码将当前DVD的索引存储在indexs数组中,索引的值为i+1。因为索引是从1开始的,而不是从0开始。
               states[i]="可借";
               names[i]=mc;
               dates[i]="";
               break;
           }
       }
       System.out.println("添加成功");
        System.out.println("==============");
        getReturn();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

5、查看DVD模块

public void case02() throws ParseException {
        System.out.println("---->查看DVD");
        System.out.println("序号\t状态\t 名称\t 借出日期");
        for (int i=0;i<names.length;i++ ){
            if(names[i]==null){
                break;
            }
            System.out.println(indexs[i]+"\t"+states[i]+"\t"+names[i]+"\t\t"+dates[i]);
        }
        System.out.println("=========");
        getReturn();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

6、删除DVD模块

private void case03() throws ParseException {
        System.out.println("---->删除DVD");
        System.out.println("输入要删除的名称:");
        String num=input.next();
        //这行代码从用户输入中读取一个字符串,并将其存储在名为num的变量中,用于表示用户想要删除的DVD名称或索引。
        int i;int j;
        for (i=0;i<indexs.length;i++){//这是一个for循环,用于遍历存储DVD索引的indexs数组。
            if (num.equals(names[i]) && "可借".equals(states[i])){
         //如果用户输入的名称与names数组中的某个名称相匹配,并且该DVD的状态是“可借”,则执行以下操作:
                for (j=i;j<indexs.length-1;j++)
                {//该循环从匹配的索引i开始,将数组中该位置后的元素向前移动一个位置,以覆盖当前位置的DVD信息
                    states[j]=states[j+1];
                    names[j]=names[j+1];
                    dates[j]=dates[j+1];
                }
                System.out.println("删除成功");
                break;
            }
            //如果用户输入的是DVD的索引,并且对应索引的DVD状态是“已借出”,则打印“DVD已借出,无法删除”的消息
            if (num.equals(indexs[i])&&"已借出".equals(states[i])){
                System.out.println("DVD已借出,无法删除");
                break;
            }
            //如果循环到达数组的末尾仍然没有找到匹配的DVD记录,则打印“未找到该DVD”的消息。
            if (i==indexs.length-1){
                System.out.println("未找到该DVD");
            }
        }
        getReturn();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

7.借出DVD模块

 private void case04() throws ParseException {
        System.out.println("--->借出DVD");
        System.out.println("选择你要借的dvd名称:");
        String borrow=input.next();//通过输入流对象 input 获取用户输入的 DVD 名称,并将其存储在字符串变量 borrow中。
        boolean boo=false;//声明一个布尔变量 boo,用于标记 DVD 是否已经被借走。
        for (int i=0;i<indexs.length;i++){
            if(borrow.equals(names[i])&& "可借".equals(states[i])){
                //如果用户输入的 DVD 名称与当前遍历到的 DVD 名称相匹配,并且状态为 "可借",则执行以下操作
                states[i] = "已借出";//状态变为已借出
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//获取当前日期,并将其格式化为字符串
                String date2 = sdf.format(date);
                dates[i] = date2;
                System.out.println("成功借出");
                break;
            }
            //如果用户输入的 DVD 名称与当前遍历到的 DVD 名称相匹配,并且状态为 "已借出",则执行以下操作
            if(borrow.equals(names[i]) && "已借出".equals(states[i])){
                boo=true;//DVD已经被借走
                break;
            }
            if (i==indexs.length-1){//如果遍历到数组的最后一个元素仍然没有匹配的 DVD,则执行以下操作
                System.out.println("未找到该DVD");
            }
        }
        if (!boo){
            System.out.println("已被借走");
        }
        getReturn();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

8、归还DVD模块

 private void case05() throws ParseException {
        System.out.println("--->归还DVD");
        System.out.println("输入归还DVD的名字:");
        String name=input.next();
        boolean boo=false;
        for (int i=0;i<indexs.length;i++){
            if (name.equals(names[i]) && "已借出".equals(states[i])) {
                // 如果用户输入的书籍名字与当前遍历到的 DVD 名称相匹配,并且状态为 "已借出",则执行以下操作
                System.out.println("请输入归还日期,如2024-1-1");
                String date2=input.next();//获取归还时间的信息
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//创建一个日期格式化对象,用于解析日期字符串
                //输入sdf.parse(date1).var变成下面这个↓
                Date parse1 = sdf.parse(dates[i]);//归还日期
                Date parse2 = sdf.parse(date2);//借出日期是date2
                long time2 = parse2.getTime();//parse2.getTime.var(一定要输入.var)
                // 得到一个毫秒数,距离1900.1.1的毫秒数
                long time1 =parse1.getTime();
                long money=(time2-time1)/(1000*60*60*24);//单位原本是毫秒,除1000就是秒,再除分钟,小时,就是一天。
                System.out.println("需要支付"+money+"元");
                System.out.println("DVD已退还");
                boo=true;
                states[i]="可借";
                dates[i]="";
                break;
            }
            if (name.equals(names[i]) && "可借".equals(states[i]) ){
                System.out.println("DVD不存在");
                boo=true;
            }
        }//如果 boo 仍然为 false,表示未找到对应的 DVD,则输出 "未找到对应DVD" 消息。
        if (!boo){
            System.out.println("DVD Not Found");
        }
        getReturn();
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

整体代码

package com.jr.dz13b;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Scanner;
import java.util.Date;
public class DvD {
    int[] indexs=new int[50];//用来存储DVD的索引
    String[] states=new String[50];//用来存储DVD的状态,比如"已借出"或"可借"
    String[] names=new String[50];//用来存储DVD的名称
    String[] dates=new String[50];//用来存储DVD的借出日期
    Scanner input=new Scanner(System.in);//创建了一个名为 input 的Scanner对象,用于接收用户的输入
    Date date=new Date();

    public void init(){
        indexs[0]=1;
        indexs[1]=2;
        indexs[2]=3;
        states[0]="已借出";
        states[1]="可借";
        states[2]="可借";
        names[0]="罗马假日";
        names[1]="风声鹤唳";
        names[2]="浪漫满屋";
        dates[0]="2010-7-7";
        dates[1]="";
        dates[2]="";
    }

    public static void main(String[] args) throws ParseException {

        DvD  dvd=new DvD();
        dvd.init();  //1.加载初始化数据
        dvd.menu();  //2.启动菜单
    }
    public void menu() throws ParseException {
        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.退  还");
        System.out.println("======================");
        System.out.println("请选择:");

        int index=input.nextInt();
        switch (index){
            case 1:
                case01();
                break;
            case 2:
                case02();
                break;
            case 3:
                case03();
                break;
            case 4:
                case04();
                break;
            case 5:
                case05();
                break;
            case 6:
                System.out.println("感谢使用本系统!");
                System.exit(1);
        }
    }



    private void case01() throws ParseException {

       for (int i=0;i<names.length;i++){//这是一个for循环,用于遍历一个存储DVD信息的数组:names数组。
           if (names[i]==null){//在每次迭代中,代码检查names[i]是否为null,以确定数组中是否有空闲位置可以新增DVD信息。
               System.out.println("--->新增DVD");
               System.out.println("输入DVD信息:名称");
               String mc=input.next();
               indexs[i]=i+1;//该行代码将当前DVD的索引存储在indexs数组中,索引的值为i+1。因为索引是从1开始的,而不是从0开始。
               states[i]="可借";
               names[i]=mc;
               dates[i]="";
               break;
           }
       }
       System.out.println("添加成功");
        System.out.println("==============");
        getReturn();
    }




    public void case02() throws ParseException {
        System.out.println("---->查看DVD");
        System.out.println("序号\t状态\t 名称\t 借出日期");
        for (int i=0;i<names.length;i++ ){
            if(names[i]==null){
                break;
            }
            System.out.println(indexs[i]+"\t"+states[i]+"\t"+names[i]+"\t\t"+dates[i]);
        }
        System.out.println("=========");
        getReturn();
    }




    private void case03() throws ParseException {
        System.out.println("---->删除DVD");
        System.out.println("输入要删除的名称:");
        String num=input.next();
        //这行代码从用户输入中读取一个字符串,并将其存储在名为num的变量中,用于表示用户想要删除的DVD名称或索引。
        int i;int j;
        for (i=0;i<indexs.length;i++){//这是一个for循环,用于遍历存储DVD索引的indexs数组。
            if (num.equals(names[i]) && "可借".equals(states[i])){
         //如果用户输入的名称与names数组中的某个名称相匹配,并且该DVD的状态是“可借”,则执行以下操作:
                for (j=i;j<indexs.length-1;j++)
                {//该循环从匹配的索引i开始,将数组中该位置后的元素向前移动一个位置,以覆盖当前位置的DVD信息
                    states[j]=states[j+1];
                    names[j]=names[j+1];
                    dates[j]=dates[j+1];
                }
                System.out.println("删除成功");
                break;
            }
            //如果用户输入的是DVD的索引,并且对应索引的DVD状态是“已借出”,则打印“DVD已借出,无法删除”的消息
            if (num.equals(indexs[i])&&"已借出".equals(states[i])){
                System.out.println("DVD已借出,无法删除");
                break;
            }
            //如果循环到达数组的末尾仍然没有找到匹配的DVD记录,则打印“未找到该DVD”的消息。
            if (i==indexs.length-1){
                System.out.println("未找到该DVD");
            }
        }
        getReturn();
    }




    private void case04() throws ParseException {
        System.out.println("--->借出DVD");
        System.out.println("选择你要借的dvd名称:");
        String borrow=input.next();//通过输入流对象 input 获取用户输入的 DVD 名称,并将其存储在字符串变量 borrow中。
        boolean boo=false;//声明一个布尔变量 boo,用于标记 DVD 是否已经被借走。
        for (int i=0;i<indexs.length;i++){
            if(borrow.equals(names[i])&& "可借".equals(states[i])){
                //如果用户输入的 DVD 名称与当前遍历到的 DVD 名称相匹配,并且状态为 "可借",则执行以下操作
                states[i] = "已借出";//状态变为已借出
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//获取当前日期,并将其格式化为字符串
                String date2 = sdf.format(date);
                dates[i] = date2;
                System.out.println("成功借出");
                break;
            }
            //如果用户输入的 DVD 名称与当前遍历到的 DVD 名称相匹配,并且状态为 "已借出",则执行以下操作
            if(borrow.equals(names[i]) && "已借出".equals(states[i])){
                boo=true;//DVD已经被借走
                break;
            }
            if (i==indexs.length-1){//如果遍历到数组的最后一个元素仍然没有匹配的 DVD,则执行以下操作
                System.out.println("未找到该DVD");
            }
        }
        if (!boo){
            System.out.println("已被借走");
        }
        getReturn();
    }



    private void case05() throws ParseException {
        System.out.println("--->归还DVD");
        System.out.println("输入归还DVD的名字:");
        String name=input.next();
        boolean boo=false;
        for (int i=0;i<indexs.length;i++){
            if (name.equals(names[i]) && "已借出".equals(states[i])) {
                // 如果用户输入的书籍名字与当前遍历到的 DVD 名称相匹配,并且状态为 "已借出",则执行以下操作
                System.out.println("请输入归还日期,如2024-1-1");
                String date2=input.next();//获取归还时间的信息
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//创建一个日期格式化对象,用于解析日期字符串
                //输入sdf.parse(date1).var变成下面这个↓
                Date parse1 = sdf.parse(dates[i]);//归还日期
                Date parse2 = sdf.parse(date2);//借出日期是date2
                long time2 = parse2.getTime();//parse2.getTime.var(一定要输入.var)
                // 得到一个毫秒数,距离1900.1.1的毫秒数
                long time1 =parse1.getTime();
                long money=(time2-time1)/(1000*60*60*24);//单位原本是毫秒,除1000就是秒,再除分钟,小时,就是一天。
                System.out.println("需要支付"+money+"元");
                System.out.println("DVD已退还");
                boo=true;
                states[i]="可借";
                dates[i]="";
                break;
            }
            if (name.equals(names[i]) && "可借".equals(states[i]) ){
                System.out.println("DVD不存在");
                boo=true;
            }
        }//如果 boo 仍然为 false,表示未找到对应的 DVD,则输出 "未找到对应DVD" 消息。
        if (!boo){
            System.out.println("DVD Not Found");
        }
        getReturn();
    }




    public void getReturn() throws ParseException {
        System.out.println("输入0返回");
        int i = input.nextInt();
        if (i == 0) {
            menu();
        }
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224

第一次写文章,感谢观看!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/946134
推荐阅读
相关标签
  

闽ICP备14008679号