好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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;

  }

  }

}

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

dy("nrwz");

查看更多关于C#影院售票系统毕业设计(1)的详细内容...

  阅读:90次