影院售票系统

 //座位集合属性
       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();
           }
       }

    }
Cinema
 //赠票
   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;
        }
    }
FreeTicket
    //电影类
   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; }
    }
Movie
 public  enum MovieType
    {
        Comedy, Action
    }
MovieType
//放映计划类
    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);
                    }

            }

        }
    }
Schedule
 //影院每天放映计划的场次,保存每场电影的信息
   public class ScheduleItem
    {
       //放映时间属性
        public string Time { get; set; }
       //本场所放映
        public Movie Movie { get; set; }
    }
ScheduleItem
  //保存影院座位信息
   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; }

    }
Seat
[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(" 电影名:	{0}", this.ScheduleItem.Movie.MovieName);
            sw.WriteLine(" 时间:  	{0}", this.ScheduleItem.Time);
            sw.WriteLine(" 座位号:	{0}", this.Seat.SeatNum);
            sw.WriteLine(" 价格:  	{0}", this.Price.ToString());
            sw.WriteLine("***************************");
            sw.Close();
            fs.Close();
            
        }
        //重写显示当前售出票信息的虚方法
        public override void Show()
        {

        }
    }
StudentTicket
  //电影票
   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(" 电影名:	{0}", this.ScheduleItem.Movie.MovieName);
            sw.WriteLine(" 时间:  	{0}", this.ScheduleItem.Time);
            sw.WriteLine(" 座位号:	{0}", this.Seat.SeatNum);
            sw.WriteLine(" 价格:  	{0}", this.Price.ToString());
            sw.WriteLine("***************************");
            sw.Close();
            fs.Close();
        }
       //显示当前售出票信息的虚方法
        public virtual void Show()
        {
         
        }
    }
Ticket
 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;
        }
    }
TicketFactory

显示放映座位

绑定TV控件

给groupBox传值操作

禁止TXT文本框的选择

保存和继续销售、

---恢复内容开始---

---恢复内容结束---

原文地址:https://www.cnblogs.com/fkx1/p/8372430.html