迷你DVD管理器

本文详细讲述了使用Java编程实现的迷你DVD管理器,涉及数组基础操作、错误修复过程,包括添加元素时的计数问题、删除操作中的下标调整,以及借还DVD时的初始化改进。作者通过实例展示了如何解决数组操作中遇到的问题并分享了关键学习经验。
摘要由CSDN通过智能技术生成

使用java语言实现迷你DVD管理器

这里我用的是数组实现的DVD管理器:

package com.rongyu.day06;

import java.util.Scanner;

public class DomeDVD {
    private static Scanner scanner = new Scanner(System.in);
    private static DomeDVD domeDVD = new DomeDVD();
    private boolean flag = true;
    private int[] state = new int[50];//状态(0为已借出,1为可借)
    private String[] book = new String[50];//书籍
    private int[] date = new int[50];//借出日期
    private int[] count = new int[50];//借出次数
    public static void main(String[] args) {
        domeDVD.charge();
    }
    //选择界面
    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.print("请选择:");
    }
    //case语句
    public void charge(){
        while (flag){
            domeDVD.show();
            int num = scanner.nextInt();
            switch (num){
                case 1:
                    System.out.println("------>新增DVD");
                    domeDVD.add();
                    domeDVD.judge();
                    break;
                case 2:
                    System.out.println("------>查看DVD");
                    domeDVD.look();
                    domeDVD.judge();
                    break;
                case 3:
                    System.out.println("------>删除DVD");
                    domeDVD.del();
                    domeDVD.judge();
                    break;
                case 4:
                    System.out.println("------>借出DVD");
                    domeDVD.lend();
                    domeDVD.judge();
                    break;
                case 5:
                    System.out.println("------>归还DVD");
                    domeDVD.give();
                    domeDVD.judge();
                    break;
                case 6:
                    System.out.println("------>退出DVD");
                    System.out.println("感谢使用!");
                    return;
                default:
                    System.out.println("您的输入有误!!!");
                    domeDVD.judge();
                    break;
            }
        }
    }
    //判断界面
    public void judge(){
        System.out.println("你还要继续吗?(y/n)");
        String next = scanner.next();
        if (next.equalsIgnoreCase("y")){
            domeDVD.charge();
        }else if (next.equalsIgnoreCase("n")){
            System.out.println("感谢使用!!!");
            flag = false;
        }
    }
    //赋初始值
    public DomeDVD(){
        state[0] = 0;
        state[1] = 1;
        state[2] = 1;
        book[0] = "罗马假日";
        book[1] = "风声鹤唳";
        book[2] = "浪漫满屋";
        date[0] = 1;
        date[1] = 0;
        date[2] = 0;
        count[0] = 15;
        count[1] = 12;
        count[2] = 30;
    }
    //新增DVD
    public void add(){
        System.out.println("请输入你要添加几本图书?");
        int input = scanner.nextInt();
        int count1 = 0;
        int count2 = 0;
        for (int i = 0; i < book.length; i++) {
            if (book[i]!=null){
                count2++;
            }else {
                break;
            }
        }
       // System.out.println("count2------->"+count2);
        while (count1<input){
            System.out.print("请输入你要添加的第"+(count1+1)+"本图书的名称:");
            String boo = scanner.next();
            state[count2] = 1;
            date[count2] = 0;
            count[count2] = 0;
            book[count2++] = boo;
           // System.out.println("count2----->"+count2);
            count1++;
        }
        if (count1!=0){
            System.out.println("图书添加成功!!");
        }else {
            System.out.println("添加失败!");
        }
    }
    // 查看DVD
    public void look(){
        System.out.println("序号"+"   "+"状态"+"   "+"名称"+"   "+"借出日期"+"   "+"借出次数");
        for (int i = 0; i < book.length; i++) {
            if (book[i]==null){
                return;
            }
            System.out.println((i+1)+"   "+(state[i]==0?"已借出":"可借")+"   "+"《"+book[i]+"》"+"   "+(date[i]==0?"":date[i]+"日")+"   "+count[i]+"次");
        }
    }
    //删除DVD
    public void del(){
        System.out.print("请输入你要删除的DVD的名称:");
        String name = scanner.next();
        int num = -1;
        for (int i = 0; i < book.length; i++) {
            if (book[i]==null){
                break;
            }
            if (book[i].equals(name)){
              num = i;
              break;
            }
        }
        if (num!=-1){
            for(int j = num+1;j < book.length;j++){
                book[j-1] = book[j];
                state[j-1] = state[j];
                date[j-1] = date[j];
                count[j-1] = count[j];
            }
            System.out.println("删除成功!");
        }else {
            System.out.println("该图书不存在!");
        }
    }
    //借出DVD
    public void lend(){
        System.out.print("请输入你要借出的序号:");
        int num = scanner.nextInt();
        if (state[num-1]==0){
            System.out.println("该书已被借出!");
            return;
        }
        state[num-1] = 0;
        count[num-1] += 1;
        date[num-1] = (int) (System.currentTimeMillis()/1000/60/60/24);
        System.out.println("借出"+"《"+book[num-1]+"》"+"成功!");
    }
    //归还DVD
    public void give(){
        System.out.print("请输入你要归还的序号:");
        int num = scanner.nextInt();
        if (state[num-1]==1){
            System.out.println("该书没被借出,不能归还!");
            return;
        }
        state[num-1] = 1;
        date[num-1] = 0;
        System.out.println("归还"+"《"+book[num-1]+"》"+"成功!");
    }
}

最主要的是我想总结一下这次犯下的错误:
1.数组基础错误:
这里先复习一下数组的概念:
1)数组是必须存放同一种类型的数据
2)在运行过程中数组的长度不能改变
3)数组创建后都会对每个元素进行初始化
这里重要的是数组的开始的下标是以0开始的
这里没使用对象来存储这个一条数据,所以这里使用的思想是创建多个数组, 但是让他们在下标保持一致,就可以实现对一组数据的操作
我遇到的第一个错误:
在我给数组添加新元素的时候,我虽然利用循环得到了数组一共有多少个有赋值的元素,利用这个算出了下标,但是我给得到的每个元素都进行count++ 导致数组赋值赋不上去,最后通过debug解决了这个问题,并且当你把book[count++]放在第一行的话,就会出来数组赋初始值得情况 就会发现int的借出的状态直接一开始就是0就是已借出,所以还要更改count++ 的顺序。
我遇到的第二个问题:
就是在我进行数组删除的时候思路清晰,我知道是对数组进行向前移的操作,但是具体实施起来又遇到了一点小问题,我找到了数组的下标,但是在赋值的时候,我把加1的值赋给了减一,但是发现删除的不是我选择的那个值,而是他的上一个值,最后才发现原来是我要对数组进行下标一开始进行加1操作,或者要把加1的值赋给初始值。
我遇到的第三个问题:
在我进行借出操作时候我发现当我每次借出之后我都能借出成功,这里的借出就是找到下标给数组赋值,类似于修改,我就找到了数组的值,然后给数组进行赋值,成功之后给数组赋值的时候发现了一个奇怪的现象,我发现数组每次查看的时候数据都没有发生该表,我就感觉这个只能是2个方面的错误,要摸就是我赋值赋错了,要摸就是查看的错误,我通过debug进行测试发现修改成功,最后发现是查看的错误,才知道了原来之前我没有使用构造方法,每次循环程序的时候都会初始化初始值,相当于每次选则进行操作时候都会赋值的,当我修改值之后,在查看之前值又被修改了一次,所以我对初始值进行了构造方法的处理,也因为数组是引用数据类型,所以可以直接赋值,并且构造方法在类创建的时候只能被创建一次,所以遇这次情况刚刚好。
总结:
在遇到问题时候,首先要分析可能会发生错误的地方,然后逐个排查,还有编写程序的时候一定先把程序的框架写好,逐个填空。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值