拒绝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项目-购票系统-系统分析-代码实现】
电影院买票系统/演唱会买票系统 需求分析: 首先我们进入系统,然后会选择买电影票还是买演唱会票,所以这牵扯两个系统的合成.但是我们知道都是买票系统,所以我们可以先创建一个类,属于购买电影票和演唱会的票 ...
随机推荐
- HashMap源码分析四
HashMap源码在jdk1.8中,改动挺大,里面内容已经变的非常复杂了,后面另起博客分析.jdk1.8以前,HashMap一直是数组加链表的数据结构,在数组的某个下标位置,有多次碰撞,则使用 ...
- Android Vitals各性能指标介绍
Android vitals 简介 谷歌推荐使用Android vitals来帮助开发者提高App的稳定性和性能表现. 作为这个方案的一部分, Play Console提供了Android Vital ...
- linux基础_用户和组的三个文件
1./etc/passwd文件 用户(user)的配置文件,记录用户的各种信息 每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell 2./etc/shadow文件 口令 ...
- k8s部署普罗米修斯
参考链接:https://blog.csdn.net/ywq935/article/details/80818390 https://www.jianshu.com/p/ac8853927528 1. ...
- np中的随机函数
numpy.random.uniform介绍: 1. 函数原型: numpy.random.uniform(low,high,size) ==>也即其他函数是对该函数的进一步封装 功能: ...
- URAL 2052 Physical Education(数位DP)
题目链接:https://vjudge.net/contest/254142#problem/G 参考题解:https://blog.csdn.net/zearot/article/details/4 ...
- 【转】css样式的书写顺序及原理——很重要!
记得刚开始学习前端的时候,每次写css样式都是用到什么就在样式表后添加什么,完全没有考虑到样式属性的书写顺序对网页加载代码的影响.后来逐渐才知道正确的样式顺序不仅易于查看,并且也属于css样式优化的一 ...
- webstorm 格式化代码及常用快捷键 Option+Command+l
mac 下 webstorm 格式化代码的快捷键 Option+Command+l
- NetMQ介绍
NetMQ 是 ZeroMQ的C#移植版本. 一.ZeroMQ ZeroMQ(Ø)是一个轻量级的消息内核,它是对标准socket接口的扩展.它提供了一种异步消息队列,多消息模式,消息过滤(订阅),对 ...
- Appium进阶教程
Monkey的使用 adb shell monkey -p com.lqr.wechat -v 500 > monkey.log adb shell monkey -p com.lqr.wech ...