文档介绍:影院售票系统(MyCinema)
1
影院售票系统(MyCinema)
2
问题描述
“青鸟影院”开始营业,需要一个售票系统:
使用XML和TreeView显示影院放映列表
使用泛型集合维护有继承关系的电影票对象
座位数可以在系统中指定
点击座位可购买不同类型的电影票
使用简单工厂模式创建不同类型的电影票
使用多态实现不同类型电影票的价格计算
使用接口实现电影票的打印
使用序列化和反序列化实现销售情况的保存和读取
问题分析-1
系统主窗口:MainForm
问题分析-2
类关系
父类可以创建普通票
问题分析-3
<ShowList>
<Movie>
<Name>功夫</Name>
<Poster></Poster>
<Director>周星驰</Director>
<Actor>周星驰</Actor>
<Type>Action</Type>
<Price>60</Price>
<Schedule>
<Item>8-00 9-45</Item>
<Item>10-00 11-45</Item>
</Schedule>
</Movie>
//省略其它电影...
</ShowList>
放映列表XML文件
问题分析-4
打印的电影票样式
***************************
青鸟影院
---------------------------
电影名:功夫
时间: 10-00 11-45
座位号:1-1
价格: 60
***************************
***************************
青鸟影院(赠票)
---------------------------
电影名:蜘蛛人3
时间: 16-00 17-45
座位号:5-6
姓名: 张三
***************************
***************************
青鸟影院(学生)
---------------------------
电影名:功夫
时间: 10-00 11-45
座位号:4-6
价格: 30
***************************
难点分析-1
几个重要类
Cinema类
座位集合
已售票集合
放映日程
…
放映日程类
放映场次集合
获取放映列表的方法
放映场次类
放映时间
放映的电影
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;
}
返回父类类型
创建不同的子类产品
难点分析-3
动态加载座位标签(Label)
for (int i = 0; i < seatRow; i++)
{
for (int j = 0; j < seatLine; j++)
{
label = new Label();
//设置Label的各种属性省略,参考示例代码
= "lbl" + (j + 1).ToString() + "_" + (i + 1).ToString();
= new (50, 25);
= (j + 1).ToString() + "-" + (i + 1).ToString();
= ;
= new Point(60