第一部分:项目需求
1、项目名称:电影院售票系统
2、功能概述:主要功能包括在影片列表中选择某一个时段的一场电影、选择座位和一个种类的电影票,系统创建电影票,计算价格并输出电影票价格。
3、具体功能如下:
注:已参考实际情景,在原述要求基础上做了微调和优化;展示用图也出自完成后的效果;在实际做项目的过程中,业务场景也要自己做扩充和预设。
(1)放映列表的展示
效果如下:
(2)不同种类的电影票
影院提供3类电影票:普通票、学生票和电影券(学生票有折扣,电影券输入券号免费)
(3)场次可供选择
用户可以通过选择场次、电影票类型以及空闲座位进行购票。电影票如果已售出,系统将提示此票已售出。
效果如图:
(4)提供异常信息提示
如果用户没有正确选择票的信息将提示异常。如果改票已被售出系统将给出提示。
(5)输出电影票
购票成功,输出(电影名+票的类型+时间+座位号+价格),将电影票输出到指定的txt文件中。
(6)保存销售情况
系统可以对销售情况进行保存,并允许对其进行恢复。
第二部分:设计思路
(一)整体思路及细化实现步骤
- 第一,解析XML文档并存入集合中:Film类→解析XML→ArrayList<Film>;集合的大小,是所有电影的总计场次
- 第二,显示电影信息,显示座位信息
- 第三,提示用户输入(电影名称、场次、座位号、票的种类)同时进行判断;同时对出票信息进行存储
- 第四,显示购票信息
- 第五,将购票信息存入集合,并序列化输出文档
(二)实现难点预估
- 1、解析XML的信息存储到ArrayList<Film>中
- 2、已售座位的排除判断:同一场次的座位不能重复售出;而在不同场次,该座位可以售出。
(三)主要的类
- 1、TheaterSystem.java
这是主代码,功能包括:读取包含电影信息的XML文档,生成用户页面,按步骤提示用户进行购票操作,对输入信息进行反馈和处理,存储销售信息等 - 2、Film.java
这是电影类,每一个电影的每一个场次都是一个单独的对象,其属性包含该电影该场次的所有信息。值得一提的是,座位集合seatList()也作为Film对象的一个属性,以方便对每一独立场次的已售座位进行判断。 - 3、Ticket.java
这是电影票类,用于存储每一张售出票的信息,并实现Serializable接口,以序列化读写。
(四)人机交互的场景描述
- 第一步:提示用户输入电影名称
如用户输入的电影名不在该放映列表中,提示用户当下没有该映票。并给用户重新选择影片或不购票直接退出系统的机会。 - 第二步:提示用户选择电影场次
首先根据用户给到的影片名,给用户呈现场次信息,然后提示用户输入相应序号进行选择。 - 第三步:提示用户选择购票类型
影院提供给用户3种类型的票:1、普通票,无折扣;2、学生票,打八折;3、电影券:免费观看。用户输入券号,与系统中的券号信息库进行匹配,如连续三次输入无效券号,则让用处重新选择购票类型。 - 第四步:根据票的类型执行相应的折扣
折扣信息如上所述。 - 第五步:提示用户输入座位号
首先根据用户选择的影片名和场次,给用户显示该场次所余下的座位,其中已售出座位已标记为“#”。先进行格式和有效性判断,如用户座位信息格式输入错误,则提示输入重新输入;如无误,再进行座位是否已售出的判断,对于已售出座位,则提示座位已售出,同样给予用户重新输入的机会。
对于本次售出的座位,在该影片该场次的seatList()集合中给予处理。 - 第六步:计算本次购票的折扣后价格
根据信息表中的原价和折扣进行计算。 - 第七步:使用本轮购票操作所获取的信息,生成一个Ticket实例,放入ticketList<Ticket>()集合中,实现对用户购票信息的存储。
- 第八步:询问用户是否继续购票。
如继续,则再次执行如上第一到第七步。如退出,显示该客户本次购票所买的所有票的信息。 - 第九步:显示购票信息
第三部分:代码
(一)存放电影信息的XML文档
<?xml version="1.0" encoding="UTF-8"?>
<ShowList>
<Movie>
<Name>七武士</Name>
<Poster>A war</Poster>
<Director>黑泽明</Director>
<Actor>若名</Actor>
<Type>战争</Type>
<Price>60</Price>
<Schedule>
<Item>09:00</Item>
<Item>13:00</Item>
</Schedule>
</Movie>
<Movie>
<Name>老无所依</Name>
<Poster>old man</Poster>
<Director>托马斯</Director>
<Actor>阿汤哥</Actor>
<Type>动作</Type>
<Price>50</Price>
<Schedule>
<Item>11:00</Item>
<Item>15:00</Item>
</Schedule>
</Movie>
</ShowList>
(二)Film类
package cn.nj.Day0621.theatersystem;
import java.util.ArrayList;
public class Film {
private String name = null;
private String poster = null;
private String director = null;
private String actor = null;
private String type = null;
private double price = 0;
private String item = null;
private ArrayList<String> seatList = new ArrayList<String>();
private ArrayLis