按照要求创建类
///
/// 创建电影票工具类
/// 使用简单工厂模式创建票
///
public class TicketUtil
{
public static Ticket CreateTicket(ScheduleItem item,Seat seat,string customerName,double discount,string type)
{
Ticket ticket = null;
switch (type)
{
case "normal":
ticket = new Ticket(item, seat);
break;
case "free":
ticket = new FreeTicket(customerName, item, seat);
break;
case "student":
ticket = new StudentTicket(item, seat, discount);
break;
}
return ticket;
}
/// 电影票父类
///
public class Ticket
{
public Ticket() { }
public Ticket(ScheduleItem scheduleItem,Seat seat)
{
this.ScheduleItem = scheduleItem;
this.Seat = seat;
this.Price = CalcPrice();
}
//价格
public double Price { get; set; }
//放映场次
public ScheduleItem ScheduleItem { get; set; }
//座位
public Seat Seat { get; set; }
///
/// 计算价格
///
///
public virtual double CalcPrice()
{
return this.ScheduleItem.Movie.Price;
}
///
/// 打印电影票
///
public virtual void Print()
{
string path = (this.ScheduleItem.Time + " " + this.Seat.SeatNum).Replace(":", "-") + ".txt";
using (FileStream fs = new FileStream(path,FileMode.Create))
{
using (StreamWriter sw = new StreamWriter(fs,Encoding.Default))
{
sw.WriteLine("*******************************");
sw.WriteLine(" 青鸟影院 ");
sw.WriteLine("-------------------------------");
sw.WriteLine("电影名:"+ScheduleItem.Movie.MovieName);
sw.WriteLine("时间:"+this.ScheduleItem.Time);
sw.WriteLine("座位号:"+this.Seat.SeatNum);
sw.WriteLine("价格:"+this.Price);
sw.WriteLine("*******************************");
}
}
}
/// 学生票
///
public class StudentTicket:Ticket
{
public StudentTicket() { }
public StudentTicket(ScheduleItem scheduleItem,Seat seat,double discount):base(scheduleItem,seat)
{
this.Discount = discount;
this.Price = CalcPrice();
}
//折扣
public double Discount { get; set; }
///
/// 计算学生票价格
///
///
public override double CalcPrice()
{
return this.ScheduleItem.Movie.Price * this.Discount /10;
}
///
/// 打印学生票
///
public override void Print()
{
string path = (this.ScheduleItem.Time + " " + this.Seat.SeatNum).Replace(":", "-") + ".txt";
using (FileStream fs = new FileStream(path, FileMode.Create))
{
using (StreamWriter sw = new StreamWriter(fs, Encoding.Default))
{
sw.WriteLine("*******************************");
sw.WriteLine(" 青鸟影院(学生票) ");
sw.WriteLine("-------------------------------");
sw.WriteLine("电影名:" + ScheduleItem.Movie.MovieName);
sw.WriteLine("时间:" + this.ScheduleItem.Time);
sw.WriteLine("座位号:" + this.Seat.SeatNum);
sw.WriteLine("折扣:"+this.Discount);
sw.WriteLine("价格:" + this.Price);
sw.WriteLine("*******************************");
}
}
/// 座位类
///
public class Seat
{
public Seat() { }
public Seat(string seatNum,Color color)
{
this.SeatNum = seatNum;
this.Color = color;
}
//座位号
public string SeatNum { get; set; }
//颜色
public Color Color { get; set; }
}
/// 放映场次
///
public class ScheduleItem
{
public ScheduleItem() { }
public ScheduleItem(Movie movie,string time)
{
this.Movie = movie;
this.Time = time;
}
//电影
public Movie Movie { get; set; }
//放映时间
public string Time { get; set; }
}
/// 放映计划类
///
public class Schedule
{
public Schedule() { Items = new Dictionary(); }
public Schedule(Dictionary items)
{
this.Items = items;
}
public Dictionary Items { get; set; }
//加载XML中的放映场次信息
public void LoadItems()
{
try
{
XmlDocument doc = new XmlDocument();
doc.Load(@"Data\ShowList.xml");
XmlNode root = doc.DocumentElement;
foreach (XmlNode var in root.ChildNodes)//Movie
{
Movie movie = new Movie();
foreach (XmlNode var2 in var.ChildNodes)//Name
{
switch (var2.Name)
{
case "Name":
movie.MovieName = var2.InnerText;
break;
case "Poster":
movie.Poster = var2.InnerText;
break;
case "Director":
movie.Director = var2.InnerText;
break;
case "Actor":
movie.Actor = var2.InnerText;
break;
case "Price":
movie.Price = Convert.ToDouble(var2.InnerText);
break;
case "Type":
movie.MovieType = (MovieType)Enum.Parse(typeof(MovieType), var2.InnerText);
break;
case "Schedule":
foreach (XmlNode var3 in var2.ChildNodes)//Item
{
ScheduleItem item = new ScheduleItem(movie, var3.InnerText);
this.Items.Add(var3.InnerText, item);
}
break;
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
static class Program
{
///
/// 应用程序的主入口点。
///
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FrmCinema());
}
}
/// 电影类
///
public class Movie
{
public Movie() { }
public Movie(string actor, string director, string movieName, MovieType movieType, string poster, double price)
{
this.Actor = actor;
this.Director = director;
this.MovieName = movieName;
this.MovieType = movieType;
this.Poster = poster;
this.Price = price;
}
//导演
public string Actor { get; set; }
//演员
public string Director { get; set; }
//电影名
public string MovieName { get; set; }
//电影类型
public MovieType MovieType { get; set; }
//海报路径
public string Poster { get; set; }
//电影价格
public double Price { get; set; }
}
/// 赠票
///
public class FreeTicket:Ticket
{
public FreeTicket() { }
public FreeTicket(string customerName,ScheduleItem scheduleItem,Seat seat):base(scheduleItem,seat)
{
this.CustomerName = customerName;
this.Price = CalcPrice();
}
//赠票人姓名
public string CustomerName { get; set; }
///
/// 计算赠票票价
///
///
public override double CalcPrice()
{
return 0;
}
///
/// 打印赠票
///
public override void Print()
{
string path = (this.ScheduleItem.Time + " " + this.Seat.SeatNum).Replace(":", "-") + ".txt";
using (FileStream fs = new FileStream(path, FileMode.Create))
{
using (StreamWriter sw = new StreamWriter(fs, Encoding.Default))
{
sw.WriteLine("*******************************");
sw.WriteLine(" 青鸟影院(赠票) ");
sw.WriteLine("-------------------------------");
sw.WriteLine("电影名:" + ScheduleItem.Movie.MovieName);
sw.WriteLine("时间:" + this.ScheduleItem.Time);
sw.WriteLine("座位号:" + this.Seat.SeatNum);
sw.WriteLine("赠送人:"+this.CustomerName);
sw.WriteLine("价格:" + this.Price);
sw.WriteLine("*******************************");
}
}
}
}
/// 电影院类
///
public class Cinema
{
public Cinema()
{
SoldTickets = new List();
Schedule = new Schedule();
Seats = new Dictionary();
}
public Schedule Schedule { get; set; }
public Dictionary Seats { get; set; }
public List SoldTickets { get; set; }
///
/// 加载放映场次
///
public void Load()
{
using (FileStream fs = new FileStream("student.dat",FileMode.Open))
{
BinaryFormatter bf = new BinaryFormatter();
this.SoldTickets = bf.Deserialize(fs) as List;
}
}
///
/// 保存销售信息
///
public void Save()
{
//
using (FileStream fs = new FileStream("student.dat",FileMode.Create))
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, SoldTickets);
}
}
}