下面我们来补齐缺失代码:完善它的功能。 Cinema.java文件代码如下:/** * 思路:创建影院管理类及放映日程类 * @author Admin * */ public class Cinema { private Schedule schedule;//日程表对象 (单向关联关系) private ArrayList<Seat> seats = new ArrayList<Seat>();//保存座位的集合 //用于保存卖出去的电影票信息 private ArrayList<Ticket> tickes = new ArrayList<Ticket>(); public Cinema(){ schedule = new Schedule(); } public ArrayList<Ticket> getTickes() { return tickes; } public void setTickes(ArrayList<Ticket> tickes) { this.tickes = tickes; } public Schedule getSchedule() { return schedule; } public void setSchedule(Schedule schedule) { this.schedule = schedule; } /** * 根据座位及场次来判断座位号是否已经售出 */ public boolean getTicket(Seat seat,ScheduleItem item){ for(Ticket ticket:tickes){ //如果票已经售出,返回ture if(ticket.getSeat().getNumber().equals(seat.getNumber()) &&ticket.getItem().getTime().equals(item.getTime())){ return true; } } return false;//票没售出 } /** * 根据座位号查找座位 */ public Seat getSeat(String num){ for(Seat seat:seats){ if(seat.getNumber().equals(num)){ return seat; } } return null; } /** * 显示所有的座位信息 */ public void printSeat(){ System.out.println("---------------座位表----------------------------------"); int i = 1;//座位编号 for(Seat seat:seats){ if(i%7==0){//没碰到7列就换行 System.out.println(seat.getNumber()); }else{ System.out.print(seat.getNumber()+"\t"); } i++; } } /** * 初始化座位,把座位添加到集合中 */ public void initialSeat(){ for(int row = 1;row<=5;row++){ for(int col = 1;col<=7;col++){ Seat seat = new Seat(); //初始化座位 seat.setNumber(row+"-"+col); //将座位放到集合中去 seats.add(seat); } } } /** * 显示所有电影场次的方法 */ public void printMoiveInfo(){ int num = 1;//声明一个变量,用来存放电影的序号 System.out.println("序号\t电影名\t导演\t主演\t价格\t类型\t时间"); /** * 通过schedule.getList()获取Schedule类中的list集合封装的ScheduleItem对象 * 那么我们拿到该list,就要对集合进行遍历出ScheduleItem对象 */ for(ScheduleItem item:schedule.getList()){ System.out.print((num++)+"\t"); System.out.print(item.getMovie().getName()+"\t"); System.out.print(item.getMovie().getDirector()+"\t"); System.out.print(item.getMovie().getActor()+"\t"); System.out.print(item.getMovie().getPrice()+"\t"); System.out.print(item.getMovie().getType()+"\t"); System.out.println(item.getTime()+"\t"); } } } Schedule.java代码:/** * 在放映场次类中遍历xml,把电影信息封装到放映日程类中 * @author Admin * */ public class Schedule { /** * 放映场次的集合:不直接封装成电影对象的原因就是因为场次信息是重复的 */ private ArrayList<ScheduleItem> list; public Schedule(){ list = new ArrayList<ScheduleItem>(); } public ArrayList<ScheduleItem> getList() { return list; } public void setList(ArrayList<ScheduleItem> list) { this.list = list; } /** * 用于读取movie.xml文件中的电影信息,并封装成Movie对象, * 而且将场次信息添加到List集合中 * @throws DocumentException */ public void loadItems() { SAXReader reader = new SAXReader(); try { //加载xml文本到内存中 Document document = reader.read("movie.xml"); //获取根节点 Element root = document.getRootElement(); //获取根节点的子集 List<Element> list = root.elements(); for(Element element:list){ Movie movie = new Movie(); //获得根节点的子集的子集的数据,封装成Movie对象 /** * element.element("Name").getText()获取Name属性的文本信息 */ movie.setName(element.element("Name").getText()); movie.setActor(element.element("Actor").getText()); movie.setDirector(element.element("Director").getText()); movie.setPoster(element.element("Poster").getText()); movie.setPrice(Integer.valueOf(element.element("Price").getText())); movie.setType(MovieType.valueOf(element.element("Type").getText())); /** * Item他是ScheDule的子元素,那同样需要去解析 */ Element e = element.element("ScheDule"); //获取ScheDule的子集 List<Element> listsche = e.elements(); for(Element element2:listsche){//循环迭代每一步电影的场次 //需要将迭代出来场次时间与整个电影封装成一个对象 ScheduleItem item = new ScheduleItem(); item.setTime(element2.getText()); item.setMovie(movie); this.list.add(item); } } } catch (DocumentException e) { System.out.println("读取文件失败!"+e.getMessage()); } } /** * 查找电影信息 * 根据电影和场次时间来查找,并返回电影场次 * @param args */ public ScheduleItem searchMovie(String moiveName,String time) { for(ScheduleItem item:list){ if(item.getMovie().getName().equals(moiveName) &&item.getTime().equals(time)){ return item; } } return null; } } Seat.java代码:/** * 座位类 * @author Admin * */ public class Seat implements Serializable{ /** * */ private static final long serialVersionUID = 1L; /** * 座位编号 */ private String number; public Seat() { } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } } Ticket.java代码/** * 打印普通电影票的类 * @author Administrator * */public class Ticket implements Serializable { /** * */ private static final long serialVersionUID = 1L; double price;//价格 Seat seat;//座位 ScheduleItem item;//时间 Ticket() { } public Ticket(double price, Seat seat, ScheduleItem item) { //递归 setPrice(price); setItem(item); setSeat(seat); } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public Seat getSeat() { return seat; } public void setSeat(Seat seat) { this.seat = seat; } public ScheduleItem getItem() { return item; } public void setItem(ScheduleItem item) { this.item = item; } public static long getSerialversionuid() { return serialVersionUID; } //打印电影票 public void print(){ String path = "src/tickets/"+item.getTime().replace(':', '-') +seat.getNumber()+".txt"; //创建出文件 File file = new File(path); BufferedWriter bw = null; try { bw = new BufferedWriter(new FileWriter(file)); bw.write("**********************************************"); bw.newLine(); bw.write("ETC影院"); bw.newLine(); bw.write("电影名:"+item.getMovie().getName()); bw.newLine(); bw.write("时间:"+item.getTime()); bw.newLine(); bw.write("座位号:"+seat.getNumber()); bw.newLine(); bw.write("价格:"+item.getMovie().getPrice()); bw.flush(); } catch (IOException e) { System.out.println("打印失败:"+e.getMessage()); }finally{ try { bw.close(); } catch (IOException e) { e.printStackTrace(); } } } } StudentTicket.java代码:/** * 打印学生票的类 * @author Administrator * */ public class StudentTicket extends Ticket{ private double discount;//折扣 public StudentTicket() { } public StudentTicket(int dis,double price, Seat seat, ScheaduleItem item) { super(price, seat, item); setDiscount(dis); //计算折扣后的价格 this.setPrice(item.getMovie().getPrice()*dis/10.0); } public double getDiscount() { return discount; } public void setDiscount(double discount) { this.discount = discount; } @Override public void print(){ String path = "src/tickets/"+item.getMovie().getName()+item.getTime().replace(':', '-') +seat.getNumbe()+".txt"; //创建出文件 File file = new File(path); BufferedWriter bw = null; try { bw = new BufferedWriter( new FileWriter(file)); bw.write("*****************************"); bw.newLine(); bw.write("ETC私人影院"); bw.newLine(); bw.write("电影名: "+item.getMovie().getName()); bw.newLine(); bw.write("时间: "+item.getTime()); bw.newLine(); bw.write("座位号: "+seat.getNumbe()); bw.newLine(); bw.write("类型: 会员票"); bw.newLine(); bw.write("价格: "+price+" RMB"); bw.newLine(); bw.write("=============================="); bw.newLine(); bw.flush(); } catch (IOException e) { System.out.println("打印失败:"+e.getMessage()); }finally{ try { bw.close(); } catch (IOException e) { e.printStackTrace(); } } } }