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
投稿
猜你喜欢
SpringBoot整合ES解析搜索返回字段问题
2023-01-26 21:39:53
C#中除去所有在HTML元素中标记
2023-04-14 04:09:56
C#手工双缓冲技术用法实例分析
2023-05-09 07:13:44
Java利用HttpClient模拟POST表单操作应用及注意事项
2023-11-29 23:48:01
Java8内存模型PermGen Metaspace实例解析
2023-11-25 10:53:36
Java动态代理详解及实例
2023-12-08 15:51:03
如何调用chatGPT实现代码机器人
2023-06-05 02:09:33
深入浅出讲解Java集合之Map接口
2023-10-14 20:52:46
浅谈Spring中单例Bean是线程安全的吗
2023-07-12 23:42:21
Spring Security认证提供程序示例详解
2022-11-07 18:06:40
springboot @ConfigurationProperties和@PropertySource的区别
2023-06-12 07:18:14
C#日期格式字符串的相互转换操作实例分析
2021-09-01 10:06:56
Unity实现卡片循环滚动效果的示例详解
2022-06-06 16:04:47
Android开发自学笔记(二):工程文件剖析
2021-09-08 11:12:56
一文带你搞懂Redis分布式锁
2021-09-26 12:56:14
关于线程池你不得不知道的一些设置
2021-06-08 11:34:45
Java实现有限状态机的推荐方案分享
2022-01-07 15:54:27
详解在Spring3中使用注解(@Scheduled)创建计划任务
2022-11-14 15:39:34
实例讲解Java中random.nextInt()与Math.random()的基础用法
2023-11-29 12:29:54
C# DataGridView添加新行的2个方法
2023-06-23 05:42:19