C#总结项目《影院售票系统》编写总结三

昨天总结了动态绘制控件、票类型的切换以及数据在窗体中的展现。今天继续总结,自己喜欢的就去做吧,让别人说去吧,省的自己再留下什么后悔遗憾,噢耶,加油!

今天总结项目中最核心的部分--购票、座位颜色状态的改变及场次座位状态的显示。

分析:

1.在选中时间(场次)后更新出座位状态(label实现),售出的为红色,未售出的显示为黄色。

2.已售出提示已经售出并不进行任何操作,未售出的询问是否购买。

3.根据选择的是普通票、赠票、还是学生票分别创建不同的票对象

  如果选择赠票则需要检测赠送者否填写

  如果选择的是学生票需要检测折扣是否选择

4.获取选中座位的座位号,调用工具类的CreateTicket()方法创建对应选中类型的票,普通票则直接使用Ticket类创建

5.用户选择购买后将座位集合的颜色改成红色;重新使用票类的计算价格方法;将售出的票加入到Cinema类中的SoldTickets集合中;更新座位颜色状态,上代码详解

 1 try
 2             {
 3                 //获取当前被点击座位标签的座位号(Text属性)
 4                 string seatNum = ((Label)sender).Text.ToString();
 5                 //赠送者名字
 6                 string customerName = this.txtGiver.Text.ToString();
 7                 //折扣
 8                 int discount = 0;
 9                 //票的类型
10                 string type = "";
11                 //如果学生票是选中的
12                 if (this.rdoStuTicket.Checked)
13                 {
14                     type = "StudentTicket";
15                     if (this.cboDiscount.Text == null)
16                     {
17                         MessageBox.Show("请输入折扣数!", "提示");
18                         return;
19                     }
20                     else
21                     {
22                         discount = int.Parse(this.cboDiscount.Text);
23                     }
24                 }
25                 //如果赠票是选中的
26                 else if (this.rdoGiveTicket.Checked)
27                 {
28                     if (string.IsNullOrEmpty(this.txtGiver.Text))
29                     {
30                         MessageBox.Show("请输入赠票者姓名!", "提示");
31                         return;
32                     }
33                     type = "FreeTicket";
34                 }
35                 //创建票  使用工具类的静态方法
36                 Ticket newTicket = TicketUtil.CreateTicket(cinema.Schedule.Items[key], cinema.Seats[seatNum], discount, customerName, type);
37                 //如果当前座位的颜色是黄色-待售出
38                 if (cinema.Seats[seatNum].Color == Color.Yellow)
39                 {
40                     //询问
41                     DialogResult result = MessageBox.Show("是否购买?", "提示", MessageBoxButtons.YesNo);
42                     if (result == DialogResult.Yes)
43                     {
44                         //重新计算票价
45                         newTicket.CalcPrice();
46                         //将票加入到已经售出票的集合
47                         cinema.SoldTickets.Add(newTicket);
48                         //更新座位颜色状态
49                         UpdateSeat();
50                         lblPreferentialPrice.Text = newTicket.Price.ToString();
51                         newTicket.Print();
52                         //使座位集合的颜色状态改变
53                         cinema.Seats[seatNum].Color = Color.Red;
54                     }
55                 }
56                 //如果是已经售出的票
57                 else
58                 {
59                     //显示当前售票信息
60                     foreach (Ticket ticket0 in cinema.SoldTickets)
61                     {
62                         //已售出票集合的座位号等于当前点击座位号 并且 选中的时间等于售出票的场次的时间  并且  售出票的场次计划中电影名字等于TreeView选中时间的父节点也就是电影名称
63                         if (ticket0.Seat.SeatNum == seatNum && ticket0.ScheduItem.Time == treeView1.SelectedNode.Text && ticket0.ScheduItem.Movie.MovieName == treeView1.SelectedNode.Parent.Text)
64                         {
65                             ticket0.Show();
66                         }
67                     }
68                 }
69
70             }
71             catch (Exception ex)
72             {
73                 MessageBox.Show("请先选择场次!" + ex.Message);
74             }

lblSeat_Click

这里面需要调用座位颜色更新的一个方法UpdateSeat(),先将Seats集合和labels集合的颜色初始化,也就是重置颜色为黄色,再根据售出票集合的信息将售出座位的颜色置为红色

 1 //重置labels集合label的颜色
 2             foreach (string lkey in labels.Keys)
 3             {
 4                 labels[lkey].BackColor = Color.Yellow;
 5             }
 6             //重置座位集合颜色
 7             foreach (string key in cinema.Seats.Keys)
 8             {
 9                 cinema.Seats[key].Color = Color.Yellow;
10             }
11             //遍历售出票集合
12             foreach (Ticket ticket in cinema.SoldTickets)
13             {
14                 //如果场次一致,并且电影名字一致
15                 if (ticket.ScheduItem.Time == this.treeView1.SelectedNode.Text && ticket.ScheduItem.Movie.MovieName == this.lblName.Text)
16                 {
17                     //重新更改颜色
18                     labels[ticket.Seat.SeatNum].BackColor = Color.Red;
19                     cinema.Seats[ticket.Seat.SeatNum].Color = Color.Red;
20                 }
21             }

UpdateSeat()

这样就实现了购买票后座位颜色状态的改变。

然后再根据选中的TreeView的时间(场次)节点刷新每场的中已经售出的票。

就是之前第二篇的treeView1_AfterSelect这个事件,调用我们的UpdateSeat方法就行了,这样每选择一个场次就会更新一次座位售出情况。

今天就到这了,明天继续实现对销售信息的本地保存、以及每次打开时载入上次的保存的销售信息,并对整个项目做整体总结。

【来自 乐智的菜园子:www.cnblogs.com/AIThink 亲们,码字不容易,转载请注明出处。】

时间: 2025-01-04 00:54:19

C#总结项目《影院售票系统》编写总结三的相关文章

C#总结项目《影院售票系统》编写总结一

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

影院售票系统-----一个让你有成就感的小项目,只有一丢丢哦

先来点废话,刚拿到这个项目的时候你是怎么想的,上来就闷头写,还是构想思路......   项目需求:     影院售票系统可以销售每天不同时段的电影票,不同时段的电影票有不同的优惠政策,还有使用兑换券的免费票.选择某个时段的一场电影,     单击放映厅未售出的座位并选择一个种类的电影票,创建电影票,计算价格并打印,座位设置为红色表示已经售出.   思想:    使用面向对象思想编写影院售票系统   看完这个你有没有点思路呢,我想你是有的 ...... 下面先来点图片,先刺激一下视觉:  窗体搭

影院售票系统

这个影院售票的项目比较的复杂,共需要九个类. No.1首先第一个类,座位类.该项目的座位默认为黄色,被售出的状态下默认为红色.需要导入命名空间 Using.System.Drawing.Color public class Seat { public Color Color { get; set; }//座位颜色 public string Num { get; set; }//座位号 public Seat() { } public Seat(Color color,string num) {

C#总结项目《影院售票系统》编写总结二

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

火车票售票系统需求分析

火车票售票系统 需求分析报告 1.引言 (1)1.1编写目的 (1)1.2项目背景 (2)1.3定义 (2)1.4参考资料 (2)2.任务概述 (2)2.1目标 (2)2.2运行环境 (3)2.3条件与限制 (3)3.数据描述 (3)3.1静态数据 (3)3.2动态数据 (3)3.3数据库介绍 (4)3.4数据词典 (4)3.5数据采集 (8)4.功能需求 (8)4.1功能划分 (8)4.2功能描述 (9)5.性能需求 (9)5.1数据精确度 (9)5.2时间特性 (9)5.3适应性 (9)6.

WEB项目(B/S系统)打包安装(总结篇)

原文:WEB项目(B/S系统)打包安装(总结篇) 打包安装程序的制作选择性还很多的,有installshield,wise installer,inno setup这几个做打包安装项目都是很强大的,要搞出界面大气个性化的安装,还是得用这几个才行,我这篇说的是.NET自带的安装项目打包WEB系统的,.NET打包安装项目虽然傻傻的,也比较丑,但是搭建安装项目快速也能满足总体的要求,如果没有足够的时间研究重量级的安装工具,短时间内用.NET自带的安装项目也是一个良好的选择.网上有很多关于用.NET打包

浅谈C#中插件系统编写的一种简单方法

1.背景 几年前还在上学时,用C#+反射机制写过插件系统,后来又用MEF写过插件系统.插件系统本身具有易于扩展的优势,所以在实际项目中使用很频繁.即使在B/S项目中,插件的思想也是大行其道,比如前端单页面+AMD编程便可以理解为一种插件机制,以及后台扩展项目统一打包为一个jar放入主系统jar文件中一起发布,也可以理解为插件思想的运用. 这里我们回到C/S插件系统编写的问题上.由于之前诸多项目编写是将插件编译成dll,然后进行解析.这样做有其好处,即宿主中可以对各个模块解析,完成插件间.插件和主

在Ubuntu上为Android系统编写Linux内核驱动程序(老罗学习笔记1)

在智能手机时代,每个品牌的手机都有自己的个性特点.正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iphone莫属了.据统计,截止2011年5月,AppStore的应用软件数量达381062个,位居第一,而Android Market的应用软件数量达294738,紧随AppStore后面,并有望在8月份越过AppStore.随着Android系统逐步扩大市场占有率,终端设备的多样性亟需更多的移动开发人员的参与.据业内统计,Android研发人才缺口至少30万.目前,

干货 | C#开发的电影售票系统

01 介绍 一个有会员制的电影院购票系统.具有会员注册功能,可区分会员和散客两种身份,实现会员及折扣管理.购票具有挑选电影场次,选择座位和查看电影信息等功能. 查看电影详情.获取排片信息. 选择场次座位,完成支付,获取取票信息. 注册成为影院会员,享受优惠折扣. 代码获取 关注我们的公众号!在后台回复[CSTK]不包括[]即可获取. 02 设计思路 在功能设计上,一个电影院购票系统,首先需要具备最基础的功能:影片选择.场次选择和座位选择.在用户提交选择后,会需要支付模块提示用户付款并完成出票.为