IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 85-Java阶段实战案例:模拟电影购票系统 -> 正文阅读

[开发工具]85-Java阶段实战案例:模拟电影购票系统

阶段项目实战

一、奥利给电影购票系统简介

在这里插入图片描述


  • 不是真的开发成一个完美的,可以上线的电影购票系统的项目,只是模拟电影购票系统的功能开发,综合起之前所学的知识



二、项目功能演示

1、首页

----------------奥利给电影系统首页----------------
1、用户登录
2、商家用户注册
3、普通用户注册
4、退出系统
请您输入选项:
1
----------------用户登录界面----------------
您还没有注册!请先注册~~
----------------奥利给电影系统首页----------------
1、用户登录
2、商家用户注册
3、普通用户注册
4、退出系统
请您输入选项:
2
----------------商家用户注册界面----------------
请您输入登录名称:
zy888
请您输入登录密码:
abc123
请您输入真实姓名:
赵云
请您输入联系方式:
110110
请您输入账户余额:
5000
请您输入电影院名称:
三国国际影院
请您输入电影院地址:
火星风云路99号111栋109房间
请您输入性别:
男
尊敬的赵云先生,恭喜您,注册成功啦!
----------------奥利给电影系统首页----------------
1、用户登录
2、商家用户注册
3、普通用户注册
4、退出系统
请您输入选项:
2
----------------商家用户注册界面----------------
请您输入登录名称:
zj888
请您输入登录密码:
abc123
请您输入真实姓名:
甄姬
请您输入联系方式:
120120
请您输入账户余额:
8000
请您输入电影院名称:
神马国际影院
请您输入电影院地址:
水星天水路89号4A11栋201房间
请您输入性别:
女
尊敬的甄姬女士,恭喜您,注册成功啦!
----------------奥利给电影系统首页----------------
1、用户登录
2、商家用户注册
3、普通用户注册
4、退出系统
请您输入选项:
3
----------------普通用户注册界面----------------
请您输入登录名称:
zy888
登录名称已被占用!
您是否继续?y/n
y
请您输入登录名称:
zj888
登录名称已被占用!
您是否继续?y/n
y
请您输入登录名称:
ljj666
请您输入登录密码:
123123
请您输入真实姓名:
林俊杰
请您输入联系方式:
898989
请您输入账户余额:
5000
请您输入性别:
第三方
您输入的性别有误!
您是否继续?y/n
y
请您输入性别:
男
尊敬的林俊杰先生,恭喜您,注册成功啦!
----------------奥利给电影系统首页----------------
1、用户登录
2、商家用户注册
3、普通用户注册
4、退出系统
请您输入选项:
3
----------------普通用户注册界面----------------
请您输入登录名称:
zj666
请您输入登录密码:
123123
请您输入真实姓名:
张杰
请您输入联系方式:
787878
请您输入账户余额:
7500
请您输入性别:
f
您输入的性别有误!
您是否继续?y/n
y
请您输入性别:
男
尊敬的张杰先生,恭喜您,注册成功啦!
----------------奥利给电影系统首页----------------
1、用户登录
2、商家用户注册
3、普通用户注册
4、退出系统
请您输入选项:



2、商家

----------------奥利给电影系统首页----------------
1、用户登录
2、商家用户注册
3、普通用户注册
4、退出系统
请您输入选项:
1
----------------用户登录界面----------------
请您输入登录名称:
zy888
请您输入登录密码:
abc123
欢迎赵云先生进入奥利给电影系统~~
----------------商家操作界面----------------
1、查看详情
2、上架电影
3、下架电影
4、修改电影
5、退出登录
请您输入选项:
1
----------------商家详情界面----------------
三国国际影院		电话:110110		地址:火星风云路99号111栋109房间		账户余额:5000.0
您的电影院当前无片可放映~~
1、查看详情
2、上架电影
3、下架电影
4、修改电影
5、退出登录
请您输入选项:
2
----------------商家上架电影界面----------------
请您输入新影片名称:
新三国
请您输入新影片主演:
赵云
请您输入新影片时长:
120
请您输入新影片票价:
11
请您输入新影片票数:
2000
请您输入新影片放映时间(例:1999-09-22 13:33:22):
2011:3232
您输入的日期时间格式有误!!
您是否继续?y/n
y
请您输入新影片放映时间(例:1999-09-22 13:33:22):
2011-12-12 12:12:00
您已成功上架《新三国》这部电影!
1、查看详情
2、上架电影
3、下架电影
4、修改电影
5、退出登录
请您输入选项:
2
----------------商家上架电影界面----------------
请您输入新影片名称:
三国演义
请您输入新影片主演:
刘备
请您输入新影片时长:
140
请您输入新影片票价:
42
请您输入新影片票数:
200
请您输入新影片放映时间(例:1999-09-22 13:33:22):
2005-05-19 20:30:12
您已成功上架《三国演义》这部电影!
1、查看详情
2、上架电影
3、下架电影
4、修改电影
5、退出登录
请您输入选项:
1
----------------商家详情界面----------------
三国国际影院		电话:110110		地址:火星风云路99号111栋109房间		账户余额:5000.0
		电影名			主演		时长		评分		票价		余票数量		放映时间
		新三国		赵云		120.0		0.0		11.0		2000		2011-12-12 12:12:00
		三国演义		刘备		140.0		0.0		42.0		200		2005-05-19 20:30:12
1、查看详情
2、上架电影
3、下架电影
4、修改电影
5、退出登录
请您输入选项:
4
----------------商家修改电影界面----------------
请您输入要修改的影片名称:
士大夫
您要修改的《士大夫》未上架~~
您是否继续?y/n
y
请您输入要修改的影片名称:
三国演义
请您输入修改后的影片名称:
演义
请您输入修改后的影片主演:
诸葛亮
请您输入修改后的影片时长:
110
请您输入修改后的影片票价:
20
请您输入修改后的影片票数:
210
请您输入修改后的影片放映时间:
2010-11-11 11:11:11
您已成功修改《演义》这部电影!
----------------商家详情界面----------------
三国国际影院		电话:110110		地址:火星风云路99号111栋109房间		账户余额:5000.0
		电影名			主演		时长		评分		票价		余票数量		放映时间
		新三国		赵云		120.0		0.0		11.0		2000		2011-12-12 12:12:00
		演义		诸葛亮		110.0		0.0		20.0		210		2010-11-11 11:11:11
1、查看详情
2、上架电影
3、下架电影
4、修改电影
5、退出登录
请您输入选项:
3
----------------商家下架电影界面----------------
请您输入要下架的影片名称:
更
您要下架的《更》未上架!请先上架~~
您是否继续?y/n
y
请您输入要下架的影片名称:
演义
您已成功下架《演义》这部电影!
1、查看详情
2、上架电影
3、下架电影
4、修改电影
5、退出登录
请您输入选项:
1
----------------商家详情界面----------------
三国国际影院		电话:110110		地址:火星风云路99号111栋109房间		账户余额:5000.0
		电影名			主演		时长		评分		票价		余票数量		放映时间
		新三国		赵云		120.0		0.0		11.0		2000		2011-12-12 12:12:00
1、查看详情
2、上架电影
3、下架电影
4、修改电影
5、退出登录
请您输入选项:
5
尊敬的赵云先生,您已退出登录~~ 欢迎下次光临!
----------------奥利给电影系统首页----------------
1、用户登录
2、商家用户注册
3、普通用户注册
4、退出系统
请您输入选项:



3、用户

----------------奥利给电影系统首页----------------
1、用户登录
2、商家用户注册
3、普通用户注册
4、退出系统
请您输入选项:
1
----------------用户登录界面----------------
请您输入登录名称:
ljj666
请您输入登录密码:
12313
sorry!您输入的密码有误~
您是否继续?y/n
y
请您输入登录名称:
ljj888
请您输入登录密码:
123123
sorry!您输入的登录名有误~
您是否继续?y/n
y
请您输入登录名称:
ljj666
请您输入登录密码:
123123
欢迎林俊杰先生进入奥利给电影系统~~
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
1
----------------查询所有影院排片信息----------------
三国国际影院		电话:110110		地址:火星风云路99号111栋109房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		新三国		赵云		120.0		0.0		11.0		2000		2011-12-12 12:12:00
神马国际影院		电话:120120		地址:水星天水路89号4A11栋201房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		甄嬛传		甄姬		149.0		0.0		25.0		100		2022-08-10 12:12:12
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
2
----------------根据电影名称查询电影信息----------------
请您输入要查询的电影名称:
泰坦尼克号
您要查询的《泰坦尼克号》还未上映~~
您是否继续?y/n
y
请您输入要查询的电影名称:
新三国
		电影名			主演		时长		评分		票价		余票数量		放映时间
		新三国		赵云		120.0		0.0		11.0		2000		2011-12-12 12:12:00
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
2
----------------根据电影名称查询电影信息----------------
请您输入要查询的电影名称:
甄嬛传

		电影名			主演		时长		评分		票价		余票数量		放映时间
		甄嬛传		甄姬		149.0		0.0		25.0		100		2022-08-10 12:12:12
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
sorry!此选项不存在~
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
3
----------------查询所有影院排片信息----------------
三国国际影院		电话:110110		地址:火星风云路99号111栋109房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		新三国		赵云		120.0		0.0		11.0		2000		2011-12-12 12:12:00
神马国际影院		电话:120120		地址:水星天水路89号4A11栋201房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		甄嬛传		甄姬		149.0		0.0		25.0		100		2022-08-10 12:12:12
----------------电影评分界面----------------
请您输入要评分的电影名称:
新
sorry!《新》这部电影未上映~~
请您输入要评分的电影名称:
甄嬛传
您要对《甄嬛传》这部电影进行评分!
请您开始评分(1-10):
0
sorry!评分范围:1-10分!
您是否继续?y/n
y
请您开始评分(1-10):
dsfds十多个.;
您的评分数据有误!!
请您开始评分(1-10):
10.5
sorry!评分范围:1-10分!
您是否继续?y/n
y
请您开始评分(1-10):
9.8
您对《甄嬛传》这部电影的评分是:9.8分
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
1
----------------查询所有影院排片信息----------------
三国国际影院		电话:110110		地址:火星风云路99号111栋109房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		新三国		赵云		120.0		0.0		11.0		2000		2011-12-12 12:12:00
神马国际影院		电话:120120		地址:水星天水路89号4A11栋201房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		甄嬛传		甄姬		149.0		9.8		25.0		100		2022-08-10 12:12:12
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
3
----------------查询所有影院排片信息----------------
三国国际影院		电话:110110		地址:火星风云路99号111栋109房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		新三国		赵云		120.0		0.0		11.0		2000		2011-12-12 12:12:00
神马国际影院		电话:120120		地址:水星天水路89号4A11栋201房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		甄嬛传		甄姬		149.0		9.8		25.0		100		2022-08-10 12:12:12
----------------电影评分界面----------------
请您输入要评分的电影名称:
新三国
您要对《新三国》这部电影进行评分!
请您开始评分(1-10):
8.9
您对《新三国》这部电影的评分是:8.9分
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
1
----------------查询所有影院排片信息----------------
三国国际影院		电话:110110		地址:火星风云路99号111栋109房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		新三国		赵云		120.0		8.9		11.0		2000		2011-12-12 12:12:00
神马国际影院		电话:120120		地址:水星天水路89号4A11栋201房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		甄嬛传		甄姬		149.0		9.8		25.0		100		2022-08-10 12:12:12
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
4
----------------查询所有影院排片信息----------------
三国国际影院		电话:110110		地址:火星风云路99号111栋109房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		新三国		赵云		120.0		8.9		11.0		2000		2011-12-12 12:12:00
神马国际影院		电话:120120		地址:水星天水路89号4A11栋201房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		甄嬛传		甄姬		149.0		9.8		25.0		100		2022-08-10 12:12:12
----------------购买电影票界面----------------
请您输入要购票的电影院名称:
牛马影院
sorry!牛马影院不存在~~
您是否继续?y/n
y
请您输入要购票的电影院名称:
神马国际影院
请您输入要购票的电影名称:
新三国
您要购票的《新三国》这部电影未上架~~
您是否继续?y/n
y
请您输入要购票的电影名称:
甄嬛传
请问您要购买多少张《甄嬛传》的电影票:
101
sorry!当前电影票最多可以购买:100张
您是否继续?y/n
y
请问您要购买多少张《甄嬛传》的电影票:
50
您成功购买了《甄嬛传》50张电影票!
总金额是:1250.0元
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
5
----------------用户详情界面----------------
		登录名称:ljj666		姓名:林俊杰
		电话:898989		账户余额:3750.0
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
6
尊敬的林俊杰先生,您已退出登录~~ 欢迎下次光临!
----------------奥利给电影系统首页----------------
1、用户登录
2、商家用户注册
3、普通用户注册
4、退出系统
请您输入选项:
3
----------------普通用户注册界面----------------
请您输入登录名称:
zj666
登录名称已被占用!
您是否继续?y/n
n
好的!
----------------奥利给电影系统首页----------------
1、用户登录
2、商家用户注册
3、普通用户注册
4、退出系统
请您输入选项:
1
----------------用户登录界面----------------
请您输入登录名称:
zj666
请您输入登录密码:
123123
欢迎张杰先生进入奥利给电影系统~~
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
1
----------------查询所有影院排片信息----------------
三国国际影院		电话:110110		地址:火星风云路99号111栋109房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		新三国		赵云		120.0		8.9		11.0		2000		2011-12-12 12:12:00
神马国际影院		电话:120120		地址:水星天水路89号4A11栋201房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		甄嬛传		甄姬		149.0		9.8		25.0		50		2022-08-10 12:12:12
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
5
----------------用户详情界面----------------
		登录名称:zj666		姓名:张杰
		电话:787878		账户余额:7500.0
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
4
----------------查询所有影院排片信息----------------
三国国际影院		电话:110110		地址:火星风云路99号111栋109房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		新三国		赵云		120.0		8.9		11.0		2000		2011-12-12 12:12:00
神马国际影院		电话:120120		地址:水星天水路89号4A11栋201房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		甄嬛传		甄姬		149.0		9.8		25.0		50		2022-08-10 12:12:12
----------------购买电影票界面----------------
请您输入要购票的电影院名称:
三国国际影院
请您输入要购票的电影名称:
新三国分
您要购票的《新三国分》这部电影未上架~~
您是否继续?y/n
y
请您输入要购票的电影名称:
新三国
请问您要购买多少张《新三国》的电影票:
20001
sorry!当前电影票最多可以购买:2000张
您是否继续?y/n
y
请问您要购买多少张《新三国》的电影票:
100
您成功购买了《新三国》100张电影票!
总金额是:1100.0元
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
5
----------------用户详情界面----------------
		登录名称:zj666		姓名:张杰
		电话:787878		账户余额:6400.0
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
6
尊敬的张杰先生,您已退出登录~~ 欢迎下次光临!
----------------奥利给电影系统首页----------------
1、用户登录
2、商家用户注册
3、普通用户注册
4、退出系统
请您输入选项:

----------------奥利给电影系统首页----------------
1、用户登录
2、商家用户注册
3、普通用户注册
4、退出系统
请您输入选项:
1
----------------用户登录界面----------------
请您输入登录名称:
ljj666
请您输入登录密码:
123123
欢迎林俊杰先生进入奥利给电影系统~~
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
5
----------------用户详情界面----------------
		登录名称:ljj666		姓名:林俊杰
		电话:898989		账户余额:3750.0
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
4
----------------查询所有影院排片信息----------------
三国国际影院		电话:110110		地址:火星风云路99号111栋109房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		新三国		赵云		120.0		8.9		11.0		1900		2011-12-12 12:12:00
神马国际影院		电话:120120		地址:水星天水路89号4A11栋201房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		甄嬛传		甄姬		149.0		9.8		25.0		50		2022-08-10 12:12:12
----------------购买电影票界面----------------
请您输入要购票的电影院名称:
神马国际影院
请您输入要购票的电影名称:
甄嬛传
请问您要购买多少张《甄嬛传》的电影票:
50
您成功购买了《甄嬛传》50张电影票!
总金额是:1250.0元
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
5
----------------用户详情界面----------------
		登录名称:ljj666		姓名:林俊杰
		电话:898989		账户余额:2500.0
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
6
尊敬的林俊杰先生,您已退出登录~~ 欢迎下次光临!
----------------奥利给电影系统首页----------------
1、用户登录
2、商家用户注册
3、普通用户注册
4、退出系统
请您输入选项:
1
----------------用户登录界面----------------
请您输入登录名称:
zj888
请您输入登录密码:
abc123
欢迎甄姬女士进入奥利给电影系统~~
----------------商家操作界面----------------
1、查看详情
2、上架电影
3、下架电影
4、修改电影
5、退出登录
请您输入选项:
1
----------------商家详情界面----------------
神马国际影院		电话:120120		地址:水星天水路89号4A11栋201房间		账户余额:10500.0
		电影名			主演		时长		评分		票价		余票数量		放映时间
		甄嬛传		甄姬		149.0		9.8		25.0		0		2022-08-10 12:12:12
1、查看详情
2、上架电影
3、下架电影
4、修改电影
5、退出登录
请您输入选项:
5
尊敬的甄姬女士,您已退出登录~~ 欢迎下次光临!
----------------奥利给电影系统首页----------------
1、用户登录
2、商家用户注册
3、普通用户注册
4、退出系统
请您输入选项:
3
----------------普通用户注册界面----------------
请您输入登录名称:
ljj666
登录名称已被占用!
您是否继续?y/n
n
好的!
----------------奥利给电影系统首页----------------
1、用户登录
2、商家用户注册
3、普通用户注册
4、退出系统
请您输入选项:
1
----------------用户登录界面----------------
请您输入登录名称:
ljj666
请您输入登录密码:
12313
sorry!您输入的密码有误~
您是否继续?y/n
y
请您输入登录名称:
ljj666
请您输入登录密码:
123123
欢迎林俊杰先生进入奥利给电影系统~~
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
5
----------------用户详情界面----------------
		登录名称:ljj666		姓名:林俊杰
		电话:898989		账户余额:2500.0
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
4
----------------查询所有影院排片信息----------------
三国国际影院		电话:110110		地址:火星风云路99号111栋109房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		新三国		赵云		120.0		8.9		11.0		1900		2011-12-12 12:12:00
神马国际影院		电话:120120		地址:水星天水路89号4A11栋201房间
		电影名			主演		时长		评分		票价		余票数量		放映时间
		甄嬛传		甄姬		149.0		9.8		25.0		0		2022-08-10 12:12:12
----------------购买电影票界面----------------
请您输入要购票的电影院名称:
三国国际影院
请您输入要购票的电影名称:
新三国
请问您要购买多少张《新三国》的电影票:
1900
您当前余额不足!
您是否继续?y/n
y
请问您要购买多少张《新三国》的电影票:
200
您成功购买了《新三国》200张电影票!
总金额是:2200.0元
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
5
----------------用户详情界面----------------
		登录名称:ljj666		姓名:林俊杰
		电话:898989		账户余额:300.0
----------------客户操作界面----------------
1、展示所有影片信息
2、根据电影名称查询影片信息
3、评分
4、购票
5、个人中心
6、退出登录
请您输入选项:
6
尊敬的林俊杰先生,您已退出登录~~ 欢迎下次光临!
----------------奥利给电影系统首页----------------
1、用户登录
2、商家用户注册
3、普通用户注册
4、退出系统
请您输入选项:
1
----------------用户登录界面----------------
请您输入登录名称:
zy888
请您输入登录密码:
123123
sorry!您输入的密码有误~
您是否继续?y/n
y
请您输入登录名称:
zy888
请您输入登录密码:
abc123
欢迎赵云先生进入奥利给电影系统~~
----------------商家操作界面----------------
1、查看详情
2、上架电影
3、下架电影
4、修改电影
5、退出登录
请您输入选项:
1
----------------商家详情界面----------------
三国国际影院		电话:110110		地址:火星风云路99号111栋109房间		账户余额:8300.0
		电影名			主演		时长		评分		票价		余票数量		放映时间
		新三国		赵云		120.0		8.9		11.0		1700		2011-12-12 12:12:00
1、查看详情
2、上架电影
3、下架电影
4、修改电影
5、退出登录
请您输入选项:




三、奥利给电影购票系统技术选型分析

  • 面向对象编程
    • 系统包含了电影、商家、客户对象,需要用到继承、多态等语法知识。
  • 使用集合容器
    • 系统需要提供不同的容器分别存储系统注册的用户,以及当前商家发布的电影信息。
  • 程序流程控制
    • 需要结合分支、循环、跳转关键字等相关操作控制程序的业务逻辑。
  • 使用常见API
    • 登录信息的内容比较,业务数据的分析、处理,日期时间的处理等。



四、学习本项目,将至少得到如下收获

  • 优秀的面向对象编程能力。
  • 清晰、缜密的业务、数据分析能力。
  • 熟练使用程序流程技术来控制计算机完成自己的想法。
  • 形成良好的编码习惯,获得一定的编码经验。
  • 提升业务分析和解决问题的能力,让基础知识形成系统结构,为后续Web技术的学习做有力的支撑。



五、日志框架搭建、系统角色设计

1、集成日志框架,用于后期记录日志信息

在这里插入图片描述


<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds" debug="false">
   <!-- CONSOLE:表示当前的日志信息是可以输出到控制台的 -->
   <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
      <!-- 输出流对象 默认 System.out -->
      <target>System.out</target>
      <encoder>
         <!-- 格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n:换行符 -->
         <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %c [%thread] : %msg%n</pattern>
      </encoder>
   </appender>

   <!-- File是输出的方向通向文件的 -->
   <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <encoder>
         <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
         <charset>utf-8</charset>
      </encoder>
      <!-- 日志输出路径 -->
      <file>E:/JavaDevelop/log/movie-log.log</file>
      <!-- 指定日志文件拆分和压缩规则 -->
      <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
         <!-- 通过指定压缩文件名称,来确定分割文件方式 -->
         <fileNamePattern>E:/JavaDevelop/log/movie-log2-%d{yyyy-MM-dd}.log%i.gz</fileNamePattern>
         <!-- 文件拆分大小 -->
         <maxFileSize>1MB</maxFileSize>
      </rollingPolicy>
   </appender>

   <!--
      level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR   |   ALL 和 OFF
      , 默认debug
      <root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
   -->
   <root level="All">
      <!-- 关联FILE,将日志输出到文件中 -->
      <appender-ref ref="FILE" />
   </root>
</configuration>


2、定义一个电影类,包含:电影名、主演、评分、时长、票价、余票、放映时间

package com.app.bean;

import java.util.Date;

/**
    电影类
 */
public class Movie {
    private String movieName;   // 电影名
    private String actor;       // 主演
    private double score;       // 评分
    private double duration;    // 时长
    private double price;       // 票价
    private int remainingVotes; // 余票
    private Date startTime;     // 放映时间

    public Movie() {
    }

    public Movie(String movieName, String actor, Double duration, Double price, int remainingVotes, Date startTime) {
        this.movieName = movieName;
        this.actor = actor;
        this.duration = duration;
        this.price = price;
        this.remainingVotes = remainingVotes;
        this.startTime = startTime;
    }

    public String getMovieName() {
        return movieName;
    }

    public void setMovieName(String movieName) {
        this.movieName = movieName;
    }

    public String getActor() {
        return actor;
    }

    public void setActor(String actor) {
        this.actor = actor;
    }

    public Double getScore() {
        return score;
    }

    public void setScore(Double score) {
        this.score = score;
    }

    public Double getDuration() {
        return duration;
    }

    public void setDuration(Double duration) {
        this.duration = duration;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public int getRemainingVotes() {
        return remainingVotes;
    }

    public void setRemainingVotes(int remainingVotes) {
        this.remainingVotes = remainingVotes;
    }

    public Date getStartTime() {
        return startTime;
    }

    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }

    @Override
    public String toString() {
        return "Movie{" +
                "movieName='" + movieName + '\'' +
                ", actor='" + actor + '\'' +
                ", score=" + score +
                ", duration=" + duration +
                ", price=" + price +
                ", remainingVotes=" + remainingVotes +
                ", startTime=" + startTime +
                '}';
    }
}


3、系统包含两个用户角色:商家、客户(存在大量相同属性的信息)

定义用户类作为父类,包含:登录名称、密码、用户真实姓名、性别、电话、账户余额

package com.app.bean;

/**
    用户类:父类,包含普通用户、商家用户的相同属性
 */
public class User {
    private String loginName;   // 登录名称
    private String passWord;    // 密码
    private String userName;    // 用户真实姓名
    private char sex;           // 性别
    private String phone;       // 电话
    private double money;       // 账户余额

    public User() {
    }

    public User(String loginName, String passWord, String userName, char sex, String phone, double money) {
        this.loginName = loginName;
        this.passWord = passWord;
        this.userName = userName;
        this.sex = sex;
        this.phone = phone;
        this.money = money;
    }

    public String getLoginName() {
        return loginName;
    }

    public void setLoginName(String loginName) {
        this.loginName = loginName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "User{" +
                "loginName='" + loginName + '\'' +
                ", passWord='" + passWord + '\'' +
                ", userName='" + userName + '\'' +
                ", sex=" + sex +
                ", phone='" + phone + '\'' +
                ", money=" + money +
                '}';
    }
}


5、定义商家类,包含:电影院名称、电影院地址

package com.app.bean;

/**
    商家用户类,继承父类:用户类
 */
public class Business extends User {
    private String CinemaName;      // 电影院名称
    private String CinemaAddress;   // 电影院地址

    public String getCinemaName() {
        return CinemaName;
    }

    public void setCinemaName(String cinemaName) {
        CinemaName = cinemaName;
    }

    public String getCinemaAddress() {
        return CinemaAddress;
    }

    public void setCinemaAddress(String cinemaAddress) {
        CinemaAddress = cinemaAddress;
    }

    public Business() {

    }

    public Business(String loginName, String passWord, String userName, char sex, String phone, double money, String cinemaName, String cinemaAddress) {
        super(loginName, passWord, userName, sex, phone, money);
        CinemaName = cinemaName;
        CinemaAddress = cinemaAddress;
    }
}


6、定义客户类,包含

package com.app.bean;

/**
    普通用户类,继承父类:用户类
 */
public class Customer extends User{

    public Customer(){

    }

    public Customer(String loginName, String passWord, String userName, char sex, String phone, double money) {
        super(loginName, passWord, userName, sex, phone, money);
    }
}



六、首页设计、登录、商家界面、用户界面

1、首页需要包含:用户登录、商家用户注册、普通用户注册、退出系统功能


2、商家用户和普通用户可以共用一个登录功能

判断登录成功的用户的真实类型,根据用户类型完成对应的操作界面设计



七、商家功能

1、查看详情

2、上架电影

3、下架电影

4、修改电影

5、退出登录




八、客户功能

1、展示所有影片信息

2、根据电影名称查询影片信息

3、评分

4、购票

5、个人中心

6、退出登录




九、最终实现

1、Movie类——电影类

package com.app.bean;

import java.util.Date;

/**
    电影类
 */
public class Movie {
    private String movieName;   // 电影名
    private String actor;       // 主演
    private double score;       // 评分
    private double duration;    // 时长
    private double price;       // 票价
    private int remainingVotes; // 余票
    private Date startTime;     // 放映时间

    public Movie() {
    }

    public Movie(String movieName, String actor, Double duration, Double price, int remainingVotes, Date startTime) {
        this.movieName = movieName;
        this.actor = actor;
        this.duration = duration;
        this.price = price;
        this.remainingVotes = remainingVotes;
        this.startTime = startTime;
    }

    public String getMovieName() {
        return movieName;
    }

    public void setMovieName(String movieName) {
        this.movieName = movieName;
    }

    public String getActor() {
        return actor;
    }

    public void setActor(String actor) {
        this.actor = actor;
    }

    public Double getScore() {
        return score;
    }

    public void setScore(Double score) {
        this.score = score;
    }

    public Double getDuration() {
        return duration;
    }

    public void setDuration(Double duration) {
        this.duration = duration;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public int getRemainingVotes() {
        return remainingVotes;
    }

    public void setRemainingVotes(int remainingVotes) {
        this.remainingVotes = remainingVotes;
    }

    public Date getStartTime() {
        return startTime;
    }

    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }

    @Override
    public String toString() {
        return "Movie{" +
                "movieName='" + movieName + '\'' +
                ", actor='" + actor + '\'' +
                ", score=" + score +
                ", duration=" + duration +
                ", price=" + price +
                ", remainingVotes=" + remainingVotes +
                ", startTime=" + startTime +
                '}';
    }
}


2、User类——用户类

  • 包含商家用户和普通用户的相同属性
package com.app.bean;

/**
    用户类:父类,包含普通用户、商家用户的相同属性
 */
public class User {
    private String loginName;   // 登录名称
    private String passWord;    // 密码
    private String userName;    // 用户真实姓名
    private char sex;           // 性别
    private String phone;       // 电话
    private double money;       // 账户余额

    public User() {
    }

    public User(String loginName, String passWord, String userName, char sex, String phone, double money) {
        this.loginName = loginName;
        this.passWord = passWord;
        this.userName = userName;
        this.sex = sex;
        this.phone = phone;
        this.money = money;
    }

    public String getLoginName() {
        return loginName;
    }

    public void setLoginName(String loginName) {
        this.loginName = loginName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "User{" +
                "loginName='" + loginName + '\'' +
                ", passWord='" + passWord + '\'' +
                ", userName='" + userName + '\'' +
                ", sex=" + sex +
                ", phone='" + phone + '\'' +
                ", money=" + money +
                '}';
    }
}


3、Business类——商家类

package com.app.bean;

/**
    商家用户类,继承父类:用户类
 */
public class Business extends User {
    private String CinemaName;      // 电影院名称
    private String CinemaAddress;   // 电影院地址

    public String getCinemaName() {
        return CinemaName;
    }

    public void setCinemaName(String cinemaName) {
        CinemaName = cinemaName;
    }

    public String getCinemaAddress() {
        return CinemaAddress;
    }

    public void setCinemaAddress(String cinemaAddress) {
        CinemaAddress = cinemaAddress;
    }

    public Business() {

    }

    public Business(String loginName, String passWord, String userName, char sex, String phone, double money, String cinemaName, String cinemaAddress) {
        super(loginName, passWord, userName, sex, phone, money);
        CinemaName = cinemaName;
        CinemaAddress = cinemaAddress;
    }
}


4、Customer类——客户类

package com.app.bean;

/**
    普通用户类,继承父类:用户类
 */
public class Customer extends User{

    public Customer(){

    }

    public Customer(String loginName, String passWord, String userName, char sex, String phone, double money) {
        super(loginName, passWord, userName, sex, phone, money);
    }
}


5、MovieSystem类——电影购票系统类

package com.app.run;

import com.app.bean.Business;
import com.app.bean.Customer;
import com.app.bean.Movie;
import com.app.bean.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;

/**
    模拟电影购票系统
 */
public class MovieSystem {
    /*
        定义List集合,用于存放系统注册的用户对象信息
        1、存储很多用户(普通用户、商家用户)
     */
    public static final List<User> ALL_USERS = new ArrayList<>();

    
    /*
        定义Map集合,用于存放商家和其排片信息
        例如:
            商家1 = [排片1, 排片2, 排片3, ...]
            商家2 = [排片2, 排片3, ...]
            ...
     */
    public static final Map<Business, List<Movie>> ALL_MOVIES = new HashMap<>();

    // 创建扫描器对象,用于键盘录入数据
    public static final Scanner SYS_SC = new Scanner(System.in);

    // 定义一个用户变量,用于存放当前登录的用户:普通用户、商家用户
    public static User loginUser;

    // 创建一个日期格式化对象,用于格式化日期为自己想要的日期格式
    public static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    // 创建一个日志对象,记录日志到系统文件中
    public static final Logger LOGGER = LoggerFactory.getLogger("MovieSystem.class");

    

    public static void main(String[] args) {
        frontPage();    // 首页
    }


    /**
        电影系统首页
     */
    private static void frontPage() {
        while (true) {
            System.out.println("----------------奥利给电影系统首页----------------");
            System.out.println("1、用户登录");
            System.out.println("2、商家用户注册");
            System.out.println("3、普通用户注册");
            System.out.println("4、退出系统");
            System.out.println("请您输入选项:");
            String select = SYS_SC.nextLine();     // 接收用户输入的选项

            // 根据用户的选项,进入相应的操作页面
            switch (select) {
                case "1":
                    // 登录功能
                    userLogin();
                    break;
                case "2":
                    // 商家用户注册功能
                    businessRegister();
                    break;
                case "3":
                    // 普通用户注册功能
                    customerRegister();
                    break;
                case "4":
                    // 退出系统
                    System.out.println("您已退出奥利给电影系统~~ 欢迎下次光临!");
                    return;
                default:
                    System.out.println("sorry!此选项不存在~");
                    break;
            }
        }
    }


    
    /**
        商家用户注册功能
     */
    private static void businessRegister() {
        System.out.println("----------------商家用户注册界面----------------");
        while (true) {
            System.out.println("请您输入登录名称:");
            String loginName = SYS_SC.nextLine();

            // 根据输入的登录名称查询到一个普通用户对象
            User user = getBusinessAndCustomerByLoginName(loginName);
            if (user != null) {
                // 查到了!
                System.out.println("登录名称已被占用!");
                System.out.println("您是否继续?y/n");
                String select = SYS_SC.nextLine();
                switch (select) {
                    case "y":
                        break;
                    default:
                        System.out.println("好的!");
                        return;
                }
            }else {
                // 未查到!开始注册
                System.out.println("请您输入登录密码:");
                String passWord = SYS_SC.nextLine();
                System.out.println("请您输入真实姓名:");
                String userName = SYS_SC.nextLine();
                System.out.println("请您输入联系方式:");
                String phone = SYS_SC.nextLine();
                System.out.println("请您输入账户余额:");
                String money = SYS_SC.nextLine();
                System.out.println("请您输入电影院名称:");
                String cinemaName = SYS_SC.nextLine();
                System.out.println("请您输入电影院地址:");
                String cinemaAddress = SYS_SC.nextLine();

                while (true) {
                    System.out.println("请您输入性别:");
                    String sex = SYS_SC.nextLine();

                    if (sex.charAt(0) == '男' || sex.charAt(0) == '女') { // 当输入的性别字符串的第一个位置的字符是否为男或女
                        char sexCh = sex.charAt(0); // 输入的字符串的第一个位置的字符是为 男或女 ,接收存放一下

                        // 将输入的普通用户的信息封装成一个对象,添加进集合
                        Business business = new Business(
                                loginName, passWord, userName, sexCh, phone, Double.valueOf(money), cinemaName, cinemaAddress
                        );
                        ALL_USERS.add(business);

                        // 注意:商家一定需要加入到电影院排片信息中
                        List<Movie> movies = new ArrayList<>();
                        ALL_MOVIES.put(business, movies);

                        System.out.println("尊敬的" + userName + (sexCh == '男' ? "先生" : "女士") + ",恭喜您,注册成功啦!");
                        return;
                    }else {
                        System.out.println("您输入的性别有误!");
                        System.out.println("您是否继续?y/n");
                        String select = SYS_SC.nextLine();
                        switch (select) {
                            case "y":
                                break;
                            default:
                                System.out.println("好的!");
                                return;
                        }
                    }
                }
            }
        }
    }

    
    
    
    /**
        普通用户注册功能
     */
    private static void customerRegister() {
        System.out.println("----------------普通用户注册界面----------------");
        while (true) {
            System.out.println("请您输入登录名称:");
            String loginName = SYS_SC.nextLine();

            // 根据输入的登录名称查询到一个普通用户对象
            User user = getBusinessAndCustomerByLoginName(loginName);
            if (user != null) {
                // 查到了!
                System.out.println("登录名称已被占用!");
                System.out.println("您是否继续?y/n");
                String select = SYS_SC.nextLine();
                switch (select) {
                    case "y":
                        break;
                    default:
                        System.out.println("好的!");
                        return;
                }
            }else {
                // 未查到!开始注册
                System.out.println("请您输入登录密码:");
                String passWord = SYS_SC.nextLine();
                System.out.println("请您输入真实姓名:");
                String userName = SYS_SC.nextLine();
                System.out.println("请您输入联系方式:");
                String phone = SYS_SC.nextLine();
                System.out.println("请您输入账户余额:");
                String money = SYS_SC.nextLine();

                while (true) {
                    System.out.println("请您输入性别:");
                    String sex = SYS_SC.nextLine();

                    if (sex.charAt(0) == '男' || sex.charAt(0) == '女') { // 当输入的性别字符串的第一个位置的字符是否为男或女
                        char sexCh = sex.charAt(0); // 输入的字符串的第一个位置的字符是为 男或女 ,接收存放一下

                        // 将输入的普通用户的信息封装成一个对象,添加进集合
                        Customer customer = new Customer(
                                loginName, passWord, userName, sexCh, phone, Double.valueOf(money)
                        );
                        ALL_USERS.add(customer);
                        System.out.println("尊敬的" + userName + (sexCh == '男' ? "先生" : "女士") + ",恭喜您,注册成功啦!");
                        return;
                    }else {
                        System.out.println("您输入的性别有误!");
                        System.out.println("您是否继续?y/n");
                        String select = SYS_SC.nextLine();
                        switch (select) {
                            case "y":
                                break;
                            default:
                                System.out.println("好的!");
                                return;
                        }
                    }
                }
            }
        }
    }

    
    

    /**
        根据输入的登录名称查询到一个用户对象返回
     */
    private static User getBusinessAndCustomerByLoginName(String loginName) {
        for (User user : ALL_USERS) {
            if (user.getLoginName().equals(loginName)) {
                return user;
            }
        }
        return null;
    }

    
    

    /**
        用户登录功能:商家用户、普通用户共用
     */
    private static void userLogin() {
        System.out.println("----------------用户登录界面----------------");

        // 先判断是否有用户存在,不存在说明一个用户都没有注册
        if (ALL_USERS.size() == 0){
            System.out.println("您还没有注册!请先注册~~");
            return;
        }

        while (true) {
            System.out.println("请您输入登录名称:");
            String loginName = SYS_SC.nextLine();

            System.out.println("请您输入登录密码:");
            String passWord = SYS_SC.nextLine();

            // 根据输入的登录名称查询用户对象
            User u = getUserByLoginName(loginName);
            // 当查询结果不为null时,说明用户存在
            if (u != null) {
                // 判断登录密码是否正确
                if (u.getPassWord().equals(passWord)) {
                    // 登录成功了... 记住登录成功的用户
                    loginUser = u;
                    LOGGER.info(u.getUserName() + "登录了电影系统~");
                    // 密码正确!判断该用户是客户还是商家
                    if (u instanceof Customer) {
                        // 当前登录的是客户
                        CustomerInterface();
                    }else {
                        // 当前登录的是商家
                        BusinessInterface();
                    }

                    return; // 干掉方法,回到首页
                }else {
                    System.out.println("sorry!您输入的密码有误~");
                    System.out.println("您是否继续?y/n");
                    String select = SYS_SC.nextLine();
                    switch (select) {
                        case "y":
                            break;
                        default:
                            System.out.println("好的!");
                            return;
                    }
                }
            }else {
                System.out.println("sorry!您输入的登录名有误~");
                System.out.println("您是否继续?y/n");
                String select = SYS_SC.nextLine();
                switch (select) {
                    case "y":
                        break;
                    default:
                        System.out.println("好的!");
                        return;
                }
            }
        }
    }


    
    
    /**
        商家用户操作页面
     */
    private static void BusinessInterface() {
        System.out.println("欢迎" + loginUser.getUserName() + (loginUser.getSex() == '男' ? "先生" : "女士") + "进入奥利给电影系统~~");
        System.out.println("----------------商家操作界面----------------");
        while (true) {
            System.out.println("1、查看详情");
            System.out.println("2、上架电影");
            System.out.println("3、下架电影");
            System.out.println("4、修改电影");
            System.out.println("5、退出登录");
            System.out.println("请您输入选项:");
            String select = SYS_SC.nextLine();
            switch (select) {
                case "1":
                    // 查看当前登录的商家的详细信息
                    showBusinessInfos();
                    break;
                case "2":
                    // 商家上架电影
                    addMovie();
                    break;
                case "3":
                    // 商家下架电影
                    deleteMovie();
                    break;
                case "4":
                    // 商家修改电影信息
                    updateMovie();
                    break;
                case "5":
                    System.out.println("尊敬的" + loginUser.getUserName() + (loginUser.getSex() == '男' ? "先生" : "女士") +",您已退出登录~~ 欢迎下次光临!");
                    return;
                default:
                    System.out.println("sorry!此选项不存在~");
                    break;
            }
        }
    }


    
    
    /**
        商家功能:修改电影信息
     */
    private static void updateMovie() {
        System.out.println("----------------商家修改电影界面----------------");
        // 根据当前登录的商家对象(loginUser是登录的用户),作为Map集合的键
        Business business = (Business) loginUser;
        // 提取对应的值就是其排片信息
        List<Movie> movies = ALL_MOVIES.get(business);

        if (movies.size() == 0) {
            System.out.println("您的电影院无片可修改~~");
            return;
        }


        while (true) {
            System.out.println("请您输入要修改的影片名称:");
            String movieName = SYS_SC.nextLine();

            for (Movie movie : movies) {
                if (movie.getMovieName().equals(movieName)) {
                    // 要修改的电影存在,让用户输入修改后的电影信息
                    System.out.println("请您输入修改后的影片名称:");
                    String updateMovieName = SYS_SC.nextLine();
                    System.out.println("请您输入修改后的影片主演:");
                    String updateActor = SYS_SC.nextLine();
                    System.out.println("请您输入修改后的影片时长:");
                    String updateDuration = SYS_SC.nextLine();
                    System.out.println("请您输入修改后的影片票价:");
                    String updatePrice = SYS_SC.nextLine();
                    System.out.println("请您输入修改后的影片票数:");
                    String updateRemainingVotes = SYS_SC.nextLine();

                    try {
                        System.out.println("请您输入修改后的影片放映时间:");
                        String updateStartTime = SYS_SC.nextLine();

                        // 修改电影信息
                        movie.setMovieName(updateMovieName);
                        movie.setActor(updateActor);
                        movie.setDuration(Double.valueOf(updateDuration));
                        movie.setPrice(Double.valueOf(updatePrice));
                        movie.setRemainingVotes(Integer.valueOf(updateRemainingVotes));
                        movie.setStartTime(sdf.parse(updateStartTime));

                        System.out.println("您已成功修改" + "《" + movie.getMovieName() + "》" + "这部电影!");
                        showBusinessInfos();

                        return;
                    } catch (Exception e) {
                        System.out.println("您输入的日期时间格式有误!");    // 提示用户
                        LOGGER.error("时间解析出错!");
                        System.out.println("您是否继续?y/n");
                        String select = SYS_SC.nextLine();
                        switch (select) {
                            case "y":
                                break;
                            default:
                                System.out.println("好的!");
                                return;
                        }
                    }
                }
            }

            System.out.println("您要修改的《" + movieName + "》未上架~~");
            System.out.println("您是否继续?y/n");
            String select = SYS_SC.nextLine();
            switch (select) {
                case "y":
                    break;
                default:
                    System.out.println("好的!");
                    return;
            }
        }
    }

    
    
    
    
    /**
        商家功能:下架电影
     */
    private static void deleteMovie() {
        System.out.println("----------------商家下架电影界面----------------");
        // 根据当前登录的商家对象(loginUser是登录的用户),作为Map集合的键,
        Business business = (Business) loginUser;
        // 提取对应的值就是其排片信息
        List<Movie> movies = ALL_MOVIES.get(business);

        if (movies.size() == 0) {
            System.out.println("您的电影院无片可下架~~");
            return; // 结束方法!
        }

        while (true) {
            System.out.println("请您输入要下架的影片名称:");
            String movieName = SYS_SC.nextLine();

            for (Movie movie : movies) {
                if (movie.getMovieName().contains(movieName)) {
                    // 商家输入的影片名称匹配上这个影片名称,将此影片进行下架
                    movies.remove(movie);
                    System.out.println("您已成功下架" + "《" + movie.getMovieName() + "》" + "这部电影!");
                    return; // 下架成功,结束方法!
                }
            }

            System.out.println("您要下架的《" + movieName + "》未上架!请先上架~~");
            System.out.println("您是否继续?y/n");
            String select = SYS_SC.nextLine();
            switch (select) {
                case "y":
                    break;
                default:
                    System.out.println("好的!");
                    return;
            }
        }
    }

    
    
    
    
    /**
        商家功能:上架电影
        Map<Business, List<Movie>> ALL_MOVIES
        商家1 = [电影1, 电影2, 电影3, ...]
        商家2 = [电影1, 电影2, 电影3, ...]
        ...
     */
    private static void addMovie() {
        System.out.println("----------------商家上架电影界面----------------");
        // 根据当前登录的商家对象(loginUser是登录的用户),作为Map集合的键,提取对应的值就是其排片信息:Map<Business, List<Movie>> ALL_MOVIES
        Business business = (Business) loginUser;
        List<Movie> movies = ALL_MOVIES.get(business);

        while (true) {
            // 添加新电影的信息
            System.out.println("请您输入新影片名称:");
            String movieName = SYS_SC.nextLine();

            Movie movie1 = getMovieByMovieName(movieName);
            if (movie1 != null) {
                System.out.println("您要上架的《" + movieName + "》已经上架了!请不要侵权哦~~");
                System.out.println("您是否继续?y/n");
                String select = SYS_SC.nextLine();
                switch (select) {
                    case "y":
                        break;
                    default:
                        System.out.println("好的!");
                        return;
                }
            }else {
                System.out.println("请您输入新影片主演:");
                String actor = SYS_SC.nextLine();
                System.out.println("请您输入新影片时长:");
                String duration = SYS_SC.nextLine();
                System.out.println("请您输入新影片票价:");
                String price = SYS_SC.nextLine();
                System.out.println("请您输入新影片票数:");
                String remainingVotes = SYS_SC.nextLine();

                while (true) {
                    try {
                        System.out.println("请您输入新影片放映时间(例:1999-09-22 13:33:22):");
                        String startTime = SYS_SC.nextLine();

                        // 将新影片信息封装成一个电影对象,添加到movies集合中去
                        Movie movie2 = new Movie(movieName, actor, Double.valueOf(duration), Double.valueOf(price),
                                Integer.valueOf(remainingVotes), sdf.parse(startTime));

                        movies.add(movie2);
                        System.out.println("您已成功上架" + "《" + movie2.getMovieName() + "》" + "这部电影!");
                        return;     // 已成功上架,结束此方法!
                    } catch (Exception e) {
                        System.out.println("您输入的日期时间格式有误!!");   // 提示用户
                        LOGGER.error("时间解析出错!");

                        System.out.println("您是否继续?y/n");
                        String select = SYS_SC.nextLine();
                        switch (select) {
                            case "y":
                                break;
                            default:
                                System.out.println("好的!");
                                return;
                        }
                    }
                }
            }
        }
    }

    
    

    /**
        查看当前登录的商家的详细信息
     */
    private static void showBusinessInfos() {
        System.out.println("----------------商家详情界面----------------");
        // 根据当前登录的商家对象(loginUser是登录的用户),作为Map集合的键,提取对应的值就是其排片信息:Map<Business, List<Movie>> ALL_MOVIES
        Business business = (Business) loginUser;
        System.out.println(business.getCinemaName() + "\t\t电话:" + business.getPhone() + "\t\t地址:" + business.getCinemaAddress() + "\t\t账户余额:" + business.getMoney());
        List<Movie> movies = ALL_MOVIES.get(loginUser);

        // 查看详情
        if (movies.size() > 0) {
            System.out.println("\t\t电影名\t\t\t主演\t\t时长\t\t评分\t\t票价\t\t余票数量\t\t放映时间");
            // 将影院的电影按评分降序排序输出
            movies.stream().sorted((e1, e2) -> Double.compare(e2.getScore(), e1.getScore())).forEach( e ->
                    System.out.println("\t\t" + e.getMovieName() + "\t\t" + e.getActor() + "\t\t" + e.getDuration() + "\t\t" +
                            e.getScore() + "\t\t" + e.getPrice() + "\t\t" + e.getRemainingVotes() + "\t\t" +
                            sdf.format(e.getStartTime()))
            );
        }else {
            System.out.println("您的电影院当前无片可放映~~");
        }
    }


    
    
    /**
        普通用户操作页面
     */
    private static void CustomerInterface() {
        System.out.println("欢迎" + loginUser.getUserName() + (loginUser.getSex() == '男' ? "先生" : "女士") + "进入奥利给电影系统~~");
        while (true) {
            System.out.println("----------------客户操作界面----------------");
            System.out.println("1、展示所有影片信息");
            System.out.println("2、根据电影名称查询影片信息");
            System.out.println("3、评分");
            System.out.println("4、购票");
            System.out.println("5、个人中心");
            System.out.println("6、退出登录");
            System.out.println("请您输入选项:");
            String select = SYS_SC.nextLine();  // 接收用户输入的选项
            switch (select) {
                case "1":
                    // 展示所有排片信息
                    showAllMovies();
                    break;
                case "2":
                    // 根据电影名称查询影片信息
                    queryMovies();
                    break;
                case "3":
                    // 给电影评分
                    movieScore();
                    break;
                case "4":
                    // 用户购票
                    buyMovieTickets();
                    break;
                case "5":
                    // 个人中心(用户详情)
                    showCustomerInfos();
                    break;
                case "6":
                    // 退出登录
                    System.out.println("尊敬的" + loginUser.getUserName() + (loginUser.getSex() == '男' ? "先生" : "女士") +",您已退出登录~~ 欢迎下次光临!");
                    return;
                default:
                    System.out.println("sorry!此选项不存在~");
                    break;
            }
        }
    }

    
    

    /**
        客户功能:个人中心(查看个人详情)
     */
    private static void showCustomerInfos() {
        System.out.println("----------------用户详情界面----------------");
        System.out.println(
                "\t\t登录名称:" + loginUser.getLoginName() + "\t\t姓名:" + loginUser.getUserName()
                + "\n\t\t电话:" + loginUser.getPhone() + "\t\t账户余额:" + loginUser.getMoney()
        );
    }

    
    

    /**
        客户功能:购买电影票
     */
    private static void buyMovieTickets() {
        showAllMovies();
        System.out.println("----------------购买电影票界面----------------");

        while (true) {
            System.out.println("请您输入要购票的电影院名称:");
            String cinemaName = SYS_SC.nextLine();

            // 1、根据用户输入的电影院名称,查询是否存在该商家对象
            Business business = getBusinessByCinemaName(cinemaName);
            if (business == null) {
                // 当查询结果为null,说明没有
                System.out.println("sorry!" + cinemaName +"不存在~~");
                System.out.println("您是否继续?y/n");
                String select = SYS_SC.nextLine();

                switch (select) {
                    case "y":
                        break;
                    default:
                        System.out.println("好的!");
                        return;
                }
            }else {
                // 有
                // 根据查询到的商家对象,提取该商家的电影对象的集合
                List<Movie> movies = ALL_MOVIES.get(business);

                if (movies.size() > 0) {
                    while (true) {
                        System.out.println("请您输入要购票的电影名称:");
                        String movieName = SYS_SC.nextLine();

                        // 根据电影名称查询到一个电影对象
                        Movie movie = getMovieByBusinessAndMovieName(business, movieName);
                        if (movie != null) {
                            while (true) {
                                // 开始购票
                                System.out.println("请问您要购买多少张《" + movie.getMovieName() + "》的电影票:");
                                String tickets = SYS_SC.nextLine();
                                int buyTicktes = Integer.valueOf(tickets);

                                // 当电影的剩余票数 大于等于 要买的票数时
                                if (movie.getRemainingVotes() >= buyTicktes) {
                                    // 可以购票
                                    // 计算购票需要花费的金额
                                    double money = BigDecimal.valueOf(movie.getPrice()).multiply(BigDecimal.valueOf(buyTicktes)).doubleValue();

                                    // 判断客户余额是否充足
                                    if (loginUser.getMoney() >= money) {
                                        // 余额充足,可以购票
                                        System.out.println("您成功购买了《"+ movie.getMovieName() + "》" + buyTicktes + "张电影票!");
                                        System.out.println("总金额是:" + money + "元");

                                        /*
                                          结算:
                                            用户的余额 = 总余额 - 购买的票数 * 每一张票的票价
                                            商家的余额 = 总余额 + 购买的票数 * 每一张票的票价
                                        */
                                        loginUser.setMoney(loginUser.getMoney() - money);
                                        business.setMoney(business.getMoney() + money);

                                        /*
                                            更新商家的电影对象的票数 = 余票 - 购买的票数
                                         */
                                        movie.setRemainingVotes(movie.getRemainingVotes() - buyTicktes);

                                        return; // 购票结束
                                    }else {
                                        // 余额不足,无法购票
                                        System.out.println("您当前余额不足!");
                                        System.out.println("您是否继续?y/n");
                                        String select = SYS_SC.nextLine();

                                        switch (select) {
                                            case "y":
                                                break;
                                            default:
                                                System.out.println("好的!");
                                                return;
                                        }
                                    }
                                }else {
                                    // 票数不足,无法购买
                                    System.out.println("sorry!当前电影票最多可以购买:" + movie.getRemainingVotes() + "张");
                                    System.out.println("您是否继续?y/n");
                                    String select = SYS_SC.nextLine();

                                    switch (select) {
                                        case "y":
                                            break;
                                        default:
                                            System.out.println("好的!");
                                            return;
                                    }
                                }
                            }
                        }else {
                            System.out.println("您要购票的《" + movieName + "》这部电影未上架~~");
                            System.out.println("您是否继续?y/n");
                            String select = SYS_SC.nextLine();

                            switch (select) {
                                case "y":
                                    break;
                                default:
                                    System.out.println("好的!");
                                    return;
                            }
                        }
                    }
                }else {
                    System.out.println("sorry!该电影院打烊了~~");
                    System.out.println("您是否继续?y/n");
                    String select = SYS_SC.nextLine();

                    switch (select) {
                        case "y":
                            break;
                        default:
                            System.out.println("好的!");
                            return;
                    }
                }
            }
        }
    }


    
    
    /**
        根据电影名称查询到一个电影对象返回
     */
    private static Movie getMovieByBusinessAndMovieName(Business business, String movieName) {
        // 根据商家(键),提取出该商家的电影对象集合(值)
        List<Movie> movies = ALL_MOVIES.get(business);

        for (Movie movie : movies) {
            if (movie.getMovieName().contains(movieName)) {
                return movie;
            }
        }
        return null;
    }

    
    

    /**
        根据电影院名称查询到一个商家对象返回
     */
    private static Business getBusinessByCinemaName(String cinemaName) {
        // 获取全部商家对象的集合
        Set<Business> businesses = ALL_MOVIES.keySet();

        // 遍历全部商家对象的集合
        for (Business business : businesses) {
            // 判断用户要找的商家是否在集合中
            if (business.getCinemaName().equals(cinemaName)) {
                // 在,返回商家对象
                return business;
            }
        }
        // 遍历结束,仍然未找到用户想要找的商家,说明不在集合中,返回null
        return null;
    }


    
    
    
    /**
        客户功能:给电影评分
     */
    private static void movieScore() {
        showAllMovies();
        System.out.println("----------------电影评分界面----------------");
        while (true) {
            System.out.println("请您输入要评分的电影名称:");
            String movieName = SYS_SC.nextLine();

            // 根据输入的电影名称查询到一个电影对象
            Movie movie = getMovieByMovieName(movieName);
            if (movie != null) {
                System.out.println("您要对《" + movie.getMovieName() + "》这部电影进行评分!");
                while (true) {
                    // 查到了!
                    // 开始评分
                    try {
                        System.out.println("请您开始评分(1-10):");
                        String score = SYS_SC.nextLine();

                        // 评分范围:1-10分
                        if (Double.valueOf(score) >= 1 && Double.valueOf(score) <= 10) {
                            System.out.println("您对《" + movie.getMovieName() + "》这部电影的评分是:" + Double.valueOf(score) + "分");

                            // 更新电影的评分
                            movie.setScore(Double.valueOf(score));

                            return; // 评分结束!
                        }else {
                            System.out.println("sorry!评分范围:1-10分!");
                            System.out.println("您是否继续?y/n");
                            String select = SYS_SC.nextLine();
                            switch (select) {
                                case "y":
                                    break;
                                default:
                                    System.out.println("好的!");
                                    return;
                            }
                        }
                    } catch (Exception e) {
                        System.out.println("您的评分数据有误!!");
                    }
                }
            }else {
                // 未查到!
                System.out.println("sorry!《" + movieName + "》这部电影未上映~~");
            }
        }
    }

    
    

    /**
        客户功能:查询电影信息
     */
    private static void queryMovies() {
        System.out.println("----------------根据电影名称查询电影信息----------------");
        while (true) {
            System.out.println("请您输入要查询的电影名称:");
            String movieName = SYS_SC.nextLine();

            // 根据电影名称,查询到一个电影对象
            Movie movie = getMovieByMovieName(movieName);
            if (movie != null) {
                // 查到了!
                System.out.println("\t\t电影名\t\t\t主演\t\t时长\t\t评分\t\t票价\t\t余票数量\t\t放映时间");
                System.out.println("\t\t" + movie.getMovieName() + "\t\t" + movie.getActor() + "\t\t" + movie.getDuration() + "\t\t" +
                        movie.getScore() + "\t\t" + movie.getPrice() + "\t\t" + movie.getRemainingVotes() + "\t\t" +
                        sdf.format(movie.getStartTime()));
                return;
            }else {
                // 未查到!
                System.out.println("您要查询的《" + movieName + "》还未上映~~");
                System.out.println("您是否继续?y/n");
                String select = SYS_SC.nextLine();
                switch (select) {
                    case "y":
                        break;
                    default:
                        System.out.println("好的!");
                        return;
                }
            }
        }
    }

    
    
    

    /**
        根据电影名称查询到一个电影对象返回
     */
    private static Movie getMovieByMovieName(String movieName) {
        // 获取全部的电影对象(值)
        Collection<List<Movie>> movies = ALL_MOVIES.values();

        for (List<Movie> movieList : movies) {
            for (Movie movie : movieList) {
                if (movie.getMovieName().equals(movieName)) {
                    return movie;
                }
            }
        }
        return null;
    }


    /**
        客户功能:展示所有排片信息
     */
    private static void showAllMovies() {
        System.out.println("----------------查询所有影院排片信息----------------");

        ALL_MOVIES.forEach((business, movies) -> {
            System.out.println(business.getCinemaName() + "\t\t电话:" + business.getPhone() + "\t\t地址:" + business.getCinemaAddress());
            System.out.println("\t\t电影名\t\t\t主演\t\t时长\t\t评分\t\t票价\t\t余票数量\t\t放映时间");

            // 将影院的电影按评分降序排序输出
            movies.stream().sorted((e1, e2) -> Double.compare(e2.getScore(), e1.getScore())).forEach( e ->
                    System.out.println("\t\t" + e.getMovieName() + "\t\t" + e.getActor() + "\t\t" + e.getDuration() + "\t\t" +
                            e.getScore() + "\t\t" + e.getPrice() + "\t\t" + e.getRemainingVotes() + "\t\t" +
                            sdf.format(e.getStartTime()))
            );
        });
    }

    
    

    /**
        根据当前输入的登录名称查询用户对象
     */
    private static User getUserByLoginName(String loginName) {
        for (User user : ALL_USERS) {
            if (user.getLoginName().equals(loginName)) {
                // 登录名称匹配成功,说明用户存在,返回此用户对象
                return user;
            }
        }
        return null;    // 登录名称匹配失败,说明用户不存在,返回null
    }
}
  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:48:33  更:2022-09-21 00:52:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 8:49:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码