【Java】迷你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();
        }
    }

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]="";
    }

3、主函数模块

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

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

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

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

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

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

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

整体代码

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

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

  • 30
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java迷你DVD管理器是一个基于Java语言开发DVD管理系统,可以实现DVD的增删改查等基本功能。根据提供的引用内容,可以看出该系统的主要类为DVDMgr和Menu,其中DVDMgr类负责DVD信息的初始化和管理,Menu类负责显示菜单和处理用户输入。下面是一个简单的Java迷你DVD管理器的实现示例: ```java package com.example.dvd; import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * DVD信息类 */ class DVD { private String name; // 名称 private String type; // 类型 private String date; // 出版日期 public DVD(String name, String type, String date) { this.name = name; this.type = type; this.date = date; } public String getName() { return name; } public String getType() { return type; } public String getDate() { return date; } @Override public String toString() { return "DVD{" + "name='" + name + '\'' + ", type='" + type + '\'' + ", date='" + date + '\'' + '}'; } } /** * DVD管理类 */ class DVDMgr { private List<DVD> dvdList = new ArrayList<>(); /** * 初始化DVD信息 */ public void initial() { dvdList.add(new DVD("肖申克的救赎", "剧情", "1994-09-10")); dvdList.add(new DVD("霸王别姬", "剧情", "1993-01-01")); dvdList.add(new DVD("阿甘正传", "剧情", "1994-06-23")); dvdList.add(new DVD("泰坦尼克号", "爱情", "1997-12-19")); } /** * 显示DVD列表 */ public void showList() { System.out.println("DVD列表:"); for (int i = 0; i < dvdList.size(); i++) { System.out.println((i + 1) + ". " + dvdList.get(i)); } } /** * 添加DVD */ public void addDVD() { Scanner scanner = new Scanner(System.in); System.out.print("请输入DVD名称:"); String name = scanner.nextLine(); System.out.print("请输入DVD类型:"); String type = scanner.nextLine(); System.out.print("请输入DVD出版日期(格式:yyyy-MM-dd):"); String date = scanner.nextLine(); dvdList.add(new DVD(name, type, date)); System.out.println("添加成功!"); } /** * 删除DVD */ public void deleteDVD() { Scanner scanner = new Scanner(System.in); System.out.print("请输入要删除的DVD编号:"); int index = scanner.nextInt(); if (index < 1 || index > dvdList.size()) { System.out.println("输入有误!"); return; } dvdList.remove(index - 1); System.out.println("删除成功!"); } } /** * 菜单类 */ class Menu { private static final int SHOW_LIST = 1; private static final int ADD_DVD = 2; private static final int DELETE_DVD = 3; private static final int EXIT = 4; /** * 显示菜单 */ public static void showMenu(DVDMgr mgr) { Scanner scanner = new Scanner(System.in); while (true) { System.out.println("请选择操作:"); System.out.println("1. 显示DVD列表"); System.out.println("2. 添加DVD"); System.out.println("3. 删除DVD"); System.out.println("4. 退出"); int choice = scanner.nextInt(); switch (choice) { case SHOW_LIST: mgr.showList(); break; case ADD_DVD: mgr.addDVD(); break; case DELETE_DVD: mgr.deleteDVD(); break; case EXIT: System.out.println("谢谢使用!"); return; default: System.out.println("输入有误,请重新输入!"); break; } } } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值