影院售票系统源代码

来源:互联网 发布:淘宝天猫优惠券群骗局 编辑:程序博客网 时间:2024/04/28 22:46
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();            }        }    }}
cinema类
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>();            }        }    }}
学生票类
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 + "折学生票!");        }            }}
Ticket类
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;        }    }}

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;                        }                    }                }            }        }    }}

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; }        }    }}

赠票类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);        }    }}

电影类型类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