zoukankan      html  css  js  c++  java
  • 影院售票系统(未完成)

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Project.Entity
     8 {
     9     /// <summary>
    10     /// 电影票(父类)
    11     /// </summary>
    12     public abstract class Ticket
    13     {
    14         /// <summary>
    15         /// 放映场次
    16         /// </summary>
    17         public ScheduleItem ScheduleItem { get; set; }
    18         /// <summary>
    19         /// 所属座位对象
    20         /// </summary>
    21         public Seat Seat { get; set; }
    22         /// <summary>
    23         /// 票价
    24         /// </summary>
    25         public int Price { get; set; }
    26 
    27         public Ticket() { }
    28 
    29         public Ticket(ScheduleItem scheduleItem, Seat seat, int price) 
    30         {
    31             this.ScheduleItem = scheduleItem;
    32             this.Seat = seat;
    33             this.Price = price;
    34         }
    35 
    36         /// <summary>
    37         /// 虚拟方法:计算票价
    38         /// </summary>
    39         public abstract void CalcPrice();
    40 
    41         /// <summary>
    42         /// 虚拟方法:打印售票信息
    43         /// </summary>
    44         public abstract void Print();
    45 
    46         /// <summary>
    47         /// 虚拟方法:显示当前售出票信息
    48         /// </summary>
    49         public abstract void Show();
    50     }
    51 }
    Ticket 电影票类(父类)
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Project.Entity
     8 {
     9     /// <summary>
    10     /// 赠票(Ticket的子类)
    11     /// </summary>
    12     public class FreeTicket:Ticket
    13     {
    14         /// <summary>
    15         /// 赠票者名字
    16         /// </summary>
    17         public string CustomerName { get; set; }
    18 
    19         /// <summary>
    20         /// 方法重造
    21         /// </summary>
    22         public FreeTicket() { }
    23 
    24         public FreeTicket(ScheduleItem scheduleItem, Seat seat, int price, string customerName) :base(scheduleItem,seat,price)
    25         {
    26             this.ScheduleItem = scheduleItem;
    27             this.Seat = seat;
    28             this.Price = price;
    29             this.CustomerName = customerName;
    30         }
    31 
    32         /// <summary>
    33         /// 重写方法:学生票计算价格
    34         /// </summary>
    35         public override void CalcPrice()
    36         {
    37 
    38         }
    39 
    40         /// <summary>
    41         /// 重写方法:打印售票信息
    42         /// </summary>
    43         public override void Print()
    44         {
    45 
    46         }
    47 
    48         /// <summary>
    49         /// 重写方法:显示当前售票信息
    50         /// </summary>
    51         public override void Show()
    52         {
    53 
    54         }
    55     }
    56 }
    FreeTicket 赠票(Ticket的子类)
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Project.Entity
     8 {
     9     /// <summary>
    10     /// 学生票(Ticket的子类)
    11     /// </summary>
    12     public class StudentTicket : Ticket
    13     {
    14         /// <summary>
    15         /// 学生票折扣价
    16         /// </summary>
    17         public int Discount { get; set; }
    18 
    19         public StudentTicket() { }
    20 
    21         public StudentTicket(ScheduleItem scheduleItem, Seat seat, int price, int discount)
    22             : base(scheduleItem, seat, price)
    23         {
    24             this.ScheduleItem = scheduleItem;
    25             this.Seat = seat;
    26             this.Price = price;
    27             this.Discount = discount;
    28         }
    29 
    30         /// <summary>
    31         /// 重写方法:学生票计算价格
    32         /// </summary>
    33         public override void CalcPrice()
    34         {
    35 
    36         }
    37 
    38         /// <summary>
    39         /// 重写方法:打印售票信息
    40         /// </summary>
    41         public override void Print()
    42         {
    43 
    44         }
    45 
    46         /// <summary>
    47         /// 重写方法:显示当前售票信息
    48         /// </summary>
    49         public override void Show()
    50         {
    51 
    52         }
    53     }
    54 }
    StudentTicket 学生票(Ticket的子类)
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Project.Entity
     8 {
     9     /// <summary>
    10     /// 电影院类
    11     /// </summary>
    12     public class Cinema
    13     {
    14         /// <summary>
    15         /// 座位集合属性
    16         /// </summary>
    17         public Dictionary<string, Seat> Seats { get; set; }
    18 
    19         /// <summary>
    20         /// 放映计划
    21         /// </summary>
    22         public Schedule Schedule { get; set; }
    23 
    24         /// <summary>
    25         /// 已售出电影票的集合
    26         /// </summary>
    27         public List<Ticket> SoldTickets { get; set; }
    28 
    29         /// <summary>
    30         /// 保存
    31         /// </summary>
    32         public void Save() { }
    33 
    34         /// <summary>
    35         /// 加载
    36         /// </summary>
    37         public void Load() { }
    38     }
    39 }
    Cinema 电影院类
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Project.Entity
     8 {
     9     /// <summary>
    10     /// 电影类
    11     /// </summary>
    12     public class Movie
    13     {
    14         /// <summary>
    15         /// 电影名
    16         /// </summary>
    17         public string MovieName { get; set; }
    18         /// <summary>
    19         /// 海报名
    20         /// </summary>
    21         public string Poster { get; set; }
    22         /// <summary>
    23         /// 导演
    24         /// </summary>
    25         public string Dirctor { get; set; }
    26         /// <summary>
    27         /// 主演
    28         /// </summary>
    29         public string Actor { get; set; }
    30         /// <summary>
    31         /// 电影类型
    32         /// </summary>
    33         public MovieType MovieType { get; set; }
    34         /// <summary>
    35         /// 定价
    36         /// </summary>
    37         public int Price { get; set; }
    38     }
    39 }
    Movie 电影类
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Project.Entity
     8 {
     9     /// <summary>
    10     /// 电影类型,枚举类型
    11     /// </summary>
    12     public enum MovieType
    13     {
    14         动作,
    15         奇幻,
    16         冒险,
    17         科幻,
    18         爱情,
    19         剧情,
    20         惊悚,
    21         犯罪 
    22     }
    23 }
    MovieType 电影类型 枚举类型
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    using System.IO;
    
    namespace Project.Entity
    {
        /// <summary>
        /// 放映计划类,保存影院当天的放映计划集合
        /// </summary>
        public class Schedule
        {
            /// <summary>
            /// 放映场次属性
            /// </summary>
            public Dictionary<string, ScheduleItem> Items { get; set; }
    
            /// <summary>
            /// 加载XML文件,获取电影信息
            /// </summary>
            public void LoadItem()
            {
                
            }
        }
    }
    Schedule 放映计划类
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Project.Entity
     8 {
     9     /// <summary>
    10     /// 影院每天放映计划的场次,保存每场电影的信息
    11     /// </summary>
    12     public class ScheduleItem
    13     {
    14         /// <summary>
    15         /// 放映时间
    16         /// </summary>
    17         public string Time { get; set; }
    18         /// <summary>
    19         /// 本场放映电影属性
    20         /// </summary>
    21         public Movie Movie { get; set; }
    22     }
    23 }
    ScheduleItem 场次类
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Project.Entity
     8 {
     9     /// <summary>
    10     /// 保存影院的座位信息
    11     /// </summary>
    12     public class Seat
    13     {
    14         /// <summary>
    15         /// 座位号
    16         /// </summary>
    17         public string SeatNum { get; set; }
    18 
    19         /// <summary>
    20         /// 座位卖出状态颜色
    21         /// </summary>
    22         public System.Drawing.Color Color { get; set; }
    23     }
    24 }
    Seat 座位类
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Project.Entity
     8 {
     9     /// <summary>
    10     /// 工具类
    11     /// </summary>
    12     public class TicketUtil
    13     {
    14         /// <summary>
    15         /// 创建电影票
    16         /// </summary>
    17         public Ticket CreateTicket(string Item, Seat seats, int discount, string custName, string type)
    18         {
    19             return null;
    20         }
    21     }
    22 }
    TicketUtil 工具类(严重未完成)
      1 using System;
      2 using System.Collections.Generic;
      3 using System.ComponentModel;
      4 using System.Data;
      5 using System.Drawing;
      6 using System.Linq;
      7 using System.Text;
      8 using System.Threading.Tasks;
      9 using System.Windows.Forms;
     10 using System.Xml;
     11 using System.IO;
     12 using Project.Entity;
     13 
     14 namespace Project
     15 {
     16     public partial class FrmMain : Form
     17     {
     18         public FrmMain()
     19         {
     20             InitializeComponent();
     21             BindPlayList();
     22             BindSeat();
     23         }
     24 
     25         /// <summary>
     26         /// 放映场次集合对象,ScheduleItem为播放时间
     27         /// </summary>
     28         Dictionary<string, ScheduleItem> items = new Dictionary<string, ScheduleItem>();
     29 
     30         Cinema cinema = new Cinema();
     31 
     32         /// <summary>
     33         /// 获取电影名
     34         /// </summary>
     35         /// <param name="Xml">XML文件</param>
     36         /// <returns>返回电影集合,里面包含了XML里存有的电影名</returns>
     37         public List<string> GetMoviesName(string Xml)
     38         {
     39             //存储电影名字
     40             List<string> Name = new List<string>();
     41             XmlDocument doc = new XmlDocument();
     42             doc.Load(Xml);
     43             XmlNode nodeList = doc.DocumentElement;
     44             //遍历MovieList的子节点Movie
     45             foreach (XmlNode node in nodeList.ChildNodes)
     46             {
     47                 //遍历子节点Moive中的所有子节点
     48                 foreach (XmlNode sonNode in node.ChildNodes)
     49                 {
     50                     switch (sonNode.Name)
     51                     {
     52                         case "Name":
     53                             Name.Add(node["Name"].InnerText);
     54                             break;
     55                     }
     56                 }
     57             }
     58             return Name;
     59         }
     60 
     61         /// <summary>
     62         /// 绑定电影放映列表(有bug,并不能读取所有时间,能读取有多少时间,但只会按照第一个时间重复)
     63         /// </summary>
     64         public void BindPlayList()
     65         {
     66             this.tvList.Nodes.Clear();
     67             //List<string> movieName = GetMoviesName("MovieList.xml");
     68             //foreach (string names in movieName)
     69             //{
     70             //    this.tvList.Nodes.Add(names);
     71             //}
     72             ////往下绑定时间点
     73             XmlDocument doc = new XmlDocument();
     74             doc.Load("MovieList.xml");
     75             XmlNode nodeList = doc.DocumentElement;
     76             foreach (XmlNode node in nodeList.ChildNodes)
     77             {
     78                 //电影名称
     79                 TreeNode treeNode = new TreeNode();
     80                 treeNode.Text = node["Name"].InnerText;
     81 
     82                 foreach (XmlNode itemNode in node["Schedule"].ChildNodes)
     83                 {
     84                     //获取场次时间段
     85                     TreeNode ScheduleItem = new TreeNode();
     86                     ScheduleItem.Text = itemNode.InnerText;
     87                     //添加在电影下的时间段
     88                     treeNode.Nodes.Add(ScheduleItem);
     89                 }
     90                 tvList.Nodes.Add(treeNode);
     91             }
     92         }
     93 
     94         /// <summary>
     95         /// 点击电影场次后,获取电影详情信息(unFinish,Bug:无法更改演员等信息)
     96         /// </summary>
     97         /// <param name="sender"></param>
     98         /// <param name="e"></param>
     99         private void tvList_AfterSelect(object sender, TreeViewEventArgs e)
    100         {
    101             //通过选中场次,获取xml中对应的场次,再获取该场次对应的电影名
    102             //获取选择的节点
    103             TreeNode itemNode = this.tvList.SelectedNode; //选中的场次
    104             TreeNode movieNode = itemNode.Parent;         //场次的父节点(也就是电影名)
    105             //判断选择节点为空,空为无效,不继续执行
    106             if (itemNode == null)
    107             {
    108                 return;
    109             }
    110             //判断选择节点不是时间节点,为无效,不继续执行
    111             if (itemNode.Level != 1)
    112             {
    113                 return;
    114             }
    115             string item = itemNode.Text;    //场次
    116             string movieName = movieNode.Text;//电影名
    117             XmlDocument doc = new XmlDocument();
    118             doc.Load("MovieList.xml");
    119             XmlNode node = doc.DocumentElement;
    120             bool isMovie = false;  //判断电影名是否正确
    121             bool isItem = false;   //判断电影场次是否正确
    122             foreach (XmlNode movieNameNode in node.ChildNodes) //总节点中找子节点
    123             {
    124                 //判断电影名存在,改为true
    125                 if (movieNameNode["Name"].InnerText.Equals(movieName))
    126                 {
    127                     isMovie = true;
    128                     foreach (XmlNode itemNodes in movieNameNode["Schedule"].ChildNodes) //子节点中找Schedule
    129                     {
    130                         //判断场次存在,改为true
    131                         if (itemNodes.InnerText.Equals(item))
    132                         {
    133                             isItem = true;
    134                         }
    135                     }
    136                 }
    137                 if (isMovie && isItem)
    138                 {
    139                     //电影名
    140                     this.lblName.Text = movieName;
    141                     //导演
    142                     this.lblDirector.Text = movieNameNode["Director"].InnerText;
    143                     //主演
    144                     this.lblActor.Text = movieNameNode["Actor"].InnerText;
    145                     //类型
    146                     this.lblType.Text = movieNameNode["Type"].InnerText;
    147                     //放映时间
    148                     this.lblSchedule.Text = item;
    149                     //原票价
    150                     this.lblPrice.Text = movieNameNode["Price"].InnerText;
    151                     //电影图片
    152                     this.picPoster.Image = Image.FromFile(movieNameNode["Poster"].InnerText);
    153                     break;
    154                 }
    155             }
    156             
    157         }
    158 
    159         /// <summary>
    160         /// 选择赠票时
    161         /// </summary>
    162         /// <param name="sender"></param>
    163         /// <param name="e"></param>
    164         private void rbtnFree_CheckedChanged(object sender, EventArgs e)
    165         {
    166             this.cmbDiscount.Enabled = false;
    167             this.txtSender.Enabled = true;
    168             this.lblDisPrice.Text = "0";
    169         }
    170 
    171         /// <summary>
    172         /// 选择普通票时
    173         /// </summary>
    174         /// <param name="sender"></param>
    175         /// <param name="e"></param>
    176         private void rbtnNormal_CheckedChanged(object sender, EventArgs e)
    177         {
    178             this.cmbDiscount.Enabled = false;
    179             this.txtSender.Enabled = false;
    180             this.lblDisPrice.Text = "";
    181         }
    182 
    183         /// <summary>
    184         /// 选择学生票时
    185         /// </summary>
    186         /// <param name="sender"></param>
    187         /// <param name="e"></param>
    188         private void rbtnStudent_CheckedChanged(object sender, EventArgs e)
    189         {
    190             this.txtSender.Text = "";
    191             this.cmbDiscount.Enabled = true;
    192             this.txtSender.Enabled = false;
    193             this.cmbDiscount.Text = "7";
    194             Price();
    195         }
    196 
    197         /// <summary>
    198         /// 学生折扣下拉更改价格
    199         /// </summary>
    200         /// <param name="sender"></param>
    201         /// <param name="e"></param>
    202         private void cmbDiscount_SelectedIndexChanged(object sender, EventArgs e)
    203         {
    204             Price();
    205         }
    206 
    207         /// <summary>
    208         /// 计算折扣价格
    209         /// </summary>
    210         public void Price()
    211         {
    212             if (this.lblPrice.Text == "")
    213             {
    214                 return;
    215             }
    216             int price = int.Parse(this.lblPrice.Text);
    217             int discount = int.Parse(this.cmbDiscount.Text);
    218             this.lblDisPrice.Text = (price * discount / 10).ToString();
    219         }
    220 
    221         /// <summary>
    222         /// 绑定座位
    223         /// </summary>
    224         public void BindSeat()
    225         {
    226             int seatRow = 7, seatLine = 5;
    227             Label label;
    228             for (int i = 0; i < seatRow; i++)
    229             {
    230                 for (int j = 0; j < seatLine; j++)
    231                 {
    232                     label = new Label();
    233                     //设置标签的背景颜色
    234                     label.BackColor = Color.Yellow;
    235                     //设置标签字体
    236                     label.Font = new System.Drawing.Font("微软黑体", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
    237                     //设置标签尺寸(宽,高)
    238                     label.AutoSize = false;
    239                     label.Size = new System.Drawing.Size(50, 25);
    240                     //设置座位号码
    241                     label.Text = (j + 1).ToString() + "-" + (i + 1).ToString();
    242                     label.TextAlign = ContentAlignment.MiddleCenter;
    243                     //设置位置
    244                     label.Location = new Point(60 + (i * 90), 60 + (j * 60));
    245                     //将所有标签绑定于点击事件中
    246                     label.Click += lblSeat_Click;
    247                     //绑定于tab控件中
    248                     tbSeat.Controls.Add(label);
    249                 }
    250             }
    251         }
    252 
    253         /// <summary>
    254         /// 座位标签点击事件
    255         /// </summary>
    256         /// <param name="sender"></param>
    257         /// <param name="e"></param>
    258         private void lblSeat_Click(object sender, EventArgs e)
    259         {
    260             try
    261             {
    262                 //获取点击的坐标文本,这里是座位号
    263                 string seatNum = ((Label)sender).Text.ToString();
    264                 //获取赠送人名字
    265                 string customerName = this.txtSender.Text.Trim();
    266                 int discount = 0; //默认折扣为0
    267                 string type = ""; //购票类型,默认为空
    268 
    269                 if (this.rbtnStudent.Checked)  //选中学生票时
    270                 {
    271                     type = "student";
    272                     discount = int.Parse(this.cmbDiscount.Text);
    273                 }
    274                 else if (this.rbtnFree.Checked)   //选中赠票时
    275                 {
    276                     if (string.IsNullOrEmpty(this.txtSender.Text))
    277                     {
    278                         MessageBox.Show("请输入赠票者姓名。","提示");
    279                         return;
    280                     }
    281                     else
    282                     {
    283                         type = "free";
    284                     }
    285                 }
    286                 TicketUtil util = new TicketUtil();
    287                 Ticket newTicket = util.CreateTicket(lblName.Text.ToString(), cinema.Seats[seatNum], discount, customerName, type);   //未完成之处1
    288                 if (cinema.Seats[seatNum].Color == Color.Yellow)
    289                 {
    290                     DialogResult dr;
    291                     dr = MessageBox.Show("确定购买?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Information);
    292                     if (dr == DialogResult.Yes)
    293                     {
    294                         cinema.Seats[seatNum].Color = Color.Red;
    295                         UpdateSeat();
    296                         //重新计算价格
    297                         newTicket.CalcPrice();
    298                         //添加已售出的票
    299                         cinema.SoldTickets.Add(newTicket);
    300                         //打印新的电影票
    301                         newTicket.Print(); // 未完成2
    302                     }
    303                     else if (dr == DialogResult.No)
    304                     {
    305                         return;
    306                     }
    307                 }
    308                 //显示当前选中票的信息
    309                 else
    310                 {
    311                     foreach (Ticket item in cinema.SoldTickets)
    312                     {
    313                         //判断座位号,电影场次,电影名
    314                         if (item.Seat.SeatNum == seatNum && item.ScheduleItem.Time == tvList.SelectedNode.Text && item.ScheduleItem.Movie.MovieName == tvList.SelectedNode.Parent.Text)
    315                         {
    316                             item.Show();
    317                         }
    318                     }
    319                 }
    320             }
    321             catch (Exception ex ) 
    322             {
    323                 string Message = ex.Message;
    324                 MessageBox.Show("抱歉有误了," + Message);
    325             }
    326         }
    327 
    328         /// <summary>
    329         /// 更新座位颜色
    330         /// </summary>
    331         public void UpdateSeat()
    332         {
    333             foreach (String key in cinema.Seats.Keys)
    334             {
    335                 //cinema.Seats[key].Color;
    336             }
    337         }
    338 
    339     }
    340 }
    主窗体代码

    以为上程序源代码  ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

    程序运行效果视频:

      未完成源代码。

    程序界面图:

  • 相关阅读:
    堆内存内部结构
    JVM 总体结构
    HTTP的工作原理
    HTTP协议简介
    服务器硬件资源_I/O
    maven常用命令行总结
    java enum—枚举的应用
    JAVA闰年的判断
    JAVA数据结构与算法——求最大公约数!!
    ThinkPHP 分页
  • 原文地址:https://www.cnblogs.com/KelanMai/p/6741596.html
Copyright © 2011-2022 走看看