你的位置:首页 > ASP.net教程

[ASP.net教程]青鸟影院框架及功能点(一)


电影院售票系统的功能:

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

2.影院提供三类影院票:普通票,赠票,学生票(赠票免费,学生票有不同程度折扣)

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

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

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

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

覆盖的技能点:

1.能够分析系统功能并提取对象和类

2.会使用类图理解类关系

3.会使用属性和方法构建类

4.会使用泛型集合

5.会使用枚举

6.面向对象思想、TreeView、

7.会读取文件:循环读取文件,将放映列表存入集合,遍历集合将放映列表填充到TreeView控件

8.会使用文件保存和恢复信息:保存售票信息到文件中,从文件读取售票信息继续售票。

系统开发步骤:

1.明确需求

2.设计类

3.创建项目

4.确定编码顺序:

01:主窗体

02:查看新放映列表

03:查看电影介绍

04:查看影票票价

05:查看放映厅座位

06:购票和打印电影票

07:继续购票

5.测试

界面交互性设计原则

1.美观性

2.易用性

3.友好性

系统类:

类图:

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

座位号(SeatNum):string类型

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

         2.Movie:电影类

           电影名(MovieName):string类型

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

           导演名(Director):string类型

           主演(Actor):string类型

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

           定价(Price):int类型

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

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

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

           票价(Price):int类型

           计算票价的虚方法CalcPrice()

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

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

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

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

           重写父类计算票价CalcPrice

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

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

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

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

           重写父类计算票价CalcPrice()

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

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

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

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

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

         7.Schedule:放映计划类

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

           读取

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

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

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

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

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

           9.MovieType(枚举类型)

          10.TicketUtil:工具类

现在框架这样就搭好了。

现在着重代码:

1.想办法把数据放到TreeView上,就要必须解析

我们在放映时间类中解析

如下:

 public void LoadItems()    {      if (Items == null)      {        Items = new Dictionary<string, ScheduleItem>();      }      //清除      Items.Clear();      = new "ShowList.");      = doc.DocumentElement;      //中间变量      string movieName = null;      string playBill = null;      string director = null;      string actor = null;      string movieType = null;      string price = null;      foreach (in root.ChildNodes)      {        if (item.Name == "Movie")        {          foreach (in item.ChildNodes)          {            switch (child.Name)            {              case "Name":                movieName = child.InnerText;                break;              case "Poster":                playBill = child.InnerText;                break;              case "Director":                director = child.InnerText;                break;              case "Actor":                actor = child.InnerText;                break;              case "Type":                movieType = child.InnerText;                break;              case "Price":                price = child.InnerText;                break;              case "Schedule":                foreach (in child.ChildNodes)                {                  ScheduleItem scheduleItem = new ScheduleItem();                  scheduleItem.Time = scheduleNode.InnerText;                  scheduleItem.Movie.MovieName = movieName;                  scheduleItem.Movie.Poster = playBill;                  scheduleItem.Movie.Actor = actor;                  scheduleItem.Movie.Director = director;                  scheduleItem.Movie.MovieType = (MovieType)Enum.Parse(typeof(MovieType), movieType);                  scheduleItem.Movie.Price = int.Parse(price);                  Items.Add(scheduleItem.Time, scheduleItem);                }                break;            }          }        }

 

2.绑定数据到TreeView控件上:

代码如下:

    public void InitTreeView()    {      // 摘要:      //   禁用任何树视图重绘。      tvlist.BeginUpdate();      tvlist.Nodes.Clear();      //加载// string movieName = null;      TreeNode movieNode = null;      foreach (ScheduleItem item in cinema.Schedule.Items.Values)      {        if (movieNode == null || movieNode.Text != item.Movie.MovieName)        {          movieNode = new TreeNode(item.Movie.MovieName);          tvlist.Nodes.Add(movieNode);        }        movieNode.Nodes.Add(item.Time);      }      //      // 摘要:      //   启用树视图的重绘。      tvlist.EndUpdate();    }

3.在AfterSelect事件中,把数据绑定到右边的控件上,显示信息

  //  //查看电影介绍    private void tvlist_AfterSelect(object sender, TreeViewEventArgs e)    {      //点击时间(场次)时切换回普通票 并清空可能残留的信息      txtGive.Text = "";      cboStudentDivPrice.Text = "";      // GetKey()方法是获取选中场次的时间      GetKey();      //将电影详细信息显示      lblMovieName.Text = cinema.Schedule.Items[key].Movie.MovieName;      lblDirector.Text = cinema.Schedule.Items[key].Movie.Director;      lblActor.Text = cinema.Schedule.Items[key].Movie.Actor;      lblBasePrice.Text = cinema.Schedule.Items[key].Movie.Price.ToString();      lblPlayTime.Text = cinema.Schedule.Items[key].Time;      lblMovieType.Text = cinema.Schedule.Items[key].Movie.MovieType.ToString();      picMovie.Image = Image.FromFile(cinema.Schedule.Items[key].Movie.Poster);      lblGoodPrice.Text = "";

这样就完成了第一步。