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

作者:乐智 时间:2023-04-24 04:08:57 

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

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

分析:

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

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

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

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

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

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

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


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集合的颜色初始化,也就是重置颜色为黄色,再根据售出票集合的信息将售出座位的颜色置为红色


//重置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#,影院售票系统,毕业设计
0
投稿

猜你喜欢

  • 详解java中保持compareTo和equals同步

    2023-07-20 12:20:53
  • 老生常谈Java中List与ArrayList的区别

    2023-03-26 19:52:33
  • SpringBoot如何使用Fastjson解析Json数据

    2023-11-25 11:55:58
  • Java 获取当前时间及实现时间倒计时功能【推荐】

    2022-08-21 16:08:27
  • Kafka常用命令之kafka-console-consumer.sh解读

    2022-06-11 00:20:32
  • spring boot 集成 shiro 自定义密码验证 自定义freemarker标签根据权限渲染不同页面(推荐

    2023-07-28 17:39:16
  • Spring整合Quartz实现定时任务调度的方法

    2023-07-07 00:55:55
  • 使用注解解决ShardingJdbc不支持复杂SQL方法

    2022-08-03 02:15:12
  • C#如何通过T4自动生成代码详解

    2021-12-21 15:43:46
  • Spring之IOC详解

    2022-10-13 19:10:24
  • C#实现动态执行字符串脚本(优化版)的示例代码

    2022-06-10 19:13:54
  • java中的控制结构(if,循环)详解

    2022-05-13 19:18:59
  • Android编程实现系统重启与关机的方法

    2022-01-09 20:56:49
  • javaweb中Filter(过滤器)的常见应用

    2023-07-10 23:57:36
  • C#利用递归算法解决汉诺塔问题

    2022-04-29 23:04:10
  • java自带的MessageDigest实现文本的md5加密算法

    2023-10-08 03:35:29
  • Java对象的内存布局详细介绍

    2021-07-28 05:11:38
  • C#写入对象或集合类型数据到xml文件的方法

    2022-11-12 17:11:37
  • SpringBoot Security前后端分离登录验证的实现

    2023-03-09 10:30:07
  • 关于Java8 parallelStream并发安全的深入讲解

    2023-11-15 06:37:35
  • asp之家 软件编程 m.aspxhome.com