Cinema.cs类

    [Serializable]// 电影院类public class Cinema{public Cinema(){//二进制SoldTickets = new List<Ticket>();//时间表Schedule = new Schedule();//座位Seats = new Dictionary<string, Seat>();}public Schedule Schedule { get; set; }public Dictionary<string, Seat> Seats { get; set; }public List<Ticket> SoldTickets { get; set; }// 加载放映场次public void Load(){using (FileStream fs = new FileStream("student.dat",FileMode.Open)){BinaryFormatter bf = new BinaryFormatter();this.SoldTickets = bf.Deserialize(fs) as List<Ticket>;}}// 保存销售信息public void Save(){using (FileStream fs = new FileStream("student.dat",FileMode.Create)){//序例化BinaryFormatter bf = new BinaryFormatter();bf.Serialize(fs, SoldTickets);}}}
}

Common.cs类

 // 电影类型 枚举public enum MovieType{   //喜剧片
        Comedy,//战争片
        War,//爱情片
        Romance,//动作片
        Action,//卡通片
        Cartoon,//惊悚片
        Thriller,//冒险片
        Adventure}
}

FreeTicket.cs类

 [Serializable]// 赠票public class FreeTicket:Ticket{public FreeTicket() { }public FreeTicket(string customerName,ScheduleItem scheduleItem,Seat seat):base(scheduleItem,seat){this.CustomerName = customerName;this.Price = CalcPrice();}//赠票人姓名public string CustomerName { get; set; }// 计算赠票票价public override double CalcPrice(){return 0;}// 打印赠票public override void Print(){string path = (this.ScheduleItem.Time + " " + this.Seat.SeatNum).Replace(":", "-") + ".txt";using (FileStream fs = new FileStream(path, FileMode.Create)){using (StreamWriter sw = new StreamWriter(fs, Encoding.Default)){sw.WriteLine("*******************************");sw.WriteLine("      青鸟影院(赠票)         ");sw.WriteLine("-------------------------------");sw.WriteLine("电影名:" + ScheduleItem.Movie.MovieName);sw.WriteLine("时间:" + this.ScheduleItem.Time);sw.WriteLine("座位号:" + this.Seat.SeatNum);sw.WriteLine("赠送人:"+this.CustomerName);sw.WriteLine("价格:" + this.Price);sw.WriteLine("*******************************");}}}}
}

Movie.cs类

    [Serializable]// 电影类public class Movie{public Movie() { }public Movie(string actor, string director, string movieName, MovieType movieType, string poster, double price){this.Actor = actor;this.Director = director;this.MovieName = movieName;this.MovieType = movieType;this.Poster = poster;this.Price = price;}//导演public string Actor { get; set; }//演员public string Director { get; set; }//电影名public string MovieName { get; set; }//电影类型public MovieType MovieType { get; set; }//海报路径public string Poster { get; set; }//电影价格public double Price { get; set; }}
}

Schedule.cs类

[Serializable]//放映计划类public class Schedule{public Schedule() { Items = new Dictionary<string, ScheduleItem>(); }public Schedule(Dictionary<string, ScheduleItem> items){this.Items = items;}public Dictionary<string, ScheduleItem> Items { get; set; }//加载XML中的放映场次信息public void LoadItems(){try{XmlDocument doc = new XmlDocument();doc.Load(@"Data\ShowList.xml");XmlNode root = doc.DocumentElement;foreach (XmlNode var in root.ChildNodes)//Movie
                {Movie movie = new Movie();foreach (XmlNode var2 in var.ChildNodes)//Name
                    {switch (var2.Name){case "Name":movie.MovieName = var2.InnerText;break;case "Poster":movie.Poster = var2.InnerText;break;case "Director":movie.Director = var2.InnerText;break;case "Actor":movie.Actor = var2.InnerText;break;case "Price":movie.Price = Convert.ToDouble(var2.InnerText);break;case "Type":movie.MovieType = (MovieType)Enum.Parse(typeof(MovieType), var2.InnerText);break;case "Schedule":foreach (XmlNode var3 in var2.ChildNodes)//Item
                                {ScheduleItem item = new ScheduleItem(movie, var3.InnerText);this.Items.Add(var3.InnerText, item);}break;}}}}catch (Exception ex){Console.WriteLine(ex.Message);}}}
}

ScheduleItem.cs类

  [Serializable]// 放映场次public class ScheduleItem{public ScheduleItem() { }public ScheduleItem(Movie movie,string time){this.Movie = movie;this.Time = time;}//电影public Movie Movie { get; set; }//放映时间public string Time { get; set; }}
}

Seat.cs类

   [Serializable]// 座位类public class Seat{public Seat() { }public Seat(string seatNum,Color color){this.SeatNum = seatNum;this.Color = color;}//座位号public string SeatNum { get; set; }//颜色public Color Color { get; set; }}
}

StudentTicket.cs类

    [Serializable]// 学生票public class StudentTicket:Ticket{public StudentTicket() { }public StudentTicket(ScheduleItem scheduleItem,Seat seat,double discount):base(scheduleItem,seat){this.Discount = discount;this.Price = CalcPrice();}//折扣public double Discount { get; set; }// 计算学生票价格public override double CalcPrice(){return this.ScheduleItem.Movie.Price * this.Discount /10;}// 打印学生票public override void Print(){string path = (this.ScheduleItem.Time + " " + this.Seat.SeatNum).Replace(":", "-") + ".txt";using (FileStream fs = new FileStream(path, FileMode.Create)){using (StreamWriter sw = new StreamWriter(fs, Encoding.Default)){sw.WriteLine("*******************************");sw.WriteLine("      青鸟影院(学生票)         ");sw.WriteLine("-------------------------------");sw.WriteLine("电影名:" + ScheduleItem.Movie.MovieName);sw.WriteLine("时间:" + this.ScheduleItem.Time);sw.WriteLine("座位号:" + this.Seat.SeatNum);sw.WriteLine("折扣:"+this.Discount);sw.WriteLine("价格:" + this.Price);sw.WriteLine("*******************************");}}}}
}

Ticket.cs类

 [Serializable]// 电影票父类public class Ticket{public Ticket() { }public Ticket(ScheduleItem scheduleItem,Seat seat){this.ScheduleItem = scheduleItem;this.Seat = seat;this.Price = CalcPrice();}//价格public double Price { get; set; }//放映场次public ScheduleItem ScheduleItem { get; set; }//座位public Seat Seat { get; set; }// 计算价格public virtual double CalcPrice(){return this.ScheduleItem.Movie.Price;}// 打印电影票public virtual void Print(){string path = (this.ScheduleItem.Time + " " + this.Seat.SeatNum).Replace(":", "-") + ".txt";using (FileStream fs = new FileStream(path,FileMode.Create)){using (StreamWriter sw = new StreamWriter(fs,Encoding.Default)){sw.WriteLine("*******************************");sw.WriteLine("          青鸟影院             ");sw.WriteLine("-------------------------------");sw.WriteLine("电影名:"+ScheduleItem.Movie.MovieName);sw.WriteLine("时间:"+this.ScheduleItem.Time);sw.WriteLine("座位号:"+this.Seat.SeatNum);sw.WriteLine("价格:"+this.Price);sw.WriteLine("*******************************");}}}}
}

TicketUtil.cs类

 // 创建电影票工具类// 使用简单工厂模式创建票public class TicketUtil{public static Ticket CreateTicket(ScheduleItem item,Seat seat,string customerName,double discount,string type){Ticket ticket = null;switch (type){case "normal":ticket = new Ticket(item, seat);break;case "free":ticket = new FreeTicket(customerName, item, seat);break;case "student":ticket = new StudentTicket(item, seat, discount);break;}return ticket;}}
}

主窗体代码:

        //实例化影院类(所有存储都是以影院类为基础)Cinema cinema = new Cinema();//存储lable控件信息Label lbl = new Label();//获取新放映列表private void tsmiNew_Click(object sender, EventArgs e){BingTreeView();}//选择内容发生改变private void tvMovies_AfterSelect(object sender, TreeViewEventArgs e){if (this.tvMovies.SelectedNode.Level == 1){string time = this.tvMovies.SelectedNode.Text;ScheduleItem item = cinema.Schedule.Items[time];this.lblActor.Text = item.Movie.Actor;this.lblDirector.Text = item.Movie.Director;this.lblMovieName.Text = item.Movie.MovieName;this.lblPrice.Text = item.Movie.Price.ToString();this.lblTime.Text = item.Time;this.lblType.Text = item.Movie.MovieType.ToString();this.picMovie.Image = Image.FromFile(@"Image\" + item.Movie.Poster);this.lblCalcPrice.Text = item.Movie.Price.ToString();//将所有座位设置为黄色foreach (Seat var in cinema.Seats.Values){var.Color = Color.Yellow;}//在已售出的票中循环判断foreach (Ticket ticket in cinema.SoldTickets){foreach (Seat seat in this.cinema.Seats.Values){//场次相同且座位号相同if (ticket.ScheduleItem.Time == time && ticket.Seat.SeatNum == seat.SeatNum){//更新座位颜色seat.Color = Color.Red; }}}// 将座位颜色更新到Label上显示foreach (Seat seat in cinema.Seats.Values){foreach (Label lbl in tpCinema.Controls){// 座位号相同证明是对应Labelif (lbl.Text == seat.SeatNum){lbl.BackColor = seat.Color;}}}}}//点击普通票private void rdoNormal_CheckedChanged(object sender, EventArgs e){this.cmbDisCount.Enabled = false;this.txtCustomer.Enabled = false;this.lblCalcPrice.Text = lblPrice.Text;}//点击赠票private void rdoFree_CheckedChanged(object sender, EventArgs e){this.txtCustomer.Enabled = true;this.cmbDisCount.Enabled = false;this.lblCalcPrice.Text = lblPrice.Text;}//点击学生票private void rdoStudent_CheckedChanged(object sender, EventArgs e){if (this.lblPrice.Text != ""){this.cmbDisCount.Enabled = true;this.txtCustomer.Enabled = false;this.lblCalcPrice.Text = (Convert.ToDouble(this.lblPrice.Text) * Convert.ToDouble(this.cmbDisCount.Text) / 10).ToString();}}//加载private void FrmCinema_Load(object sender, EventArgs e){this.rdoNormal.Checked = true;this.cmbDisCount.SelectedIndex = 0;InitSeats(5, 7);skinEngine1.SkinFile = "Wave.ssk"; }//选择折扣变化:private void cmbDisCount_SelectedIndexChanged(object sender, EventArgs e){if (this.lblPrice.Text != ""){this.lblCalcPrice.Text = (Convert.ToDouble(this.lblPrice.Text) * Convert.ToDouble(this.cmbDisCount.Text) / 10).ToString();}}// 获取放映列表绑定到TreeViewprivate void BingTreeView(){this.tvMovies.Nodes.Clear();//加载XML
            cinema.Schedule.LoadItems();//绑定到TreeViewTreeNode root = null;foreach (ScheduleItem var in cinema.Schedule.Items.Values){if (root == null || root.Text != var.Movie.MovieName){//根节点root = new TreeNode(var.Movie.MovieName);this.tvMovies.Nodes.Add(root);}//子节点root.Nodes.Add(var.Time);}}// 初始化座位private void InitSeats(int row, int col){for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){Label lb = new Label();lb.BackColor = Color.Yellow;lb.Location = new Point(20 + j * 100, 50 + i * 70);lb.Font = new Font("Courier New", 11);lb.Name = (i + 1) + "-" + (j + 1);lb.Size = new Size(80, 30);lb.TabIndex = 0;lb.Text = (i + 1) + "-" + (j + 1);lb.TextAlign = ContentAlignment.MiddleCenter;lb.Click += lb_Click;tpCinema.Controls.Add(lb);//添加座位对象到CInema的Seats集合中Seat seat = new Seat(lb.Text, Color.Yellow);cinema.Seats.Add(seat.SeatNum, seat);}}}private void lb_Click(object sender, EventArgs e){if (this.tvMovies.Nodes.Count == 0 || this.tvMovies.SelectedNode.Level ==0){return;}lbl = sender as Label;if (lbl.BackColor == Color.Red){MessageBox.Show("已售出");}else{if (DialogResult.OK == MessageBox.Show("是否购买", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question)){//取得放映时间string time = this.tvMovies.SelectedNode.Text;//使用时间作为键找到放映场次对象ScheduleItem item = cinema.Schedule.Items[time];string type = string.Empty;type = rdoNormal.Checked ? "normal" : rdoFree.Checked ? "free" : "student";Ticket ticket = TicketUtil.CreateTicket(item, cinema.Seats[lbl.Text], txtCustomer.Text, Convert.ToDouble(cmbDisCount.Text), type);//添加到已销售的集合中
                    cinema.SoldTickets.Add(ticket);//出票
                    ticket.Print();//更新颜色lbl.BackColor = Color.Red;cinema.Seats[lbl.Text].Color = Color.Red;}}}//保存private void tsmiSave_Click(object sender, EventArgs e){cinema.Save();MessageBox.Show("保存成功");}//继续销售private void tsmiMovies_Click(object sender, EventArgs e){cinema.Load();// 将座位颜色更新到Label上显示foreach (Seat seat in cinema.Seats.Values){foreach (Label lbl in tpCinema.Controls){// 座位号相同证明是对应Labelif (lbl.Text == seat.SeatNum){lbl.BackColor = seat.Color;}}}}private void tsmiExit_Click(object sender, EventArgs e){this.Close();}

转载于:https://www.cnblogs.com/SFHa/p/8920004.html

努力做一个优秀的programmer [ C# 影院售票系统]相关推荐

  1. 如何做一个基于python旅游景点景区售票系统毕业设计毕设作品(Django框架)

    分析架构 我们开发系统,常规有两个架构,一个BS架构(浏览器/服务器模式),一个CS(客户端/服务器端模式):基于Python(Django框架)的网站开发属于B/S架构(即浏览器和服务器架构模式), ...

  2. 如何做一个优秀的销售代表

    如何做一个优秀的销售代表 销售代表的首要任务是销售,如果没有销售,产品就没有希望,企业也没有希望.同时,销售代表的工作还有拓展,只有销售也是没有希望的,因为你销售出去的是产品或服务,而只有不断拓展市场 ...

  3. 一个form 如何做两次提交_如何做一个优秀的家长

    如何做一个优秀的家长 文|潍坊坊子崇文中学 父母对待孩子无外乎三种情况:一是事事管.时时管,做了很多事,效果却不好:二是什么都不管,什么都不做,放任自流,不闻不问,结果更不好:三是也管但不全管,做得不 ...

  4. IT外企那点儿事(7):做一个优秀的基层 (转)

    转自:http://topic.csdn.net/u/20100524/09/635885a9-e075-4eac-b63a-2f75015d0c39.html?69859 1-7在博客中的链接如下, ...

  5. 怎样做一个优秀的班主任

    怎样做一个优秀的班主任 班主任经验交流材料 宁剑峰 有一本书这样到,老师分四种类型:智慧爱心型,爱心操劳型,劳良心型,良心应付型.班主任都有这样的体验:班主任在,学生能做好,是一个基本合格的班主任:班 ...

  6. 怎样做一个优秀的(懒惰的)系统管理员

    原贴:http://linux.chinaunix.net/news/2008/06/27/1013460.shtml 怎样做一个优秀的(懒惰的)系统管理员   来源: Linux论坛 日期: 200 ...

  7. 怎样做一个优秀的程序员?这10个问题ChatGPT这样说 ……

    本文目录 1 怎样做一个优秀的程序员? 2 怎样成为优秀的架构师? 3 怎样写容易阅读的代码? 4 怎样做项目管理? 5 怎样学习计算机程序设计? 6 怎样提升个人影响力? 7 怎样提升认知? 8 程 ...

  8. 教你做一个优秀的项目经理

    教你做一个优秀的项目经理 如何做个好的项目经理?项目经理应该做什么?不应该做什么?这个问题涉及的范围很广,我只能就以前的一些项目经验谈谈个人的体会.难免有以偏盖全的地方,还请大家多提意见. 1.项目经 ...

  9. 如何做一个优秀的团队成员

    如何做一个优秀的团队成员 团队是由基层和管理层人员组成的一个共同体,它合理利用每一个成员的知识和技能协同工作,解决问题,达到共同的目标. 1. 具备自我管理的能力:作为团队成员应该清楚 了解自己的定位 ...

  10. 如何做一个优秀的数据分析项目?

    上一篇我们普及了[数据分析项目,是什么?为什么我没做过?].今天我们系统讲解一下:如何做一个优秀的数据分析项目.首先大家要明白,并不是所有的项目,都需要找一个万人大会堂,拉着横幅,董事长总经理轮流上台 ...

最新文章

  1. RxJava 内置多种用于调度的线程类型
  2. python 正则学习笔记
  3. 脚印:关于错误编码的管理的一些思考
  4. (web前端笔记)2020-12-23(ajax)
  5. google 浏览器默认打开控制台_前端开发调试:浏览器console方法总结
  6. vue取通过key取value_彻底理解Vue中的Watcher、Observer、Dep
  7. 图像识别(1)---验证码篇
  8. tensorflow随笔——交叉熵公式推导
  9. 网络互撕是群体极化的典型症状
  10. 转载:数据库索引的底层原理
  11. 30岁的职场危机,人生下半场的困局
  12. 超越竞争对手的秘密武器-技术重用
  13. 主成分分析(PCA)及其可视化——python
  14. 国家气象站逐日数据据v3.0 提取转成SWAT所需要格式
  15. 海马玩模拟器启动失败,start machine failed! error code = 3和error code=21
  16. qq空间显示手机型号android,手机QQ空间说说怎么显示手机型号
  17. javaScript-力扣-题库-11. 盛最多水的容器
  18. Solid Sphere Inc.:智能手机原创恶搞App“Takeshobo Quest - POP TEAM EPIC ASSAULTS”
  19. 安装任何版本ActiveSync都出错原因
  20. 数据分析可视化之模型介绍

热门文章

  1. 基于SSM的运动会管理系统
  2. 管家婆破解版7.1 软件下载
  3. ulipad双击打不开 解决
  4. 局域网IP搜索小工具
  5. 开源hr系统 java_微人事-前后端分离的人力资源管理系统-江南一点雨
  6. [UnityShader3]去色效果
  7. Linux操作系统常用基本命令
  8. JAVA8免费下载安装(win10)
  9. java 如何查询数据库_java怎么查询数据库
  10. Mybatis教程(实战看这一篇就够了)