拒绝LOW ---青鸟影院购票系统

1.首先我们需要了解这个软件的功能:

1).影院每天更新放映列表,系统支持实时查看,包括电影放映场次的时间;

2).影院提供三类影票:普通票,学生票和赠票;

3).允许用户查看某场次座位的售出情况;

4).允许购票,并允许用户选座;

5).用户可以选择场次、影票类型及空闲座位进行购票,并打印电影票;

6).系统可以保存销售情况,并允许对其进行恢复;

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

增票子类

学生子类

 //影院类
    [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-10-11 12:50:03

拒绝LOW ---青鸟影院购票系统的相关文章

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

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

OC代码实现的购票系统

一.一个有关oc实现的购票系统 此次的购票系统主要是通过OC来编程的,下面我将把握的思路和大家分享. 1.思路. 我们直接来看我写的几张思路图吧.上面都写的很明白,下面的主要思路就是大致的方向. #import <Foundation/Foundation.h> #import "Cinema.h" void buyMovieTicket(){ //调用 电影院的类的 buyTicket的方法 Cinema *cinema = [[Cinema alloc] initWit

黑马程序员——c语言学习心得—— 电影购票系统

黑马程序员——c语言学习心得——  电影购票系统 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,基础信息类 #import <Foundation/Foundation.h> #import "Cinema.h" void buyMovieTicket(){ //购买电影票 //调用 电影院的类的 buyTicket的方法 //                  [[Cinema alloc] init]; C

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

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

OC-《购票系统》

来个命令行的购票系统 --1-- 需求分析 1.1 分析 1.2 功能分析 1.3 流程分析 --2-- 原型展示 2.1 界面原型 --3-- 系统设计 3.1 类设计 3.2 框架模块设计 --4-- 实现 4.1 代码实现 [写在开头:] 『如今使用移动设备购物.买票都已经是一种基本的生活方式了,我们习惯了使用手机来完成生活中的很多事.没有使用UI框架,所以还是采用命令行交互的方式,只是语言使用的是OC了』 --1-- 需求分析 1.1 分析 进入电影院我们首先看到的是各种影讯,然后根据影

MFC多线程之购票系统

MFC线程--购票系统演示 在大学操作系统课程中,进程和线程是一个经常谈到的话题,而购票系统是关于线程的一个经典的例子,它涉及到创建线程,线程同步等. 废话不多说,下面就用MFC来实现该购票系统. 1.新建一个MFC的对话框应用程序(工程名为 线程),按下图添加控件. 2.在"线程Dlg.h"文件中添加以下代码 //结构体,传给线程的参数 struct Ctrls { CProgressCtrl* progress; CStatic* text; }; //声明线程中执行的函数 UIN

影院售票系统

这个影院售票的项目比较的复杂,共需要九个类. 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) {

《结对-航空购票系统-结对项目总结》

<结对-航空购票系统-结对项目总结> 历时两个多月的结对编程已经进入尾声了,这个过程中遇到的问题以及解决的办法也让我受益匪浅,我明白了结对编程分工与合作有机协调的重要性.在和别人交流的过程之中,言简意赅的表达自己的思路或者想法,也提高了自己的语言交际能力.编程中自己有不规范的地方也经过室友的提示得到了规范,也深刻明白了取长补短的益处,看到别人对同样的问题有更好的解决办法后,自己也学到了这些知识.所以,对于一个结对编程开发项目,两人之间不仅有相互督促也有相互进步.组队编程明确需求是基础,提高效率

购票系统

目录 购票系统 #思路 界面Gui构建 控件判断方法 实体类属性 结果 参考 购票系统 此购票系统是一个单机系统,我在数据库读取过程中遇到了困难,暂时没有办法解决 #思路 使用三层架构的方法,把实现方法,实现接口和实体对象分离,再在测试类中运行 界面Gui构建 //定义路线的组件 JLabel jl1,jl2; JComboBox comBox1; JButton jb1; JPanel jp4,jp_top; //定义显示车票数据的组件 JTextArea jta; JScrollPane j