日志框架搭建
- 集成日志框架,用于后期记录日志信息
导入lib日志jar包,并添加xml配置文件,具体搭建步骤可参考⬇
http://t.csdnimg.cn/LzOqLhttp://t.csdnimg.cn/LzOqL
系统角色准备
系统包含2个用户角色:客户、商家,存在大量的相同属性信息➡用继承
定义角色类属于JavaBean实体类,所以我们创建一个bean包专门放这些,还需要定义一个run包放启动类
- 定义一个电影类Movie,包括:片名、主演、评分、时长、票价、余票、放映时间,并提供getset方法和有参无参构造器。
/**
* @Author: ttong
* @Description:电影类
*/
public class Movie {
private String name;
private String actor;
private double score;
private double time;
private double price;
private int number;//余票
private Date startTime;//放映时间
public Movie() {
}
public Movie(String name, String actor, double score, double time, double price, int number, Date startTime) {
this.name = name;
this.actor = actor;
this.score = score;
this.time = time;
this.price = price;
this.number = number;
this.startTime = startTime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
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 getTime() {
return time;
}
public void setTime(double time) {
this.time = time;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
}
- 定义User类作为父类,属性:登录名称、密码、真实名称、性别、电话、账户金额
/**
* @Author: ttong
* @Description:用户类,客户和商家的父类
*/
public class User {
private String loginName;//昵称,不能重复
private String userName;//真名
private String passWord;
private char sex;
private String phone;
private double money;
public User() {
}
public User(String loginName, String userName, String passWord, char sex, String phone, double money) {
this.loginName = loginName;
this.userName = userName;
this.passWord = passWord;
this.sex = sex;
this.phone = phone;
this.money = money;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
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;
}
}
- 定义一个Business类代表商家角色,属性:店铺名称、地址
/**
* @Author: ttong
* @Description:商家类,继承User类
*/
public class Business extends User{
//商家有一些独有属性
//店铺名称
private String shopName;
//店铺地址
private String address;
public String getShopName() {
return shopName;
}
public void setShopName(String shopName) {
this.shopName = shopName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
- 定义一个Customer类代表客户角色,属性:直接用父类的
/**
* @Author: ttong
* @Description:客户类,继承User类
*/
public class Customer extends User{
}
- 定义集合List<User>用户存放系统注册的用户对象信息,定义集合Map<Business,List<Movie>>存放商家和排片信息,并准备一些测试数据
//定义系统的数据容器用户存储数据
//1.存储很多用户(客户对象,商家对象)
public static final List<User> ALL_USERS = new ArrayList<>();
//2.存储系统全部商家和排片信息
public static Map<Business,List<Movie>> ALL_MOVIES = new HashMap<>();
//3.准备一些测试数据
static{
//客户
Customer c= new Customer();
c.setLoginName("tong");
c.setPassWord("1234");
c.setMoney(10000);
c.setUserName("gst");
c.setSex('女');
c.setPhone("12345678910");
ALL_USERS.add(c);
Customer c1= new Customer();
c1.setLoginName("yang");
c1.setPassWord("12345");
c1.setMoney(10000);
c1.setUserName("yy");
c1.setSex('男');
c1.setPhone("12345678911");
ALL_USERS.add(c1);
//商家
Business b = new Business();
b.setLoginName("11");
b.setPassWord("123");
b.setUserName("gst");
b.setMoney(0);
b.setShopName("影院1");
b.setSex('女');
b.setPhone("12345678910");
b.setAddress("地球1号101");
ALL_USERS.add(b);
//商家一定要加入店铺的排片信息中去
List<Movie> movies = new ArrayList<>();
ALL_MOVIES.put(b,movies);//放入影片信息
Business b1 = new Business();
b1.setLoginName("22");
b1.setPassWord("123");
b1.setUserName("zcy");
b1.setMoney(0);
b1.setShopName("影院2");
b1.setSex('男');
b1.setPhone("12345678911");
b1.setAddress("火星1号101");
ALL_USERS.add(b1);
List<Movie> movies1 = new ArrayList<>();
ALL_MOVIES.put(b,movies1);//放入影片信息
}
首页、登录、商家界面、用户界面实现
代码参考
public class MovieSystem {
//定义系统的数据容器用户存储数据
//1.存储很多用户(客户对象,商家对象)
public static final List<User> ALL_USERS = new ArrayList<>();
//2.存储系统全部商家和排片信息
public static Map<Business,List<Movie>> ALL_MOVIES = new HashMap<>();
//扫描器
public static final Scanner SYS_SC = new Scanner(System.in);
//定义一个静态的User类型变量记录登录成功的用户对象
public static User loginUser;
//3.准备一些测试数据
static{
//客户
Customer c= new Customer();
c.setLoginName("tong");
c.setPassWord("1234");
c.setMoney(10000);
c.setUserName("gst");
c.setSex('女');
c.setPhone("12345678910");
ALL_USERS.add(c);
Customer c1= new Customer();
c1.setLoginName("yang");
c1.setPassWord("12345");
c1.setMoney(10000);
c1.setUserName("yy");
c1.setSex('男');
c1.setPhone("12345678911");
ALL_USERS.add(c1);
//商家
Business b = new Business();
b.setLoginName("11");
b.setPassWord("123");
b.setUserName("gst");
b.setMoney(0);
b.setShopName("影院1");
b.setSex('女');
b.setPhone("12345678910");
b.setAddress("地球1号101");
ALL_USERS.add(b);
//商家一定要加入店铺的排片信息中去
List<Movie> movies = new ArrayList<>();
ALL_MOVIES.put(b,movies);//放入影片信息
Business b1 = new Business();
b1.setLoginName("22");
b1.setPassWord("123");
b1.setUserName("zcy");
b1.setMoney(0);
b1.setShopName("影院2");
b1.setSex('男');
b1.setPhone("12345678911");
b1.setAddress("火星1号101");
ALL_USERS.add(b1);
List<Movie> movies1 = new ArrayList<>();
ALL_MOVIES.put(b,movies1);//放入影片信息
}
//main方法
public static void main(String[] args) {
showMain();
}
//首页展示
public static void showMain(){
while (true) {
System.out.println("-----------电影首页-----------");
System.out.println("1.登录");
System.out.println("2.用户注册");
System.out.println("3.商家注册");
System.out.println("请输入您的选择:");
String command = SYS_SC.nextLine();
switch (command){
case "1":
//登录
login();
break;
case "2":
break;
case "3":
break;
default:
System.out.println("输入有误,请重新输入");
}
}
}
//登录功能
private static void login(){
while (true) {
System.out.println("请输入登录名:");
String loginName = SYS_SC.nextLine();
System.out.println("请输入密码:");
String passWord = SYS_SC.nextLine();
//1.根据用户名称查询用户对象
User u =getUserByLoginName(loginName);
//2.判断用户对象是否存在,存在说明登录名称正确了
if(u != null){
//3.判断密码是否正确
if(u.getPassWord().equals(passWord)){
//登录成功
loginUser = u;//记住登录成功的用户
//判断是用户登录的还是商家登录的
if(u instanceof Customer){
//普通用户
showCustomerMain();
}else{
//商家用户
showBuinessMain();
}
return;
}else{
System.out.println("密码错误,请确认");
}
}else{
System.out.println("登录名错误,请确认");
}
}
}
public static User getUserByLoginName(String loginName){
for (User user : ALL_USERS){
//判断这个用户的登录名是否是我们想要的
if (user.getLoginName().equals(loginName)){
return user;
}
}
return null;//查无此用户
}
//客户操作界面
private static void showCustomerMain(){
while (true) {
System.out.println("============电影客户界面===================");
System.out.println(loginUser.getUserName() + (loginUser.getSex()=='男'? "先生":"女士" + "欢迎您进入系统" +
"\t余额:" + loginUser.getMoney()));
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("请输入您要操作的命令:");
String command = SYS_SC.nextLine();
switch (command){
case "1":
// 展示全部排片信息
break;
case "2":
break;
case "3":
// 评分功能
break;
case "4":
// 购票功能
break;
case "5":
return; // 干掉方法
default:
System.out.println("不存在该命令!!");
break;
}
}
}
//商家后台操作界面
private static void showBuinessMain(){
while (true) {
System.out.println("============电影商家界面===================");
System.out.println(loginUser.getUserName() + (loginUser.getSex()=='男'? "先生":"女士" + "欢迎您进入系统"));
System.out.println("1、展示详情:");
System.out.println("2、上架电影:");
System.out.println("3、下架电影:");
System.out.println("4、修改电影:");
System.out.println("5、退出:");
System.out.println("请输入您要操作的命令:");
String command = SYS_SC.nextLine();
switch (command){
case "1":
// 展示全部排片信息
break;
case "2":
// 上架电影信息
break;
case "3":
// 下架电影信息
break;
case "4":
// 修改电影信息
break;
case "5":
System.out.println(loginUser.getUserName() +"请您下次再来啊~~~");
return; // 干掉方法
default:
System.out.println("不存在该命令!!");
break;
}
}
}
}
商家功能-展示详情、影片上架、退出
//日期格式化对象
public static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//打印日志信息
public static final Logger LOGGER = LoggerFactory.getLogger("MovieSystem");
//展示当前商家详细信息
private static void showBussinessInfos(){
System.out.println("================商家详情界面=================");
LOGGER.info(loginUser.getUserName()+"商家详情界面");
// 根据商家对象(就是登录的用户loginUser),作为Map集合的键 提取对应的值就是其排片信息 :Map<Business , List<Movie>> ALL_MOVIES
Business business = (Business) loginUser;
System.out.println(business.getShopName() + "\t\t电话:" + business.getPhone()
+ "\t\t地址:" + business.getAddress() + "\t\t余额:" + business.getMoney());
List<Movie> movies = ALL_MOVIES.get(business);
if(movies.size() > 0) {
System.out.println("片名\t\t\t主演\t\t时长\t\t评分\t\t票价\t\t余票数量\t\t放映时间");
for (Movie movie : movies) {
System.out.println(movie.getName()+"\t\t\t" + movie.getActor()+ "\t\t" + movie.getTime()
+ "\t\t" + movie.getScore() + "\t\t" + movie.getPrice() + "\t\t" + movie.getNumber() + "\t\t"
+ sdf.format(movie.getStartTime()));
}
}else {
System.out.println("您的店铺当前无片在放映~~~~");
}
}
//商家进行电影上架
private static void addMoive(){
System.out.println("================上架电影====================");
// 根据商家对象(就是登录的用户loginUser),作为Map集合的键 提取对应的值就是其排片信息 :Map<Business , List<Movie>> ALL_MOVIES
Business business = (Business) loginUser;
List<Movie> movies = ALL_MOVIES.get(business);
System.out.println("请您输入新片名:");
String name = SYS_SC.nextLine();
System.out.println("请您输入主演:");
String actor = SYS_SC.nextLine();
System.out.println("请您输入时长:");
String time = SYS_SC.nextLine();
System.out.println("请您输入票价:");
String price = SYS_SC.nextLine();
System.out.println("请您输入票数:");
String totalNumber = SYS_SC.nextLine(); // 200\n
while (true) {
try {
System.out.println("请您输入影片放映时间:");
String stime = SYS_SC.nextLine();
// public Movie(String name, String actor, double time, double price, int number, Date startTime) // 封装成电影对象 ,加入集合movices中去
Movie movie = new Movie(name, actor ,Double.valueOf(time) , Double.valueOf(price)
, Integer.valueOf(totalNumber) , sdf.parse(stime));
movies.add(movie);
System.out.println("您已经成功上架了:《" + movie.getName() + "》");
return; // 直接退出去
} catch (ParseException e) {
e.printStackTrace();
LOGGER.error("时间解析出了毛病");
}
}
}
商家功能-影片下架、影片修改
//下架电影
private static void deleteMovie(){
System.out.println("=================下架电影====================");
Business business = (Business) loginUser;
List<Movie> movies = ALL_MOVIES.get(business);
if(movies.size() == 0) {
System.out.println("当前无片可以下架!");
return;
}
//2.让用户选择需要下架的电影名称
while (true) {
System.out.println("请您输入需要下架的电影名称:");
String movieName = SYS_SC.nextLine();
//3.去查询有没有这个影片对象
Movie movie = getMovieByName(movieName);
if(movie != null){
//如果有,就从集合中删除
movies.remove(movie);
System.out.println("您已经成功下架了:《" + movie.getName() + "》");
showBussinessInfos();
return;
}else{
System.out.println("您输入的电影名称不存在!");
System.out.println("请问是否继续:y/n");
String command = SYS_SC.nextLine();
switch (command){
case "y":
break;
default:
System.out.println("好的!");
return;
}
}
}
}
//查询当前商家下的排片影片
public static Movie getMovieByName(String movieName){
Business business = (Business) loginUser;
List<Movie> movies = ALL_MOVIES.get(business);
for (Movie movie : movies){
//模糊匹配
if (movie.getName().contains(movieName)){
return movie;
}
}
return null;
}
//修改电影
private static void updateMovie(){
System.out.println("=================修改电影====================");
Business business = (Business) loginUser;
List<Movie> movies = ALL_MOVIES.get(business);
if(movies.size() == 0) {
System.out.println("当前无片可以修改!");
return;
}
//2.让用户选择需要修改的电影名称
while (true) {
System.out.println("请您输入需要修改的电影名称:");
String movieName = SYS_SC.nextLine();
//3.去查询有没有这个影片对象
Movie movie = getMovieByName(movieName);
if(movie != null){
//如果有,就修改
System.out.println("请您输入修改后的片名:");
String name = SYS_SC.nextLine();
System.out.println("请您输入修改后的主演:");
String actor = SYS_SC.nextLine();
System.out.println("请您输入修改后的时长:");
String time = SYS_SC.nextLine();
System.out.println("请您输入修改后的票价:");
String price = SYS_SC.nextLine();
System.out.println("请您输入修改后的票数:");
String totalNumber = SYS_SC.nextLine(); // 200\n
while (true) {
try {
System.out.println("请您输入修改后的影片放映时间:");
String stime = SYS_SC.nextLine();
movie.setName(name);
movie.setActor(actor);
movie.setPrice(Double.valueOf(price));
movie.setTime(Double.valueOf(time));
movie.setNumber(Integer.valueOf(totalNumber));
movie.setStartTime(sdf.parse(stime));
System.out.println("恭喜您,您成功修改了该影片了!!!");
showBussinessInfos();
return; // 直接退出去
} catch (Exception e) {
e.printStackTrace();
LOGGER.error("时间解析出了毛病");
}
}
}else{
System.out.println("您输入的电影名称不存在!");
System.out.println("请问是否继续:y/n");
String command = SYS_SC.nextLine();
switch (command){
case "y":
break;
default:
System.out.println("好的!");
return;
}
}
}
}
用户功能-展示全部影片信息
//展示全部商家和其排片信息
private static void showAllMovies(){
System.out.println("================展示全部商家排片信息=================");
ALL_MOVIES.forEach((business, movies) -> {
System.out.println("\t\t\t片名\t\t\t主演\t\t时长\t\t评分\t\t票价\t\t余票数量\t\t放映时间");
for (Movie movie : movies) {
System.out.println("\t\t\t"+movie.getName()+"\t\t\t" + movie.getActor()+ "\t\t" + movie.getTime()
+ "\t\t" + movie.getScore() + "\t\t" + movie.getPrice() + "\t\t" + movie.getNumber() + "\t\t"
+ sdf.format(movie.getStartTime()));
}
});
}
用户功能-购票操作
//用户购票功能
private static void buyMoive(){
showAllMovies();//展示
System.out.println("==============用户购票功能===================");
while (true) {
System.out.println("请您输入需要买票的门店:");
String shopName = SYS_SC.nextLine();
//1.查询是否存在该商家
Business business = getBusinessbyShopName(shopName);
if(business == null){
System.out.println("您输入的商家不存在!");
}else{
//2.此商家的全部影片
List<Movie> movies = ALL_MOVIES.get(business);
//3.判断是否存在上映的电影
if(movies.size() > 0){
//4.开始选片
while (true) {
System.out.println("请您选择需要购票的电影名称:");
String movieName = SYS_SC.nextLine();
//5.查询当前商家下是否存在该电影
Movie movie = getMovieByShopName(business,movieName);
if(movie != null){
//开始购买
while (true) {
System.out.println("请您输入需要购买的电影票数:");
String number = SYS_SC.nextLine();
int buyNumber = Integer.valueOf(number);
//判断电影是否购票
if(movie.getNumber() >= buyNumber){
//可以购买
//当前需要花费的金额
double money = BigDecimal.valueOf(movie.getPrice()).multiply(BigDecimal.valueOf(buyNumber))
.doubleValue();
if (loginUser.getMoney() > money){
//可以买了
System.out.println("您成功购买了"+movie.getName()+buyNumber+"张票!总金额是"+money);
//更新自己的金额和商家的金额
loginUser.setMoney(loginUser.getMoney() - money);
business.setMoney(business.getMoney() + money);
//更新票数
movie.setNumber(movie.getNumber() - buyNumber);
return;//结束
}else{
//钱不够
System.out.println("您的钱不够,请问是否继续:y/n");
String command = SYS_SC.nextLine();
switch (command){
case "y":
break;
default:
System.out.println("好的!");
return;
}
}
}else{
//票数不够
System.out.println("您当前最多购买:"+movie.getNumber());
System.out.println("请问是否继续:y/n");
String command = SYS_SC.nextLine();
switch (command){
case "y":
break;
default:
System.out.println("好的!");
return;
}
}
}
}else{
System.out.println("您输入的电影名称有毛病!");
}
}
}else{
System.out.println("该电影院关门了!");
System.out.println("请问是否继续买票:y/n");
String command = SYS_SC.nextLine();
switch (command){
case "y":
break;
default:
System.out.println("好的!");
return;
}
}
}
}
}
//根据商家店铺名称查询商家对象
public static Business getBusinessbyShopName(String shopName){
Set <Business> businesses = ALL_MOVIES.keySet();
for (Business business : businesses){
if (business.getShopName().equals(shopName)){
return business;
}
}
return null;
}
//查询该商家下是否有影片
public static Movie getMovieByShopName(Business business,String movieName){
List<Movie> movies = ALL_MOVIES.get(business);
for (Movie movie : movies){
//模糊匹配
if (movie.getName().contains(movieName)){
return movie;
}
}
return null;
}
项目源代码
链接:https://pan.baidu.com/s/1BxEwu1IsGfAXxiTTaXDEfg?pwd=toaz
提取码:toaz
--来自百度网盘超级会员V2的分享