C#影院售票系统毕业设计(3)
前一篇文章《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#影院售票系统毕业设计(4)》继续实现对销售信息的本地保存、以及每次打开时载入上次的保存的销售信息,并对整个项目做整体总结。
希望小编整理的这一系列文章对大家的学习有所帮助,希望大家可以喜欢。
上一篇:C#影院售票系统毕业设计(1)
栏 目:C#教程
本文标题:C#影院售票系统毕业设计(3)
本文地址:https://www.xiuzhanwang.com/a1/C_jiaocheng/6863.html
您可能感兴趣的文章
- 01-10C#实现读取注册表监控当前操作系统已安装软件变化的方法
- 01-10C#实现自定义windows系统日志的方法
- 01-10C#实现写系统日志的方法
- 01-10C#实现基于加减按钮形式控制系统音量及静音的方法
- 01-10C#影院售票系统毕业设计(2)
- 01-10C#影院售票系统毕业设计(1)
- 01-10C#影院售票系统毕业设计(4)
- 01-10Unity3d获取系统时间
- 01-10使用C#实现读取系统配置文件的代码实例讲解
- 01-10Windows系统中使用C#读取文本文件内容的小示例
阅读排行
本栏相关
- 01-10C#通过反射获取当前工程中所有窗体并
- 01-10关于ASP网页无法打开的解决方案
- 01-10WinForm限制窗体不能移到屏幕外的方法
- 01-10WinForm绘制圆角的方法
- 01-10C#实现txt定位指定行完整实例
- 01-10WinForm实现仿视频 器左下角滚动新
- 01-10C#停止线程的方法
- 01-10C#实现清空回收站的方法
- 01-10C#通过重写Panel改变边框颜色与宽度的
- 01-10C#实现读取注册表监控当前操作系统已
随机阅读
- 01-11ajax实现页面的局部加载
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-10delphi制作wav文件的方法
- 01-10C#中split用法实例总结
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-10SublimeText编译C开发环境设置
- 04-02jquery与jsp,用jquery
- 01-10使用C语言求解扑克牌的顺子及n个骰子