码迷,mamicode.com
首页 > 其他好文 > 详细

影院售票系统

时间:2016-04-25 13:17:38      阅读:498      评论:0      收藏:0      [点我收藏+]

标签:

影院售票系统比较麻烦的,一共有9个类,一个枚举,

这是页面效果的实现图

技术分享

 

这是几个类的基本关系

技术分享

影院类

技术分享

 

技术分享

电影类型 枚举

技术分享

赠票,这里需要引入一个命名空间    using System.IO

技术分享

技术分享

电影类

技术分享

放映计划类

技术分享

技术分享

技术分享

放映场次类

技术分享

座位类

技术分享

学生票类

技术分享

技术分享

电影票父类

技术分享

技术分享

创建电影票工具类
使用简单工厂模式创建票

技术分享

主窗体代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 青鸟影院
{
    public partial class FrmCinema : Form
    {
        public FrmCinema()
        {
            InitializeComponent();
        }

        Cinema cinema = new Cinema();
        Label lbl = new Label();

        //获取新放映列表:
        private void tsmiNew_Click(object sender, EventArgs e)
        {
            cinema.Load();
            cinema.SoldTickets.Clear();
            cinema.Save();
            BingTreeView();
        }

        //选择内容发生改变:
        private void tvMovies_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (this.tvMovies.SelectedNode.Level == 1)
            {
                string time = this.tvMovies.SelectedNode.Text;
                ScheduleItem item = cinema.Schedule.Items[time];
                this.lblActor.Text = item.Movie.Actor;
                this.lblDirector.Text = item.Movie.Director;
                this.lblMovieName.Text = item.Movie.MovieName;
                this.lblPrice.Text = item.Movie.Price.ToString();
                this.lblTime.Text = item.Time;
                this.lblType.Text = item.Movie.MovieType.ToString();
                this.picMovie.Image = Image.FromFile(@"Image\" + item.Movie.Poster);
                this.lblCalcPrice.Text = item.Movie.Price.ToString();


                //将所有座位设置为黄色
                foreach (Seat var in cinema.Seats.Values)
                {
                    var.Color = Color.Yellow;
                }
                //在已售出的票中循环判断
                foreach (Ticket ticket in cinema.SoldTickets)
                {
                    foreach (Seat seat in this.cinema.Seats.Values)
                    {
                        //场次相同且座位号相同
                        if (ticket.ScheduleItem.Time == time && ticket.Seat.SeatNum == seat.SeatNum)
                        {
                            //更新座位颜色
                            seat.Color = Color.Red; 
                        }
                    }
                }
                // 将座位颜色更新到Label上显示
                foreach (Seat seat in cinema.Seats.Values)
                {
                    foreach (Label lbl in tpCinema.Controls)
                    {
                        // 座位号相同证明是对应Label
                        if (lbl.Text == seat.SeatNum)
                        {
                            lbl.BackColor = seat.Color;
                        }
                    }
                }
            }
        }

        //点击普通票
        private void rdoNormal_CheckedChanged(object sender, EventArgs e)
        {
            this.cmbDisCount.Enabled = false;
            this.txtCustomer.Enabled = false;
            this.lblCalcPrice.Text = lblPrice.Text;
        }

        //点击赠票
        private void rdoFree_CheckedChanged(object sender, EventArgs e)
        {
            this.txtCustomer.Enabled = true;
            this.cmbDisCount.Enabled = false;
            this.lblCalcPrice.Text = lblPrice.Text;
        }

        //点击学生票
        private void rdoStudent_CheckedChanged(object sender, EventArgs e)
        {
            if (this.lblPrice.Text != "")
            {
                this.cmbDisCount.Enabled = true;
                this.txtCustomer.Enabled = false;
                this.lblCalcPrice.Text = (Convert.ToDouble(this.lblPrice.Text) * Convert.ToDouble(this.cmbDisCount.Text) / 10).ToString();
            }

        }

        //加载
        private void FrmCinema_Load(object sender, EventArgs e)
        {
            this.rdoNormal.Checked = true;
            this.cmbDisCount.SelectedIndex = 0;
            InitSeats(5, 7);
        }

        //选择折扣变化:
        private void cmbDisCount_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.lblPrice.Text != "")
            {
                this.lblCalcPrice.Text = (Convert.ToDouble(this.lblPrice.Text) * Convert.ToDouble(this.cmbDisCount.Text) / 10).ToString();
            }

        }

        
        // 获取放映列表绑定到TreeView
    
        private void BingTreeView()
        {
            this.tvMovies.Nodes.Clear();
            //加载XML
            cinema.Schedule.LoadItems();
            //绑定到TreeView
            TreeNode root = null;
            foreach (ScheduleItem var in cinema.Schedule.Items.Values)
            {
                if (root == null || root.Text != var.Movie.MovieName)
                {
                    //根节点
                    root = new TreeNode(var.Movie.MovieName);
                    this.tvMovies.Nodes.Add(root);
                }
                //子节点
                root.Nodes.Add(var.Time);
            }
        }

       
        // 初始化座位
       
        private void InitSeats(int row, int col)
        {
            for (int i = 0; i < row; i++)
            {
                for (int j = 0; j < col; j++)
                {
                    Label lb = new Label();
                    lb.BackColor = Color.Yellow;
                    lb.Location = new Point(20 + j * 100, 50 + i * 70);
                    lb.Font = new Font("Courier New", 11);
                    lb.Name = (i + 1) + "-" + (j + 1);
                    lb.Size = new Size(80, 30);
                    lb.TabIndex = 0;
                    lb.Text = (i + 1) + "-" + (j + 1);
                    lb.TextAlign = ContentAlignment.MiddleCenter;
                    lb.Click += lb_Click;
                    tpCinema.Controls.Add(lb);
                    //添加座位对象到CInema的Seats集合中
                    Seat seat = new Seat(lb.Text, Color.Yellow);
                    cinema.Seats.Add(seat.SeatNum, seat);
                }
            }
        }

        private void lb_Click(object sender, EventArgs e)
        {
            if (this.tvMovies.Nodes.Count == 0 || this.tvMovies.SelectedNode.Level ==0)
            {
                return;
            }

            lbl = sender as Label;
            if (lbl.BackColor == Color.Red)
            {
                MessageBox.Show("已售出");
            }
            else
            {
                if (DialogResult.OK == MessageBox.Show("是否购买", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question))
                {
                    //取得放映时间
                    string time = this.tvMovies.SelectedNode.Text;
                    //使用时间作为键找到放映场次对象
                    ScheduleItem item = cinema.Schedule.Items[time];

                    string type = string.Empty;
                    type = rdoNormal.Checked ? "normal" : rdoFree.Checked ? "free" : "student";
                    Ticket ticket = TicketUtil.CreateTicket(item, cinema.Seats[lbl.Text], txtCustomer.Text, Convert.ToDouble(cmbDisCount.Text), type);

                    //添加到已销售的集合中
                    cinema.SoldTickets.Add(ticket);
                    //出票
                    ticket.Print();
                    //更新颜色
                    lbl.BackColor = Color.Red;
                    cinema.Seats[lbl.Text].Color = Color.Red;
                }
            }

        }

        //保存
        private void tsmiSave_Click(object sender, EventArgs e)
        {
            cinema.Save();
        }

        //继续销售
        private void tsmiMovies_Click(object sender, EventArgs e)
        {
            cinema.Load();
            BingTreeView();
            // 将座位颜色更新到Label上显示
            foreach (Seat seat in cinema.Seats.Values)
            {
                foreach (Label lbl in tpCinema.Controls)
                {
                    // 座位号相同证明是对应Label
                    if (lbl.Text == seat.SeatNum)
                    {
                        lbl.BackColor = seat.Color;
                    }
                }
            }
        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }


    }
}

 

影院售票系统

标签:

原文地址:http://www.cnblogs.com/zhangzhenzhen/p/5430341.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!