标签:
电影院售票系统的功能:
1.影院每天更新放映列表,系统支持实时查看,包括放映场次时间,电影概况。
2.影院提供三类影院票:普通票,赠票,学生票(赠票免费,学生票有不同程度折扣)
3.允许用户查看某场次座位的售出情况
4.支持购票,并允许用户选择座
5.用户可以选择 场次,影票类型及空闲座位进行购票,并打印电影票。
6.系统可以保存销售情况,并允许对其进行恢复。
覆盖的技能点:
1.能够分析系统功能并提取对象和类
2.会使用类图理解类关系
3.会使用属性和方法构建类
4.会使用泛型集合
5.会使用枚举
6.面向对象思想、TreeView、XML读取、File文件流、泛型集合
7.会读取XML文件:循环读取XML文件,将放映列表存入集合,遍历集合将放映列表填充到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>
读取XML文件获取放映计划集合的LoadItems()方法
8.Cinema:影院类,保存放映计划和座位类
座位集合属性(Seat):自定义泛型集合Dictionary<string,Seat>
放映计划Schedule:Schedule自定义类型
已售出电影票的集合(SoldTicket):自定义泛型集合List<Ticket>
保存和读取售票情况的Save()和Load()方法
9.MovieType(枚举类型)
10.TicketUtil:工具类
现在框架这样就搭好了。
现在着重代码:
1.想办法把数据放到TreeView上,就要必须解析XML文件
我们在放映时间类中解析XML文件:
如下:
public void LoadItems() { if (Items == null) { Items = new Dictionary<string, ScheduleItem>(); } //清除 Items.Clear(); XmlDocument doc = new XmlDocument(); doc.Load("ShowList.xml"); XmlNode root = doc.DocumentElement; //中间变量 string movieName = null; string playBill = null; string director = null; string actor = null; string movieType = null; string price = null; foreach (XmlNode item in root.ChildNodes) { if (item.Name == "Movie") { foreach (XmlNode child 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 (XmlNode scheduleNode 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(); //加载xml文件 // 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 = "";
这样就完成了第一步。
标签:
原文地址:http://www.cnblogs.com/whyhappy/p/5281872.html