-
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; } } } }
影院售票管理源码
最新推荐文章于 2024-05-27 08:43:02 发布