当前位置: 移动技术网 > IT编程>开发语言>c# > C#影院售票系统毕业设计(3)

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

2019年07月18日  | 移动技术网IT编程  | 我要评论

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网