Day036 《电影院售票系统》项目全码

第一部分:项目需求

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
项目功能简介如下: 浏览上映影片: 按照图1所示的格式将数据库中的上映影片数据展示出来,并显示“订票”链接。上映影片信息包括:影片名称、上映日期、上映时间、上映影厅。 选择座位: 首先根据选择的上映影片信息中的“上映影厅”显示该影厅的座位情况。未订出的显示为黄色,已订出的显示为红色。可以通过单击座位进行选择。单击黄色座位则座位颜色变成绿色,表示是您选定的座位;单击绿色座位则座位颜色变为黄色,表示取消了选定;可同时选择多个座位;红色座位不能被选定。 影票种类有三种:普通票、团体票和学生票,票价各不同。如果选择团体票则必须同时选定6个(含)以上的座位。 选择好座位和影票种类后点“确定订票”进入“确定订票”页面。 确认订票: 首先根据用户已经选定的上映信息、座位和影票类型显示影票预览。 用户确认无误后,填入会员卡号和会员卡密码,完成结算。用户的会员卡卡号、密码、剩余金额保存在数据库中。如果会员卡号或密码不正确、会员卡余额不足或者选定影票已经被订出,则给出用户明确提示;如果结算成功,则从会员卡中扣除相应金额,重定向到“浏览已订影票”页面。 浏览已订影票: 可以根据会员卡号和会员卡密码查询出该会员订过的所有影票。如果当前时间到影片的开场时间超过2小时,则显示“取消”链接。 取消订票:如果当前时间到影片开场时间超过2小时,则可以取消订票。取消后对应的座位重新变成“未订出”,返还票面金额到会员卡中。该条订票信息状态变成“已取消”。 查看影票: 在“浏览已订影票”页面,点“影票”链接则对应影票。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值