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); } }
之后文章将会继续更新:购票、座位颜色状态的改变及场次座位状态的显示,希望大家继续关注。
以上就是本文的全部内容,希望大家喜欢。
相关文章
- 我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
- 这篇文章主要介绍了C# 字段和属性的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-11-03
- 这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
- 这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
- 本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
这篇文章主要介绍了使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25- 这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
- 本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
- 轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
- 这篇文章主要介绍了C#绘制曲线图的方法,以完整实例形式较为详细的分析了C#进行曲线绘制的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
- 这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了c#中(&&,||)与(&,|)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
- 下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 这篇文章主要介绍了C#中list用法,结合实例形式分析了C#中list排序、运算、转换等常见操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25