C#影院售票系统毕业设计(2)
本文继续更新,动态绘制控件、票类型的切换以及数据在窗体中的展现。
先从简单的开始,票类型的切换。
分析:
1.当点击普通票时 学生折扣和赠送者是禁用的
2.点击赠票时 启用赠送者,禁用学生折扣
3.点击学生票时 启用学生折扣,禁用赠送者
学生折扣ComboBox下拉框可以选择折扣,根据折扣实时折扣计算价格到优惠价上。
需要注意的是:
如果没有选择ListView的电影场次(也就是时间),选择赠票和学生票是没有意义的甚至会引发学生票实时计算时的异常,所以我们要判断
if (this.treeView1.SelectedNode == null) return;
因此我们便可以设计三个RadioButton的点击事件代码
private void rdoGiveTicket_CheckedChanged(object sender, EventArgs e) { if (this.treeView1.SelectedNode == null) return; this.lblOriginalPrice.Text = "0"; this.cboDiscount.Enabled = false; this.txtGiver.Enabled = true; }
private void rdoStuTicket_CheckedChanged(object sender, EventArgs e) { if (this.treeView1.SelectedNode == null) return; this.cboDiscount.Enabled = true; this.txtGiver.Enabled = false; }
private void rdoNormal_CheckedChanged(object sender, EventArgs e) { this.cboDiscount.Enabled = false; this.txtGiver.Enabled = false; if (!GetKey()) return; //更新原价,因为点击赠票时价格为0了 this.lblOriginalPrice.Text = cinema.Schedule.Items[key].Movie.Price.ToString(); }
为了美观也可以调用ClearContent()方法清空一下可能残留的信息
private void ClearContent() { //点击时间(场次)时切换回普通票 并清空可能残留的信息 txtGiver.Text = ""; cboDiscount.Text = ""; }
由于普通票切换回来的时候需要刷新价格,所以要获取价格;cinema电影院对象是一个全局对象(可以看上一篇的类),key是一个全局的变量,存储的是选中场次的时间,用来做放映场次的Key。GetKey()方法是获取选中场次的时间并返回布尔值,看代码实例
public bool GetKey() { //选中节点 TreeNode node = this.treeView1.SelectedNode; //如果没有选择节点=》结束 if (node == null) return false; //如果选中节点不是场次(时间)=》结束 if (node.Level != 1) return false; //获取时间作为key key = node.Text; if (key != "" && key != null) return true; return false; }
然后就是将XML中的数据绑定TreeView并在选择TreeView的时间节点是将影片信息展现在窗体中
之前在搭建类的时候用到 Schedule 放映计划类有一个方法LoadItems()就是将XML信息解析并添加到放映计划集合中
提取出InitTreeView()方便更新时调用cinema.Schedule.LoadItems();放到窗体的加载事件或初始化中
private void InitTreeView() { this.treeView1.Nodes.Clear(); string movieName = ""; TreeNode tn = null; foreach (ScheduleItem item in cinema.Schedule.Items.Values) { //如果不存在此电影节点,创建电影节点 if (item.Movie.MovieName != movieName) { tn = new TreeNode(item.Movie.MovieName); tn.Tag = item.Movie; this.treeView1.Nodes.Add(tn); } //增加场次时间节点 TreeNode time = new TreeNode(item.Time); tn.Nodes.Add(time); //获取当前场次的电影名字,重新遍历 movieName = item.Movie.MovieName; } //展开所有的节点 this.treeView1.ExpandAll(); }
接下来就是选中场次节点时将电影的详细信息展现在窗体中
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { //清空残留信息 ClearContent(); rdoNormal.Checked = true; //获取key if (!GetKey()) return; lblName.Text = cinema.Schedule.Items[key].Movie.MovieName; lblDate.Text = key; lblType.Text = cinema.Schedule.Items[key].Movie.MovieType.ToString(); lblOriginalPrice.Text = cinema.Schedule.Items[key].Movie.Price.ToString(); lblMainAct.Text = cinema.Schedule.Items[key].Movie.Actor; lblDirect.Text = cinema.Schedule.Items[key].Movie.Director; this.pictureBox1.Image = Image.FromFile(cinema.Schedule.Items[key].Movie.Poster); this.lblPreferentialPrice.Text = ""; }
最后是将座位信息以label标签的形式动态绘制到窗体里,这里也是最难的地方,参考了一下书
private void InitialSeat() { int seatRow = 7; int seatLine = 5; for (int i = 0; i < seatRow; i++)//列 { for (int j = 0; j < seatLine; j++)//行 { label = new Label(); //设置背景颜色 label.BackColor = Color.Yellow; //设置字体 字体,大小,指定应用到文本的字形信息为普通文本,指定给定数据的度量单位,新字体的GDI字符集 label.Font = new System.Drawing.Font("宋体", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); //取消自动尺寸方便我们设置尺寸 label.AutoSize = false; //指定label的宽和高 label.Size = new System.Drawing.Size(50, 25); //设置座位号 label.Text = (j + 1).ToString() + "-" + (i + 1).ToString(); label.TextAlign = ContentAlignment.MiddleCenter; //设置位置 label.Location = new Point(60 + (i * 100), 60 + (j * 60)); //所有的标签绑定到同一事件,lblSeat_Click是我们手动写的事件 label.Click += new System.EventHandler(lblSeat_Click); //tb是TabPage tb.Controls.Add(label); //加入到全局的labels集合中 labels.Add(label.Text, label); //实例化一个座位Seat构造函数的参数为座位号及颜色 seat = new Seat((j + 1).ToString() + "-" + (i + 1).ToString(), Color.Yellow); cinema.Seats.Add(seat.SeatNum, seat); } }
之后文章将会继续更新:购票、座位颜色状态的改变及场次座位状态的显示,希望大家继续关注。
以上就是本文的全部内容,希望大家喜欢。
您可能感兴趣的文章
- 01-10C#实现读取注册表监控当前操作系统已安装软件变化的方法
- 01-10C#实现自定义windows系统日志的方法
- 01-10C#实现写系统日志的方法
- 01-10C#实现基于加减按钮形式控制系统音量及静音的方法
- 01-10C#影院售票系统毕业设计(3)
- 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#实现读取注册表监控当前操作系统已
随机阅读
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-10C#中split用法实例总结
- 01-11ajax实现页面的局部加载
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-10SublimeText编译C开发环境设置
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 04-02jquery与jsp,用jquery
- 01-10delphi制作wav文件的方法