首页 > 代码库 > 影院售票系统
影院售票系统
首先运行结果如图:
需要一些辅助类
cinema 影院类:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.IO;using System.Runtime.Serialization.Formatters.Binary;namespace FrmMain{ /// <summary> /// 影院类 /// </summary> /// [Serializable] public class Cinema { //座位集合 public Dictionary<string,Seat> Seats { get; set; } //放映计划 public Schedule Schedule { get; set; } //已售出电影票的集合 public List<Ticket> SoldTickets{ get; set; } //保存售票情况的Save()方法 public void Save(List<Ticket> SoldTickets) { FileStream fs = new FileStream("售票情况.din",FileMode.Create); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(fs,SoldTickets); fs.Close(); } //读取情况的Load()方法 public List<Ticket> Load() { FileStream fs = new FileStream("售票情况.din", FileMode.Open); BinaryFormatter bf = new BinaryFormatter(); List<Ticket> List = ((List<Ticket>)bf.Deserialize(fs)); fs.Close(); return List; } public Cinema() { } public Cinema(Schedule Schedule) { this.Schedule = Schedule; Seats = new Dictionary<string, Seat>(); SoldTickets = new List<Ticket>(); } }}
Tickets父类:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.IO;namespace FrmMain{ /// <summary> /// 电影票父类 /// </summary> /// [Serializable] public class Ticket { //放映场次 public ScheduleItem ScheduleItem { get; set; } //所属座位对象 public Seat Seat { get; set; } //票价 public int price { get; set; } public Ticket() { } public Ticket(ScheduleItem ScheduleItem, Seat Seat, int price) { this.ScheduleItem = ScheduleItem; this.Seat = Seat; this.price = price; } //计算票价的虚方法 public virtual void CalcPrice() { } //打印售票信息的虚方法 public virtual void Print() { StringBuilder str = new StringBuilder(); str.AppendLine("**************************\n"); str.AppendLine("\t" + "青鸟影院" + "\n"); str.AppendLine("--------------------------\n"); str.AppendLine(" 电影名:" + ScheduleItem.Movie.MovieName + "\n"); str.AppendLine(" 时间:" + ScheduleItem.Time + "\n"); str.AppendLine(" 座位号:" + Seat.SeatName + "\n"); str.AppendLine(" 价格:" + this.price + "\n"); str.AppendLine("**************************"); FileStream file = new FileStream(ScheduleItem.Movie.MovieName + " " + Seat.SeatName + ".txt", FileMode.Create); StreamWriter writer = new StreamWriter(file); writer.WriteLine(str); writer.Close(); file.Close(); } //显示当前售出票信息的虚方法 public virtual string Show() { string str = "已售出:\n普通票"; return str; } }}
FreeTickets增票子类:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.IO;namespace FrmMain{ /// <summary> /// 赠票子类 /// </summary> /// [Serializable] public class FreeTicket:Ticket { //获得增票者的名字 public string CustomerName { get; set; } public FreeTicket(ScheduleItem ScheduleItem, Seat Seat, int price, string CustomerName) : base(ScheduleItem, Seat, price) { this.CustomerName = CustomerName; } //计算票价的方法 public override void CalcPrice() { this.price = 0; } //打印售票信息的方法 public override void Print() { StringBuilder str = new StringBuilder(); str.AppendLine("**************************\n"); str.AppendLine("\t" + "青鸟影院(赠票)" + "\n"); str.AppendLine("--------------------------\n"); str.AppendLine(" 电影名:" + ScheduleItem.Movie.MovieName + "\n"); str.AppendLine(" 时间:" + ScheduleItem.Time + "\n"); str.AppendLine(" 座位号:" + Seat.SeatName + "\n"); str.AppendLine(" 姓名:" + this.CustomerName + "\n"); str.AppendLine("**************************"); FileStream file = new FileStream(ScheduleItem.Movie.MovieName + " " + Seat.SeatName + ".txt", FileMode.Create); StreamWriter writer = new StreamWriter(file); writer.WriteLine(str); writer.Close(); file.Close(); } //显示当前售出票信息的方法 public override string Show() { string str = "已售出:\n赠送票"; return str; } }}
StudentTickets学生子类:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.IO;namespace FrmMain{ /// <summary> /// 学生票子类 /// </summary> /// [Serializable] public class StudentTicket:Ticket { //学生票的折扣 public int Discount { get; set; } public StudentTicket() { } public StudentTicket(ScheduleItem ScheduleItem, Seat Seat, int price, int Discount) : base(ScheduleItem, Seat, price) { this.Discount = Discount; } //计算票价的方法 public override void CalcPrice() { this.price = Convert.ToInt32(price * (Discount * 0.1)); } //打印售票信息的方法 public override void Print() { StringBuilder str = new StringBuilder(); str.AppendLine("**************************\n"); str.AppendLine("\t" + "青鸟影院(学生)" + "\n"); str.AppendLine("--------------------------\n"); str.AppendLine(" 电影名:" + ScheduleItem.Movie.MovieName + "\n"); str.AppendLine(" 时间:" + ScheduleItem.Time + "\n"); str.AppendLine(" 座位号:" + Seat.SeatName + "\n"); str.AppendLine(" 价格:" + this.price + "\n"); str.AppendLine("**************************"); FileStream file = new FileStream(ScheduleItem.Movie.MovieName + " " + Seat.SeatName + ".txt", FileMode.Create); StreamWriter writer = new StreamWriter(file); writer.WriteLine(str); writer.Close(); file.Close(); } //显示当前售出票信息的方法 public override string Show() { string str = "已售出:\n" + Discount + "折学生票"; return str; } }}
Schedule放映计划类:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Xml;namespace FrmMain{ /// <summary> /// 放映计划类 /// </summary> [Serializable] public class Schedule { //放映场次属性 public Dictionary<string,ScheduleItem> Items { get; set; } public Schedule() { Items = new Dictionary<string, ScheduleItem>(); } //读取xml文件获取放映计划合集的方法 public void LoadItems() { XmlDocument doc = new XmlDocument(); doc.Load("ShowList.xml"); XmlNode root = doc.DocumentElement; foreach (XmlNode item in root) { string type=item["Type"].InnerText; Movie movie = new Movie(item["Name"].InnerText, item["Poster"].InnerText, item["Director"].InnerText, item["Actor"].InnerText, TicketUtil.type(type),Convert.ToInt32( item["Price"].InnerText)); foreach (XmlNode item1 in item["Schedule"]) { ScheduleItem sitem = new ScheduleItem(item1.InnerText,movie); this.Items.Add(item1.InnerText, sitem); } } } }}
ScheduleItem影院计划放映场次类:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace FrmMain{ /// <summary> /// 影院每天放映计划的场次 /// </summary> /// [Serializable] public class ScheduleItem { //放映时间 public string Time { get; set; } //本场所放映电影 public Movie Movie { get; set; } public ScheduleItem() { } public ScheduleItem(string Time, Movie Movie) { this.Time = Time; this.Movie = Movie; } }}
Seat座位类:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Drawing;namespace FrmMain{ /// <summary> /// 影院座位信息 /// </summary> /// [Serializable] public class Seat { //座位号 public string SeatName { get; set; } ///座位卖出状态颜色 public Color Color { get; set; } public Seat() { } public Seat(string SeatName, System.Drawing.Color Color) { this.SeatName = SeatName; this.Color = Color; } }}
TicketUtil工具类:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace FrmMain{ /// <summary> /// 工具类 /// </summary> /// [Serializable] public class TicketUtil { //创建电影票的方法 public static Ticket CreateTicket(string TicketType, ScheduleItem ScheduleItem, Seat Seat, int Discount, string CustomerName) { Ticket ticket = null; Seat seat = new Seat(); seat.SeatName = Seat.SeatName; seat.Color = System.Drawing.Color.Red; switch (TicketType) { case "普通票": ticket = new Ticket(ScheduleItem, seat, ScheduleItem.Movie.Price); break; case "赠票": ticket = new FreeTicket(ScheduleItem, seat, ScheduleItem.Movie.Price, CustomerName); break; case "学生票": ticket = new StudentTicket(ScheduleItem, seat, ScheduleItem.Movie.Price, Discount); ticket.CalcPrice(); break; } return ticket; } //判断电影类型的方法 public static MovieType type(string Type) { MovieType movietype = MovieType.War; switch (Type) { case "Comedy": movietype = MovieType.Comedy; break; case "War": movietype = MovieType.War; break; case "Romance": movietype = MovieType.Romance; break; case "Action": movietype = MovieType.Action; break; case "Cartoon": movietype = MovieType.Cartoon; break; case "Thriller": movietype = MovieType.Thriller; break; case "Adventure": movietype = MovieType.Action; break; } return movietype; } public static Cinema Cinema() { Schedule sd = new Schedule(); sd.LoadItems(); Cinema cinema = new Cinema(sd); return cinema; } }}
Movie电影类:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace FrmMain{ /// <summary> /// 电影类 /// </summary> /// [Serializable] public class Movie { //电影名 public string MovieName { get; set; } //海报图片名 public string Poster { get; set; } //导演名 public string Director { get; set; } //主演 public string Actor { get; set; } //电影类型 public MovieType MovieType { get; set; } //定价 public int Price { get; set; } public Movie() { } public Movie(string MovieName, string Poster, string Director, string Actor, MovieType MovieType, int Price) { this.MovieName = MovieName; this.Poster = Poster; this.Director = Director; this.Actor = Actor; this.MovieType = MovieType; this.Price = Price; } }}
MovieType电影类型枚举类:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace FrmMain{ /// <summary> /// 电影类型枚举类 /// </summary> /// [Serializable] public enum MovieType { //喜剧,战争片,爱情片,动作片,卡通片,惊悚片,冒险片 Comedy,War,Romance,Action,Cartoon,Thriller,Adventure }}
主窗体Main方法中的代码:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace FrmMain{ [Serializable] public partial class FrmMain : Form { public FrmMain() { InitializeComponent(); } //影院对象 Cinema cinema = null; string TicketType = "普通票"; private void FrmMain_Load(object sender, EventArgs e) { cinema = TicketUtil.Cinema(); ShowSeat(7,5); } //生成座位 public void ShowSeat(int seatRow, int seatLine) { for (int i = 0; i < seatRow; i++) { for (int j = 0; j < seatLine; j++) { Label label = new Label(); label.BackColor = Color.Yellow; label.Font = new System.Drawing.Font("宋体", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(123))); label.AutoSize = false; label.Size = new System.Drawing.Size(50, 25); label.Text = (j + 1).ToString() + "-" + (i + 1).ToString(); label.TextAlign = ContentAlignment.MiddleCenter; label.Location = new Point((60 + i * 81), 60 + (j * 51)); label.Click += new System.EventHandler(lblSeat_Click); tabPage1.Controls.Add(label); Seat seat = new Seat((j + 1).ToString() + "-" + (i + 1).ToString(), Color.Yellow); cinema.Seats.Add(seat.SeatName, seat); } } } //更新座位的方法 public void Info() { if (tvList.SelectedNode!=null) { TreeNode tn = tvList.SelectedNode; if (tn.Tag!=null) { foreach (Control item in tabList.Controls) { item.BackColor = Color.Yellow; } foreach (Ticket tk in cinema.SoldTickets) { foreach (Control cl in tabList.Controls) { if (tk.ScheduleItem.Time==((ScheduleItem)tn.Tag).Time&&cl.Text==tk.Seat.SeatName) { cl.BackColor = tk.Seat.Color; } } } } } } private void lblSeat_Click(object sender, EventArgs e) { //购票 string seatNum=((Label)sender).Text.ToString(); if (tvList.SelectedNode!=null) { TreeNode tn = tvList.SelectedNode; if (tn.Tag!=null) { DialogResult result = MessageBox.Show("是否确认购买?","提示",MessageBoxButtons.YesNo); if (result==DialogResult.Yes) { foreach (Seat item in cinema.Seats.Values) { if (item.SeatName==seatNum) { if (((Label)sender).BackColor==Color.Yellow) { int discount = cmbZk.SelectedItem == null ? 0 : Convert.ToInt32(cmbZk.SelectedItem); Ticket tc = TicketUtil.CreateTicket(TicketType,(ScheduleItem)tn.Tag,item,discount,txtZs.Text); if (TicketType=="赠票"&&txtZs.Text!=""||TicketType=="学生票"|| TicketType == "普通票") { cinema.SoldTickets.Add(tc); MessageBox.Show(tc.Show(),"提示",MessageBoxButtons.OK); tc.Print(); cinema.Save(cinema.SoldTickets); Info(); } else { MessageBox.Show("请输入赠票者姓名","提示",MessageBoxButtons.OK); } } else { MessageBox.Show("该座位已售出", "提示", MessageBoxButtons.OK); } } } } } else { MessageBox.Show("请选择场次", "提示", MessageBoxButtons.OK); } } else { MessageBox.Show("请选择电影", "提示", MessageBoxButtons.OK); } } private void tvList_AfterSelect(object sender, TreeViewEventArgs e) { TreeNode tn = tvList.SelectedNode; if (tn.Tag!=null) { lblName.Text = ((ScheduleItem)tn.Tag).Movie.MovieName; lblDy.Text = ((ScheduleItem)tn.Tag).Movie.Director; lblZy.Text = ((ScheduleItem)tn.Tag).Movie.Actor; lblLx.Text = ((ScheduleItem)tn.Tag).Movie.MovieType.ToString(); lblYpj.Text = ((ScheduleItem)tn.Tag).Movie.Price.ToString(); lblSj.Text = ((ScheduleItem)tn.Tag).Time; picZp.ImageLocation = ((ScheduleItem)tn.Tag).Movie.Poster; Info(); } } private void rbZp_CheckedChanged(object sender, EventArgs e) { //赠票 txtZs.Text = ""; cmbZk.Text = null; cmbZk.Enabled = false; txtZs.Enabled = true; if (rbZp.Checked) { TicketType = rbZp.Text; lblYhj.Text = (0).ToString(); } } private void rbXs_CheckedChanged(object sender, EventArgs e) { //学生票 txtZs.Text = ""; cmbZk.Text=(7).ToString(); cmbZk.Enabled = true; txtZs.Enabled = false; if (rbXs.Checked) { TicketType = rbXs.Text; if (tvList.SelectedNode!=null) { TreeNode tn=tvList.SelectedNode; if (tn.Tag!=null) { lblYhj.Text = (((ScheduleItem)tn.Tag).Movie.Price * (Convert.ToInt32(cmbZk.SelectedItem) * 0.1)).ToString(); } } } } private void cmbZk_SelectedIndexChanged(object sender, EventArgs e) { if (tvList.SelectedNode!=null) { TreeNode tn = tvList.SelectedNode; if (tn.Tag!=null) { (((ScheduleItem)tn.Tag).Movie.Price * (Convert.ToInt32(cmbZk.SelectedItem) * 0.1)).ToString(); } } } private void 保存售票信息ToolStripMenuItem_Click(object sender, EventArgs e) { cinema.Save(cinema.SoldTickets); MessageBox.Show("保存成功","提示",MessageBoxButtons.OK); } private void 继续购票ToolStripMenuItem_Click(object sender, EventArgs e) { //反序列化 tvList.Nodes.Clear(); cinema.SoldTickets = cinema.Load(); Infotable(); Info(); } private void Infotable() { //更新treeView节点 string name = null; TreeNode tn = null; foreach (ScheduleItem item in cinema.Schedule.Items.Values) { if (name != item.Movie.MovieName) { name = item.Movie.MovieName; tn = new TreeNode(); tn.Text = item.Movie.MovieName; tvList.Nodes.Add(tn); } tn.Nodes.Add(item.Time).Tag = item; } } private void 获取新放映列表ToolStripMenuItem_Click(object sender, EventArgs e) { //初始化售票出票集合 tvList.Nodes.Clear(); cinema.SoldTickets = new List<Ticket>(); Infotable(); } }}
影院售票系统
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。