影院售票管理源码

来源:互联网 发布:java中数据类型有哪些 编辑:程序博客网 时间:2024/04/28 17:14
  1. using System;  using System.Collections.Generic;  using System.ComponentModel;  using System.Data;  using System.Drawing;  using System.Text;  using System.Windows.Forms;  using System.Xml;  using MyCinema.Models;    namespace MyCinema  {      public partial class MainForm : Form      {          Cinema cinema;          Dictionary<string, Label> labels = new Dictionary<string, Label>();          int ticket = 0;          string key = null;                    public MainForm()          {              InitializeComponent();          }            private void MainForm_Load(object sender, EventArgs e)          {              this.lblActor.Text = "";              this.lblDirector.Text = "";              this.lblMovieName.Text = "";              this.lblPrice.Text = "";              this.lblTime.Text = "";              this.lblType.Text = "";              this.lblCalcPrice.Text = "";              this.txtCustomer.Enabled = false;              this.cmbDisCount.Enabled = false;              this.rdoNormal.Checked = true;                cinema = new Cinema();              //放映厅座位(初始)              InitSeats(7, 5, tpCinema);                              cinema.Load();            }                    private void InitSeats(int seatRow,int seatLine,TabPage tb)          {              Label label;              Seat seat;              for (int i = 0; i < seatRow; i++)              {                  for (int j = 0; j < seatLine; j++)                  {                      label = new Label();                                          label.BackColor = Color.Yellow;                                           label.Font = new System.Drawing.Font("宋体", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point,((byte)(134)));                                          label.AutoSize = false;                      label.Size = new System.Drawing.Size(50, 25);                                          label.Text = (j + 1).ToString() + "-" + (i + 1).ToString();                      label.TextAlign = ContentAlignment.MiddleCenter;                                           label.Location = new Point(60 + (i * 90), 60 + (j * 60));                                           label.Click += new System.EventHandler(lblSeat_Click);                      tb.Controls.Add(label);                      labels.Add(label.Text, label);                                            seat = new Seat((j + 1).ToString() + "-" + (i + 1).ToString(), Color.Yellow);                                            cinema.Seats.Add(seat.SeatNum, seat);                  }              }          }                     private void tsmiMovies_Click(object sender, EventArgs e)          {              //放映列表是否为空              if (cinema.Schedule.Items.Count == 0)              {                  cinema.Schedule.LoadItems();              }              InitTreeView();          }            //获取最新播放列表          private void tsmiNew_Click(object sender, EventArgs e)          {              cinema.Schedule.LoadItems();              cinema.SoldTickets.Clear();              InitTreeView();          }                      private void InitTreeView()          {              tvMovies.BeginUpdate();              tvMovies.Nodes.Clear();                string movieName = null;              TreeNode movieNode = null;               foreach (ScheduleItem item in cinema.Schedule.Items.Values)              {                  if (movieName != item.Movie.MovieName)                  {                      movieNode = new TreeNode(item.Movie.MovieName);                      tvMovies.Nodes.Add(movieNode);                  }                  TreeNode timeNode = new TreeNode(item.Time);                  movieNode.Nodes.Add(timeNode);                  movieName = item.Movie.MovieName;                }              tvMovies.EndUpdate();          }            private void tvMovies_AfterSelect(object sender, TreeViewEventArgs e)          {              TreeNode node = tvMovies.SelectedNode;              if (node == null) return;              if (node.Level != 1) return;              key = node.Text;              //将详细信息显示              this.lblMovieName.Text = cinema.Schedule.Items[key].Movie.MovieName;              this.lblDirector.Text = cinema.Schedule.Items[key].Movie.Director;              this.lblActor.Text = cinema.Schedule.Items[key].Movie.Actor;               this.lblPrice.Text = cinema.Schedule.Items[key].Movie.Price.ToString();              this.lblTime.Text = cinema.Schedule.Items[key].Time;              this.lblType.Text = cinema.Schedule.Items[key].Movie.MovieType.ToString();              this.picMovie.Image = Image.FromFile(cinema.Schedule.Items[key].Movie.Poster);              this.lblCalcPrice.Text = "";                //清空座位              ClearSeat();              //遍历座位情况              foreach (Ticket ticket in cinema.SoldTickets)              {                  foreach (Seat seat in cinema.Seats.Values)                  {                      if ((ticket.ScheduleItem.Time == key)                          &&(ticket.Seat.SeatNum == seat.SeatNum))                      {                          seat.Color = Color.Red;                      }                  }              }              UpdateSeat();          }                    //清空座位          private void ClearSeat()          {              foreach (Seat seat in cinema.Seats.Values)              {                  seat.Color = Color.Yellow;              }          }        //更新状态          private void UpdateSeat()          {              foreach (string key in cinema.Seats.Keys)              {                  labels[key].BackColor = cinema.Seats[key].Color;              }          }          //买票          private void lblSeat_Click(object sender, EventArgs e)          {              if (String.IsNullOrEmpty(this.lblMovieName.Text))              {                  MessageBox.Show("您还没选择电影!","提示");                  return;              }              ticket++;              try              {                  string seatNum = ((Label)sender).Text.ToString();                  string customerName = this.txtCustomer.Text.ToString();                  int discount = 0;                  string type = "";                  if (this.rdoStudent.Checked)                  {                      type = "student";                      if (this.cmbDisCount.Text == null)                      {                          MessageBox.Show("请输入折扣数!","提示");                          return;                      }                      else                      {                          discount = int.Parse(this.cmbDisCount.Text);                      }                  }                  else if (this.rdoFree.Checked)                  {                      if (String.IsNullOrEmpty(this.txtCustomer.Text))                      {                          MessageBox.Show("请输入赠票者姓名!","提示");                          return;                      }                      else                      {                          type = "free";                      }                  }                                                                 //工具类创建票                  Ticket newTicket = TicketUtil.CreateTicket(cinema.Schedule.Items[key], cinema.Seats[seatNum],                      discount, customerName, type);                  if (cinema.Seats[seatNum].Color == Color.Yellow)                  {                      //打印                      DialogResult result;                      result = MessageBox.Show("是否购买?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);                      if (result == DialogResult.Yes)                      {                          cinema.Seats[seatNum].Color = Color.Red;                          UpdateSeat();                          newTicket.CalcPrice();                          cinema.SoldTickets.Add(newTicket);                          lblCalcPrice.Text = newTicket.Price.ToString();                          newTicket.Print();                      }                      else if (result == DialogResult.No)                      {                          return;                      }                  }                  else                  {                      //显示售票信息                        foreach (Ticket ticket0 in cinema.SoldTickets)                      {                          //判断座位是否售出                          if (ticket0.Seat.SeatNum == seatNum && ticket0.ScheduleItem.Time==tvMovies.SelectedNode.Text && ticket0.ScheduleItem.Movie.MovieName==tvMovies.SelectedNode.Parent.Text)                          {                              ticket0.Show();                          }                      }                  }              }              catch (Exception ex)              {                  MessageBox.Show(ex.ToString());              }          }            //送票          private void rdoFree_CheckedChanged(object sender, EventArgs e)          {              this.txtCustomer.Enabled = true;              this.cmbDisCount.Enabled = false;              this.cmbDisCount.Text = "";              //优惠价              this.lblCalcPrice.Text = "0";          }            //学生票          private void rdoStudent_CheckedChanged(object sender, EventArgs e)          {              this.txtCustomer.Enabled = false;              this.txtCustomer.Text = "";              this.cmbDisCount.Enabled = true;              this.cmbDisCount.Text = "7";              //设置当前优惠价              if(this.lblPrice.Text!="")              {                  int price = int.Parse(this.lblPrice.Text);                  int discount = int.Parse(this.cmbDisCount.Text);                  this.lblCalcPrice.Text = (price * discount / 10).ToString();              }                        }            //普通票          private void rdoNormal_CheckedChanged(object sender, EventArgs e)          {              this.cmbDisCount.Enabled = false;              this.txtCustomer.Text = "";              this.txtCustomer.Enabled = false;              this.cmbDisCount.Text = "";              this.lblCalcPrice.Text = "";          }            private void tsmiExit_Click(object sender, EventArgs e)          {              cinema.Save();              this.Dispose();          }            private void tsmiSave_Click(object sender, EventArgs e)          {              cinema.Save();          }            private void MainForm_FormClosing(object sender, FormClosingEventArgs e)          {              DialogResult close;              close = MessageBox.Show("是否保存当前销售状态?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);              if (close == DialogResult.Yes)              {                                    cinema.Save();              }          }            //不同折扣          private void cmbDisCount_SelectedIndexChanged(object sender, EventArgs e)          {              //当前电影优惠价              if (this.lblPrice.Text != "")              {                  int price = int.Parse(this.lblPrice.Text);                  int discount = int.Parse(this.cmbDisCount.Text);                  this.lblCalcPrice.Text = (price * discount / 10).ToString();              }          }      }  }  [csharp] view plain copy 在CODE上查看代码片派生到我的代码片cinema类<pre code_snippet_id="2259154" snippet_file_name="blog_20170312_2_6971975" name="code" class="csharp">using System;  using System.Collections.Generic;  using System.Text;  using System.IO;  using System.Runtime.Serialization.Formatters.Binary;  using System.Drawing;    namespace MyCinema.Models  {      public class Cinema      {          public Cinema()          {              seats = new Dictionary<string, Seat>();              soldTickets = new List<Ticket>();              schedule = new Schedule();          }                  private Dictionary<string, Seat> seats;          public Dictionary<string, Seat> Seats          {              get { return seats; }              set { seats = value; }          }            private Schedule schedule;               public Schedule Schedule          {              get { return schedule; }              set { schedule = value; }          }            private List<Ticket> soldTickets;          public List<Ticket> SoldTickets          {              get { return soldTickets; }              set { soldTickets = value; }          }            //保存售票信息          public void Save()          {              FileStream fs = new FileStream("soldTickets.txt", FileMode.OpenOrCreate);              StreamWriter writer = new StreamWriter(fs, Encoding.Default);              for (int index = 0; index < SoldTickets.Count; index++)              {                  Ticket ticket = SoldTickets[index];                  string info = "|" + ticket.ScheduleItem.Movie.MovieName + "|" + ticket.ScheduleItem.Movie.Poster + "|" +                      ticket.ScheduleItem.Movie.Director + "|" + ticket.ScheduleItem.Movie.Actor + "|" + ticket.ScheduleItem.Movie.MovieType.ToString() + "|" +                      ticket.ScheduleItem.Movie.Price + "|" + ticket.ScheduleItem.Time + "|" + ticket.Seat.SeatNum + "|" + ticket.Seat.Color + "|" + ticket.Price + "|";                  if (ticket is FreeTicket)                  {                      string customerName=((FreeTicket)ticket).CustomerName;                      writer.WriteLine("free" + info + customerName);                  }                  else if (ticket is StudentTicket)                  {                                            writer.WriteLine("student" + info + "");                  }                  else                  {                      writer.WriteLine("" + info + "");                  }              }              writer.WriteLine("The End");              writer.Close();              fs.Close();          }            //读取售票信息          public void Load()          {              try              {                  StreamReader reader = new StreamReader("soldTickets.txt", Encoding.GetEncoding("GB2312"));                  string line = reader.ReadLine();                  string[] propertyValues;                  Ticket ticket = null;                    while (line.Trim() != "The End")                  {                      propertyValues = line.Split('|');                      string type = propertyValues[0];                        Movie movie = new Movie(propertyValues[1], propertyValues[2], propertyValues[3], propertyValues[4], (MovieType)Enum.Parse(typeof(MovieType), propertyValues[5]), int.Parse(propertyValues[6]));                      ScheduleItem scheduleItem = new ScheduleItem();                      scheduleItem.Time = propertyValues[7];                      scheduleItem.Movie = movie;                      string color = propertyValues[9];                      string endColor = color.Substring(color.IndexOf("[") + 1, color.Length - 1 - color.IndexOf("[") - 1);                      Seat seat = new Seat(propertyValues[8], Color.FromName(endColor));                        int discount = 10;                      switch (type)                      {                          case "student":                              discount = 7;                              ticket = TicketUtil.CreateTicket(scheduleItem, seat, discount, "", type);                              break;                          case "free":                              discount = 0;                              ticket = TicketUtil.CreateTicket(scheduleItem, seat, discount, propertyValues[11], type);                              break;                          default:                              discount = 10;                              ticket = TicketUtil.CreateTicket(scheduleItem, seat, discount, "", "");                              break;                      }                          this.SoldTickets.Add(ticket);                      line = reader.ReadLine();                  }                  reader.Close();                                  }              catch (Exception ex)              {                  Console.WriteLine("出错了:"+ex.Message);                  soldTickets = new List<Ticket>();              }          }      }  }  </pre>学生票类<pre code_snippet_id="2259154" snippet_file_name="blog_20170312_3_941709" name="code" class="csharp">using System;  using System.Collections.Generic;  using System.Text;  using System.IO;  using System.Runtime.Serialization.Formatters.Binary;  using System.Windows.Forms;    namespace MyCinema.Models  {        [Serializable]      public class StudentTicket:Ticket      {          public StudentTicket() { }          public StudentTicket(ScheduleItem scheduleItem, Seat seat, int discount)              : base(scheduleItem, seat)          {              this.Discount = discount;          }                    //折扣数          private int discount;          public int Discount          {              get { return discount; }              set { discount = value; }          }               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()          {              MessageBox.Show("已售出!\n\n " + this.discount + "折学生票!");          }                }  }  </pre>Ticket类  <pre></pre>  <pre code_snippet_id="2259154" snippet_file_name="blog_20170312_4_5783495" name="code" class="csharp"><pre code_snippet_id="2259154" snippet_file_name="blog_20170312_4_5783495" name="code" class="csharp">using System;  using System.Collections.Generic;  using System.Text;    namespace MyCinema.Models  {        public class TicketUtil      {          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;          }      }  }  </pre><br>  <pre code_snippet_id="2259154" snippet_file_name="blog_20170312_5_2577129" name="code" class="csharp">using System;  using System.Collections.Generic;  using System.Text;  using System.Xml;  using System.Runtime.Serialization.Formatters.Binary;    namespace MyCinema.Models  {        [Serializable]      public class Schedule      {          public Schedule()          {              items = new Dictionary<string, ScheduleItem>();          }              private Dictionary<string, ScheduleItem> items;             public Dictionary<string, ScheduleItem> Items          {              get { return items; }              set { items = value; }          }            public void LoadItems()          {              if (items == null)                  items = new Dictionary<string, ScheduleItem>();              items.Clear();                XmlDocument myXml = new XmlDocument();              myXml.Load("ShowList.xml");              XmlNode feednode = myXml.DocumentElement;              //中间变量              string movieName = null;              string playBill = null;              string director = null;              string actor = null;              string movieType = null;              string price = null;                foreach (XmlNode node in feednode.ChildNodes)              {                  if (node.Name == "Movie")                  {                      foreach (XmlNode subNode in node.ChildNodes)                      {                          switch (subNode.Name)                          {                              case "Name":                                  movieName = subNode.InnerText;                                  break;                              case "Poster":                                  playBill = subNode.InnerText;                                  break;                              case "Director":                                  director = subNode.InnerText;                                  break;                              case "Actor":                                  actor = subNode.InnerText;                                  break;                              case "Type":                                  movieType = subNode.InnerText;                                  break;                              case "Price":                                  price = subNode.InnerText;                                  break;                              case "Schedule":                                  foreach (XmlNode scheduleNode in subNode.ChildNodes)                                  {                                      ScheduleItem item = new ScheduleItem();                                      item.Time = scheduleNode.InnerText;                                      item.Movie.MovieName = movieName;                                      item.Movie.Poster = playBill;                                      item.Movie.Director = director;                                      item.Movie.Actor = actor;                                      item.Movie.MovieType = (MovieType)Enum.Parse(typeof(MovieType), movieType);                                      item.Movie.Price = int.Parse(price);                                      items.Add(item.Time,item);                                  }                                  break;                          }                      }                    }              }          }      }  }  </pre><br>  <pre code_snippet_id="2259154" snippet_file_name="blog_20170312_6_3830865" name="code" class="csharp">using System;  using System.Collections.Generic;  using System.Text;  using System.Runtime.Serialization.Formatters.Binary;  using System.Drawing;    namespace MyCinema.Models  {        [Serializable]      public class Seat      {          public Seat(string seatNum, Color color)          {              this.SeatNum = seatNum;              this.Color = color;          }            private string seatNum;          public string SeatNum          {              get { return seatNum; }              set { seatNum = value; }          }            private Color color;          public Color Color          {              get { return color; }              set { color = value; }          }      }  }  </pre><br>  <pre code_snippet_id="2259154" snippet_file_name="blog_20170312_7_7592856" name="code" class="csharp">赠票类  using System;  using System.Collections.Generic;  using System.Text;  using System.IO;  using System.Runtime.Serialization.Formatters.Binary;  using System.Windows.Forms;    namespace MyCinema.Models  {      [Serializable]      public class FreeTicket:Ticket      {          public FreeTicket() { }          public FreeTicket(ScheduleItem scheduleItem, Seat seat, string customerName)              : base(scheduleItem, seat)          {              this.CustomerName = customerName;          }            private string customerName;          public string CustomerName          {              get { return customerName; }              set { customerName = value; }          }            public override void CalcPrice()          {              this.Price = 0;          }            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.CustomerName);              sw.WriteLine("***************************");              sw.Close();              fs.Close();          }               public override void Show()          {              MessageBox.Show("已售出!\n\n 赠送者:"+this.CustomerName);          }        }  }  </pre><br>  <pre code_snippet_id="2259154" snippet_file_name="blog_20170312_8_6022693" name="code" class="csharp">电影类型类  using System;  using System.Collections.Generic;  using System.Text;  using System.Runtime.Serialization.Formatters.Binary;    namespace MyCinema.Models  {      public enum MovieType      {          //喜剧          Comedy,          //战争          War,          //爱情          Romance,          //动作          Action,          //卡通          Cartoon,          //恐怖          Thriller,          //冒险          Adventure      }        [Serializable]      public class Movie      {          public Movie() { }          public Movie(string movieName, string poster, string director,string actor,MovieType movieType,int price)          {              this.MovieName = movieName;              this.Poster = poster;              this.Director = director;              this.Actor = actor;              this.MovieType = movieType;              this.Price = price;          }                  private string movieName;          public string MovieName          {              get { return movieName; }              set { movieName = value; }          }                     private string poster;          public string Poster          {              get { return poster; }              set { poster = value; }          }                 private string director;          public string Director          {              get { return director; }              set { director = value; }          }                 private string actor;          public string Actor          {              get { return actor; }              set { actor = value; }          }            private MovieType movieType;          public MovieType MovieType          {              get { return movieType; }              set { movieType = value; }          }              private int price;          public int Price          {              get { return price; }              set { price = value; }          }      }  }  


0 0
原创粉丝点击