首页 > 编程 > C# > 正文

C#影院售票系统毕业设计(3)

2019-10-29 21:35:57
字体:
来源:转载
供稿:网友
这篇文章介绍了C#影院售票系统毕业设计,文章主要内容是关于购票、座位颜色状态的改变及场次座位状态的显示,需要的朋友可以参考下
 

前一篇文章《C#影院售票系统毕业设计(2)》中总结了动态绘制控件、票类型的切换以及数据在窗体中的展现。今天继续总结!

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

分析:

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.  } 
?

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

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

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

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

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

以上就是本文的全部内容,最后一篇文章《C#影院售票系统毕业设计(4)》继续实现对销售信息的本地保存、以及每次打开时载入上次的保存的销售信息,并对整个项目做整体总结

希望小编整理的这一系列文章对大家的学习有所帮助,希望大家可以喜欢。



注:相关教程知识阅读请移步到c#教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表