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);
  }
 }

之后文章将会继续更新:购票、座位颜色状态的改变及场次座位状态的显示,希望大家继续关注。

以上就是本文的全部内容,希望大家喜欢。

(0)

相关推荐

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

    C#学习经历从基本语法结构到窗体再到面向对象终于走完了.NET初级程序员的道路,用了大概一天半的时间做完这个练手项目<影院售票系统>,先上效果截图一张 抽出时间做些这个对目前的我来说算不小的项目. 用到的知识点有:面向对象思想.TreeView.XML读取.File文件流.泛型集合,这里面对我来说难度最大的是面向对象与泛型集合的结合,看来学习一门编程语言的难点还是在设计思想上. 再来介绍一下项目需求:在影片列表中选择某个时段的一场电影,单击座位选择一个种类的电影票,并创建电影,计算价格并打印影

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

    回顾:上一篇文章总结了影院售票系统核心部分-售票,整个项目也就完成了2/3了,需求中也要求了对销售信息的保存,今天就继续总结销售信息的保存以及加载销售信息. 分析:退出程序时将已售出票集合中的对象循环写入到文本文件中,读取时循环读入并加入到已售出票集合中,下面看具体实现 public void Save() { //保存的文件 FileStream fs = new FileStream("soldTickets.txt", FileMode.OpenOrCreate); Stream

  • C#超市收银系统设计

    本文实例为大家分享了C#超市收银系统设计的具体代码,供大家参考,具体内容如下 1.登录界面 代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.

  • 基于C#编写经理评分系统

    先写需求: 01.显示员工信息 02.实现项目经理给员工评分的功能 第一步: 建立两个类,员工类和项目经理类 定义属性和方法 员工类:工号.年龄.姓名.人气值.项目经理年度评分.经理评价 项目经理类:ID.年龄.姓名.性别.资历,由于经理可以给员工评分,因此还有评分的方法 先上两张图再说: 查看窗体FrmShow 评分窗体FrmJudge 不说了,上代码 首先是员工类 using System.Text; using System.Threading.Tasks; namespace 经理评分系

  • C#实现简单的汽车租赁系统

    最近学习了继承,多态,集合,设计模式,有一个汽车租凭系统,给大家分享一下: 我们首先来看看我们这个系统的效果 1.做一个项目,我们首先对项目进行分析 根据我们最近学的知识,我们可以看出继承,多态,集合,设计模式,我们都能用到 我们把所需要的类和简单模式中的"简单工厂"的工厂准备好 类图: 01.车辆类(父类) using System; using System.Collections.Generic; using System.Linq; using System.Text; usi

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

    前一篇文章<C#影院售票系统毕业设计(2)>中总结了动态绘制控件.票类型的切换以及数据在窗体中的展现.今天继续总结! 本文总结项目中最核心的部分--购票.座位颜色状态的改变及场次座位状态的显示. 分析: 1.在选中时间(场次)后更新出座位状态(label实现),售出的为红色,未售出的显示为黄色. 2.已售出提示已经售出并不进行任何操作,未售出的询问是否购买. 3.根据选择的是普通票.赠票.还是学生票分别创建不同的票对象 如果选择赠票则需要检测赠送者否填写 如果选择的是学生票需要检测折扣是否选择

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

    本文继续更新,动态绘制控件.票类型的切换以及数据在窗体中的展现. 先从简单的开始,票类型的切换. 分析: 1.当点击普通票时 学生折扣和赠送者是禁用的 2.点击赠票时 启用赠送者,禁用学生折扣 3.点击学生票时 启用学生折扣,禁用赠送者 学生折扣ComboBox下拉框可以选择折扣,根据折扣实时折扣计算价格到优惠价上. 需要注意的是: 如果没有选择ListView的电影场次(也就是时间),选择赠票和学生票是没有意义的甚至会引发学生票实时计算时的异常,所以我们要判断  if (this.treeVi

  • C#实现影院售票系统

    本文实例为大家分享了C#实现影院售票系统的具体代码,供大家参考,具体内容如下 本人认为此项目的难点有4点 1.首先是将解析完的XML文件绑定到TreeView上 2.用代码动态生成座位的label,生成触发事件Label_Click,俩组放映时间的售出座位是不同的 3.用序列化与反序列化实现代码的多次利用 4.打印票务 创建与本项目相关的10个类 一.首先在放映计划类中创建LoadItems()方法来解析ShowList.xml文件 XmlDocument dic=new XmlDocument

  • 基于Python实现电影售票系统

    目录 一.系统要求 二.用户信息 三.主要代码 四.效果图展示 一.系统要求 电影售票系统程序,应具备以下几点功能: 1.用户认证 系统用户分为用户.管理员两个角色,系统可根据不同用户角色权限进入不同界面,所有用户角色需要通过身份验证才能登录系统进行操作. 2.用户登录 主要实现用户登录系统可查看本人会员信息.购买影票.查看订票.影票退订.修改信息等功能. 3.管理登录 主要实现管理员登录系统可查看会员和管理信息.添加会员.注销会员.查看购票.影票出售.影票退订.查看影票余票和售票.增删管理.增

  • C语言实现影院售票管理系统

    本文实例为大家分享了C语言实现影院售票管理系统的具体代码,供大家参考,具体内容如下 前言 最近刚好在写自己的课设,匆匆忙忙写出来的课设系统,仍有不足,拿出来和大家分享一下,希望能对大家有帮助. 一.概要设计 1.基本信息 数据类型:链表 typedef struct node {     char name[N];                  // 名称     char type[N];                  // 类型     int time;              

  • Python使用面向对象方式创建线程实现12306售票系统

    目前python 提供了几种多线程实现方式 thread,threading,multithreading ,其中thread模块比较底层,而threading模块是对thread做了一些包装,可以更加方便的被使用. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在函数体之外.类变量通常不作为实例变量使用. 数据成员:类变量或者实例变量用于

  • java书店系统毕业设计 用户模块(2)

    本文实例为大家分享了java书店系统毕业设计第二篇,供大家参考,具体内容如下 1.用户管理(user.txt) 字段名和顺序 说明:其中的type为int类型,用来表示操作用户的类型. 1--表示为admin,可以进行全部操作 2--表示为能操作图书模块的人员 3--表示为能操作进货模块的人员 4--表示为能操作销售模块的人员 5--表示为能操作库存模块的人员 type用了枚举实现 package cn.hncu.bookStore.user.common; public enum UserTy

  • 基于C语言实现简单的12306火车售票系统

    程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 录入班次信息 浏览班次信息 按班次号查询 按终点站查询 按余票数量排序保存 售票 退票 更新班次信息 退出系统 所有的班次信息保存在number.dat文件中,排序过后的保存在sort.dat中(.dat是一种二进制文件). 在编写的过程中我觉得在判断火车的状态比较值得深究.这里假设火车主要有四种状态: 1.未发车 2.已发车 3.停止检票 4.停止退票 在程序中,思路是将代表发车时间的字符串转化为整型,再和系统现在的时间进行大小

随机推荐