影院售票系统
(MyCinema)
问题描述
”青鸟影院”开始营业,需要一个售票系统:
使用XML和TreeView显示影院放映列表
使用泛型集合维护有继承关系的电影票对象
座位数可以在系统中指定
点击座位可购买不同类型的电影票
使用简单工厂模式创建不同类型的电影票
使用多态实现不同类型电影票的价格计算
使用接口实现电影票的打印
使用序列化和反序列化实现销售情况的保存和读取
系统主窗口:MainForm
问题分析-1
类关系
问题分析-2
父类可以创建
普通票
放映列表XML文件
问题分析-3
//省略其它电影...
功夫
gongfu.jpg
周星驰
周星驰
Action
60
- 8-00 9-45
- 10-00 11-45
打印的电影票样式
问题分析-4
***************************
青鸟影院
---------------------------
电影名:功夫
时间: 10-00 11-45
座位号:1-1
价格: 60
***************************
***************************
青鸟影院 (赠票)
---------------------------
电影名:蜘蛛人3
时间: 16-00 17-45
座位号:5-6
姓名: 张三
***************************
***************************
青鸟影院 (学生)
---------------------------
电影名:功夫
时间: 10-00 11-45
座位号:4-6
价格: 30
***************************
几个重要类
Cinema类
座位集合
已售票集合
放映日程
…
难点分析-1
Schedule
ScheduleItem
放映日程类
放映场次集合
获取放映列
表的方法
电影票类
所在座位
所属场次
…
放映场次类
放映时间
放映的电影
电影类
名称、海报等
使用简单工厂创建不同类型的电影票
难点分析-2
创建不同的子类产品
public static Ticket CreateTicket(ScheduleItem scheduleItem, Seat seat,
int discount,string customerName, string type)
{
Ticket newTicket = null;
switch (type)
{
case "student":
newTicket = new StudentTicket(scheduleItem, seat, discount);
break;
case "free":
newTicket = new FreeTicket(scheduleItem, seat, customerName);
break;
case "":
newTicket = new Ticket(scheduleItem, seat);
break;
}
return newTicket;
}
返回父类类型