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)》继续实现对销售信息的本地保存、以及每次打开时载入上次的保存的销售信息,并对整个项目做整体总结

希望小编整理的这一系列文章对大家的学习有所帮助,希望大家可以喜欢。

(0)

相关推荐

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

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

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

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

  • C++实现简单的图书管理系统

    今天再为大家介绍另一个常用的管理系统--图书管理系统,希望大家可以亲自动手实践一下,下面就与大家一起分享我的劳动成果. 图书信息包括:登录号.书名.作者名.分类号.出版单位.出版时间.价格等.试设计一图书信息管理系统,使之能提供以下功能: (1)图书信息录入功能(图书信息用文件保存) (2)图书信息浏览功能 (3)查询和排序功能:(至少一种查询方式)         .按书名查询         .按作者名查询 (4)图书信息的删除与修改 分享代码如下 #include<iostream.h>

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

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

  • C++实现简单的信息管理系统

    本文为大家分享C++实现简单的信息管理系统,小编之前在学习的时候也要做一些管理系统,在网上查了许多资料,现在我把资料分享给大家,希望能够帮助到大家. #include <stdio.h> #include <stdlib.h> #include "file.h" void savaList(Node *head)/**把用户录入的数据存储到文件里面去方便下次读取*/ { FILE *fp=fopen("data\\data.txt" ,&qu

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

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

  • ASP.NET实现学生管理系统

    学生管理系统所需要的具体控件和主要属性: 1.登录窗体 基本控件: label(标签控件) 主要属性:Image(在标签上显示的图像) Text(在标签上显示的文本) TextBox(文本框控件) 主要属性:PasswordChar(指示在作为密码框时,文本框中显示的字符,而不是实际输入的文本) Button(按钮控件) ComboBox(下拉框)属性:SelectedItem:获取当前选定的项 事件:Click(单击控件时发生) private void butStyle_Click(obje

  • C++实现简单的职工信息管理系统

    功能主模块描述 模块一:增加人员函数Add():增加职工基本信息. 模块二:删除人员函数Delete():删除指定的职工的基本信息以及薪酬. 模块三:修改人员函数Modify():修改指定的职工基本信息. 模块四:查询职工信息函数Search():查询指定的职工信息以及薪酬. 模块五:排序职工信息函数Sort():职工信息排序功能实现 模块六:基础数据设置函数Set():设置五类职位的基本薪酬. 模块七:数据存盘,载入函数Save()以及Load():储存职工基本信息,薪酬以及五类职位的基本薪酬

  • C++实现简单的职工管理系统实训代码

    本文实例为大家分享了C++职工管理系统实例代码 1.单个职工的头文件 staff.h #ifndef STAFF_H_INCLUDED #define STAFF_H_INCLUDED //结构体创建 struct staff { char ID[10]; char name[10]; char sex[10]; int pay; int reward; int factpay; }; //自定义结构体 typedef struct staff staff; //单个职工信息创建 staff C

  • C++基础学生管理系统

    本文实例为大家分享了C++基础学生管理系统的实现代码,供大家参考,具体内容如下 适用于c++6.0,codeblocks等常用工具 1. 链表处理部分 #include<stdio.h> #include<string.h> #include<stdlib.h> #include"linklist.h" #include"elem.h" void dispnode(linklist h) { node *p; p=h->ne

随机推荐