本项目仅仅是对Java数据结构的一些知识的使用,不涉及很深的数据结构,如果是新手学习的,可以来写一写,可以锻炼自己的一些api的使用。

项目介绍:

只是简单的实现电影院买票的一些流程,对象有用户和店铺经营者组成。

项目下载地址:

链接:https://pan.baidu.com/s/1b6LNO9JbL0i1xi7XRVLxgw 
提取码:73yj

功能介绍:

首页:

店铺经营者:

用户:

特别标注:该项目是本人在学习的过程中,黑马程序员有这样的一个项目,我也跟着写了写,部分代码进行了修改,所有的修改都是为了让代码跑的更快!

一、前期分析

1.1项目角色分析

1.2.首页,登录,商家用户界面设计

二、准备工作

2.1配置日志文件:

 日志文件下载(自行提取):

链接:https://pan.baidu.com/s/19KwD80oQQfqkgEce67x5mA 
提取码:tzyc

2.2实体类创建

User类(Business和Customer的父类)

package com.zjy.bean;/***         ┏┓       ┏┓+ +*        ┏┛┻━━━━━━━┛┻┓ + +*        ┃       ┃*        ┃   ━   ┃ ++ + + +*        █████━█████  ┃+*        ┃       ┃ +*        ┃   ┻   ┃*        ┃       ┃ + +*        ┗━━┓    ┏━┛* ┃    ┃*          ┃    ┃ + + + +*          ┃   ┃ Code is far away from     bug with the animal protecting*          ┃   ┃ +              神兽保佑,代码无bug*          ┃   ┃*          ┃   ┃  +*          ┃    ┗━━━┓ + +*          ┃      ┣┓*          ┃      ┏┛*          ┗┓┓┏━━━┳┓┏┛ + + + +*           ┃┫┫  ┃┫┫*           ┗┻┛  ┗┻┛+ + + +** @author 钟先生* @date 2022/7/17 9:49*/
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;}@Overridepublic String toString() {return "User{" +"loginName='" + loginName + '\'' +", userName='" + userName + '\'' +", passWord='" + passWord + '\'' +", sex=" + sex +", phone='" + phone + '\'' +", money=" + money +'}';}
}

定义有参构造器的意义是在后面添加数据的时候可以用上,当然这里不添加后面需要再加上也没什么,有参构造器写了,无参构造器也写一写也没什么。

Business类

package com.zjy.bean;import java.util.Objects;/***         ┏┓       ┏┓+ +*        ┏┛┻━━━━━━━┛┻┓ + +*        ┃       ┃*        ┃   ━   ┃ ++ + + +*        █████━█████  ┃+*        ┃       ┃ +*        ┃   ┻   ┃*        ┃       ┃ + +*        ┗━━┓    ┏━┛* ┃    ┃*          ┃    ┃ + + + +*          ┃   ┃ Code is far away from     bug with the animal protecting*          ┃   ┃ +              神兽保佑,代码无bug*          ┃   ┃*          ┃   ┃  +*          ┃    ┗━━━┓ + +*          ┃      ┣┓*          ┃      ┏┛*          ┗┓┓┏━━━┳┓┏┛ + + + +*           ┃┫┫  ┃┫┫*           ┗┻┛  ┗┻┛+ + + +** @author 钟先生* @date 2022/7/17 9:51*/
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;}@Overridepublic boolean equals(Object o) {if (this == o) {return true;}if (o == null || getClass() != o.getClass()) {return false;}Business business = (Business) o;return Objects.equals(shopName, business.shopName) && Objects.equals(address, business.address);}@Overridepublic int hashCode() {return Objects.hash(shopName, address);}
}

Customer类

package com.zjy.bean;/***         ┏┓       ┏┓+ +*        ┏┛┻━━━━━━━┛┻┓ + +*        ┃       ┃*        ┃   ━   ┃ ++ + + +*        █████━█████  ┃+*        ┃       ┃ +*        ┃   ┻   ┃*        ┃       ┃ + +*        ┗━━┓    ┏━┛* ┃    ┃*          ┃    ┃ + + + +*          ┃   ┃ Code is far away from     bug with the animal protecting*          ┃   ┃ +              神兽保佑,代码无bug*          ┃   ┃*          ┃   ┃  +*          ┃    ┗━━━┓ + +*          ┃      ┣┓*          ┃      ┏┛*          ┗┓┓┏━━━┳┓┏┛ + + + +*           ┃┫┫  ┃┫┫*           ┗┻┛  ┗┻┛+ + + +** @author 钟先生* @date 2022/7/17 9:53*/import java.util.HashMap;
import java.util.Map;/**客户角色*/
public class Customer extends User{// 定义一个属性存储购买记录。private Map<String, Boolean> buyMovies = new HashMap<>();public Map<String, Boolean> getBuyMovies() {return buyMovies;}public void setBuyMovies(Map<String, Boolean> buyMovies) {this.buyMovies = buyMovies;}
}

根据Business和Customer类都继承了User类的说明:

因为Business类和Customer类的属性大部分都一样,所以这里定义一个父类包含两个实体共有的属性,然后继承他,就可以使用父类里面的方法了,当然也继承了父类的属性,自己类里面可以定义不同的属性。

根据Customer中为什么创建一个Map<String,Boolean> buyMovies = new HashMap<>()?

因为在评分功能的时候,我们需要区分哪个电影我们看了,哪一个我们没有看,看过的电影我们可以进行评分,但是没看过的我们是无法进行评分的。

Movie类 

package com.zjy.bean;import java.util.Date;/***         ┏┓       ┏┓+ +*        ┏┛┻━━━━━━━┛┻┓ + +*        ┃       ┃*        ┃   ━   ┃ ++ + + +*        █████━█████  ┃+*        ┃       ┃ +*        ┃   ┻   ┃*        ┃       ┃ + +*        ┗━━┓    ┏━┛* ┃    ┃*          ┃    ┃ + + + +*          ┃   ┃ Code is far away from     bug with the animal protecting*          ┃   ┃ +              神兽保佑,代码无bug*          ┃   ┃*          ┃   ┃  +*          ┃    ┗━━━┓ + +*          ┃      ┣┓*          ┃      ┏┛*          ┗┓┓┏━━━┳┓┏┛ + + + +*           ┃┫┫  ┃┫┫*           ┗┻┛  ┗┻┛+ + + +** @author 钟先生* @date 2022/7/17 9:45*/
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(String name, String actor, double time, double price, int number, Date startTime) {this.name = name;this.actor = actor;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;}@Overridepublic String toString() {return "Movie{" +"name='" + name + '\'' +", actor='" + actor + '\'' +", score=" + score +", time=" + time +", price=" + price +", number=" + number +", startTime=" + startTime +'}';}
}

说明:实体类的创建并不麻烦,相信对Java开发的人员都有一定的了解,大部分代码是不需要自己手写的,都可以根据idea的快捷键生成。

功能实现类准备工作:

package com.zjy.run;
import java.util.HashMap;import com.zjy.bean.Business;
import com.zjy.bean.Customer;
import com.zjy.bean.Movie;
import com.zjy.bean.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;/***         ┏┓       ┏┓+ +*        ┏┛┻━━━━━━━┛┻┓ + +*        ┃       ┃*        ┃   ━   ┃ ++ + + +*        █████━█████  ┃+*        ┃       ┃ +*        ┃   ┻   ┃*        ┃       ┃ + +*        ┗━━┓    ┏━┛* ┃    ┃*          ┃    ┃ + + + +*          ┃   ┃ Code is far away from     bug with the animal protecting*          ┃   ┃ +              神兽保佑,代码无bug*          ┃   ┃*          ┃   ┃  +*          ┃    ┗━━━┓ + +*          ┃      ┣┓*          ┃      ┏┛*          ┗┓┓┏━━━┳┓┏┛ + + + +*           ┃┫┫  ┃┫┫*           ┗┻┛  ┗┻┛+ + + +** @author 钟先生* @date 2022/7/17 9:55*/
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;//对时间格式进行设置public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//对当前类使用日志框架public static final Logger Logger = LoggerFactory.getLogger("MovieSystem.class");/**定义一个静态的Map集合存储电影的评分*/public static final Map<String , List<Double>> MOVIES_SCORE = new HashMap<>();/*3、准备一些测试数据*/static {Customer c = new Customer();c.setLoginName("ld666");c.setPassWord("123456");c.setUserName("LD");c.setSex('女');c.setMoney(10000);c.setPhone("110110");ALL_USERS.add(c);Customer c1 = new Customer();c1.setLoginName("zjy888");c1.setPassWord("123456");c1.setUserName("ZJY");c1.setSex('男');c1.setMoney(2000);c1.setPhone("111111");ALL_USERS.add(c1);Business b = new Business();b.setLoginName("zhongfuren");b.setPassWord("123456");b.setUserName("跑不快");b.setMoney(0);b.setSex('女');b.setPhone("110110");b.setAddress("火星8栋8层88号");b.setShopName("金刚砖国际影城");ALL_USERS.add(b);// 注意,商家一定需要加入到店铺排片信息中去List<Movie> movies = new ArrayList<>();ALL_MOVIES.put(b , movies);Business b2 = new Business();b2.setLoginName("zhongxiansheng");b2.setPassWord("123456");b2.setUserName("打不过");b2.setMoney(0);b2.setSex('男');b2.setPhone("110110");b2.setAddress("火星6栋6层66号");b2.setShopName("能量卡国际影城");ALL_USERS.add(b2);// 注意,商家一定需要加入到店铺排片信息中去List<Movie> movies3 = new ArrayList<>();ALL_MOVIES.put(b2 , movies3);}
}

三、首页和店铺功能实现(代码部分是有缺失的,源码链接在最上面)

3.1首页展示

主方法:

 public static void main(String[] args) {showMain();}

首页方法:

/*** 首先展示*/private 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":userRegister();break;case "3":businessRegister();break;default:System.out.println("命令无效,请确认命令!");}}}

3.2登录

    /*** 登录*/private static void login() {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){if(u.getPassWord().equals(passWord)){//判断用户登录的是商家还是用户loginUser = u;Logger.info(u.getUserName()+"登录了影院系统!");if(u instanceof Customer){showCustomerMain();}else{showBusinessMain();}return;}else{System.out.println("密码错误,请确认!");}}else{System.out.println("登录名错误,请确认!");}}

说明:这里注意登陆成功是有两种显示见面的,一种是showCustomerMain();一种是showBusinessMain();分别对应用户店铺经营者对象。

3.3用户注册

    /*** 用户注册*/private static void userRegister() {System.out.println("============小蝶电影用户注册界面===================");System.out.println("请输入登录名称:");String loginName = SYS_SC.nextLine();System.out.println("请输入登录密码:");String passWord = SYS_SC.nextLine();System.out.println("请输入用户名称:");String userName = SYS_SC.nextLine();System.out.println("请输入性别:");String ch = SYS_SC.nextLine();System.out.println("请输入余额:");String money = SYS_SC.nextLine();System.out.println("请输入电话号:");String phone = SYS_SC.nextLine();Customer c = new Customer();c.setBuyMovies(new HashMap<>());c.setLoginName(loginName);c.setUserName(userName);c.setPassWord(passWord);c.setSex(ch.charAt(0));c.setPhone(phone);c.setMoney(Double.parseDouble(money));ALL_USERS.add(c);for (User user : ALL_USERS) {if(user.getLoginName().equals(loginName)){System.out.println("注册成功!");return;}}System.out.println("注册失败!");}

3.4店铺注册

    /*** 店铺注册*/private static void businessRegister() {System.out.println("============小蝶电影商家注册界面===================");System.out.println("请输入登录名称:");String loginName = SYS_SC.nextLine();System.out.println("请输入登录密码:");String passWord = SYS_SC.nextLine();System.out.println("请输入用户名称:");String userName = SYS_SC.nextLine();System.out.println("请输入性别:");String ch = SYS_SC.nextLine();System.out.println("请输入余额:");String money = SYS_SC.nextLine();System.out.println("请输入电话号:");String phone = SYS_SC.nextLine();System.out.println("请输入店铺名称:");String shopName = SYS_SC.nextLine();System.out.println("请输入店铺地址:");String shopAddress = SYS_SC.nextLine();Business c = new Business();c.setLoginName(loginName);c.setUserName(userName);c.setPassWord(passWord);c.setSex(ch.charAt(0));c.setPhone(phone);c.setMoney(Double.parseDouble(money));c.setShopName(shopName);c.setAddress(shopAddress);ALL_USERS.add(c);for (User user : ALL_USERS) {if(user.getLoginName().equals(loginName)){System.out.println("注册成功!");return;}}System.out.println("注册失败!");}

3.5商家功能主界面:

   /*** 用户操作界面*/private static void showBusinessMain() {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":// 展示全部排片信息showBusinessInfos();break;case "2":// 上架电影信息addMovie();break;case "3":// 下架电影信息deleteMovie();break;case "4":// 修改电影信息updateMovie();break;case "5":System.out.println(loginUser.getUserName()+"退出影院系统!");return; // 干掉方法default:System.out.println("不存在该命令!!");break;}}}

3.6影片下架

/*** 影片下架功能*/private static void deleteMovie() {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 deleteMovieName = SYS_SC.nextLine();Movie movie = getMovieByName(deleteMovieName, movies);if(movie==null){System.out.println("不存在该影片!删除失败!");System.out.println("请问是否继续下架电影?y/n");String command = SYS_SC.nextLine();switch (command) {case "y":break;default:System.out.println("OK!");return ;}}else{movies.remove(movie);System.out.println("《"+movie.getName()+"》下架成功!");return ;}}}

3.7影片上架

 /*** 电影上架*/private static void addMovie() {System.out.println("===================小蝶电影上架影片===================");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();while (true) {try {System.out.println("请您输入影片放映时间:");String startTime  = SYS_SC.nextLine();Movie movie = new Movie(name,actor,Double.parseDouble(time),Double.parseDouble(price),Integer.parseInt(totalNumber),sdf.parse(startTime));movies.add(movie);System.out.println("您已经成功上架了:《"+movie.getName()+"》!");return;} catch (ParseException e) {e.printStackTrace();Logger.error("开始时间解析出现问题!");}}}

3.8展示所有影片排片信息

    /*** 展示全部拍片信息*/private static void showBusinessInfos() {System.out.println("===================小蝶电影商家详情界面===================");Logger.info(loginUser.getUserName()+"商家,正在查看详情页面~~~");//根据商家对象,作为Map集合的键,提取对应的值就是其拍片信息:Map<Business,List<Movie>>ALL_movieBusiness 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);System.out.println("片名\t\t\t主演\t\t时长\t\t评分\t\t票价\t\t余票数量\t\t开始放映时间");if(movies.size()>0){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("您的影院没有影片可以播出!");}}

3.9更新影片内容

    /*** 更新影片内容*/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;}while (true) {System.out.println("请输入需要修改的电影的名称:");String updateMovieName = SYS_SC.nextLine();Movie movie = getMovieByName(updateMovieName, movies);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();while (true) {try {System.out.println("请您输入影片修改后的放映时间:");String startTime  = SYS_SC.nextLine();movie.setName(name);movie.setActor(actor);movie.setTime(Double.parseDouble(time));movie.setPrice(Double.parseDouble(price));movie.setNumber(Integer.parseInt(totalNumber));movie.setStartTime(sdf.parse(startTime));System.out.println("恭喜您,成功修改了影片!");showBusinessInfos();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("OK!");return ;}}}}

3.10退出

四、用户界面以及功能

4.1用户界面

 /*** 客户操作界面*/private static void showCustomerMain() {while (true) {System.out.println("===================小蝶电影客户界面===================");System.out.println(loginUser.getUserName() + (loginUser.getSex()=='男'? "先生":"女士" + "欢迎您进入系统" +"\t\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":// 展示全部影片信息showAllMovies();break;case "2":// 根据电影名称查询电影信息getMovie();break;case "3":// 评分功能scoreMovie();break;case "4":// 购票功能buyMovie();break;case "5":return; // 退出方法default:System.out.println("键入命令错误!!");break;}}}

4.2展示所有影片数据

    /*** 用户功能:展示所有电影数据*/private static void showAllMovies() {System.out.println("===================小蝶电影查看所有电影界面===================");ALL_MOVIES.forEach((business, movies) -> {System.out.println(business.getShopName()+"\t\t电话:"+business.getPhone()+"\t\t地址"+business.getAddress());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()));}});}

4.3根据电影名称查询电影

    /*** 根据电影名称查询电影*/private static void getMovie() {System.out.println("请输入查询的电影名称:");String movieName = SYS_SC.nextLine();ALL_MOVIES.forEach((business, movies) -> {System.out.println(business.getShopName() + "\t\t电话:" + business.getPhone() + "\t\t地址" + business.getAddress());System.out.println("\t\t\t片名\t\t\t主演\t\t时长\t\t评分\t\t票价\t\t余票数量\t\t开始放映时间");for (Movie movie : movies) {if (movie.getName().contains(movieName)) {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()));break;}}});}

4.4评分功能

   /*** 用户功能:评分*/private static void scoreMovie() {// 1、查询当前登录成功的用户历史购买记录,看哪些电影是它可以评分的。Customer c = (Customer) loginUser;Map<String, Boolean> movies = c.getBuyMovies();if(movies.size() == 0 ){System.out.println("当前您没有看过电影,不能评价!");return;}// 买过了 ,看哪些电影是它可以评分的。movies.forEach((name, flag) -> {if(flag){System.out.println(name +"此电影已评价");}else {System.out.println("请您对:" + name +"进行打分(0-10):");double score = Double.parseDouble(SYS_SC.nextLine());// 先根据电影名称拿到评分数据List<Double> scores = MOVIES_SCORE.get(name); // MOVIES_SCORE = [ 名称=[10] , ... ]if(scores == null){// 说明此电影是第一次评价scores = new ArrayList<>();scores.add(score);MOVIES_SCORE.put(name , scores);}else {scores.add(score);}movies.put(name, true);}});}

4.5购票功能(所有功能里面最不好写的(逻辑比较多))

  /*** 用户功能:购票功能*/private static void buyMovie() {System.out.println("===================小蝶电影购买电影票界面===================");showAllMovies();while (true) {System.out.println("请输入购买门票的门店:");String shopName = SYS_SC.nextLine();//1.查询是否存在该商家Business business = getUserByShopName(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();Movie movie = getMovieByshopAndName(business, movieName);if(movie!=null){//开始购买while (true) {System.out.println("请输入要购买的电影票数量:");String number = SYS_SC.nextLine();int buyNumber = Integer.parseInt(number);//判断是否购票if(movie.getNumber()>=buyNumber){//当前需要购买的moneydouble 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);Customer c = (Customer) loginUser;// 记录购买电影的信息// 第一个参数是购买的电影,第二个参数是没有评价的标记!c.getBuyMovies().put(movie.getName(), false);return;// 结束方法}else{System.out.println("钱不够!不能够买!");System.out.println("是否继续买票?y/n");String command = SYS_SC.nextLine();switch (command) {case "y":break;default:System.out.println("OK!");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("OK!");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("OK!");return ;}}}}}

4.6退出

五、总结

一个简单的项目,一个简单的练习,还希望大家不要喷,个人只是为了总结而发布,如果这篇文章对你有用或者提供了一定的帮助,留下小心心,收藏点一波,不要迷路!

Java数据结构项目相关推荐

  1. 年末将至,值得你关注的16个Java 开源项目!

    Star 的数量统计于 2019-12-29. 1.JavaGuide 把这个排第一没有个人因素影响哈! Guide 哥我自己大三开始维护的,目前算是纯 Java 类型项目中 Star 数量最多的项目 ...

  2. java获取网络图片_有了这50套Java毕设项目(源码 案例),offer拿到手软,无偿分享...

    简介:又到了开学季,不少人都很是烦恼,手把手教你做Java毕设项目,有教程视频源码100套随意选择,试试手!!列举其中2个系统大纲在线考试系统1.综述网络考试系统的项目背景及国内外发展现状:2.分析传 ...

  3. 开源知识管理系统_逛了4年Github,一口气把我收藏的 Java 开源项目分享给你

    好像忘记贴项目地址了:github.com/Snailclimb/- Awsome Java Great Java project on Github(Github 上非常棒的 Java 开源项目). ...

  4. 15个热门Java面试项目整合,吃透它,大厂offer拿到手软

    今天分享的春招系列,包括了最近热门的JeeSite.XMall商城.Cloud-Platform商城.Piggy Metrics等 15 个专题技术点,都是小编在各个大厂总结出来的面试真题,已经有很多 ...

  5. 16 张图带你搞懂 Java 数据结构,从此想不飘都难!

    CSDN 的小伙伴们,大家好,我是沉默的王二. 假期结束了,需要快速切换到工作的状态投入到新的一天当中.放假的时候痛快地玩耍,上班的时候积极的工作,这应该是我们大多数"现代人"该有 ...

  6. java qq项目_Java版QQ项目

    Java版QQ项目详细设计之:概述 2012-03-16 10:40 wangchangshuai0010 wangchangshuai0010的博客 前两天在博客上,发了一篇博文,概述了java q ...

  7. 哪吒社区技能树16 张图带你搞懂 Java 数据结构,从此想不飘都难

    目录 一.数组 二.链表 三.栈 四.队列 五. 树 1.普通树:对子节点没有任何约束.​ 2.二叉树:每个节点最多含有两个子节点的树. 二叉树按照不同的表现形式又可以分为多种. 3.二叉查找树:英文 ...

  8. 2022面试,Java面试项目推荐,15个项目吃透两个offer拿到手软

    项目名称:JeeSite 项目所用技术栈:Spring.Spring MVC.MyBatis.Apache Shiro.Bootstrap UI等 项目简介:JeeSite 是一个 Java EE 企 ...

  9. 一.Java数据结构与算法:如何开始

    数据结构和算法是计算机科学的核心概念之一,它们在软件开发中起着至关重要的作用.学习Java数据结构和算法不仅有助于提高编程能力,还能让你在面试和职业发展中脱颖而出.本文将为你介绍数据结构和算法的重要性 ...

  10. 2020年值得你学习的16个Java 开源项目!

    1.JavaGuide 把这个排第一没有个人因素影响哈! Guide 哥我自己大三开始维护的,目前算是纯 Java 类型项目中 Star 数量最多的项目了.但是,本仓库的价值远远(+N次 )比不上像 ...

最新文章

  1. 深入理解 Java 虚拟机 - 你了解 GC 算法原理吗
  2. select 在各浏览器中显示option的测试结果分享
  3. 个性化推荐之召回的方法
  4. 【原】关于ActiveX插件小项目总结
  5. php 重定向数据不丢失,PHP重定向如何实现数据不丢失?
  6. 经济学与计算机学收入,考研心得,计算机专业跨考经济学复习经验谈
  7. 【转载】fullpage.js学习
  8. java返回特定下标元素_java基础--输出数组中指定元素的下标
  9. 冲上云霄 之一 初识云
  10. Jmeter使用SSL(HTTPS协议)
  11. 第一个shell脚本——修改配置文件
  12. thinkphp 中英文语言包
  13. ArcGIS的ArcMap的Mxd格式符号转换为Geoserver style的sld格式
  14. 第13课:JSP动作 Indude动作和指令的区别(JSP教程 JSP入门实战教程 黄菊华Java网站开发系列教程)
  15. SDKMAN因为网络问题用不了怎么办?
  16. 使文本框永远失去焦点并且去掉边框
  17. Vue.js快速入门之五:Mockjs的使用和语法详解
  18. excel组合汇总_Excel汇总20150302
  19. 动手实践看懂深度学习的DP和DDP
  20. linux7.4 yum配置,redhat7.4配置yum

热门文章

  1. C语言青蛙跳台阶详解
  2. 图纸上标注的是实际尺寸吗_尺寸数字应该标注图纸上所画实际长度。
  3. 谍影追踪:全球首例UEFI_BIOS木马分析
  4. 一个百万富翁遇到一个陌生人,陌生人找他谈一个换钱的计划,该计划如下:我每天给你十万元,而你第一天只需给我一分钱;第二天我仍给你十万元,你给我两分钱;第三天我仍给你十万元,你给我四分钱;....,你每天
  5. Winfrom 常用控件(二)
  6. 【向生活低头】用python提取gif动图的每一帧为png格式
  7. 解决Visio和office365安装兼容问题
  8. 解决:Android中常见的热门标签的流式布局flowlayout不能wrap_content
  9. Linux Bind 安装
  10. CSS选择器(随笔)