影院售票

 //影院座位信息
    [Serializable] //可序列化
    public class Seat
    {
        public string SeatNum { get; set; } //座位号
        public System.Drawing.Color Color { get; set; }

        public Seat() { }
        public Seat(string seatnum,System.Drawing.Color color)
        {
            this.SeatNum = seatnum;
            this.Color = color;
        }
    }

影院座位信息

 //放映计划的场次
    [Serializable]
    public class ScheduleItem
    {
        public string Time { get; set; }  //放映时间
        public Movie Movie { get; set; } //本场所放电影
        public ScheduleItem()
        {
        }
        public ScheduleItem(string time,Movie movie)
        {
            this.Time = time;
            this.Movie = movie;
        }

    }

放映计划场次的类

//电影类
    [Serializable] //可序列化
    public class Movie
    {
        public string MovieName { get; set; }  //电影名
        public string Poster { get; set; } //海报图片名
        public string Director { get; set; } //导演名
        public string Actor { get; set; } //主演
        public string MovieType { get; set; }  //电影类型
        public int Price { get; set; } //电影定价
        public Movie() { }
        public Movie(string name,string poster,string director,string actor,string movietype,int price)
        {
            this.MovieName = name;
            this.Poster = poster;
            this.Director = director;
            this.Actor = actor;
            this.MovieType = movietype;
            this.Price = price;
        }
    }

电影类

 [Serializable] //可序列化

    public class Schedule
    {
        //放映场次集合
        public Dictionary<string, ScheduleItem> Items = new Dictionary<string, ScheduleItem>();
        //解析XML文件
        public void LoadItems()
        {
            XmlDocument myxml = new XmlDocument();
            myxml.Load("ShowList.xml");
            XmlNode root = myxml.DocumentElement;
            foreach (XmlNode item in root.ChildNodes)
            {
                Movie movie = new Movie();
                foreach(XmlNode node in item.ChildNodes)
                {
                    switch (node.Name)
                    {
                        case "Name":
                            movie.MovieName = node.InnerText;
                            break;
                        case "Poster":
                            movie.Poster = node.InnerText;
                            break;
                        case "Director":
                            movie.Director = node.InnerText;
                            break;
                        case "Actor":
                            movie.Actor = node.InnerText;
                            break;
                        case "Price":
                            movie.Price =Convert.ToInt32( node.InnerText);
                            break;
                        case "Type":
                            movie.MovieType = node.InnerText;
                            break;
                        case "Schedule":
                            foreach (XmlNode nodes in node.ChildNodes)
                            {
                                ScheduleItem sch = new ScheduleItem(nodes.InnerText,movie);
                                Items.Add(nodes.InnerText,sch);
                            }
                            break;
                    }
                }
            }
        }
    }

放映计划类

  //电影票父类
    [Serializable] //可序列化
    public class Ticket
    {
        public ScheduleItem ScheduleItem { get; set; } //放映场次
        public Seat Seat { get; set; } //所属座位对象
        public int Price { get; set; } //票价
        public Ticket()
        {
            this.ScheduleItem = new ScheduleItem();
            this.Seat = new Seat();
        }
        public Ticket(ScheduleItem item,Seat seat)
        {
            this.ScheduleItem = item;
            this.Seat = seat;
            this.Price = CalcPrice();
        }
        //计算票价
        public virtual int CalcPrice()
        {
            this.Price = ScheduleItem.Movie.Price;
            return this.Price;
        }
        //打印售票信息
        public virtual void Print()
        {
            //取文件名
            string fileName = ScheduleItem.Time.Replace(":", "-") + "" + Seat.SeatNum + ".txt";
            //生成文件
            FileStream fs = new FileStream(fileName,FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);
            sw.WriteLine("*****************************");
            sw.WriteLine("\t青鸟影院");
            sw.WriteLine("-----------------------------");
            sw.WriteLine("电影名:\t{0}", ScheduleItem.Movie.MovieName);
            sw.WriteLine("时  间:\t{0}", ScheduleItem.Time);
            sw.WriteLine("座位号:\t{0}", Seat.SeatNum);
            sw.WriteLine("价  格:\t{0}", CalcPrice());
            sw.WriteLine("*****************************");
            sw.WriteLine("\t(a)普通票");
            sw.Close();
            fs.Close();
        }
        //显示售票信息
        public virtual void Show()
        {
            MessageBox.Show("已售出!\n普通票");
        }
    }

电影票父类

 //增票子类
    public class FreeTicket:Ticket
    {
        public string CustomerName { get; set; }
        public FreeTicket() { }
        public FreeTicket(ScheduleItem item,Seat seat,string name):base(item,seat)
        {
            this.CustomerName = name;
        }

        //打印售票信息
        public override void Print()
        {
            //取文件名
            string fileName = ScheduleItem.Time.Replace(":", "-") + "-" + Seat.SeatNum + ".txt";
            //生成文件
            FileStream fs = new FileStream(fileName, FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);
            sw.WriteLine("*****************************");
            sw.WriteLine("\t青鸟影院(增票)");
            sw.WriteLine("-----------------------------");
            sw.WriteLine("电影名:\t{0}", ScheduleItem.Movie.MovieName);
            sw.WriteLine("时  间:\t{0}", ScheduleItem.Time);
            sw.WriteLine("座位号:\t{0}", Seat.SeatNum);
            sw.WriteLine("价  格:\t{0}", this.CustomerName);
            sw.WriteLine("*****************************");
            sw.WriteLine("\t(c)增票");
            sw.Close();
            fs.Close();
        }
        //显示售票信息
        public override void Show()
        {
            MessageBox.Show("已售出!\n{0}增票",this.CustomerName);
        }
    }

增票子类

 //学生子类
    public class StudentTicket:Ticket
    {
        public int Discount { get; set; } //学生票折扣
        public StudentTicket() { }
        public StudentTicket(ScheduleItem item,Seat seat,int dis):base(item,seat)
        {
            this.Discount = dis;
        }

        //计算票价
        public override int CalcPrice()
        {
            this.Price = ScheduleItem.Movie.Price * Discount / 10;
            return Price;
        }
        //打印售票信息
        public override void Print()
        {
            //取文件名
            string fileName = ScheduleItem.Time.Replace(":", "-") + "-" + Seat.SeatNum + ".txt";
            //生成文件
            FileStream fs = new FileStream(fileName, FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);
            sw.WriteLine("*****************************");
            sw.WriteLine("\t青鸟影院(学生票)");
            sw.WriteLine("-----------------------------");
            sw.WriteLine("电影名:\t{0}", ScheduleItem.Movie.MovieName);
            sw.WriteLine("时  间:\t{0}", ScheduleItem.Time);
            sw.WriteLine("座位号:\t{0}", Seat.SeatNum);
            sw.WriteLine("价  格:\t{0}", CalcPrice());
            sw.WriteLine("*****************************");
            sw.WriteLine("\t(c)学生票");
            sw.Close();
            fs.Close();
        }
        //显示售票信息
        public override void Show()
        {
            MessageBox.Show("已售出!\n{0}学生票",this.Discount.ToString());
        }

    }

学生票子类

 //影院类
    [Serializable] //可序列化
    class Cinema
    {
        public Dictionary<string, Seat> Seats { get; set; } //座位集合
        public Schedule Schedule { get; set; } //放映计划
        public List<Ticket> SoldTickets { get; set; } //已售出电影
        public Cinema()
        {
            Seats = new Dictionary<string, Seat>();
            Schedule = new Schedule();
            SoldTickets = new List<Ticket>();
        }
        //保存
        public void Save()
        {
            BinaryFormatter bf = new BinaryFormatter();
            FileStream fs = new FileStream("YingPianInfo.bin",FileMode.Create);
            bf.Serialize(fs,SoldTickets);
            fs.Close();
            MessageBox.Show("保存成功");
        }
        //读取
        public void Load()
        {
            BinaryFormatter bf = new BinaryFormatter();
            FileStream fs = new FileStream("YingPianInfo.bin", FileMode.Open);
            SoldTickets = (List<Ticket>)bf.Deserialize(fs);
            fs.Close();
        }

    }

影院类

private void FrmMian_Laod(Object senber, EventArgs e)
        {
            InitSeatNumber(); //初始化座位号
            rdoTickets.Checked = true; //选中普通票
        }

窗体Load事件

  private void InitSeatNumber()
        {
            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 7; j++)
                {
                    lbl = new Label();
                    lbl.BackColor = Color.Yellow;
                    lbl.Location = new Point(50 + j * 90, 55 + i * 60);
                    lbl.Font = new Font("宋体",12);
                    lbl.Name = (i + 1) + "-" + (j + 1);
                    lbl.Size = new Size(60,25);
                    lbl.TabIndex = 0;
                    lbl.TextAlign = ContentAlignment.MiddleCenter;
                    lbl.Text = (i + 1) + "-" + (j + 1);
                    //创建一个Label事件
                    lbl.Click += new System.EventHandler(lblSeat_Click);
                    tbRoom.Controls.Add(lbl);
                    Seat seat = new Seat(lbl.Text,Color.Yellow);
                    //保存在座位集合里
                    cinema.Seats.Add(seat.SeatNum,seat);
                }
            }
        }

创建座位号方法

 private void lblSeat_Click(object sender, EventArgs e)
        {
            if (tvMovies.Nodes.Count == 0)
            {
                MessageBox.Show("请选择电影");
                return;
            }
            if (rdoStudent.Checked==true && txtName.Text == "")
            {
                MessageBox.Show("请输入增票人姓名!");
                return;
            }
            lbl= sender as Label;
            if (lbl.BackColor == Color.Red)
            {
                MessageBox.Show("已售出");
            }
            else
            {
                if (DialogResult.OK == MessageBox.Show("确定要购买吗?", "提示",
                    MessageBoxButtons.OKCancel, MessageBoxIcon.Information))
                {

                    string time = tvMovies.SelectedNode.Text;
                    ScheduleItem item = cinema.Schedule.Items[time];
                    string type = rdoTickets.Checked ? "Ticket" : rdoFree.Checked ? "Free" : "Student";
                    Ticket tic = null;
                    switch (type)
                    {
                        case "Ticket":
                            tic = new Ticket(item,cinema.Seats[lbl.Text]);
                            break;
                        case "Free":
                            tic = new FreeTicket(item,cinema.Seats[lbl.Text],txtName.Text);
                            break;
                        case "Student":
                            tic = new StudentTicket(item,cinema.Seats[lbl.Text],Convert.ToInt32(cmbDisCount.Text));
                            break;
                    }
                    cinema.SoldTickets.Add(tic);
                    tic.Print();
                    lbl.BackColor = Color.Red;
                    cinema.Seats[lbl.Text].Color = Color.Red;
                }
            }
        }

座位号单击事件

   private void 获取新放映列表ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            BingTreeView();
        }
        private void BingTreeView()
        {
            cinema.Schedule.LoadItems(); //调用解析
            TreeNode root = null;
            foreach (ScheduleItem item in cinema.Schedule.Items.Values)
            {
                //
                if (root == null || root.Text != item.Movie.MovieName)
                {
                    //根节点
                    root = new TreeNode(item.Movie.MovieName);
                    tvMovies.Nodes.Add(root);
                }
                //子节点
                root.Nodes.Add(item.Time);
            }
        }

获取放映列表

  private void tvMovies_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (tvMovies.SelectedNode.Level == 1)
            {
                string time = tvMovies.SelectedNode.Text;
                ScheduleItem item = cinema.Schedule.Items[time];
                lblMovieName.Text = item.Movie.MovieName;
                picMovie.Image = Image.FromFile(item.Movie.Poster);
                lblDirector.Text = item.Movie.Director;
                lblActor.Text = item.Movie.Actor;
                lblType.Text = item.Movie.MovieType;
                lblTime.Text = item.Time;
                lblPrice.Text = item.Movie.Price.ToString();
                lblCalcPrice.Text = "";
                //将所有座位设置为黄色
                foreach (Seat var in cinema.Seats.Values)
                {
                    var.Color = Color.Yellow;
                }
                //用已售出票集合循环
                foreach (Ticket ticlet in cinema.SoldTickets)
                {
                    //座位集合的Value值
                    foreach (Seat seat in cinema.Seats.Values)
                    {
                        if (ticlet.ScheduleItem.Time == time && ticlet.Seat.SeatNum == seat.SeatNum)
                        {
                            seat.Color = Color.Red;
                        }
                    }
                }
                //遍历到Label上
                foreach (Seat seat in cinema.Seats.Values)
                {
                    foreach (Label label in tbRoom.Controls)
                    {
                        if (label.Text == seat.SeatNum)
                        {
                            label.BackColor = seat.Color;
                        }
                    }
                }

            }
        }

TreeView事件

  private void rdoTickets_CheckedChanged(object sender, EventArgs e)
        {
            cmbDisCount.Enabled = false;
            txtName.Enabled = false;
            cmbDisCount.Text = "";
            txtName.Text = "";
            lblCalcPrice.Text = "";
        }

普通票

 private void rdoFree_CheckedChanged(object sender, EventArgs e)
        {
            txtName.Enabled = true;
            cmbDisCount.Enabled = false;
            cmbDisCount.Text = "";
            lblCalcPrice.Text = "";
        }

增票

private void rdoStudent_checkedChanged(object sender, EventArgs e)
        {
            cmbDisCount.Enabled = true;
            if (cmbDisCount.Text == "")
            {
                cmbDisCount.Text = "7";
            }
            txtName.Enabled = false;
            txtName.Text = "";
        }
        private void cmbDisCount_SelectedIndexChanged(object sender, EventArgs e)
        {
          lblCalcPrice.Text = (Convert.ToInt32(lblPrice.Text) * Convert.ToInt32(cmbDisCount.Text) / 10).ToString();
        }

学生票

时间: 2024-11-10 04:28:00

影院售票的相关文章

影院售票系统

这个影院售票的项目比较的复杂,共需要九个类. No.1首先第一个类,座位类.该项目的座位默认为黄色,被售出的状态下默认为红色.需要导入命名空间 Using.System.Drawing.Color public class Seat { public Color Color { get; set; }//座位颜色 public string Num { get; set; }//座位号 public Seat() { } public Seat(Color color,string num) {

C#总结项目《影院售票系统》编写总结一

C#学习经历从基本语法结构到窗体再到面向对象终于走完了.NET初级程序员的道路,做为品德优良好学生更不能落下课程的总结项目-某某鸟<影院售票系统>.用了大概一天半的时间做完这个练手项目,先上效果截图一张 抽出时间做些这个对目前的我来说算不小的项目. 用到的知识点有:面向对象思想.TreeView.XML读取.File文件流.泛型集合,这里面对我来说难度最大的是面向对象与泛型集合的结合,看来学习一门编程语言的难点还是在设计思想上. 再来介绍一下项目需求:在影片列表中选择某个时段的一场电影,单击座

影院售票系统-----一个让你有成就感的小项目,只有一丢丢哦

先来点废话,刚拿到这个项目的时候你是怎么想的,上来就闷头写,还是构想思路......   项目需求:     影院售票系统可以销售每天不同时段的电影票,不同时段的电影票有不同的优惠政策,还有使用兑换券的免费票.选择某个时段的一场电影,     单击放映厅未售出的座位并选择一个种类的电影票,创建电影票,计算价格并打印,座位设置为红色表示已经售出.   思想:    使用面向对象思想编写影院售票系统   看完这个你有没有点思路呢,我想你是有的 ...... 下面先来点图片,先刺激一下视觉:  窗体搭

C#总结项目《影院售票系统》编写总结三

昨天总结了动态绘制控件.票类型的切换以及数据在窗体中的展现.今天继续总结,自己喜欢的就去做吧,让别人说去吧,省的自己再留下什么后悔遗憾,噢耶,加油! 今天总结项目中最核心的部分--购票.座位颜色状态的改变及场次座位状态的显示. 分析: 1.在选中时间(场次)后更新出座位状态(label实现),售出的为红色,未售出的显示为黄色. 2.已售出提示已经售出并不进行任何操作,未售出的询问是否购买. 3.根据选择的是普通票.赠票.还是学生票分别创建不同的票对象 如果选择赠票则需要检测赠送者否填写 如果选择

C#总结项目《影院售票系统》编写总结二

昨天发布了总结项目的第一篇,需求分析以及类的搭建,今天继续更新,动态绘制控件.票类型的切换以及数据在窗体中的展现. 先从简单的开始,票类型的切换. 分析: 1.当点击普通票时 学生折扣和赠送者是禁用的 2.点击赠票时 启用赠送者,禁用学生折扣 3.点击学生票时 启用学生折扣,禁用赠送者 学生折扣ComboBox下拉框可以选择折扣,根据折扣实时折扣计算价格到优惠价上. 需要注意的是: 如果没有选择ListView的电影场次(也就是时间),选择赠票和学生票是没有意义的甚至会引发学生票实时计算时的异常

影院售票思路分析

01.如何将内存中的一个字符串保存到硬盘的一个文件中 解析:通过I/O的方式 序列化:将临时的(内存中)数据永久保存到一种介质(硬盘)上的操作,看成是序列化 不可以用序列化做为加密的手段 02.如何将一个List<Person> list序列化到硬盘上 解析:首先通过循环拆解出每一个Person对象,然后通过XXX.Name,XXX.Age 张靓颖|18 03.任何需要被序列化的对象必须打有一个标签,[Serializable] 04.如果一个类型要想被序列化,那么他当中的所有属性的类型也必须

设计模式 学习 6:

11个行为模式之6(备忘录模式,观察者模式,状态模式,策略模式,模版模式,访问者模式) 备忘录模式 Sunny软件公司欲开发一款可以运行在Android平台的触摸式中国象棋软件,由于考虑到有些用户是"菜鸟",经常不小心走错棋:还有些用户因为不习惯使用手指在手机屏幕上拖动棋子,常常出现操作失误,因此该中国象棋软件要提供"悔棋"功能,用户走错棋或操作失误后可恢复到前一个步骤,   如何实现"悔棋"功能是Sunny软件公司开发人员需要面对的一个重要问题

S2---深入.NET平台和C#编程的完美总结

1.NET简单解说 l 面向对象提升 OOP(Object Oriented  Programming)面向对象编程 AOP:(Aspache  Oriented Programming):面向切面编程 OOD(Object Oriented  Designer)面向对象设计(架构师)   3万/month OOA(Object Oriented  Analysis)面向对象分析  (分析师) 10万/month DBA(Database Administrator,简称DBA) l 泛型集合对

淘宝电影“追杀”猫眼电影,同门相争不可避免

在娱乐影评圈中,<小时代4>与<栀子花开>之间的自捧互黑拼杀已经接近尾声,而在互联网O2O圈内,二者的较量才刚刚开始.不过,互联网人关注的不是这两部影片的内容对比,而是影片票房背后的淘宝电影与猫眼电影的PK,这是这对同门之间的首回合直面冲突. 不差钱的淘宝电影来势汹汹,猫眼电影掌握先发优势 相比猫眼电影2012年就从美团中独立运营,淘宝电影的正式团队来的有些晚,直到去年10月才组建了一支电影市场团队.不过,淘宝电影来势汹汹,马云钦点曾成功打造"支付宝钱包"的樊路