zoukankan      html  css  js  c++  java
  • C#总结项目《影院售票系统》编写总结三

    昨天总结了动态绘制控件、票类型的切换以及数据在窗体中的展现。今天继续总结,自己喜欢的就去做吧,让别人说去吧,省的自己再留下什么后悔遗憾,噢耶,加油!

    今天总结项目中最核心的部分--购票、座位颜色状态的改变及场次座位状态的显示。

    分析:

    1.在选中时间(场次)后更新出座位状态(label实现),售出的为红色,未售出的显示为黄色。

    2.已售出提示已经售出并不进行任何操作,未售出的询问是否购买。

    3.根据选择的是普通票、赠票、还是学生票分别创建不同的票对象

      如果选择赠票则需要检测赠送者否填写

      如果选择的是学生票需要检测折扣是否选择

    4.获取选中座位的座位号,调用工具类的CreateTicket()方法创建对应选中类型的票,普通票则直接使用Ticket类创建

    5.用户选择购买后将座位集合的颜色改成红色;重新使用票类的计算价格方法;将售出的票加入到Cinema类中的SoldTickets集合中;更新座位颜色状态,上代码详解

     1 try
     2             {
     3                 //获取当前被点击座位标签的座位号(Text属性)
     4                 string seatNum = ((Label)sender).Text.ToString();
     5                 //赠送者名字
     6                 string customerName = this.txtGiver.Text.ToString();
     7                 //折扣
     8                 int discount = 0;
     9                 //票的类型
    10                 string type = "";
    11                 //如果学生票是选中的
    12                 if (this.rdoStuTicket.Checked)
    13                 {
    14                     type = "StudentTicket";
    15                     if (this.cboDiscount.Text == null)
    16                     {
    17                         MessageBox.Show("请输入折扣数!", "提示");
    18                         return;
    19                     }
    20                     else
    21                     {
    22                         discount = int.Parse(this.cboDiscount.Text);
    23                     }
    24                 }
    25                 //如果赠票是选中的
    26                 else if (this.rdoGiveTicket.Checked)
    27                 {
    28                     if (string.IsNullOrEmpty(this.txtGiver.Text))
    29                     {
    30                         MessageBox.Show("请输入赠票者姓名!", "提示");
    31                         return;
    32                     }
    33                     type = "FreeTicket";
    34                 }
    35                 //创建票  使用工具类的静态方法
    36                 Ticket newTicket = TicketUtil.CreateTicket(cinema.Schedule.Items[key], cinema.Seats[seatNum], discount, customerName, type);
    37                 //如果当前座位的颜色是黄色-待售出
    38                 if (cinema.Seats[seatNum].Color == Color.Yellow)
    39                 {
    40                     //询问
    41                     DialogResult result = MessageBox.Show("是否购买?", "提示", MessageBoxButtons.YesNo);
    42                     if (result == DialogResult.Yes)
    43                     {
    44                         //重新计算票价
    45                         newTicket.CalcPrice();
    46                         //将票加入到已经售出票的集合
    47                         cinema.SoldTickets.Add(newTicket);
    48                         //更新座位颜色状态
    49                         UpdateSeat();
    50                         lblPreferentialPrice.Text = newTicket.Price.ToString();
    51                         newTicket.Print();
    52                         //使座位集合的颜色状态改变
    53                         cinema.Seats[seatNum].Color = Color.Red;
    54                     }
    55                 }
    56                 //如果是已经售出的票
    57                 else
    58                 {
    59                     //显示当前售票信息
    60                     foreach (Ticket ticket0 in cinema.SoldTickets)
    61                     {
    62                         //已售出票集合的座位号等于当前点击座位号 并且 选中的时间等于售出票的场次的时间  并且  售出票的场次计划中电影名字等于TreeView选中时间的父节点也就是电影名称
    63                         if (ticket0.Seat.SeatNum == seatNum && ticket0.ScheduItem.Time == treeView1.SelectedNode.Text && ticket0.ScheduItem.Movie.MovieName == treeView1.SelectedNode.Parent.Text)
    64                         {
    65                             ticket0.Show();
    66                         }
    67                     }
    68                 }
    69 
    70             }
    71             catch (Exception ex)
    72             {
    73                 MessageBox.Show("请先选择场次!" + ex.Message);
    74             }
    lblSeat_Click

    这里面需要调用座位颜色更新的一个方法UpdateSeat(),先将Seats集合和labels集合的颜色初始化,也就是重置颜色为黄色,再根据售出票集合的信息将售出座位的颜色置为红色

     1 //重置labels集合label的颜色
     2             foreach (string lkey in labels.Keys)
     3             {
     4                 labels[lkey].BackColor = Color.Yellow;
     5             }
     6             //重置座位集合颜色
     7             foreach (string key in cinema.Seats.Keys)
     8             {
     9                 cinema.Seats[key].Color = Color.Yellow;
    10             }
    11             //遍历售出票集合
    12             foreach (Ticket ticket in cinema.SoldTickets)
    13             {
    14                 //如果场次一致,并且电影名字一致
    15                 if (ticket.ScheduItem.Time == this.treeView1.SelectedNode.Text && ticket.ScheduItem.Movie.MovieName == this.lblName.Text)
    16                 {
    17                     //重新更改颜色
    18                     labels[ticket.Seat.SeatNum].BackColor = Color.Red;
    19                     cinema.Seats[ticket.Seat.SeatNum].Color = Color.Red;
    20                 }
    21             }
    UpdateSeat()

    这样就实现了购买票后座位颜色状态的改变。

    然后再根据选中的TreeView的时间(场次)节点刷新每场的中已经售出的票。

    就是之前第二篇的treeView1_AfterSelect这个事件,调用我们的UpdateSeat方法就行了,这样每选择一个场次就会更新一次座位售出情况。

    今天就到这了,明天继续实现对销售信息的本地保存、以及每次打开时载入上次的保存的销售信息,并对整个项目做整体总结。

    【来自 乐智的菜园子:www.cnblogs.com/AIThink 亲们,码字不容易,转载请注明出处。】

  • 相关阅读:
    出队列操作
    出队列操作
    栈和队列7 数据结构和算法29
    KE上传图片
    asp.net常用快捷键
    基于jquery框架实现以下行的向上、向下和删除
    each的用法积累
    JTemplate使用2
    kindeditor API ,kindeditor使用手册,kindeditor函数,kindeditor使用,超级大收集(转载)
    线上帮助
  • 原文地址:https://www.cnblogs.com/AIThink/p/4940985.html
Copyright © 2011-2022 走看看