影院售票系统设计报告Net项目报告.docx
《影院售票系统设计报告Net项目报告.docx》由会员分享,可在线阅读,更多相关《影院售票系统设计报告Net项目报告.docx(14页珍藏版)》请在冰豆网上搜索。
![影院售票系统设计报告Net项目报告.docx](https://file1.bdocx.com/fileroot1/2022-11/21/576fb08f-d78a-4e41-bd7f-b14eddd5ab35/576fb08f-d78a-4e41-bd7f-b14eddd5ab351.gif)
影院售票系统设计报告Net项目报告
影院售票系统
设计报告
设计人:
指导教师:
组员:
班级:
2009年xx月xx日
一、设计目的
为了研究影院售票系统软件的开发途径和应用方法。
同时它也是进行项目策划、概要设计和详细设计的基础,是维护人员进行内部维护,信息更新,验收和测试的依据。
本需求的购票人是与影院售票系统软件开发有联系的决策人,开发组成人员,扶助开发者,支持本项目的领导和公司人员,软件验证者!
二、需求设计分析
1、使用XML个TreeView显示影院放映列表。
2、使用泛型集合维护有继承关系的电影票对象。
3、座位数可以在系统中指定。
4、点击座位可以购买不同类型的电影票。
5、使用简单工厂模式创建不同类型的电影票。
6、使用多态实现不同类型电影票的价格计算。
7、使用借口实现电影票的打印。
8、使用序列化和反序列化实现销售情况的保存和读取。
2、画出项目功能图。
(宋体、小四、行间距20磅)
三、类设计分析
(1)ScheduleItem:
影院每天计划放映电影的场次,保存每场电影的信息。
放映时间属性(Time):
String类型。
本厂所放电影属性(Movie):
自定义Movie类型。
publicclassScheduleItem
{
publicScheduleItem()
{
movie=newMovie();
}
///
///放映时间
///
privatestringtime;
publicstringTime
{
get{returntime;}
set{time=value;}
}
///
///要放映的电影对象
///
privateMoviemovie;
publicMovieMovie
{
get{returnmovie;}
set{movie=value;}
}
}
(2)Schedule:
放映计划类:
保存电影当天的放映计划集合。
放映场次属性(Items):
自定义泛型集合Dictionary类型。
读取XML文件放映计划集合方法:
Loaditems()。
下面的详细功能有实现代码
(3)Cinema:
电影院类,保存放映计划和座位类。
座位集合属性(Seats):
自定义泛型集合Dictionary类型。
放映计划Schedule:
自定义类Schedule类型。
已售出电影票的集合(SoldTicks):
自定义泛型集合list类型。
保存和读取销售情况的Save和Load方法。
publicclassCinema
{
publicCinema()
{
seats=newDictionary();
soldTickets=newList();
schedule=newSchedule();
}
privateDictionaryseats;
publicDictionarySeats
{
get{returnseats;}
set{seats=value;}
}
privateScheduleschedule;
publicScheduleSchedule
{
get{returnschedule;}
set{schedule=value;}
}
privateListsoldTickets;
publicListSoldTickets
{
get{returnsoldTickets;}
set{soldTickets=value;}
}
publicvoidSave()
{
FileStreamfs=newFileStream("soldTickets.bin",FileMode.Create);
BinaryFormatterbf=newBinaryFormatter();
bf.Serialize(fs,SoldTickets);
fs.Close();
}
publicvoidLoad()
{
try
{
FileStreamfs=newFileStream("soldTickets.bin",FileMode.Open);
BinaryFormatterbf=newBinaryFormatter();
this.SoldTickets=(List)bf.Deserialize(fs);
fs.Close();
}
catch(Exceptionex)
{
ex.ToString();
soldTickets=newList();
}
}
}
(4)TicketFactory:
简单工厂类,根据输入的值,判断创建不同的电影票对象。
创建电影票的方法,返回类型是自定义类Ticket。
publicclassTicketFactory
{
publicstaticTicketCreateTicket(ScheduleItemscheduleItem,Seatseat,
intdiscount,stringcustomerName,stringtype)
{
TicketnewTicket=null;
switch(type)
{
case"student":
newTicket=newStudentTicket(scheduleItem,seat,discount);
break;
case"free":
newTicket=newFreeTicket(scheduleItem,seat,customerName);
break;
case"":
newTicket=newTicket(scheduleItem,seat);
break;
}
returnnewTicket;
}
}
(5)IPrintable:
打印接口,用于实现打印功能。
publicinterfaceIPrintable
{
voidPrint();
}
四、详细设计
我负责获取销售计划功能和销售功能的实现。
1、用户需求流程(宋体、小四、行间距20磅)
1、描绘座位
描绘电影院的座位表,使用标签可以自定义座位数,动态加载控件。
未售出的座位表示为黄色,售出的表示为红色,座位上要显示座位号。
2、获取销售计划
获取:
单击菜单中的“获取新列表”,从XML文件中读入每天最新的放映列表。
将新放映的电影填充到TreeView中,将要放映的电影作为根节点,子节点是具体的放映时间。
publicvoidLoadItems()//从XML文件读取放映列表数据
{
if(items==null)
items=newDictionary();
items.Clear();
XmlDocumentmyXml=newXmlDocument();
myXml.Load("ShowList.xml");
XmlNodefeednode=myXml.DocumentElement;
//中间变量
stringmovieName=null;
stringplayBill=null;
stringdirector=null;
stringactor=null;
stringmovieType=null;
stringprice=null;
foreach(XmlNodenodeinfeednode.ChildNodes)
{
if(node.Name=="Movie")
{
foreach(XmlNodesubNodeinnode.ChildNodes)
{
switch(subNode.Name)
{
case"Name":
movieName=subNode.InnerText;
break;
case"Poster":
playBill=subNode.InnerText;
break;
case"Director":
director=subNode.InnerText;
break;
case"Actor":
actor=subNode.InnerText;
break;
case"Type":
movieType=subNode.InnerText;
break;
case"Price":
price=subNode.InnerText;
break;
case"Schedule":
foreach(XmlNodescheduleNodeinsubNode.ChildNodes)
{
ScheduleItemitem=newScheduleItem();
item.Time=scheduleNode.InnerText;
item.Movie.MovieName=movieName;
item.Movie.Poster=playBill;
item.Movie.Director=director;
item.Movie.Actor=actor;
item.Movie.MovieType=(MovieType)Enum.Parse(typeof(MovieType),movieType);
item.Movie.Price=int.Parse(price);
items.Add(item.Time,item);
}
break;
}
}
}
}
}
继续销售:
每次启动程序单击菜单中的“继续销售”,将序列化后的信息进行反序列化,并将已经销售的座位状况描绘到窗体。
退出程序时,要将当前销售状况保存(使用序列化)。
privatevoidtsmiMovies_Click(objectsender,EventArgse)
{
//判断放映列表是否为空
if(cinema.Schedule.Items.Count==0)
{
cinema.Schedule.LoadItems();
}
InitTreeView();
}
3、销售
选择所售的场次:
选择TreeView的一个场次,将详细信息显示到窗体,销售的座位信息描绘到窗体,未获得放映列表前单击座位,要提示未选择电影。
TreeNodenode=tvMovies.SelectedNode;
if(node==null)return;
if(node.Level!
=1)return;
key=node.Text;
//将详细信息显示
this.lblMovieName.Text=cinema.Schedule.Items[key].Movie.MovieName;
this.lblDirector.Text=cinema.Schedule.Items[key].Movie.Director;
this.lblActor.Text=cinema.Schedule.Items[key].Movie.Actor;
this.lblPrice.Text=cinema.Schedule.Items[key].Movie.Price.ToString();
this.lblTime.Text=cinema.Schedule.Items[key].Time;
this.lblType.Text=cinema.Schedule.Items[key].Movie.MovieType.ToString();
this.picMovie.Image=Image.FromFile(cinema.Schedule.Items[key].Movie.Poster);
this.lblCalcPrice.Text="";
销售:
单击一个座位,默认会销售普通票,提示是是否购买,如果购买,计算价格并打印电影票。
如果选择学生票,要录入本张票的折扣是多少(默认5折),然后计算并打印,如果是赠票,要录入获得赠票者姓名,计算价格并打印。
将所售票的优惠价格显示在优惠价格标签,单击已经卖出的座位提示已经售出。
DialogResultresult;
result=MessageBox.Show("是否购买?
","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Information);
if(result==DialogResult.Yes)
{
cinema.Seats[seatNum].Color=Color.Red;
UpdateSeat();
cinema.SoldTickets.Add(newTicket);
newTicket.CalcPrice();
lblCalcPrice.Text=newTicket.Price.ToString();
newTicket.Print();
}
elseif(result==DialogResult.No)
{
return;
}
}
else
{
MessageBox.Show("已售出.");
}
刷新座位状况:
选择不同场次,座位要刷新为该场销售情况。
打印电影票:
打印电影票要输入不同的文件名(按座位号),不同类型的票打印的效果不同。
普通票:
******************************
青鸟影院
------------------------------
电影名:
功夫
时间:
10-0011-45
座位号:
1-1
价格:
60
******************************
stringfileName=this.ScheduleItem.Time+""+this.Seat.SeatNum+".txt";
FileStreamfs=newFileStream(fileName,FileMode.Create);
StreamWritersw=newStreamWriter(fs);
sw.WriteLine("***************************");
sw.WriteLine("青鸟影院");
sw.WriteLine("---------------------------");
sw.WriteLine("电影名:
\t{0}",this.ScheduleItem.Movie.MovieName);
sw.WriteLine("时间:
\t{0}",this.ScheduleItem.Time);
sw.WriteLine("座位号:
\t{0}",this.Seat.SeatNum);
sw.WriteLine("价格:
\t{0}",this.Price.ToString());
sw.WriteLine("***************************");
sw.Close();
fs.Close();
赠票:
******************************
青鸟影院(赠票)
------------------------------
电影名:
蜘蛛人3
时间:
16-0017-45
座位号:
5-6
姓名:
张三
stringfileName=this.ScheduleItem.Time+""+this.Seat.SeatNum+".txt";
FileStreamfs=newFileStream(fileName,FileMode.Create);
StreamWritersw=newStreamWriter(fs);
sw.WriteLine("***************************");
sw.WriteLine("青鸟影院(赠票)");
sw.WriteLine("---------------------------");
sw.WriteLine("电影名:
\t{0}",this.ScheduleItem.Movie.MovieName);
sw.WriteLine("时间:
\t{0}",this.ScheduleItem.Time);
sw.WriteLine("座位号:
\t{0}",this.Seat.SeatNum);
sw.WriteLine("姓名:
\t{0}",this.CustomerName);
sw.WriteLine("***************************");
sw.Close();
fs.Close();
******************************
学生票:
******************************
青鸟影院(学生)
------------------------------
电影名:
功夫
时间:
10-0011-45
座位号:
4-6
价格:
30
******************************
stringfileName=this.ScheduleItem.Time+""+this.Seat.SeatNum+".txt";
FileStreamfs=newFileStream(fileName,FileMode.Create);
StreamWritersw=newStreamWriter(fs);
sw.WriteLine("***************************");
sw.WriteLine("青鸟影院(学生)");
sw.WriteLine("---------------------------");
sw.WriteLine("电影名:
\t{0}",this.ScheduleItem.Movie.MovieName);
sw.WriteLine("时间:
\t{0}",this.ScheduleItem.Time);
sw.WriteLine("座位号:
\t{0}",this.Seat.SeatNum);
sw.WriteLine("价格:
\t{0}",this.Price.ToString());
sw.WriteLine("***************************");
sw.Close();
fs.Close();
五、系统的安装盘制作说明
安装步骤1.进入安装目录Setup文件夹
2.打开DeBug文件夹
3.双击setup.msi文件进行安装如果是Vista系统请右键一管理员身份安装
六、设计总结
1、谈设计的心得体会。
通过设计影院售票系统,让我们这学期所学的课程得到巩固和良好的吸收,我们对.NET的理解得到进一步提高,完善了一些把握不准确的知识点,加强了对团队合作的理解明白了团队合作的重要性,将这学期所学的知识应用到实践中去,也从中了解到了自己的不足(譬如。
数据库设计的完善问题,细节没得到足够重视等)。
相信吃一垫长一智,我们会更加努力,在以后的学习和工作中吸取教训,让自己做的更好!
2、谈系统设计的亮点。
通过本系统软件,能帮助售票人员利用计算机,快速方便地对影院售票情况,订票情况,剩余座位查询等进行高效的管理。
3、谈系统设计的有待解决的问题。
当然,这次我们设计的系统还是存在着许多的问题,比如说该系统的帐户管理员的问题,添加新电影,修改和删除电影信息的一些功能,都需要我们在以后的学习中进一步完善。