使用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进行测试发现修改成功,最后发现是查看的错误,才知道了原来之前我没有使用构造方法,每次循环程序的时候都会初始化初始值,相当于每次选则进行操作时候都会赋值的,当我修改值之后,在查看之前值又被修改了一次,所以我对初始值进行了构造方法的处理,也因为数组是引用数据类型,所以可以直接赋值,并且构造方法在类创建的时候只能被创建一次,所以遇这次情况刚刚好。
总结:
在遇到问题时候,首先要分析可能会发生错误的地方,然后逐个排查,还有编写程序的时候一定先把程序的框架写好,逐个填空。