⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 movie.java

📁 这是一个用java编写的关于GUI应用编程的音像商店管理的实例
💻 JAVA
字号:
package chap5.videostore.version2;

import java.util.Date;
import java.util.ArrayList;
import java.text.SimpleDateFormat;

public class Movie {
    //电影名称
    String title;
    //发行时间
    Date issueTime;
    //导演
    String director;
    //存放商店拥有的该电影的所有影碟对象,cdList是一个数组列表,可以包含其它对象
    ArrayList<CD> cdList =new ArrayList<CD>();

    /**
     * @param vcdnum 商店定购的该部电影VCD的碟片数量
     * */
    public Movie( String title,String director, Date issueTime,int vcdnum,int dvdnum) {
        this.director = director;
        this.issueTime = issueTime;
        this.title = title;
        //初始化该部电影的碟片对象,并通通放进cdList集合对象中
        CD cd=null;
        int i;
        int j=0;
        for(i=0;i<vcdnum;i++,j++){
            /*
             * 为了模拟出租和销售的业务,这里随机的创建一些供出租和销售的碟子
             * 请同学们注意父类类型对子类对象的声明
             */
             if(i%5==0){
                 cd=new RentCD(this.title+"-"+j,"VCD",3,this);
             }else{
                 cd=new SailCD(this.title+"-"+j,"VCD",3,this);
             }
            cdList.add(cd);//将生成的CD对象放进集合对象cdList中管理起来
        }
        for(i=0 ;i<dvdnum;i++,j++){
            if(i%5==0){
                cd=new RentCD(this.title+"-"+j,"DVD",4,this);
            }else{
                cd=new SailCD(this.title+"-"+j,"DVD",4,this);
            }
            cdList.add(cd);
        }
    }
    /**
     * 列出该电影所有的cd对象信息
     * */
    public void listCD(){
        for(CD cd:cdList){
            System.out.println(cd);
        }
    }
    /*
    * 定义出租的事件,每次执行该方法只能租一张影碟
    * @param name 客户的名称
    * */
    public String  rent(String name){
        String itemno=null;//记录组出的影碟编号
        //在cdList集合中寻找在库isIn为true,且是供出租的碟子

        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        for(CD cd:cdList){
            if(cd.isIn                            //在库
            		&&(cd instanceof RentCD)){           //是供出租的影碟
                System.out.println("found a cd for renting, it is:"+cd);
                //为了操作方便,进行强制类型转换
                RentCD rcd=(RentCD)cd;
                rcd.customerName=name;
                rcd.lastRentTime=sdf.format(new Date());//设定出租时间
                rcd.rentnum++;//出租次数加1
                rcd.isIn=false;
                itemno=rcd.itemno;
                break;//找到了,则退出循环
            }
        }
        return itemno;
    }
    /*
    * 定义归还的事件,每次执行该方法只能归还一张指定影碟编号的碟子
    * @param name 客户的名称
    * @param itemno 影碟的编号
    * */
    public void returncd(String name,String itemno){
        //在cdList集合中寻找在库isIn为true,且是供出租的碟子
        boolean isFound=false;
        for(CD cd:cdList){
            if(cd instanceof RentCD){
                //为了操作方便,进行强制类型转换
                RentCD rcd=(RentCD)cd;
                if(rcd.customerName!=null
                        &&rcd.customerName.compareTo(name)==0
                        &&cd.itemno.compareTo(itemno)==0){
                    System.out.println("found the renting record, it is:"+rcd.getRentingInfo());
                    //发现后,做复位操作
                    rcd.customerName=null;
                    rcd.lastRentTime=null;
                    rcd.isIn=true;
                    isFound=true;
                    break;
                }
            }
        }
        if(!isFound){//没有发现将要归还的影碟对象,报出错误
            System.out.println("not found the renging record, it is:"+name+",\t"+itemno);
        }
    }
    /**
     * 销售光盘,此销售事件中不考虑DVD还是VCD
     * @param num  希望购买的盘数
     * @return int 实际卖出的盘数,因为可能库存不足
     */
    public int sail(int num){
        //也可以这样使用数组列表这样的集合对象,你是否感觉还是上面的方法更简洁些
        //在迭代数组列表中寻找每一个可供销售的影碟
        SailCD cd=null;
        int count=0;
        for(int i=0;i<cdList.size();i++){
            if(cdList.get(i) instanceof SailCD){
                cd=(SailCD)cdList.get(i);//强制类型转换
                if(cd.isIn){
                    ++count;
                    cd.isIn=false;
                }
            }
            if(count==num){
                break;
            }
        }
          return count;
    }
    //统计该影片可供销售的影碟库存
    public int getCountForSail(){
        int count1=0;
        for(CD cd:cdList){
            if(cd instanceof SailCD&&cd.isIn){
                ++count1;
            }
        }
        return count1;
    }
    //统计该影片可供出租的影碟库存,请你尝试自己完成
    public int getCountForRent(){
    	int count2=0;
    	for(CD cd:cdList){
    		if(cd instanceof RentCD&&cd.isIn){
    			count2++;
      		}
    	}
          return count2;
    }
    public String toString() {
        //StringBuffer是一个可以修改包含字符串内容的对象
        StringBuffer sbf=new StringBuffer();
        //向sbf中顺序追加将要输出的内容
        sbf.append(this.title+",\t");
        /*
        * 由于直接输出issueTime不是一个很好的想法,因为默认输出格式不太吻合我们的习惯,所以
        * 这里使用了一种格式化输出的方法,用了一个特别的类来处理,请注意
        * */
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
        //根据上述定义的格式将issueTime格式化为一个特别的字符串形式
        sbf.append(sdf.format(this.issueTime)).append(",\t");
        //sbf.append(**) 方法的返回值还是StringBuffer,所以可以连续使用append()方法,看起来比上面的语句要清晰些
        sbf.append(this.director).append(",\t");
        /*显示该商店的主人共采购了多少该电影的影碟,注意和数组的元素个数是不一样的,
          数组的元素个数表示的是数组声明初始化时的长度,不会发生变化,而且length是一个属性
          而ArrayList这样的集合对象,size()方法返回的是该集合当时包容的对象个数,实际可以容纳的对象个数也许会超出此数
         */
        sbf.append(cdList.size());
        return sbf.toString();//因为该方法要求返回的是String,所以需要转换
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -