1.首先我们需要了解这个软件的功能:

1).影院每天更新放映列表,系统支持实时查看,包括电影放映场次的时间;

2).影院提供三类影票:普通票,学生票和赠票;

3).允许用户查看某场次座位的售出情况;

4).允许购票,并允许用户选座;

5).用户可以选择场次、影票类型及空闲座位进行购票,并打印电影票;

6).系统可以保存销售情况,并允许对其进行恢复;

  1. [Serializable] //可序列化
  2. public class Seat
  3. {
  4. public string SeatNum { get; set; } //座位号
  5. public System.Drawing.Color Color { get; set; }
  6.  
  7. public Seat() { }
  8. public Seat(string seatnum,System.Drawing.Color color)
  9. {
  10. this.SeatNum = seatnum;
  11. this.Color = color;
  12. }
  13. }

影院座位信息

电影类
  1. [Serializable] //可序列化
  2. public class Schedule
  3. {
  4. //放映场次集合
  5. public Dictionary<string, ScheduleItem> Items = new Dictionary<string, ScheduleItem>();
  6. //解析XML文件
  7. public void LoadItems()
  8. {
  9. XmlDocument myxml = new XmlDocument();
  10. myxml.Load("ShowList.xml");
  11. XmlNode root = myxml.DocumentElement;
  12. foreach (XmlNode item in root.ChildNodes)
  13. {
  14. Movie movie = new Movie();
  15. foreach(XmlNode node in item.ChildNodes)
  16. {
  17. switch (node.Name)
  18. {
  19. case "Name":
  20. movie.MovieName = node.InnerText;
  21. break;
  22. case "Poster":
  23. movie.Poster = node.InnerText;
  24. break;
  25. case "Director":
  26. movie.Director = node.InnerText;
  27. break;
  28. case "Actor":
  29. movie.Actor = node.InnerText;
  30. break;
  31. case "Price":
  32. movie.Price =Convert.ToInt32( node.InnerText);
  33. break;
  34. case "Type":
  35. movie.MovieType = node.InnerText;
  36. break;
  37. case "Schedule":
  38. foreach (XmlNode nodes in node.ChildNodes)
  39. {
  40. ScheduleItem sch = new ScheduleItem(nodes.InnerText,movie);
  41. Items.Add(nodes.InnerText,sch);
  42. }
  43. break;
  44. }
  45. }
  46. }
  47. }
  48. }

放映场次集合

  1. //电影票父类
  2. [Serializable] //可序列化
  3. public class Ticket
  4. {
  5. public ScheduleItem ScheduleItem { get; set; } //放映场次
  6. public Seat Seat { get; set; } //所属座位对象
  7. public int Price { get; set; } //票价
  8. public Ticket()
  9. {
  10. this.ScheduleItem = new ScheduleItem();
  11. this.Seat = new Seat();
  12. }
  13. public Ticket(ScheduleItem item,Seat seat)
  14. {
  15. this.ScheduleItem = item;
  16. this.Seat = seat;
  17. this.Price = CalcPrice();
  18. }
  19. //计算票价
  20. public virtual int CalcPrice()
  21. {
  22. this.Price = ScheduleItem.Movie.Price;
  23. return this.Price;
  24. }
  25. //打印售票信息
  26. public virtual void Print()
  27. {
  28. //取文件名
  29. string fileName = ScheduleItem.Time.Replace(":", "-") + "" + Seat.SeatNum + ".txt";
  30. //生成文件
  31. FileStream fs = new FileStream(fileName,FileMode.Create);
  32. StreamWriter sw = new StreamWriter(fs);
  33. sw.WriteLine("*****************************");
  34. sw.WriteLine("\t青鸟影院");
  35. sw.WriteLine("-----------------------------");
  36. sw.WriteLine("电影名:\t{0}", ScheduleItem.Movie.MovieName);
  37. sw.WriteLine("时 间:\t{0}", ScheduleItem.Time);
  38. sw.WriteLine("座位号:\t{0}", Seat.SeatNum);
  39. sw.WriteLine("价 格:\t{0}", CalcPrice());
  40. sw.WriteLine("*****************************");
  41. sw.WriteLine("\t(a)普通票");
  42. sw.Close();
  43. fs.Close();
  44. }
  45. //显示售票信息
  46. public virtual void Show()
  47. {
  48. MessageBox.Show("已售出!\n普通票");
  49. }
  50. }

电影票父类

  1. //增票子类
  2. public class FreeTicket:Ticket
  3. {
  4. public string CustomerName { get; set; }
  5. public FreeTicket() { }
  6. public FreeTicket(ScheduleItem item,Seat seat,string name):base(item,seat)
  7. {
  8. this.CustomerName = name;
  9. }
  10.  
  11. //打印售票信息
  12. public override void Print()
  13. {
  14. //取文件名
  15. string fileName = ScheduleItem.Time.Replace(":", "-") + "-" + Seat.SeatNum + ".txt";
  16. //生成文件
  17. FileStream fs = new FileStream(fileName, FileMode.Create);
  18. StreamWriter sw = new StreamWriter(fs);
  19. sw.WriteLine("*****************************");
  20. sw.WriteLine("\t青鸟影院(增票)");
  21. sw.WriteLine("-----------------------------");
  22. sw.WriteLine("电影名:\t{0}", ScheduleItem.Movie.MovieName);
  23. sw.WriteLine("时 间:\t{0}", ScheduleItem.Time);
  24. sw.WriteLine("座位号:\t{0}", Seat.SeatNum);
  25. sw.WriteLine("价 格:\t{0}", this.CustomerName);
  26. sw.WriteLine("*****************************");
  27. sw.WriteLine("\t(c)增票");
  28. sw.Close();
  29. fs.Close();
  30. }
  31. //显示售票信息
  32. public override void Show()
  33. {
  34. MessageBox.Show("已售出!\n{0}增票",this.CustomerName);
  35. }
  36. }

增票子类

  1. 学生子类
  1. //影院类
  2. [Serializable] //可序列化
  3. class Cinema
  4. {
  5. public Dictionary<string, Seat> Seats { get; set; } //座位集合
  6. public Schedule Schedule { get; set; } //放映计划
  7. public List<Ticket> SoldTickets { get; set; } //已售出电影
  8. public Cinema()
  9. {
  10. Seats = new Dictionary<string, Seat>();
  11. Schedule = new Schedule();
  12. SoldTickets = new List<Ticket>();
  13. }
  14. //保存
  15. public void Save()
  16. {
  17. BinaryFormatter bf = new BinaryFormatter();
  18. FileStream fs = new FileStream("YingPianInfo.bin",FileMode.Create);
  19. bf.Serialize(fs,SoldTickets);
  20. fs.Close();
  21. MessageBox.Show("保存成功");
  22. }
  23. //读取
  24. public void Load()
  25. {
  26. BinaryFormatter bf = new BinaryFormatter();
  27. FileStream fs = new FileStream("YingPianInfo.bin", FileMode.Open);
  28. SoldTickets = (List<Ticket>)bf.Deserialize(fs);
  29. fs.Close();
  30. }
  31.  
  32. }

影院类

  1. private void FrmMian_Laod(Object senber, EventArgs e)
  2. {
  3. InitSeatNumber(); //初始化座位号
  4. rdoTickets.Checked = true; //选中普通票
  5. }

窗体LOAD事件

  1. private void InitSeatNumber()
  2. {
  3. for (int i = ; i < ; i++)
  4. {
  5. for (int j = ; j < ; j++)
  6. {
  7. lbl = new Label();
  8. lbl.BackColor = Color.Yellow;
  9. lbl.Location = new Point( + j * , + i * );
  10. lbl.Font = new Font("宋体",);
  11. lbl.Name = (i + ) + "-" + (j + );
  12. lbl.Size = new Size(,);
  13. lbl.TabIndex = ;
  14. lbl.TextAlign = ContentAlignment.MiddleCenter;
  15. lbl.Text = (i + ) + "-" + (j + );
  16. //创建一个Label事件
  17. lbl.Click += new System.EventHandler(lblSeat_Click);
  18. tbRoom.Controls.Add(lbl);
  19. Seat seat = new Seat(lbl.Text,Color.Yellow);
  20. //保存在座位集合里
  21. cinema.Seats.Add(seat.SeatNum,seat);
  22. }
  23. }
  24. }

创建座位号方法

  1. private void lblSeat_Click(object sender, EventArgs e)
  2. {
  3. if (tvMovies.Nodes.Count == )
  4. {
  5. MessageBox.Show("请选择电影");
  6. return;
  7. }
  8. if (rdoStudent.Checked==true && txtName.Text == "")
  9. {
  10. MessageBox.Show("请输入增票人姓名!");
  11. return;
  12. }
  13. lbl= sender as Label;
  14. if (lbl.BackColor == Color.Red)
  15. {
  16. MessageBox.Show("已售出");
  17. }
  18. else
  19. {
  20. if (DialogResult.OK == MessageBox.Show("确定要购买吗?", "提示",
  21. MessageBoxButtons.OKCancel, MessageBoxIcon.Information))
  22. {
  23.  
  24. string time = tvMovies.SelectedNode.Text;
  25. ScheduleItem item = cinema.Schedule.Items[time];
  26. string type = rdoTickets.Checked ? "Ticket" : rdoFree.Checked ? "Free" : "Student";
  27. Ticket tic = null;
  28. switch (type)
  29. {
  30. case "Ticket":
  31. tic = new Ticket(item,cinema.Seats[lbl.Text]);
  32. break;
  33. case "Free":
  34. tic = new FreeTicket(item,cinema.Seats[lbl.Text],txtName.Text);
  35. break;
  36. case "Student":
  37. tic = new StudentTicket(item,cinema.Seats[lbl.Text],Convert.ToInt32(cmbDisCount.Text));
  38. break;
  39. }
  40. cinema.SoldTickets.Add(tic);
  41. tic.Print();
  42. lbl.BackColor = Color.Red;
  43. cinema.Seats[lbl.Text].Color = Color.Red;
  44. }
  45. }
  46. }

座位号单击事件

  1. private void 获取新放映列表ToolStripMenuItem_Click(object sender, EventArgs e)
  2. {
  3. BingTreeView();
  4. }
  5. private void BingTreeView()
  6. {
  7. cinema.Schedule.LoadItems(); //调用解析
  8. TreeNode root = null;
  9. foreach (ScheduleItem item in cinema.Schedule.Items.Values)
  10. {
  11. //
  12. if (root == null || root.Text != item.Movie.MovieName)
  13. {
  14. //根节点
  15. root = new TreeNode(item.Movie.MovieName);
  16. tvMovies.Nodes.Add(root);
  17. }
  18. //子节点
  19. root.Nodes.Add(item.Time);
  20. }
  21. }

获取新列表

  1. private void tvMovies_AfterSelect(object sender, TreeViewEventArgs e)
  2. {
  3. if (tvMovies.SelectedNode.Level == )
  4. {
  5. string time = tvMovies.SelectedNode.Text;
  6. ScheduleItem item = cinema.Schedule.Items[time];
  7. lblMovieName.Text = item.Movie.MovieName;
  8. picMovie.Image = Image.FromFile(item.Movie.Poster);
  9. lblDirector.Text = item.Movie.Director;
  10. lblActor.Text = item.Movie.Actor;
  11. lblType.Text = item.Movie.MovieType;
  12. lblTime.Text = item.Time;
  13. lblPrice.Text = item.Movie.Price.ToString();
  14. lblCalcPrice.Text = "";
  15. //将所有座位设置为黄色
  16. foreach (Seat var in cinema.Seats.Values)
  17. {
  18. var.Color = Color.Yellow;
  19. }
  20. //用已售出票集合循环
  21. foreach (Ticket ticlet in cinema.SoldTickets)
  22. {
  23. //座位集合的Value值
  24. foreach (Seat seat in cinema.Seats.Values)
  25. {
  26. if (ticlet.ScheduleItem.Time == time && ticlet.Seat.SeatNum == seat.SeatNum)
  27. {
  28. seat.Color = Color.Red;
  29. }
  30. }
  31. }
  32. //遍历到Label上
  33. foreach (Seat seat in cinema.Seats.Values)
  34. {
  35. foreach (Label label in tbRoom.Controls)
  36. {
  37. if (label.Text == seat.SeatNum)
  38. {
  39. label.BackColor = seat.Color;
  40. }
  41. }
  42. }
  43.  
  44. }
  45. }

TreeView

  1. private void rdoTickets_CheckedChanged(object sender, EventArgs e)
  2. {
  3. cmbDisCount.Enabled = false;
  4. txtName.Enabled = false;
  5. cmbDisCount.Text = "";
  6. txtName.Text = "";
  7. lblCalcPrice.Text = "";
  8. }

普通票

  1. private void rdoFree_CheckedChanged(object sender, EventArgs e)
  2. {
  3. txtName.Enabled = true;
  4. cmbDisCount.Enabled = false;
  5. cmbDisCount.Text = "";
  6. lblCalcPrice.Text = "";
  7. }

增票

  1. private void rdoStudent_checkedChanged(object sender, EventArgs e)
  2. {
  3. cmbDisCount.Enabled = true;
  4. if (cmbDisCount.Text == "")
  5. {
  6. cmbDisCount.Text = "";
  7. }
  8. txtName.Enabled = false;
  9. txtName.Text = "";
  10. }
  11. private void cmbDisCount_SelectedIndexChanged(object sender, EventArgs e)
  12. {
  13. lblCalcPrice.Text = (Convert.ToInt32(lblPrice.Text) * Convert.ToInt32(cmbDisCount.Text) / ).ToString();
  14. }

学生票

放映计划场次

拒绝LOW ---青鸟影院购票系统的更多相关文章

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

    C#学习经历从基本语法结构到窗体再到面向对象终于走完了.NET初级程序员的道路,做为品德优良好学生更不能落下课程的总结项目-某某鸟<影院售票系统>.用了大概一天半的时间做完这个练手项目,先 ...

  2. OC-《购票系统》

    来个命令行的购票系统 --1-- 需求分析 1.1 分析 1.2 功能分析 1.3 流程分析 --2-- 原型展示 2.1 界面原型 --3-- 系统设计 3.1 类设计 3.2 框架模块设计 --4 ...

  3. C#编写影院售票系统(A project with a higher amount of gold )(2:相关代码)

    此篇文章为项目代码,,,需要项目需求 ,思路分析与窗体效果请访问:http://www.cnblogs.com/lsy131479/p/8367304.html 项目类图: 影院类: using Sy ...

  4. java开发JSP+Servlet+bootstrap开发电影院购票系统 源码

    基于JSP+Servlet+bootstrap开发电影院购票系统:开发环境: Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+Mysql数据库 程序要求:电影院订票系统 用 ...

  5. C#编写影院售票系统(A project with a higher amount of gold )

    项目需求: 影院售票系统 1.基础设施 放映厅 座位集合 2.一个海报------------>放映计划 3.售票设置----------->观影 领域模型:程序中提炼出的实体 4.从电影 ...

  6. java.io.FileNotFoundException异常,一是“拒绝访问”,二是“系统找不到指定路径”

    关于java.io.FileNotFoundException异常 因为这个异常抛出俩种情况:一是“拒绝访问”,二是“系统找不到指定路径” 这里只讲明什么时候抛拒绝访问,什么时候抛找不到指定路径. 原 ...

  7. 努力做一个优秀的programmer [ C# 影院售票系统]

    Cinema.cs类 [Serializable] // 电影院类 public class Cinema { public Cinema() { //二进制 SoldTickets = new Li ...

  8. 「影院售票系统」 · Java Swing + MySQL JDBC开发

    目录 文档说明: 一.语言和环境 二.实现功能 三.数据库设计 四.具体要求及推荐实现步骤 五.注意事项 六.评分标准 实现代码: 一.数据库: 二.Java Swing: com.ynavc.Bea ...

  9. Objective-C 【完整OC项目-购票系统-系统分析-代码实现】

    电影院买票系统/演唱会买票系统 需求分析: 首先我们进入系统,然后会选择买电影票还是买演唱会票,所以这牵扯两个系统的合成.但是我们知道都是买票系统,所以我们可以先创建一个类,属于购买电影票和演唱会的票 ...

随机推荐

  1. dstat命令详解

    dstat 如果系统没有些工具 yum -y install dstat安装下即妥,此软件小巧玲珑,软件包大小只有144k,安装大小660k. 此工具默认情况下会动态显示CPU,disk,net,pa ...

  2. AGC刷题记

    已经刷不了几天了... AGC001 A-BBQ Easy 排个序就过了 B-Mysterious Light 手膜一下,你会发现魔改一下\(gcd\)就行了 C-Shorten Diameter 刚 ...

  3. css3 制作圆环进度条

    引子 移动端做一个 loadiing 加载的图标,跟以往沿用的都不太一样,是一个圆环进度条,圆环进度条也就罢了,还得能用百分比控制. CSS3 实现圆环 demo 刚开始写这个圆环的时候是参照帖子上给 ...

  4. Springboot打包成jar包形式发布

    1.修改配置文件pom.xml 添加打包形式设置为jar形式 <packaging>jar</packaging> 2.在build标签内添加内容如下 finalname为打包 ...

  5. 如何低成本搭建dnslog服务器

    DNSLog,简单来说,就是通过记录对于域名的DNS请求,通过dns请求这个相对"隐蔽"的渠道,来委婉地获取到想要获得的信息. 例如,在一个针对mysql数据库的注入中,如果没有回 ...

  6. git + idea 配置 github设置ssh免登陆方式提交拉取代码

    1.下载安装git,官网:https://git-scm.com/download/win  安装默认配置安装 git2.20版本地址百度网盘地址: 链接:https://pan.baidu.com/ ...

  7. MySQL基础练习02---牛客网

    目录 1. 从titles表中获取title并按照title分组 2.从titles表中获取title并按照title分组,重复的emp_no忽略 3 查找employees表 4 统计平均工资 5 ...

  8. PHP mysqli_get_client_stats() 函数

    定义和用法 mysqli_get_client_stats() 函数返回有关客户端每个进程的统计. 语法 mysqli_get_client_stats(); 返回有关客户端每个进程的统计: < ...

  9. Vue 事件监听实现导航栏吸顶效果(页面滚动后定位)

    Vue 事件监听实现导航栏吸顶效果(页面滚动后定位) Howie126313 关注 2017.11.19 15:05* 字数 100 阅读 3154评论 0喜欢 0 所说的吸顶效果就是在页面没有滑动之 ...

  10. http range request

    range request: 要求实现该功能需要指定下载的实体范围