名称:演出大厅售票系统
要求:
1.该演出大厅舞台在正中央,四面为观众席,演出前售票
2.设观众席为东南西北四面,每面10排,每排20个座位,共计800个座位,系统要求针对该800个座位提供订票功能
3.关于价格(元):前三排票价为1680,中间三排票价为1280,后三排的票价为980,最后一排价格为680
4.该系统需提供注册和登录功能
4.1注册时需提交姓名、年龄、性别、手机号码、登录密码等信息,注册成功后即可使用手机号码作为登录号--手机号唯一
4.2登录提供管理员登录、注册用户登录和游客登录三种方式,注册用户登录后可进行座位查询操作、座位预定操作
4.3游客没有用户名,只能进行座位查询操作,不能够订票
4.4管理员为系统内置账号,用户名为admin,密码为admin888,管理员登录后可以对指定的座位设为不可购买--“封票”等同于已销售,作为赠送票、工作票、媒体票、置换票
5.系统提供座位查询功能
5.1精确查询:输入指定区域(东南西北)、指定排、指定作为号(1-20),查询该座位是否已被预订
5.2根据票价查询:输入指定票价、指定区域,查询满足条件的未被预订的座位
实现思路:可参考如下方式
1.面向对象的实现过程,封装的良好应用
2.利用MVC的框架实现
3.票(Ticket)的封装 :所属区域、排、号、价格、是否被预订(构造时均为false,被预订成功后该属性变为true),预订者的手机号
4.观众(Viewer)的封装:姓名、年龄、性别、手机号码、登录密码、所订票的集合(ArrayList,集合在这里变成了一个属性)
5.用户操作(ViewerOperator)的封装:
观众集合: ArrayList
观众注册: addViewer(Viewer v)
观众登录(查询) selectViewer(String cellphoneNumber,String pwd) 用手机号码和密码作为查询条件,查询返回Viewer对象
6.票务操作(TicketOperator)的封装:
票集合: ArrayList
初始化: init , 构造800张票的过程
订票:booking(Viewer v,Ticket c) 某个观众选择了某个座位的票,将该票的预订特征变为了true,同时添加到自己的订票集合中
管理员封票:systemBooking(Ticket c) 只能由管理员登录后操作
查询票: 根据区域和位置(例如北面第1排第5个位置)select方法,返回是否被预订的boolean(或者返回目标Ticket)
根据需要重载该select方法
7.用户交互(这一次,要对这个环节动大手术:把视图部分分割开来,大家来体会这样做的好处)
RegisterView类 提供注册的交互信息 public static void showView()
LoginView类: 提供登录的交互信息 public static void showView()
TicketQueryView类:提供查询票务的交互信息 public static void showView()
BookingView类: 提供订票的交互信息 public static void showView()
最终,含有main的视图: BookingSystem
1.注册: RegisterView.showView()
2.登录: LoginView.showView()
2.1 登录成功进行查询: TicketQueryView.showView()
2.2 管理员封票: BookingView.showView()
2.3 普通顾客订票: BookingView.showView()
3.游客: TicketQueryView.showView()
4.退出