影院售票系统
//座位集合属性 public Dictionary<string, Seat> Seats = new Dictionary<string, Seat>(); private Schedule schedule; public Schedule Schedule { get { return schedule; } set { schedule = value; } } public List<Ticket> SoldTickets = new List<Ticket>(); public void Save() { FileStream fs = new FileStream("soldTickets.bin", FileMode.Create); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(fs, SoldTickets); fs.Close(); } public void Load() { try { FileStream fs = new FileStream("soldTickets.bin", FileMode.Open); BinaryFormatter bf = new BinaryFormatter(); this.SoldTickets = (List<Ticket>)bf.Deserialize(fs); fs.Close(); } catch (Exception ex) { ex.ToString(); } } }
//赠票 public class FreeTicket:Ticket { //获得增票者的名字属性 public string CustomerName { get; set; } //重写父类计算票价方法 public override void CalcPrice() { } //重写打印售票信息的虚方法 public override void Print() { } //重写显示当前售出票信息的虚方法 public override void Show() { } public FreeTicket(影院购票系统.ScheduleItem scheduleItem, 影院购票系统.Seat seat, string customerName) { // TODO: Complete member initialization this.ScheduleItem = scheduleItem; this.Seat = seat; this.CustomerName = customerName; } }
//电影类 public class Movie { //电影名 public string MovieName = null; //海报图片名 public string Poster { get; set; } //导演名 public string Director { get; set; } //主演 public string Actor { get; set; } //电影类型 public MovieType MovieType { get; set; } //定价 public int Price { get; set; } }
public enum MovieType { Comedy, Action }
//放映计划类 public class Schedule { //放映场次属性 public Dictionary<string, ScheduleItem> items = new Dictionary<string, ScheduleItem>(); //读取XML文件获取 public void Loadltem() { //实例化XmlDataDocument的对象 XmlDataDocument doc = new XmlDataDocument(); //调用了XmlDataDocument的load方法 方法括号中写路径 doc.Load("ShowList.xml"); //XmlNode 接收根节点 XmlNode root = doc.DocumentElement; foreach (XmlNode item in root.ChildNodes) { Movie Movie = new Movie(); Movie.MovieName = item["Name"].InnerText; Movie.Poster = item["Poster"].InnerText; Movie.Director = item["Director"].InnerText; Movie.Price = Convert.ToInt32(item["Price"].InnerText); Movie.Actor = item["Actor"].InnerText; Movie.MovieType = MovieType.Action; foreach (XmlNode item1 in item["Schedule"].ChildNodes) { ScheduleItem sch = new ScheduleItem(); sch.Movie = Movie; sch.Time = item1.InnerText; items.Add(sch.Time, sch); } } } }
//影院每天放映计划的场次,保存每场电影的信息 public class ScheduleItem { //放映时间属性 public string Time { get; set; } //本场所放映 public Movie Movie { get; set; } }
//保存影院座位信息 public class Seat { public Seat(string p, System.Drawing.Color color) { // TODO: Complete member initialization this.SeatNum = p; this.Color = color; } public Seat() { } //座位号 public string SeatNum { get; set; } //座位卖出后的颜色 public System.Drawing.Color Color { get; set; } }
[Serializable] //学生票类 public class StudentTicket:Ticket { private string customerName; public StudentTicket(影院购票系统.ScheduleItem scheduleItem, 影院购票系统.Seat seat, string customerName) { // TODO: Complete member initialization this.ScheduleItem = scheduleItem; this.Seat = seat; this.customerName = customerName; } public StudentTicket(影院购票系统.ScheduleItem scheduleItem, 影院购票系统.Seat seat, int discount) { // TODO: Complete member initialization this.ScheduleItem = scheduleItem; this.Seat = seat; this.Discount = discount; } //学生票的折扣 public int Discount { get; set; } //重写父类计算票价方法 public override void CalcPrice() { this.Price = this.ScheduleItem.Movie.Price * Discount / 10; } //重写打印售票信息的虚方法 public override void Print() { string fileName = this.ScheduleItem.Time.Replace(":", "-") + " " + this.Seat.SeatNum + ".txt"; FileStream fs = new FileStream(fileName, FileMode.Create); StreamWriter sw = new StreamWriter(fs); sw.WriteLine("***************************"); sw.WriteLine(" 阿清影院 (学生)"); sw.WriteLine("---------------------------"); sw.WriteLine(" 电影名:\t{0}", this.ScheduleItem.Movie.MovieName); sw.WriteLine(" 时间: \t{0}", this.ScheduleItem.Time); sw.WriteLine(" 座位号:\t{0}", this.Seat.SeatNum); sw.WriteLine(" 价格: \t{0}", this.Price.ToString()); sw.WriteLine("***************************"); sw.Close(); fs.Close(); } //重写显示当前售出票信息的虚方法 public override void Show() { } }
//电影票 public class Ticket { public Ticket() { } public Ticket(ScheduleItem scheduleItem, Seat seat) { this.ScheduleItem = scheduleItem; this.Seat = seat; } //放映场次 public ScheduleItem ScheduleItem { get; set; } //所属对象座位对象 public Seat Seat { get; set; } //票价 public int Price { get; set; } //计算票价的虚方法 public virtual void CalcPrice() { this.Price = this.ScheduleItem.Movie.Price; } //打印售票信息的虚方法 public virtual void Print() { string fileName = this.ScheduleItem.Time.Replace(":", "-") + " " + this.Seat.SeatNum + ".txt"; FileStream fs = new FileStream(fileName, FileMode.Create); StreamWriter sw = new StreamWriter(fs); sw.WriteLine("***************************"); sw.WriteLine(" 青鸟影院"); sw.WriteLine("---------------------------"); sw.WriteLine(" 电影名:\t{0}", this.ScheduleItem.Movie.MovieName); sw.WriteLine(" 时间: \t{0}", this.ScheduleItem.Time); sw.WriteLine(" 座位号:\t{0}", this.Seat.SeatNum); sw.WriteLine(" 价格: \t{0}", this.Price.ToString()); sw.WriteLine("***************************"); sw.Close(); fs.Close(); } //显示当前售出票信息的虚方法 public virtual void Show() { } }
public class TicketFactory { 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; } }
显示放映座位
绑定TV控件
给groupBox传值操作
禁止TXT文本框的选择
保存和继续销售、
---恢复内容开始---
---恢复内容结束---