拒绝LOW ---青鸟影院购票系统
1.首先我们需要了解这个软件的功能:
1).影院每天更新放映列表,系统支持实时查看,包括电影放映场次的时间;
2).影院提供三类影票:普通票,学生票和赠票;
3).允许用户查看某场次座位的售出情况;
4).允许购票,并允许用户选座;
5).用户可以选择场次、影票类型及空闲座位进行购票,并打印电影票;
6).系统可以保存销售情况,并允许对其进行恢复;
- [Serializable] //可序列化
- public class Seat
- {
- public string SeatNum { get; set; } //座位号
- public System.Drawing.Color Color { get; set; }
- public Seat() { }
- public Seat(string seatnum,System.Drawing.Color color)
- {
- this.SeatNum = seatnum;
- this.Color = color;
- }
- }
影院座位信息
- [Serializable] //可序列化
- public class Schedule
- {
- //放映场次集合
- public Dictionary<string, ScheduleItem> Items = new Dictionary<string, ScheduleItem>();
- //解析XML文件
- public void LoadItems()
- {
- XmlDocument myxml = new XmlDocument();
- myxml.Load("ShowList.xml");
- XmlNode root = myxml.DocumentElement;
- foreach (XmlNode item in root.ChildNodes)
- {
- Movie movie = new Movie();
- foreach(XmlNode node in item.ChildNodes)
- {
- switch (node.Name)
- {
- case "Name":
- movie.MovieName = node.InnerText;
- break;
- case "Poster":
- movie.Poster = node.InnerText;
- break;
- case "Director":
- movie.Director = node.InnerText;
- break;
- case "Actor":
- movie.Actor = node.InnerText;
- break;
- case "Price":
- movie.Price =Convert.ToInt32( node.InnerText);
- break;
- case "Type":
- movie.MovieType = node.InnerText;
- break;
- case "Schedule":
- foreach (XmlNode nodes in node.ChildNodes)
- {
- ScheduleItem sch = new ScheduleItem(nodes.InnerText,movie);
- Items.Add(nodes.InnerText,sch);
- }
- break;
- }
- }
- }
- }
- }
放映场次集合
- //电影票父类
- [Serializable] //可序列化
- public class Ticket
- {
- public ScheduleItem ScheduleItem { get; set; } //放映场次
- public Seat Seat { get; set; } //所属座位对象
- public int Price { get; set; } //票价
- public Ticket()
- {
- this.ScheduleItem = new ScheduleItem();
- this.Seat = new Seat();
- }
- public Ticket(ScheduleItem item,Seat seat)
- {
- this.ScheduleItem = item;
- this.Seat = seat;
- this.Price = CalcPrice();
- }
- //计算票价
- public virtual int CalcPrice()
- {
- this.Price = ScheduleItem.Movie.Price;
- return this.Price;
- }
- //打印售票信息
- public virtual void Print()
- {
- //取文件名
- string fileName = ScheduleItem.Time.Replace(":", "-") + "" + Seat.SeatNum + ".txt";
- //生成文件
- FileStream fs = new FileStream(fileName,FileMode.Create);
- StreamWriter sw = new StreamWriter(fs);
- sw.WriteLine("*****************************");
- sw.WriteLine("\t青鸟影院");
- sw.WriteLine("-----------------------------");
- sw.WriteLine("电影名:\t{0}", ScheduleItem.Movie.MovieName);
- sw.WriteLine("时 间:\t{0}", ScheduleItem.Time);
- sw.WriteLine("座位号:\t{0}", Seat.SeatNum);
- sw.WriteLine("价 格:\t{0}", CalcPrice());
- sw.WriteLine("*****************************");
- sw.WriteLine("\t(a)普通票");
- sw.Close();
- fs.Close();
- }
- //显示售票信息
- public virtual void Show()
- {
- MessageBox.Show("已售出!\n普通票");
- }
- }
电影票父类
- //增票子类
- public class FreeTicket:Ticket
- {
- public string CustomerName { get; set; }
- public FreeTicket() { }
- public FreeTicket(ScheduleItem item,Seat seat,string name):base(item,seat)
- {
- this.CustomerName = name;
- }
- //打印售票信息
- public override void Print()
- {
- //取文件名
- string fileName = ScheduleItem.Time.Replace(":", "-") + "-" + Seat.SeatNum + ".txt";
- //生成文件
- FileStream fs = new FileStream(fileName, FileMode.Create);
- StreamWriter sw = new StreamWriter(fs);
- sw.WriteLine("*****************************");
- sw.WriteLine("\t青鸟影院(增票)");
- sw.WriteLine("-----------------------------");
- sw.WriteLine("电影名:\t{0}", ScheduleItem.Movie.MovieName);
- sw.WriteLine("时 间:\t{0}", ScheduleItem.Time);
- sw.WriteLine("座位号:\t{0}", Seat.SeatNum);
- sw.WriteLine("价 格:\t{0}", this.CustomerName);
- sw.WriteLine("*****************************");
- sw.WriteLine("\t(c)增票");
- sw.Close();
- fs.Close();
- }
- //显示售票信息
- public override void Show()
- {
- MessageBox.Show("已售出!\n{0}增票",this.CustomerName);
- }
- }
增票子类
- 学生子类
- //影院类
- [Serializable] //可序列化
- class Cinema
- {
- public Dictionary<string, Seat> Seats { get; set; } //座位集合
- public Schedule Schedule { get; set; } //放映计划
- public List<Ticket> SoldTickets { get; set; } //已售出电影
- public Cinema()
- {
- Seats = new Dictionary<string, Seat>();
- Schedule = new Schedule();
- SoldTickets = new List<Ticket>();
- }
- //保存
- public void Save()
- {
- BinaryFormatter bf = new BinaryFormatter();
- FileStream fs = new FileStream("YingPianInfo.bin",FileMode.Create);
- bf.Serialize(fs,SoldTickets);
- fs.Close();
- MessageBox.Show("保存成功");
- }
- //读取
- public void Load()
- {
- BinaryFormatter bf = new BinaryFormatter();
- FileStream fs = new FileStream("YingPianInfo.bin", FileMode.Open);
- SoldTickets = (List<Ticket>)bf.Deserialize(fs);
- fs.Close();
- }
- }
影院类
- private void FrmMian_Laod(Object senber, EventArgs e)
- {
- InitSeatNumber(); //初始化座位号
- rdoTickets.Checked = true; //选中普通票
- }
窗体LOAD事件
- private void InitSeatNumber()
- {
- for (int i = ; i < ; i++)
- {
- for (int j = ; j < ; j++)
- {
- lbl = new Label();
- lbl.BackColor = Color.Yellow;
- lbl.Location = new Point( + j * , + i * );
- lbl.Font = new Font("宋体",);
- lbl.Name = (i + ) + "-" + (j + );
- lbl.Size = new Size(,);
- lbl.TabIndex = ;
- lbl.TextAlign = ContentAlignment.MiddleCenter;
- lbl.Text = (i + ) + "-" + (j + );
- //创建一个Label事件
- lbl.Click += new System.EventHandler(lblSeat_Click);
- tbRoom.Controls.Add(lbl);
- Seat seat = new Seat(lbl.Text,Color.Yellow);
- //保存在座位集合里
- cinema.Seats.Add(seat.SeatNum,seat);
- }
- }
- }
创建座位号方法
- private void lblSeat_Click(object sender, EventArgs e)
- {
- if (tvMovies.Nodes.Count == )
- {
- MessageBox.Show("请选择电影");
- return;
- }
- if (rdoStudent.Checked==true && txtName.Text == "")
- {
- MessageBox.Show("请输入增票人姓名!");
- return;
- }
- lbl= sender as Label;
- if (lbl.BackColor == Color.Red)
- {
- MessageBox.Show("已售出");
- }
- else
- {
- if (DialogResult.OK == MessageBox.Show("确定要购买吗?", "提示",
- MessageBoxButtons.OKCancel, MessageBoxIcon.Information))
- {
- string time = tvMovies.SelectedNode.Text;
- ScheduleItem item = cinema.Schedule.Items[time];
- string type = rdoTickets.Checked ? "Ticket" : rdoFree.Checked ? "Free" : "Student";
- Ticket tic = null;
- switch (type)
- {
- case "Ticket":
- tic = new Ticket(item,cinema.Seats[lbl.Text]);
- break;
- case "Free":
- tic = new FreeTicket(item,cinema.Seats[lbl.Text],txtName.Text);
- break;
- case "Student":
- tic = new StudentTicket(item,cinema.Seats[lbl.Text],Convert.ToInt32(cmbDisCount.Text));
- break;
- }
- cinema.SoldTickets.Add(tic);
- tic.Print();
- lbl.BackColor = Color.Red;
- cinema.Seats[lbl.Text].Color = Color.Red;
- }
- }
- }
座位号单击事件
- private void 获取新放映列表ToolStripMenuItem_Click(object sender, EventArgs e)
- {
- BingTreeView();
- }
- private void BingTreeView()
- {
- cinema.Schedule.LoadItems(); //调用解析
- TreeNode root = null;
- foreach (ScheduleItem item in cinema.Schedule.Items.Values)
- {
- //
- if (root == null || root.Text != item.Movie.MovieName)
- {
- //根节点
- root = new TreeNode(item.Movie.MovieName);
- tvMovies.Nodes.Add(root);
- }
- //子节点
- root.Nodes.Add(item.Time);
- }
- }
获取新列表
- private void tvMovies_AfterSelect(object sender, TreeViewEventArgs e)
- {
- if (tvMovies.SelectedNode.Level == )
- {
- string time = tvMovies.SelectedNode.Text;
- ScheduleItem item = cinema.Schedule.Items[time];
- lblMovieName.Text = item.Movie.MovieName;
- picMovie.Image = Image.FromFile(item.Movie.Poster);
- lblDirector.Text = item.Movie.Director;
- lblActor.Text = item.Movie.Actor;
- lblType.Text = item.Movie.MovieType;
- lblTime.Text = item.Time;
- lblPrice.Text = item.Movie.Price.ToString();
- lblCalcPrice.Text = "";
- //将所有座位设置为黄色
- foreach (Seat var in cinema.Seats.Values)
- {
- var.Color = Color.Yellow;
- }
- //用已售出票集合循环
- foreach (Ticket ticlet in cinema.SoldTickets)
- {
- //座位集合的Value值
- foreach (Seat seat in cinema.Seats.Values)
- {
- if (ticlet.ScheduleItem.Time == time && ticlet.Seat.SeatNum == seat.SeatNum)
- {
- seat.Color = Color.Red;
- }
- }
- }
- //遍历到Label上
- foreach (Seat seat in cinema.Seats.Values)
- {
- foreach (Label label in tbRoom.Controls)
- {
- if (label.Text == seat.SeatNum)
- {
- label.BackColor = seat.Color;
- }
- }
- }
- }
- }
TreeView
- private void rdoTickets_CheckedChanged(object sender, EventArgs e)
- {
- cmbDisCount.Enabled = false;
- txtName.Enabled = false;
- cmbDisCount.Text = "";
- txtName.Text = "";
- lblCalcPrice.Text = "";
- }
普通票
- private void rdoFree_CheckedChanged(object sender, EventArgs e)
- {
- txtName.Enabled = true;
- cmbDisCount.Enabled = false;
- cmbDisCount.Text = "";
- lblCalcPrice.Text = "";
- }
增票
- private void rdoStudent_checkedChanged(object sender, EventArgs e)
- {
- cmbDisCount.Enabled = true;
- if (cmbDisCount.Text == "")
- {
- cmbDisCount.Text = "";
- }
- txtName.Enabled = false;
- txtName.Text = "";
- }
- private void cmbDisCount_SelectedIndexChanged(object sender, EventArgs e)
- {
- lblCalcPrice.Text = (Convert.ToInt32(lblPrice.Text) * Convert.ToInt32(cmbDisCount.Text) / ).ToString();
- }
学生票
放映计划场次
拒绝LOW ---青鸟影院购票系统的更多相关文章
- C#总结项目《影院售票系统》编写总结一
C#学习经历从基本语法结构到窗体再到面向对象终于走完了.NET初级程序员的道路,做为品德优良好学生更不能落下课程的总结项目-某某鸟<影院售票系统>.用了大概一天半的时间做完这个练手项目,先 ...
- OC-《购票系统》
来个命令行的购票系统 --1-- 需求分析 1.1 分析 1.2 功能分析 1.3 流程分析 --2-- 原型展示 2.1 界面原型 --3-- 系统设计 3.1 类设计 3.2 框架模块设计 --4 ...
- C#编写影院售票系统(A project with a higher amount of gold )(2:相关代码)
此篇文章为项目代码,,,需要项目需求 ,思路分析与窗体效果请访问:http://www.cnblogs.com/lsy131479/p/8367304.html 项目类图: 影院类: using Sy ...
- java开发JSP+Servlet+bootstrap开发电影院购票系统 源码
基于JSP+Servlet+bootstrap开发电影院购票系统:开发环境: Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+Mysql数据库 程序要求:电影院订票系统 用 ...
- C#编写影院售票系统(A project with a higher amount of gold )
项目需求: 影院售票系统 1.基础设施 放映厅 座位集合 2.一个海报------------>放映计划 3.售票设置----------->观影 领域模型:程序中提炼出的实体 4.从电影 ...
- java.io.FileNotFoundException异常,一是“拒绝访问”,二是“系统找不到指定路径”
关于java.io.FileNotFoundException异常 因为这个异常抛出俩种情况:一是“拒绝访问”,二是“系统找不到指定路径” 这里只讲明什么时候抛拒绝访问,什么时候抛找不到指定路径. 原 ...
- 努力做一个优秀的programmer [ C# 影院售票系统]
Cinema.cs类 [Serializable] // 电影院类 public class Cinema { public Cinema() { //二进制 SoldTickets = new Li ...
- 「影院售票系统」 · Java Swing + MySQL JDBC开发
目录 文档说明: 一.语言和环境 二.实现功能 三.数据库设计 四.具体要求及推荐实现步骤 五.注意事项 六.评分标准 实现代码: 一.数据库: 二.Java Swing: com.ynavc.Bea ...
- Objective-C 【完整OC项目-购票系统-系统分析-代码实现】
电影院买票系统/演唱会买票系统 需求分析: 首先我们进入系统,然后会选择买电影票还是买演唱会票,所以这牵扯两个系统的合成.但是我们知道都是买票系统,所以我们可以先创建一个类,属于购买电影票和演唱会的票 ...
随机推荐
- dstat命令详解
dstat 如果系统没有些工具 yum -y install dstat安装下即妥,此软件小巧玲珑,软件包大小只有144k,安装大小660k. 此工具默认情况下会动态显示CPU,disk,net,pa ...
- AGC刷题记
已经刷不了几天了... AGC001 A-BBQ Easy 排个序就过了 B-Mysterious Light 手膜一下,你会发现魔改一下\(gcd\)就行了 C-Shorten Diameter 刚 ...
- css3 制作圆环进度条
引子 移动端做一个 loadiing 加载的图标,跟以往沿用的都不太一样,是一个圆环进度条,圆环进度条也就罢了,还得能用百分比控制. CSS3 实现圆环 demo 刚开始写这个圆环的时候是参照帖子上给 ...
- Springboot打包成jar包形式发布
1.修改配置文件pom.xml 添加打包形式设置为jar形式 <packaging>jar</packaging> 2.在build标签内添加内容如下 finalname为打包 ...
- 如何低成本搭建dnslog服务器
DNSLog,简单来说,就是通过记录对于域名的DNS请求,通过dns请求这个相对"隐蔽"的渠道,来委婉地获取到想要获得的信息. 例如,在一个针对mysql数据库的注入中,如果没有回 ...
- git + idea 配置 github设置ssh免登陆方式提交拉取代码
1.下载安装git,官网:https://git-scm.com/download/win 安装默认配置安装 git2.20版本地址百度网盘地址: 链接:https://pan.baidu.com/ ...
- MySQL基础练习02---牛客网
目录 1. 从titles表中获取title并按照title分组 2.从titles表中获取title并按照title分组,重复的emp_no忽略 3 查找employees表 4 统计平均工资 5 ...
- PHP mysqli_get_client_stats() 函数
定义和用法 mysqli_get_client_stats() 函数返回有关客户端每个进程的统计. 语法 mysqli_get_client_stats(); 返回有关客户端每个进程的统计: < ...
- Vue 事件监听实现导航栏吸顶效果(页面滚动后定位)
Vue 事件监听实现导航栏吸顶效果(页面滚动后定位) Howie126313 关注 2017.11.19 15:05* 字数 100 阅读 3154评论 0喜欢 0 所说的吸顶效果就是在页面没有滑动之 ...
- http range request
range request: 要求实现该功能需要指定下载的实体范围