电影售票系统(3)

下面我们来补齐缺失代码:完善它的功能。

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();
			}
		}
	}
}
一、项目简介 本项目是一套基于SSM实现的影院订票系统 或 影院售票系统 或 在线电影订票平台,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本、软件工具等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,确保可以运行! 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 二、技术实现 后台框架:Spring、SpringMVC、MyBatis UI界面:BootStrap、jQuery 、JSP ​数据库:MySQL 三、系统功能 系统分为前台订票和后台管理: 1. 前台订票 用户注册、用户登录、查看电影列表、分类查看 电影搜索、查看电影详情、发表电影评价 在线订票、在线支付、个人中心、查看订单 2. 后台管理 管理员管理:新增、查看列表、编辑、删除、查询 用户信息管理:查看列表、删除、查询 新闻公告管理:新增、查看列表、编辑、删除、查询 电影类型管理:新增、查看列表、编辑、删除、查询 城市信息管理:新增、查看列表、编辑、删除、查询 影院信息管理:新增、查看列表、编辑、删除、查询 电影信息管理:新增、查看列表、编辑、删除、查询 订单信息管理:查看列表、编辑、删除、查询 电影评价管理:查看列表、删除、查询 详见:https://edu.csdn.net/course/detail/31925
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值