C#影院售票系统毕业设计(1)

 C#学习经历从基本语法结构到窗体再到面向对象终于走完了.NET初级程序员的道路,用了大概一天半的时间做完这个练手项目《影院售票系统》,先上效果截图一张

抽出时间做些这个对目前的我来说算不小的项目。

用到的知识点有:面向对象思想、TreeView、XML读取、File文件流、泛型集合,这里面对我来说难度最大的是面向对象与泛型集合的结合,看来学习一门编程语言的难点还是在设计思想上。

再来介绍一下项目需求:在影片列表中选择某个时段的一场电影,单击座位选择一个种类的电影票,并创建电影,计算价格并打印影票信息,然后该座位被置为红色表示已经售出。

影院每天更新放映列表,系统支持实时查看,包括电影放映场次时间、电影概况。

影院提供三类影票:普通票、赠票和学生票(赠票免费;学生票有折扣)

允许用户查看某场次座位的售出情况

支持购票,并允许用户选座

用户可以选择场次、影票类型及空闲座位进行购票,并打印电影票

系统可以保存销售情况,并允许对其进行恢复

一、问题分析

1.系统开发步骤

(1)明确需求

(2)设计类

(3)创建项目

(4)确定编码顺序

1.主窗体

2.查看新放映列表

3.查看电影介绍

4.查看影票票价

5.查看放映厅座位

6.购票和打印电影票

7.继续购票

(5)测试

二、类的设计

献上这9个类的代码,根据依赖编写类的顺序,不能完全按照上面顺序

1.Seat:保存影院的座位信息,主要属性如下

座位号(SeatNum):string类型

座位卖出状态颜色(Color):System.Drawing.Color类型

using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Drawing;

 namespace 影院售票系统
 {
 /// <summary>
 /// 保存影院的座位信息
 /// </summary>
 public class Seat
 {
 public Seat() { }
 public Seat(string seatNum,Color color)
 {
 this.SeatNum = seatNum;
 this.Color = color;
 }
 private string _seatNum;
 /// <summary>
 /// 座位号
 /// </summary>
 public string SeatNum
 {
 get { return _seatNum; }
 set { _seatNum = value; }
 }
 private Color _color;
 /// <summary>
 /// 座位卖出状态颜色
 /// </summary>
 public Color Color
 {
 get { return _color; }
 set { _color = value; }
 }
 }
 }

2.Movie:电影类

电影名(MovieName):string类型

海报图片路径(Poster):string类型

导演名(Director):string类型

主演(Actor):string类型

电影类型(MovieType):MovieType自定义枚举类型

定价(Price):int类型

using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;

 namespace 影院售票系统
 {
 /// <summary>
 /// 电影类
 /// </summary>
 public class Movie
 {
 private string _movieName;
 /// <summary>
 /// 电影名
 /// </summary>
 public string MovieName
 {
 get { return _movieName; }
 set { _movieName = value; }
 }
 private string _poster;
 /// <summary>
 /// 海报图片名
 /// </summary>
 public string Poster
 {
 get { return _poster; }
 set { _poster = value; }
 }
 private string _director;
 /// <summary>
 /// 导演名
 /// </summary>
 public string Director
 {
 get { return _director; }
 set { _director = value; }
 }
 private string _actor;
 /// <summary>
 /// 主演
 /// </summary>
 public string Actor
 {
 get { return _actor; }
 set { _actor = value; }
 }

 private int _price;
 /// <summary>
 /// 定价
 /// </summary>
 public int Price
 {
 get { return _price; }
 set { _price = value; }
 }
 /// <summary>
 /// 电影类型
 /// </summary>
 public MovieType MovieType { get; set; }
 }
 /// <summary>
 /// 电影类型,1喜剧2战争3爱情
 /// </summary>
 public enum MovieType
 {
 /// <summary>
 /// 动作片
 /// </summary>
 Action = 0,
 /// <summary>
 /// 战争片
 /// </summary>
 War = 1,
 /// <summary>
 /// 爱情片
 /// </summary>
 Comedy = 2
 }
 }

3.Ticket:电影票父类,保存电影票信息

放映场次(ScheduleItem):ScheduleItem自定义类

所属座位对象(Seat):Seat自定义类型

票价(Price):int类型

计算票价的虚方法CalcPrice()

打印售票信息的虚方法Print()

显示当前售出票信息的虚方法Show()

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Forms;
 using System.IO;

 namespace 影院售票系统
 {
 /// <summary>
 /// 电影票父类
 /// </summary>
 public class Ticket
 {
 public Ticket() { }
 public Ticket(ScheduleItem sch,Seat seat)
 {
 this.ScheduItem = sch;
 this.Seat = seat;
 }
 private Seat _seat = new Seat();
 /// <summary>
 /// 所属座位
 /// </summary>
 public Seat Seat
 {
 get { return _seat; }
 set { _seat = value; }
 }

 private int _price;
 /// <summary>
 /// 票价
 /// </summary>
 public int Price
 {
 get { return _price; }
 set { _price = value; }
 }
 /// <summary>
 /// 放映场次
 /// </summary>
 public ScheduleItem ScheduItem { get; set; }
 /// <summary>
 /// 计算票价
 /// </summary>
 public virtual void CalcPrice()
 {
 this.Price = ScheduItem.Movie.Price;
 }
 /// <summary>
 /// 打印售票信息
 /// </summary>
 public virtual void Print()
 {
 string info = string.Format("************************************************\n\t青鸟影院\n------------------------------------------------\n电影名:\t{0}\n时间:\t{1}\n座位号:\t{2}\n价格:\t{3}\n************************************************", this.ScheduItem.Movie.MovieName, this.ScheduItem.Time, this.Seat.SeatNum, this.Price);
 MessageBox.Show(info);
 //存到文件中
 string fileName = this.ScheduItem.Time.Replace(":", "-")+" "+this.Seat.SeatNum+".txt";
 FileStream fs = new FileStream(fileName,FileMode.Create);
 StreamWriter sw = new StreamWriter(fs);
 sw.Write(info);
 sw.Close();
 fs.Close();
 }
 /// <summary>
 /// 显示当前售票信息
 /// </summary>
 public virtual void Show()
 {
 string info = string.Format("已售出!\n普通票!");
 MessageBox.Show(info);
 }
 }
 }

4.StudentTicket:学生票子类,继承父类Ticket

学生票的折扣(Discount):int类型

重写父类计算票价CalcPrice

重写父类打印售票信息的Print()

重写父类显示当前出票信息的Show()方法

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Forms;
 using System.IO;
 namespace 影院售票系统
 {
 /// <summary>
 /// 学生票
 /// </summary>
 public class StudentTicket : Ticket
 {
 public StudentTicket() { }
 public StudentTicket(ScheduleItem sch, Seat seat, int discount)
 : base(sch, seat)
 {
 this.Discount = discount;
 }
 private int _discount;
 /// <summary>
 /// 学生票的折扣
 /// </summary>
 public int Discount
 {
 get { return _discount; }
 set { _discount = value; }
 }
 /// <summary>
 /// 计算学生票价
 /// </summary>
 public override void CalcPrice()
 {
 this.Price =this.ScheduItem.Movie.Price* Discount / 10;
 }
 /// <summary>
 /// 打印学生票的售票信息
 /// </summary>
 public override void Print()
 {
 string info = string.Format("************************************************\n\t青鸟影院(学生)\n------------------------------------------------\n电影名:\t{0}\n时间:\t{1}\n座位号:\t{2}\n价格:\t{3}\n************************************************", this.ScheduItem.Movie.MovieName, this.ScheduItem.Time, this.Seat.SeatNum, this.Price);
 MessageBox.Show(info);
 //存到文件中
 string fileName = this.ScheduItem.Time.Replace(":", "-") + " " + this.Seat.SeatNum + ".txt";
 FileStream fs = new FileStream(fileName, FileMode.Create);
 StreamWriter sw = new StreamWriter(fs);
 sw.Write(info);
 sw.Close();
 fs.Close();
 }
 /// <summary>
 /// 显示当前售出票信息
 /// </summary>
 public override void Show()
 {
 string info = string.Format("已售出!\n{0}折学生票!",this.Discount);
 MessageBox.Show(info);
 }
 }
 }

5.FreeTicket:赠票子类,继承父类Ticket

获得赠票者的名字属性(CustomerName):string类型

重写父类计算票价CalcPrice()

重写父类打印售票信息Print()

重写父类显示当前出票信息Show()

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Forms;
 using System.IO;

 namespace 影院售票系统
 {
 /// <summary>
 /// 赠票
 /// </summary>
 public class FreeTicket:Ticket
 {
 public FreeTicket() { }
 public FreeTicket(ScheduleItem sch,Seat seat,string name)
 {
 this.Seat = seat;
 this.CustomerName = name;
 this.ScheduItem = sch;
 }
 private string _customerName;
 /// <summary>
 /// 获得赠票者的名字
 /// </summary>
 public string CustomerName
 {
 get { return _customerName; }
 set { _customerName = value; }
 }
 /// <summary>
 /// 计算票价
 /// </summary>
 public override void CalcPrice()
 {
 this.Price = 0;
 }
 /// <summary>
 /// 打印售票信息
 /// </summary>
 public override void Print()
 {
 string info = string.Format("************************************************\n\t青鸟影院(赠票)\n------------------------------------------------\n电影名:\t{0}\n时间:\t{1}\n座位号:\t{2}\n姓名:\t{3}\n************************************************", this.ScheduItem.Movie.MovieName, this.ScheduItem.Time, this.Seat.SeatNum, this.CustomerName);
 MessageBox.Show(info);
 //存到文件中
 string fileName = this.ScheduItem.Time.Replace(":", "-") + " " + this.Seat.SeatNum + ".txt";
 FileStream fs = new FileStream(fileName, FileMode.Create);
 StreamWriter sw = new StreamWriter(fs);
 sw.Write(info);
 sw.Close();
 fs.Close();
 }
 /// <summary>
 /// 显示当前售出票信息
 /// </summary>
 public override void Show()
 {
 MessageBox.Show("已售出!\n赠票!");
 }
 }
 }

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

放映时间属性(Time):string类型

本场所放映电影属性(Movie):Movie自定义类型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

 namespace 影院售票系统
 {
 /// <summary>
 /// 影院每天计划放映的场次,保存每场电影的信息
 /// </summary>
 public class ScheduleItem
 {
 private string _time;
 /// <summary>
 /// 放映时间
 /// </summary>
 public string Time
 {
 get { return _time; }
 set { _time = value; }
 }
 private Movie _movie = new Movie();

 /// <summary>
 /// 本场放映的电影
 /// </summary>
 public Movie Movie
 {
 get { return _movie; }
 set { _movie = value; }
 }
 private List<Ticket> _soldTickets=new List<Ticket>();

 private Dictionary<string, Seat> _seats=new Dictionary<string,Seat>();
 /// <summary>
 /// 本场次的座位状态
 /// </summary>
 public Dictionary<string, Seat> Seats
 {
 get { return _seats; }
 set { _seats = value; }
 }
 }
 }

7.Schedule:放映计划类

放映场次属性(Items):自定义泛型集合Dictionary<string,ScheduleItem>

读取XML文件获取放映计划集合的LoadItems()方法

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Xml;

namespace 影院售票系统
 {
 /// <summary>
 /// 放映计划类,保存影院当天的放映计划集合
 /// </summary>
 public class Schedule
 {
 /// <summary>
 /// 放映场次
 /// </summary>
 public Dictionary<string, ScheduleItem> Items = new Dictionary<string, ScheduleItem>();
 /// <summary>
 /// 读取XML文件获取放映计划集合
 /// </summary>
 public void LoadItems()
 {
 Items.Clear();
 XmlDocument xml = new XmlDocument();
 xml.Load("ShowList.xml");
 XmlElement root = xml.DocumentElement;
 foreach (XmlNode item in root.ChildNodes)
 {
  Movie movie = new Movie();
  movie.MovieName = item["Name"].InnerText;
  movie.Poster = item["Poster"].InnerText;
  movie.Director = item["Director"].InnerText;
  movie.Actor = item["Actor"].InnerText;
  switch (item["Type"].InnerText)
  {
  case "Action":
  movie.MovieType = MovieType.Action;
  break;
  case "War":
  movie.MovieType = MovieType.War;
  break;
  case "Comedy":
  movie.MovieType = MovieType.Comedy;
  break;
 }
  movie.Price = Convert.ToInt32(item["Price"].InnerText);
 if (item["Schedule"].HasChildNodes)
  {
  foreach (XmlNode item2 in item["Schedule"].ChildNodes)
  {
  ScheduleItem schItem = new ScheduleItem();
  schItem.Time = item2.InnerText;
  schItem.Movie = movie;
  Items.Add(schItem.Time, schItem);
  }
  }

 }

 }
 }
 }

8.Cinema:影院类,保存放映计划和座位类

座位集合属性(Seat):自定义泛型集合Dictionary<string,Seat>

放映计划Schedule:Schedule自定义类型

已售出电影票的集合(SoldTicket):自定义泛型集合List<Ticket>

保存和读取售票情况的Save()和Load()方法

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;

 namespace 影院售票系统
 {
 /// <summary>
 /// 影院类
 /// </summary>
 public class Cinema
 {
 private Dictionary<string, Seat> _seats = new Dictionary<string, Seat>();
 /// <summary>
 /// 座位集合
 /// </summary>
 public Dictionary<string, Seat> Seats
 {
 get { return _seats; }
 set { _seats = value; }
 }
 private Schedule _schedule = new Schedule();
 /// <summary>
 /// 放映计划
 /// </summary>
 public Schedule Schedule
 {
 get { return _schedule; }
 set { _schedule = value; }
 }
 private List<Ticket> _soldTickets=new List<Ticket>();
 /// <summary>
 /// 已经售出的票
 /// </summary>
 public List<Ticket> SoldTickets
 {
 get { return _soldTickets; }
 set { _soldTickets = value; }
 }
 /// <summary>
 /// 保存售票信息到文件中
 /// </summary>
 public void Save()
 {
 //Save和Load的代码在窗体的代码实现了
 }
 /// <summary>
 /// 从文件中读取售票信息
 /// </summary>
 public void Load() { }
 }
 }

9.工具类

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;

 namespace 影院售票系统
 {
 /// <summary>
 /// 工具类
 /// </summary>
 public class TicketUtil
 {
 /// <summary>
 /// 创建电影票
 /// </summary>
 /// <returns></returns>
 public static Ticket CreateTicket(ScheduleItem sch,Seat seat,int discount,string customerName,string type)
 {
 Ticket ticket=null;
 switch (type)
 {
  case "StudentTicket":
  ticket = new StudentTicket(sch,seat,discount);
  break;
  case "FreeTicket":
  ticket = new FreeTicket(sch,seat,customerName);
  break;
  default:
  ticket = new Ticket(sch,seat);
  break;
 }
 return ticket;
 }
 }
}

下篇文章将继续更新,内容有电影院座位的动态绘制、电影信息绑定到窗体中展现出来,希望大家不要走开,有什么地方需要改进的欢迎大家指出,共同探讨进步。

(0)

相关推荐

  • C#超市收银系统设计

    本文实例为大家分享了C#超市收银系统设计的具体代码,供大家参考,具体内容如下 1.登录界面 代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.

  • C#影院售票系统毕业设计(2)

    本文继续更新,动态绘制控件.票类型的切换以及数据在窗体中的展现. 先从简单的开始,票类型的切换. 分析: 1.当点击普通票时 学生折扣和赠送者是禁用的 2.点击赠票时 启用赠送者,禁用学生折扣 3.点击学生票时 启用学生折扣,禁用赠送者 学生折扣ComboBox下拉框可以选择折扣,根据折扣实时折扣计算价格到优惠价上. 需要注意的是: 如果没有选择ListView的电影场次(也就是时间),选择赠票和学生票是没有意义的甚至会引发学生票实时计算时的异常,所以我们要判断  if (this.treeVi

  • C#影院售票系统毕业设计(4)

    回顾:上一篇文章总结了影院售票系统核心部分-售票,整个项目也就完成了2/3了,需求中也要求了对销售信息的保存,今天就继续总结销售信息的保存以及加载销售信息. 分析:退出程序时将已售出票集合中的对象循环写入到文本文件中,读取时循环读入并加入到已售出票集合中,下面看具体实现 public void Save() { //保存的文件 FileStream fs = new FileStream("soldTickets.txt", FileMode.OpenOrCreate); Stream

  • C#实现简单的汽车租赁系统

    最近学习了继承,多态,集合,设计模式,有一个汽车租凭系统,给大家分享一下: 我们首先来看看我们这个系统的效果 1.做一个项目,我们首先对项目进行分析 根据我们最近学的知识,我们可以看出继承,多态,集合,设计模式,我们都能用到 我们把所需要的类和简单模式中的"简单工厂"的工厂准备好 类图: 01.车辆类(父类) using System; using System.Collections.Generic; using System.Linq; using System.Text; usi

  • 基于C#编写经理评分系统

    先写需求: 01.显示员工信息 02.实现项目经理给员工评分的功能 第一步: 建立两个类,员工类和项目经理类 定义属性和方法 员工类:工号.年龄.姓名.人气值.项目经理年度评分.经理评价 项目经理类:ID.年龄.姓名.性别.资历,由于经理可以给员工评分,因此还有评分的方法 先上两张图再说: 查看窗体FrmShow 评分窗体FrmJudge 不说了,上代码 首先是员工类 using System.Text; using System.Threading.Tasks; namespace 经理评分系

  • C#影院售票系统毕业设计(3)

    前一篇文章<C#影院售票系统毕业设计(2)>中总结了动态绘制控件.票类型的切换以及数据在窗体中的展现.今天继续总结! 本文总结项目中最核心的部分--购票.座位颜色状态的改变及场次座位状态的显示. 分析: 1.在选中时间(场次)后更新出座位状态(label实现),售出的为红色,未售出的显示为黄色. 2.已售出提示已经售出并不进行任何操作,未售出的询问是否购买. 3.根据选择的是普通票.赠票.还是学生票分别创建不同的票对象 如果选择赠票则需要检测赠送者否填写 如果选择的是学生票需要检测折扣是否选择

  • C#影院售票系统毕业设计(1)

    C#学习经历从基本语法结构到窗体再到面向对象终于走完了.NET初级程序员的道路,用了大概一天半的时间做完这个练手项目<影院售票系统>,先上效果截图一张 抽出时间做些这个对目前的我来说算不小的项目. 用到的知识点有:面向对象思想.TreeView.XML读取.File文件流.泛型集合,这里面对我来说难度最大的是面向对象与泛型集合的结合,看来学习一门编程语言的难点还是在设计思想上. 再来介绍一下项目需求:在影片列表中选择某个时段的一场电影,单击座位选择一个种类的电影票,并创建电影,计算价格并打印影

  • C#实现影院售票系统

    本文实例为大家分享了C#实现影院售票系统的具体代码,供大家参考,具体内容如下 本人认为此项目的难点有4点 1.首先是将解析完的XML文件绑定到TreeView上 2.用代码动态生成座位的label,生成触发事件Label_Click,俩组放映时间的售出座位是不同的 3.用序列化与反序列化实现代码的多次利用 4.打印票务 创建与本项目相关的10个类 一.首先在放映计划类中创建LoadItems()方法来解析ShowList.xml文件 XmlDocument dic=new XmlDocument

  • 基于Python实现电影售票系统

    目录 一.系统要求 二.用户信息 三.主要代码 四.效果图展示 一.系统要求 电影售票系统程序,应具备以下几点功能: 1.用户认证 系统用户分为用户.管理员两个角色,系统可根据不同用户角色权限进入不同界面,所有用户角色需要通过身份验证才能登录系统进行操作. 2.用户登录 主要实现用户登录系统可查看本人会员信息.购买影票.查看订票.影票退订.修改信息等功能. 3.管理登录 主要实现管理员登录系统可查看会员和管理信息.添加会员.注销会员.查看购票.影票出售.影票退订.查看影票余票和售票.增删管理.增

  • C语言实现影院售票管理系统

    本文实例为大家分享了C语言实现影院售票管理系统的具体代码,供大家参考,具体内容如下 前言 最近刚好在写自己的课设,匆匆忙忙写出来的课设系统,仍有不足,拿出来和大家分享一下,希望能对大家有帮助. 一.概要设计 1.基本信息 数据类型:链表 typedef struct node {     char name[N];                  // 名称     char type[N];                  // 类型     int time;              

  • Python使用面向对象方式创建线程实现12306售票系统

    目前python 提供了几种多线程实现方式 thread,threading,multithreading ,其中thread模块比较底层,而threading模块是对thread做了一些包装,可以更加方便的被使用. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在函数体之外.类变量通常不作为实例变量使用. 数据成员:类变量或者实例变量用于

  • java书店系统毕业设计 用户模块(2)

    本文实例为大家分享了java书店系统毕业设计第二篇,供大家参考,具体内容如下 1.用户管理(user.txt) 字段名和顺序 说明:其中的type为int类型,用来表示操作用户的类型. 1--表示为admin,可以进行全部操作 2--表示为能操作图书模块的人员 3--表示为能操作进货模块的人员 4--表示为能操作销售模块的人员 5--表示为能操作库存模块的人员 type用了枚举实现 package cn.hncu.bookStore.user.common; public enum UserTy

  • 基于C语言实现简单的12306火车售票系统

    程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 录入班次信息 浏览班次信息 按班次号查询 按终点站查询 按余票数量排序保存 售票 退票 更新班次信息 退出系统 所有的班次信息保存在number.dat文件中,排序过后的保存在sort.dat中(.dat是一种二进制文件). 在编写的过程中我觉得在判断火车的状态比较值得深究.这里假设火车主要有四种状态: 1.未发车 2.已发车 3.停止检票 4.停止退票 在程序中,思路是将代表发车时间的字符串转化为整型,再和系统现在的时间进行大小

随机推荐