gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章C#影院售票系统毕业设计(3)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

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

分析:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最后此篇关于C#影院售票系统毕业设计(3)的文章就讲到这里了,如果你想了解更多关于C#影院售票系统毕业设计(3)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com