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

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

C#学习经历从基本语法结构到窗体再到面向对象终于走完了.NET初级程序员的道路,做为品德优良好学生更不能落下课程的总结项目-某某鸟《影院售票系统》。用了大概一天半的时间做完这个练手项目,先上效果截图一张

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

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

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

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

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

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

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

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

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

二.问题分析

1.系统开发步骤

(1)明确需求

(2)设计类

(3)创建项目

(4)确定编码顺序

1.主窗体

2.查看新放映列表

3.查看电影介绍

4.查看影票票价

5.查看放映厅座位

6.购票和打印电影票

7.继续购票

(5)测试

三、类的设计

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个类的代码,根据依赖编写类的顺序,不能完全按照上面顺序

1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSystem.Threading.Tasks;6usingSystem.Drawing;78namespace影院售票系统9{10///<summary>11///保存影院的座位信息12///</summary>13publicclassSeat14{15publicSeat() { }16publicSeat(stringseatNum,Color color)17{18this.SeatNum =seatNum;19this.Color =color;20}21privatestring_seatNum;22///<summary>23///座位号24///</summary>25publicstringSeatNum26{27get{return_seatNum; }28set{ _seatNum =value; }29}30privateColor _color;31///<summary>32///座位卖出状态颜色33///</summary>34publicColor Color35{36get{return_color; }37set{ _color =value; }38}39}40}

Seat

1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSystem.Threading.Tasks;67namespace影院售票系统8{9///<summary>10///电影类11///</summary>12publicclassMovie13{14privatestring_movieName;15///<summary>16///电影名17///</summary>18publicstringMovieName19{20get{return_movieName; }21set{ _movieName =value; }22}23privatestring_poster;24///<summary>25///海报图片名26///</summary>27publicstringPoster28{29get{return_poster; }30set{ _poster =value; }31}32privatestring_director;33///<summary>34///导演名35///</summary>36publicstringDirector37{38get{return_director; }39set{ _director =value; }40}41privatestring_actor;42///<summary>43///主演44///</summary>45publicstringActor46{47get{return_actor; }48set{ _actor =value; }49}5051privateint_price;52///<summary>53///定价54///</summary>55publicintPrice56{57get{return_price; }58set{ _price =value; }59}60///<summary>61///电影类型62///</summary>63publicMovieType MovieType {get;set; }64}65///<summary>66///电影类型,1喜剧2战争3爱情67///</summary>68publicenumMovieType69{70///<summary>71///动作片72///</summary>73Action =0,74///<summary>75///战争片76///</summary>77War =1,78///<summary>79///爱情片80///</summary>81Comedy =282}83}

Movie

1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSystem.Threading.Tasks;6usingSystem.Windows.Forms;7usingSystem.IO;89namespace影院售票系统10{11///<summary>12///电影票父类13///</summary>14publicclassTicket15{16publicTicket() { }17publicTicket(ScheduleItem sch,Seat seat)18{19this.ScheduItem =sch;20this.Seat =seat;21}22privateSeat _seat =newSeat();23///<summary>24///所属座位25///</summary>26publicSeat Seat27{28get{return_seat; }29set{ _seat =value; }30}3132privateint_price;33///<summary>34///票价35///</summary>36publicintPrice37{38get{return_price; }39set{ _price =value; }40}41///<summary>42///放映场次43///</summary>44publicScheduleItem ScheduItem {get;set; }45///<summary>46///计算票价47///</summary>48publicvirtualvoidCalcPrice()49{50this.Price =ScheduItem.Movie.Price;51}52///<summary>53///打印售票信息54///</summary>55publicvirtualvoidPrint()56{57stringinfo =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);58MessageBox.Show(info);59//存到文件中60stringfileName =this.ScheduItem.Time.Replace(":","-")+""+this.Seat.SeatNum+".txt";61FileStream fs =newFileStream(fileName,FileMode.Create);62StreamWriter sw =newStreamWriter(fs);63sw.Write(info);64sw.Close();65fs.Close();66}67///<summary>68///显示当前售票信息69///</summary>70publicvirtualvoidShow()71{72stringinfo =string.Format("已售出!\n普通票!");73MessageBox.Show(info);74}75}76}

Ticket

1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSystem.Threading.Tasks;6usingSystem.Windows.Forms;7usingSystem.IO;8namespace影院售票系统9{10///<summary>11///学生票12///</summary>13publicclassStudentTicket : Ticket14{15publicStudentTicket() { }16publicStudentTicket(ScheduleItem sch, Seat seat,intdiscount)17:base(sch, seat)18{19this.Discount =discount;20}21privateint_discount;22///<summary>23///学生票的折扣24///</summary>25publicintDiscount26{27get{return_discount; }28set{ _discount =value; }29}30///<summary>31///计算学生票价32///</summary>33publicoverridevoidCalcPrice()34{35this.Price =this.ScheduItem.Movie.Price* Discount /10;36}37///<summary>38///打印学生票的售票信息39///</summary>40publicoverridevoidPrint()41{42stringinfo =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);43MessageBox.Show(info);44//存到文件中45stringfileName =this.ScheduItem.Time.Replace(":","-") +""+this.Seat.SeatNum +".txt";46FileStream fs =newFileStream(fileName, FileMode.Create);47StreamWriter sw =newStreamWriter(fs);48sw.Write(info);49sw.Close();50fs.Close();51}52///<summary>53///显示当前售出票信息54///</summary>55publicoverridevoidShow()56{57stringinfo =string.Format("已售出!\n{0}折学生票!",this.Discount);58MessageBox.Show(info);59}60}61}

StudentTicket

1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSystem.Threading.Tasks;6usingSystem.Windows.Forms;7usingSystem.IO;89namespace影院售票系统10{11///<summary>12///赠票13///</summary>14publicclassFreeTicket:Ticket15{16publicFreeTicket() { }17publicFreeTicket(ScheduleItem sch,Seat seat,stringname)18{19this.Seat =seat;20this.CustomerName =name;21this.ScheduItem =sch;22}23privatestring_customerName;24///<summary>25///获得赠票者的名字26///</summary>27publicstringCustomerName28{29get{return_customerName; }30set{ _customerName =value; }31}32///<summary>33///计算票价34///</summary>35publicoverridevoidCalcPrice()36{37this.Price =0;38}39///<summary>40///打印售票信息41///</summary>42publicoverridevoidPrint()43{44stringinfo =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);45MessageBox.Show(info);46//存到文件中47stringfileName =this.ScheduItem.Time.Replace(":","-") +""+this.Seat.SeatNum +".txt";48FileStream fs =newFileStream(fileName, FileMode.Create);49StreamWriter sw =newStreamWriter(fs);50sw.Write(info);51sw.Close();52fs.Close();53}54///<summary>55///显示当前售出票信息56///</summary>57publicoverridevoidShow()58{59MessageBox.Show("已售出!\n赠票!");60}61}62}

FreeTicket

1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSystem.Threading.Tasks;67namespace影院售票系统8{9///<summary>10///影院每天计划放映的场次,保存每场电影的信息11///</summary>12publicclassScheduleItem13{14privatestring_time;15///<summary>16///放映时间17///</summary>18publicstringTime19{20get{return_time; }21set{ _time =value; }22}23privateMovie _movie =newMovie();2425///<summary>26///本场放映的电影27///</summary>28publicMovie Movie29{30get{return_movie; }31set{ _movie =value; }32}33privateList<Ticket> _soldTickets=newList<Ticket>();3435privateDictionary<string, Seat> _seats=newDictionary<string,Seat>();36///<summary>37///本场次的座位状态38///</summary>39publicDictionary<string, Seat>Seats40{41get{return_seats; }42set{ _seats =value; }43}44}45}

ScheduleItem

1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSystem.Threading.Tasks;6usingSystem.Xml;78namespace影院售票系统9{10///<summary>11///放映计划类,保存影院当天的放映计划集合12///</summary>13publicclassSchedule14{15///<summary>16///放映场次17///</summary>18publicDictionary<string, ScheduleItem> Items =newDictionary<string, ScheduleItem>();19///<summary>20///读取XML文件获取放映计划集合21///</summary>22publicvoidLoadItems()23{24Items.Clear();25XmlDocument xml =newXmlDocument();26xml.Load("ShowList.xml");27XmlElement root =xml.DocumentElement;28foreach(XmlNode iteminroot.ChildNodes)29{30Movie movie =newMovie();31movie.MovieName = item["Name"].InnerText;32movie.Poster = item["Poster"].InnerText;33movie.Director = item["Director"].InnerText;34movie.Actor = item["Actor"].InnerText;35switch(item["Type"].InnerText)36{37case"Action":38movie.MovieType =MovieType.Action;39

break;40case"War":41movie.MovieType =MovieType.War;42

break;43case"Comedy":44movie.MovieType =MovieType.Comedy;45

break;46}47movie.Price = Convert.ToInt32(item["Price"].InnerText);48if(item["Schedule"].HasChildNodes)49{50foreach(XmlNode item2initem["Schedule"].ChildNodes)51{52ScheduleItem schItem =newScheduleItem();53schItem.Time =item2.InnerText;54schItem.Movie =movie;55Items.Add(schItem.Time, schItem);56}57}5859}606162}63}64}

Schedule

1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSystem.Threading.Tasks;67namespace影院售票系统8{9///<summary>10///影院类11///</summary>12publicclassCinema13{14privateDictionary<string, Seat> _seats =newDictionary<string, Seat>();15///<summary>16///座位集合17///</summary>18publicDictionary<string, Seat>Seats19{20get{return_seats; }21set{ _seats =value; }22}23privateSchedule _schedule =newSchedule();24///<summary>25///放映计划26///</summary>27publicSchedule Schedule28{29get{return_schedule; }30set{ _schedule =value; }31}32privateList<Ticket> _soldTickets=newList<Ticket>();33///<summary>34///已经售出的票35///</summary>36publicList<Ticket>SoldTickets37{38get{return_soldTickets; }39set{ _soldTickets =value; }40}41///<summary>42///保存售票信息到文件中43///</summary>44publicvoidSave()45{46//Save和Load的代码在窗体的代码实现了47}48///<summary>49///从文件中读取售票信息50///</summary>51publicvoidLoad() { }52}53}

Cinema

1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSystem.Threading.Tasks;67namespace影院售票系统8{9///<summary>10///工具类11///</summary>12publicclassTicketUtil13{14///<summary>15///创建电影票16///</summary>17///<returns></returns>18publicstaticTicket CreateTicket(ScheduleItem sch,Seat seat,intdiscount,stringcustomerName,stringtype)19{20Ticket ticket=null;21switch(type)22{23case"StudentTicket":24ticket =newStudentTicket(sch,seat,discount);25

break;26case"FreeTicket":27ticket =newFreeTicket(sch,seat,customerName);28

break;29default:30ticket =newTicket(sch,seat);31

break;32}33returnticket;34}35}36}

TicketUtil

明天将继续更新-电影院座位的动态绘制、电影信息绑定到窗体中展现出来,也望各路大神出手斧正不合理的代码(不要涉及分层开发,我们在学,以后会用分层开发实现其他的项目)

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航