Dvd管理系统

需求:

前4章的一个总结性练习

为某音像店开发一个迷你DVD管理器,最多可存6张DVD,实现碟片的管理。迷你DVD管理器具备的功能主要包括以下内容

输入相对应的数字,进入相对应的操作

分析:

1、查看DVD信息,有几个字段,每个字段定义6位的数组,我们需要定义 状态、名称、借出日期 这3个数组,目前掌握的知识,就是一一对应的关系

2、每一次都会有一个菜单,不管符不符合条件都有一个菜单,首先想到do{}while();

3、、输入的固定数据,代表1个操作,那么我们想到switch(){case}

4、、case 1:新增:

     找出能加进去的数组下标位置:定义了数组长度是6,但我们初始化数据的时候,可以先初始化3个位置,那么为空的位置,就是要增加的

   当为空的填满了后,是要告诉用户,数组已满,不能再添加了

    同样的,添加名称后,要把状态、借出日期 都要赋值为 未借阅  日期留空

5、case2:查看:

     遍历数组,遍历这3个数组,这里要注意的是没借过的日期要为空,不能输入0,

     本来数组中有3个的,如果新增,那就有多个,这个循环次数要加个判断 if(names[i]==null)的时候就直接退出循环

.......

代码如下:

这个代码有一些问题:

import java.util.Scanner;
/**
 * @author Administrator
 *初始化数据
 *新增
 */
public class MyDVDMgr {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        //DVD名称
        String[] names=new String[6];
        //DVD的借阅状态 0:可借阅,1:已借出
        int[] states=new int[6];
        //借出日期
        int[] dates=new int[6];
        //借出次数
        int[] counts=new int[6];
        
        //初始化数据
        names[0]="浪漫满屋";
        states[0]=1;
        dates[0]=8;
        counts[0]=10;
        
        names[1]="罗马假日";
        states[1]=0;
        dates[1]=0;
        counts[1]=5;
        
        names[2]="乾隆秘史";
        states[2]=0;
        dates[2]=0;
        counts[2]=100;
        int choose=0;
        int num2=-1;//接收0,是否返回
        //程序主体编写:DVD管理功能
        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");
            int num=input.nextInt();
            switch(num){
                case 1:
                    //新增
                    System.out.println("********************新增DVD*******************");
                    System.out.print("请输入新增的DVD名称:");
                    String name=input.next();
                    int flag=0;//货架还空着,大于0代表满
                    for(int i=0;i<names.length;i++){
                        //如果找着为空的位置,插入进去
                        if(names[i]==null){
                            //如果为空且不等于原来数组中的DVD名称,才插入进去
                            if(names[i]!=name){
                                names[i]=name;
                                flag++;
                                break;
                            }
                            
                        }
                    }
                    if(flag>0){
                        System.out.println("新增"+"《"+name+"》"+"DVD成功");
                    }else{
                        System.out.println("货架已满,不能新增!");
                    }
                    
                    break;
                case 2:
                    //查看
                    System.out.println("***********************查看DVD***********************");
                    System.out.println("序号	状态	名称	借出日期	借出次数");
                    
                    for(int i=0;i<names.length;i++){
                        if(names[i]!=null){
                            int xuHao=i+1;
                            String state=(states[i]==0)?"可借阅":"已借出";
                            String jieChuDate=(dates[i]==0)?"":dates[i]+"日";
                            String jieChuCount=counts[i]+"次";
                            System.out.println(xuHao+"	"+names[i]+"	"+state+"	"+jieChuDate+"	"+jieChuCount);
                        }
                    }
                    break;
                case 3:
                    //借出
                    System.out.println("******************借出DVD************");
                    System.out.print("请输入你要借的DVD名称:");
                    String want=input.next();
                    int flag2=0;
                    for(int i=0;i<names.length;i++){
                        if(want.equals(names[i])&&states[i]==0){
                            //存在,且未借阅,可借
                            flag2++;
                            //可借阅,状态要改为可借阅,日期要输入,且次数要加1
                            System.out.print("请输入日期:");
                            dates[i]=input.nextInt();
                            while(dates[i]<1 || dates[i]>30){
                                System.out.println("输入日期错误,日期在1-30之间,麻烦重新输入:");
                                dates[i]=input.nextInt();
                            }
                            states[i]=1;
                            counts[i]++;
                        }else if(want.equals(names)&& states[i]==1){
                            //存在,但已借阅,不可再借
                            System.out.println("对不起,此书已借阅,不可再借!");
                            break;
                        }
                        
                    }
                    System.out.println(flag2);
                    //作最后的判断,如果不存在的书
                    if(flag2>0){
                        System.out.println("借阅成功");
                    }else{
                        System.out.println("对不起,此书不存在,不可借阅");
                    }
                    
                    break;
                case 4:
                    //删除
                    //找到要删除的下标
                    System.out.println("******************删除DVD************");
                    System.out.print("请输入要删除的DVD名称:");
                    String name1=input.next();
                    int index=-1;//要删除的下标
                    //以下这一步只是找下标
                    for(int i=0;i<names.length;i++){
                        if(name1.equals(names[i])&&states[i]==0){
                            //有,未借出
                            index=i;
                            
                            break;
                        }else if(name1.equals(names[i])&&states[i]==1){
                            //有,但已借出
                            System.out.println("对不起,"+"《"+name1+"》"+"已借出,不能删除!");
                            break;
                        }
                    }    
                    
                    //找出要删除的下标后,删除的操作
                    //这里要有条件,就是必须得找出下标的时候,即找着存在名称且index=i后才可以执行删除,条件我给了>0,因为数组下标是>=0
                    if(index>=0){
                        for(int j=names.length-1;j>index;j--){
                            names[j-1]=names[j];
                            states[j-1]=states[j];
                            dates[j-1]=dates[j];
                            counts[j-1]=counts[j];
                        }
                        //补位后,最后一位,要赋空值,不然与倒数第1位重复
                        names[names.length-1]=null;
                        states[states.length-1]=0;
                        dates[dates.length-1]=0;
                        counts[counts.length-1]=0;
                        
                        System.out.println("删除成功!!");
                    }else{
                        System.out.println("对不起,"+"《"+name1+"》"+"不存在,所以不能删除!");
                    }
                    
                    break;
                case 5:
                    //归还
                    System.out.println("******************删除DVD************");
                    System.out.print("请输入要归还的DVD名称:");
                    String name2=input.next();
                    int flag3=0;
                    int sum=0;
                    for(int i=0;i<names.length;i++){
                        if(name2.equals(names[i])&&states[i]==1){
                            //有此书,且是借阅状态
                            flag3++;
                            //更新日期
                            System.out.print("请输入归还日期:");
                            int backDate=input.nextInt();
                            while(backDate<dates[i] || backDate>31){
                                if(backDate<dates[i]){
                                    System.out.println("归还日期要大于借出日期,请重新输入:");
                                }else if(backDate>31){
                                    System.out.println("归还日期不能大于31天,请重新输入:");
                                }
                                //不符合条件就一直循环直到输入正确的日期
                                 backDate=input.nextInt();
                            }
                            //更新状态
                            states[i]=0;
                            //计算租金:1天1块钱
                            int jiechudays=backDate-dates[i];
                            if(jiechudays==0){
                                sum=1;
                                System.out.println("你今天借,今天还,请付租金1天的钱"+sum);
                            }else if(jiechudays>=1){
                                sum=jiechudays*1;
                                System.out.println("请付租金:"+sum);
                            }
                            
                            
                        }else if(name2.equals(names[i])&&states[i]==0){
                            //有此书,但是是未借阅状态
                            System.out.println("此书未被借阅!请重新检查是否正确");
                        }
                        
                    }

                    if(flag3>0){
                        System.out.println("归还成功");
                        //算价格啦!
                    }else{
                        System.out.println("不存在此书!");
                    }
                    
                    break;
                case 6:
                    //退出
                    choose++;
                    break;
                default:
                    //正确数字以外的结果
                    choose++;
                    break;
            }
            if(choose>0){
                break;
            }else{
                //不退出,再次进入主菜单
                System.out.println("请输入0继续:");
                num2=input.nextInt();
            }
            
        }while(num2==0);
        
        //程序退出结束
        System.out.println("谢谢使用!");
    }
}

    修改后:

package DVD;

import java.util.Scanner;

public class DvdDemo1 {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        //定义数组
        String[] names=new String[4];
        int[] states=new int[4];//状态,0代表可借阅,1代表已借出
        int[] dates=new int[4];//借阅日期
        int[] counts=new int[4];//借阅交数
        //初始化数据
        names[0]="罗马假日";
        states[0]=1;
        dates[0]=6;
        counts[0]=1;
        
        names[1]="神么东西";
        states[1]=0;
        dates[1]=0;
        counts[1]=0;
        
        names[2]="跑男跑男";
        states[2]=1;
        dates[2]=9;
        counts[0]=8;
        int flag=0;
        
        do{
            System.out.println("欢 迎 使 用 迷 你 DVD 管 理 系 统");
            System.out.println("--------------------------------");
            System.out.println("1、新增");
            System.out.println("2、查看");
            System.out.println("3、删除");
            System.out.println("4、借出");
            System.out.println("5、归还");
            System.out.println("6、退出");
            System.out.println("--------------------------------");

            System.out.print("请输入想要进行的操作:");
            int want=input.nextInt();
            switch(want){
            case 1:
                //新增DVD    
                int flag2=0;
                //int ii=0;
                while(flag2==0){
                    System.out.print("请输入你要新增的DVD名称:");
                    String name=input.next();
                    int flag1=0;
                    for(int i=0;i<names.length;i++){
                        if(!name.equals(names[i]) && names[i]==null){
                            names[i]=name;
                            flag1++;
                            break;    
                        }else if(name.equals(names[i])){
                            flag1=-1;
                            break;
                        }
                        
                    }
                    if(flag1>0){
                        System.out.println("新增DVD成功!");
                        System.out.print("继续新增还是退出新增?(y/n)");
                        String yes=input.next();
                        if("n".equals(yes)){
                            flag2++;
                        }
                    }else if(flag1==-1){
                        System.out.println("已存在"+"《"+name+"》"+"名称的DVD,不能再插入了!");
                        System.out.print("继续新增还是退出新增?(y/n)");
                        String yes1=input.next();
                        if("n".equals(yes1)){
                            flag2++;
                        }
                    }
                    else if(flag1==0){
                        System.out.println("没有位置了");
                        flag2++;
                    }
                    
                }
                break;
                
            case 2:
                //查看DVD信息
                System.out.println("序号	名称	借阅状态	借阅日期	借阅次数");
                for(int i=0;i<names.length;i++){
                    if(names[i]!=null){
                        String state="";
                        if(states[i]==0){
                            state="可借阅";
                        }else{
                            state="已借出";
                        }
                        String date="";
                        if(dates[i]==0){
                            date="";
                        }else{
                            date=dates[i]+"日";
                        }
                        System.out.println((i+1)+"	"+names[i]+"	"+state+"	"+date+"	"+counts[i]);
                    }
                    
                    }
                    
                break;
            case 3:
                //删除DVD
                System.out.print("请输入你要删除的DVD名称:");
                String name1=input.next();
                int flag3=0;
                int index=-1;
                //先找出我输入的是哪本书,再判断此书有没有
                
                for(int i=0;i<names.length;i++){
                    if(names[i]!=null && states[i]==0 && name1.equals(names[i])){
                        index=i;
                        flag3++;
                        break;
                    }else if(states[i]==1 && name1.equals(names[i])){
                        System.out.println("不能删除"+"《"+name1+"》,状态已借阅");
                        flag3=-1;
                        break;
                        
                    }
                }
                //移位
                if(flag3>0){
                    System.out.println("删除成功!");
                    //System.out.println("index="+index);
                    for(int i=index+1;i<names.length-1;i++){
                        names[i-1]=names[i];
                        states[i-1]=states[i];
                        dates[i-1]=dates[i];
                        counts[i-1]=counts[i];
                        }
                    
                    }else if(flag3==0){
                        System.out.println("没有找着此书!");
                    }
                break;
                
            case 4:
                //借出
                System.out.print("请输入要借阅的DVD名称:");
                String name4=input.next();
                //先遍历,找出有没有,或已借出
                int flag5=0;
                int index1=-1;
                
                for(int i=0;i<names.length;i++){
                    if(names[i]!=null && name4.equals(names[i]) && states[i]==0){
                        index1=i;
                        flag5++;
                        
                        break;
                        
                    }else if(name4.equals(names[i]) && states[i]==1){
                        flag5=-1;
                        System.out.println("《"+name4+"》"+"已借出!不能再借!");
                        break;
                    }
                    
                }
                if(flag5>0){
                    System.out.print("请输入借出日期:");
                    dates[index1]=input.nextInt();
                    states[index1]=1;
                    counts[index1]++;
                    System.out.println("借阅成功");
                }else if(flag5==0){
                    System.out.println("此书不存在!");
                }
                break;
                
            case 5:
                //归还 状态要改,要有归还时间 
                System.out.print("请输入要归还的DVD名称:");
                String huanname=input.next();
                //先遍历,找出有没有,或已借出
                int flag6=0;
                int index3=-1;
                int huandate=0;
                for(int i=0;i<names.length;i++){
                    //有且是已借出状态,可还
                    if(names[i]!=null && huanname.equals(names[i]) && states[i]==1){
                        index3=i;
                        flag6++;
                        
                        break;
                        
                    }else if(huanname.equals(names[i]) && states[i]==0){//有但是未借出状态
                        flag6=-1;
                        System.out.println("《"+huanname+"》"+"已还!");
                        break;
                    }
                    
                }
                if(flag6>0){
                    System.out.print("请输入归还日期:");
                    huandate=input.nextInt();
                    int money=(huandate-dates[index3])*1;
                    dates[index3]=huandate;
                    states[index3]=0;
                    counts[index3]++;
                    System.out.println("归还成功");
                    System.out.println("请付租金:"+money);
                }else if(flag6==0){
                    System.out.println("此书不存在!");
                }
                break;
                
            case 6:
                flag++;
                break;
            default:
                flag++;
                break;
            }
            
            
        }while(flag==0);
        System.out.println("程序结束!");
    }
}
原文地址:https://www.cnblogs.com/sincoolvip/p/5465842.html