影院售票系统(一)

现在学习到了C#的最后一本书,有一个窗体的结业案例。

  1. 先上图
    运行起来是这样的

    点击座位号弹出是否购票

    买了之后座位变红色
    对于老手来说可能so easy;但对我这菜鸟来说有点复杂,主要是面向对象思想与泛型集合的结合。
    话不多说,先上类图

    2.类介绍
    其中包含了10个类
    ticket电影票父类
  //电影票父类public  class Ticket{//放映场次public ScheduleItem ScheduleItem { get; set; }//所属座位对象public Seat Seat { get; set; }//票价public int Price { get; set; }//计算票价的虚方法public virtual void CalcPrice() {Price = ScheduleItem.Movie.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("      xx影院(普通)     ");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}", Price.ToString());sw.WriteLine("***************************");sw.Close();fs.Close();}//显示当前售出票信息的虚方法public virtual void Show() {MessageBox.Show("已售出");}public Ticket(){}public Ticket(ScheduleItem scheduleItem, Seat seat){ScheduleItem = scheduleItem;Seat = seat;}}

学生票子类

 //学生票public class StudentTicket:Ticket{//折扣public int Discount { get; set; }//计算票价public override void CalcPrice(){Price = ScheduleItem.Movie.Price * Discount / 10;}//打印售票信息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("     xx影院 (学生)    ");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}", Price.ToString());sw.WriteLine("***************************");sw.Close();fs.Close();}//显示售出票信息public override void Show(){MessageBox.Show("已售出!\n\n " + Discount + "折学生票!");}public StudentTicket(){}public StudentTicket(ScheduleItem scheduleItem, Seat seat, int discount): base(scheduleItem, seat){Discount = discount;}}

免费票子类

public class FreeTicket:Ticket{public FreeTicket(){}public FreeTicket(ScheduleItem scheduleItem, Seat seat, string customerName): base(scheduleItem, seat){CustomerName = customerName;}//获赠者信息public string CustomerName { get; set; }//计算票价public override void CalcPrice(){Price = 0;}//打印售票信息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("     xx影院 (赠票)");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}", CustomerName);sw.WriteLine("***************************");sw.Close();fs.Close();}//显示售出票信息public override void Show(){MessageBox.Show("已售出!\n\n 赠送者:" + CustomerName);}}

电影类

//电影类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){MovieName = movieName;Poster = poster;Director = director;Actor = actor;MovieType = movieType;Price = price;}}

座位信息类

//座位类:保存座位信息public class Seat{//座位号public string SeatNum { get; set; }//座位卖出状态颜色public Color Color { get; set; }public Seat() { }public Seat(string seatnum,Color c) {this.SeatNum = seatnum;this.Color = c;}}

放映计划类
这里包含了我注释掉的代码

//放映计划类public class Schedule{public Schedule() {//放映场次属性Items = new Dictionary<string, ScheduleItem>();}private Dictionary<string, ScheduleItem> items;public Dictionary<string, ScheduleItem> Items{get{return items;}set{items = value;}}//读取Xml文件的方法public void LoadItems(){XmlDocument doc = new XmlDocument();doc.Load(@"E:\c#\影院售票系统\影院售票系统\ShowList.xml");XmlNode root = doc.DocumentElement;foreach (XmlNode item in root.ChildNodes){foreach (XmlNode child in item["Schedule"]){ScheduleItem sch = new ScheduleItem();sch.Movie.MovieName = item["Name"].InnerText;sch.Movie.Poster = item["Poster"].InnerText;sch.Movie.Director = item["Director"].InnerText;sch.Movie.Price = Convert.ToInt32(item["Price"].InnerText);sch.Movie.Actor = item["Actor"].InnerText;sch.Movie.MovieType = (MovieType)Enum.Parse(typeof(MovieType), item["Type"].InnerText);sch.Time = child.InnerText;items.Add(sch.Time, sch);}}}//读取xml文件获取放映计划集合的方法/*  public void LoadItems() {if (Items == null){Items = new Dictionary<string, ScheduleItem>();}XmlDocument xml = new XmlDocument();xml.Load(@"E:\c#\影院售票系统\影院售票系统\ShowList.xml");XmlElement xe = xml.DocumentElement;foreach(XmlNode xn in xe.ChildNodes){ScheduleItem sc = new ScheduleItem();Movie m = new Movie();m.MovieName = xn["Name"].InnerText;m.Poster=xn["Poster"].InnerText;m.Diretor=xn["Director"].InnerText;m.Actor=xn["Actor"].InnerText;//foreach(MovieType mt in Enum.GetValues(typeof(MovieType)))//{//if (mt.ToString().Equals(xn["Type"].InnerText)) //{m.MovieType=xn["Type"].InnerText;//    }//}              m.Price=Convert.ToInt32(xn["Price"].InnerText);sc.Movie = m;         foreach(XmlNode x in xn.ChildNodes){if (x.Name == "Schedule"){sc.Time=x["Item"].InnerText;}}Items.Add(m.MovieName,sc);}}*/}

影院每天放映计划的场次,保存每场电影信息

  //每天放映场次的计划public  class ScheduleItem{//放映时间属性public string Time { get; set; }//本场所放映电影属性public Movie Movie { get; set; }public ScheduleItem(){Movie = new Movie();}}

影院类

 //影院类public class Cinema{public Cinema(){Seats = new Dictionary<string, Seat>();SoldTickets = new List<Ticket>();Schedule = new Schedule();}public Dictionary<string, Seat> Seats;//放映计划public Schedule Schedule { get; set; }//已售出电影票的集合public List<Ticket> SoldTickets;//保存售票情况public void Save() {FileStream fs = new FileStream("soldTickets.txt", FileMode.OpenOrCreate);StreamWriter writer = new StreamWriter(fs, Encoding.Default);for (int index = 0; index < SoldTickets.Count; index++){Ticket ticket = SoldTickets[index];string info = "|" + ticket.ScheduleItem.Movie.MovieName + "|" + ticket.ScheduleItem.Movie.Poster + "|" +ticket.ScheduleItem.Movie.Director + "|" + ticket.ScheduleItem.Movie.Actor + "|" + ticket.ScheduleItem.Movie.MovieType.ToString() + "|" +ticket.ScheduleItem.Movie.Price + "|" + ticket.ScheduleItem.Time + "|" + ticket.Seat.SeatNum + "|" + ticket.Seat.Color + "|" + ticket.Price + "|";if (ticket is FreeTicket){string customerName = ((FreeTicket)ticket).CustomerName;writer.WriteLine("free" + info + customerName);}else if (ticket is StudentTicket){writer.WriteLine("student" + info + "");}else{writer.WriteLine("" + info + "");}}writer.WriteLine("The End");writer.Close();fs.Close();}//读取售票情况public void Load() {try{//创建一个读取对象                       //路径             //转换格式StreamReader reader = new StreamReader("soldTickets.txt", Encoding.GetEncoding("GB2312"));string line = reader.ReadLine();//声明一个数组 存储 soldTickets.txt 的数据string[] values;//声明一个电影票对象Ticket ticket = null;while (line.Trim() != "The End"){values = line.Split('|');string type = values[0];Movie movie = new Movie(values[1], values[2], values[3], values[4], (MovieType)Enum.Parse(typeof(MovieType), values[5]), int.Parse(values[6]));ScheduleItem scheduleItem = new ScheduleItem();scheduleItem.Time = values[7];scheduleItem.Movie = movie;string color = values[9];string endColor = color.Substring(color.IndexOf("[") + 1, color.Length - 1 - color.IndexOf("[") - 1);Seat seat = new Seat(values[8], Color.FromName(endColor));int discount = 10;switch (type){case "student":discount = 7;ticket = TicketUtil.CreateTicket(scheduleItem, seat, discount, "", type);break;case "free":discount = 0;ticket = TicketUtil.CreateTicket(scheduleItem, seat, discount, values[11], type);break;default:discount = 10;ticket = TicketUtil.CreateTicket(scheduleItem, seat, discount, "", "");break;}this.SoldTickets.Add(ticket);line = reader.ReadLine();}reader.Close();}catch (Exception ex){Console.WriteLine("出错了:" + ex.Message);SoldTickets = new List<Ticket>();}}}

最后是工具类

//工具类public class TicketUtil{//创建电影票的方法public static Ticket CreateTicket(ScheduleItem item, Seat seat, int discount, string customer, string type) {Ticket ticket = null;switch (type){case "student":ticket = new StudentTicket(item, seat, discount);break;case "free":ticket = new FreeTicket(item, seat, customer);break;case "putong":ticket = new Ticket(item, seat);break;}return ticket;}}

C#窗体项目————影院售票系统相关推荐

  1. Oracle影院订票系统,C#实现影院售票系统

    本文实例为大家分享了C#实现影院售票系统的具体代码,供大家参考,具体内容如下 本人认为此项目的难点有4点 1.首先是将解析完的XML文件绑定到TreeView上 2.用代码动态生成座位的label,生 ...

  2. Jsp实现在线影院售票系统

    此系统以MyEclipse作为前台开发工具和MySQL这款强大的数据库专业软件做后台数据库的设计,整个系统用简洁明快的界面展现出来,使操作简单可行,用户使用方便.简洁.本系统采用当今社会比较先进的SS ...

  3. (附源码)计算机毕业设计SSM影院售票系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  4. [附源码]java毕业设计影院售票系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  5. 基于node.js和vue的前后端分离影院售票系统电影院影片管理

    1,项目介绍 基于 node.js和vue 的影院售票系统拥有两种角色,分别为管理员和用户. 用户:热映.即将上映.电影和影院全局搜索.评论.选座.购票.点赞.收藏.订单等一系列购票功能 管理员:用户 ...

  6. asp.net影院售票系统

    编号:646 随着时代的发展,人们在茶前饭后通常会到电影院看最新的影片信息,丰富自己的业余生活.传统的影院订票都是到电影院之后进行购票,但是通常情况下我们不知道影院是否已经满座,我们是否能够顺利的拿到 ...

  7. 影院售票系统java和数据库_影院售票管理系统的设计与实现(SSH,SQLServer)(含录像)...

    影院售票管理系统的设计与实现(SSH,SQLServer)(含录像)(毕业论文15900字,程序代码,SQLServer数据库) 本毕业设计的内容,阐述了实现整个电影票预订系统功能的系统.从实现电影票 ...

  8. java 影院售票系统_java电影院售票系统

    [实例简介] 有简单界面的电影院售票系统,功能有用XML存储电影资源,把已售的电影票信息保存到txt文件中,再以电影票的形式打印到txt文件中. [实例截图] [核心代码] saletickt_sys ...

  9. C#总结项目《影院售票系统》编写总结二

    昨天发布了总结项目的第一篇,需求分析以及类的搭建,今天继续更新,动态绘制控件.票类型的切换以及数据在窗体中的展现. 先从简单的开始,票类型的切换. 分析: 1.当点击普通票时 学生折扣和赠送者是禁用的 ...

最新文章

  1. vue 编译警告 Compiled with 4 warnings
  2. selenium之 webdriver与三大浏览器版本映射表(更新至v2.29)
  3. linux信号处理编程实验报告,Linux编程之信号处理
  4. DL之GRU:GRU算法相关论文、建立过程(基于TF)、相关思路配图集合、TF代码实现
  5. SAP Hybris和Netweaver的集群模式以及集群模式下工作需要解决的问题
  6. 老师说过链表是分水岭,至少得会这些题目
  7. Python对象特殊方法及其用法演示
  8. sketchup ruby编程之绘制梯段
  9. 【BZOJ3191】【JLOI2013】卡牌游戏 [DP]
  10. 操作系统定义、功能、特征、分类介绍
  11. macos10.14系统:MacOS Mojave
  12. [POJ3537]Crosses and Crosses
  13. 高等数学(第七版)同济大学 习题7-4 个人解答
  14. mysql的ndb引擎_NDB Cluster (分布式存储引擎)存储引擎简单简介及Mysql cluster的实现...
  15. 计算机二级MS考试题目占分数
  16. 通过iptables 禁止访问域名方法整合
  17. 最新域名升级是什么?
  18. java 图形 登录_java登录图形界面 - osc_994n5tsc的个人空间 - OSCHINA - 中文开源技术交流社区...
  19. 【目标检测】Anchor Free —— OneNet(不需要NMS)
  20. 【xgboost】xgboost模型的保存与加载

热门文章

  1. Stratified Transformer for 3D Point Cloud Segmentation论文阅读笔记
  2. 用Python爬虫爬取自己要的文章
  3. 值得收藏的15个技术类文章合集
  4. signature=2a6c4d5079868ac4431c3aa7e21fbe40,Arbitration
  5. 安装艾默生流量计后的校准方法
  6. 电商类应用如何快速构建站内搜索和智能推荐能力?
  7. 命令提示符_常用命令1
  8. Word中去除英文单词下面红色波浪线(拼写检查)
  9. 2048游戏python源代码_Python2048游戏的实现
  10. 解决ubuntu18.04没有无线网卡模块_网卡RTL8821CE