拒绝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项目-购票系统-系统分析-代码实现】
电影院买票系统/演唱会买票系统 需求分析: 首先我们进入系统,然后会选择买电影票还是买演唱会票,所以这牵扯两个系统的合成.但是我们知道都是买票系统,所以我们可以先创建一个类,属于购买电影票和演唱会的票 ...
随机推荐
- GPU Debugger
https://gpuopen.com/presentations/2019/digital-dragons-2019-make-your-game-friendly.pdf https://grap ...
- BZOJ 3932: [CQOI2015]任务查询系统 (主席树板题)
就是裸的主席树,差分之后排序插入主席树就行了. 注意主席树查询的时候叶子节点要特判,因为本身是有size的 还有要开longlong CODE #include <cctype> #inc ...
- Codeforces Round #587 (Div. 3) D. Swords
链接: https://codeforces.com/contest/1216/problem/D 题意: There were n types of swords in the theater ba ...
- Markdown使用教程(转载收藏)
基础语法 标题 Markdown支持6种级别的标题,对应html标签 h1 ~ h6 # h1 ## h2 ### h3 #### h4 ##### h5 ###### h6 以上标记效果如下: h1 ...
- 爬当当网上python书籍的图片
1.分析网页代码,获取图片下载连接:http://img3m4.ddimg.cn/20/11/23473514-1_b_5.jpg 2. python实现代码 import os import re ...
- prev([expr]) 取得一个包含匹配的元素集合中每一个元素紧邻的前一个同辈元素的元素集合。
prev([expr]) 概述 取得一个包含匹配的元素集合中每一个元素紧邻的前一个同辈元素的元素集合. 可以用一个可选的表达式进行筛选.只有紧邻的同辈元素会被匹配到,而不是前面所有的同辈元素.直线电机 ...
- BZOJ 4070: [Apio2015]雅加达的摩天楼 根号分治+spfa
此题卡Dijkstra... Code: #include <bits/stdc++.h> #define N 30005 #define M 4000000 #define ll lon ...
- (八)树控件(Tree Control),标签控件(tab control)
树控件 基于对话框创建工程 // 01_TreeCtrlDlg.cpp : 实现文件 // #include "stdafx.h" #include "01_TreeCt ...
- 2018CCPC桂林站JStone Game
题目描述 Alice and Bob are always playing game! The game today is about taking out stone from the stone ...
- 如何使用PHP排序key为字母+数字的数组
你还在为如何使用PHP排序字母+数字的数组而烦恼吗? 今天有个小伙伴在群里问: 如何将一个key为字母+数字的数组按升序排序呢? 举个例子: $test = [ 'n1' => 22423, ' ...