简易购买电影票系统(Java)

该系统登录的用户分为商家用户和普通用户两种,这两种用户要进行的操作不同,但两者的也有部分的共同特征,所以可以定义一个父类存储两者的共同属性

//充当用户和商家的父类。
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;
    }
}

然后再分别定义商家类和用户类
商家类:

public class Business extends User {
    private String shopname;
    private String place;



    public String getShopname() {
        return shopname;
    }

    public void setShopname(String shopname) {
        this.shopname = shopname;
    }

    public String getPlace() {
        return place;
    }

    public void setPlace(String place) {
        this.place = place;
    }
}

用户类:
因为父类User中定义的变量已经满足成员的所有属性,所以直接用Customer类继承User类就行了

public class Customer extends User{

}

最后还要定义一个电影类用来定义电影的属性:

import java.util.Date;

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 Date getStarttime() {
        return starttime;
    }

    public void setStarttime(Date starttime) {
        this.starttime = starttime;
    }



    public Movie() {
    }
    //因为评分功能不是由商家进行评价的,而是由看过电影后的用户进行评价的,所以此处有参构造器处暂时不用加入score。
    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;
    }
}

准备好需要的东西后就可以开始写实现的方法:

package RUN;

import Bean.Business;
import Bean.Customer;
import Bean.Movie;
import Bean.User;


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

public class MovieSystem {
    /*
    定义系统的数据容器用于储存数据。
    1.储存很多对象(客户对象,商家对象)
     */
    public static final List<User> ALL_USER=new ArrayList<>();
    /*
    储存系统全部商家和其排片信息。
      商品1=【p1,p2,p3...】
      商品2=【p1,p2...】
      电影信息应用键值对进行储存,所以采用Map集合。
     */
    public static final Map<Business,List<Movie>> ALL_MOVIES=new HashMap<>();
    //将Scanner定义为静态,这样就可以在这个类的任何地方调用
    public static final Scanner sc=new Scanner(System.in);
    //定义一个静态的User类型的变量记住当前登录成功的用户
    public static User loginuser;
    //定义输入的时间的格式
    public static SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    /*
    准备一些测试数据
     */
    static {
        Customer c=new Customer();
        c.setLoginname("zyf888");
        c.setPassword("123456");
        c.setUsername("小刘");
        c.setSex('男');
        c.setMoney(10000);
        c.setPhone("110110");
        ALL_USER.add(c);

        Customer c1=new Customer();
        c1.setLoginname("gzl888");
        c1.setPassword("123456");
        c1.setUsername("小关");
        c1.setSex('女');
        c1.setMoney(2000);
        c1.setPhone("111111");
        ALL_USER.add(c1);

        Business b=new Business();
        b.setLoginname("baozugong888");
        b.setPassword("123456");
        b.setUsername("小包");
        b.setMoney(0);
        b.setSex('男');
        b.setPhone("110110");
        b.setPlace("火星6号2b二层");
        b.setShopname("甜甜圈国际影城");
        ALL_USER.add(b);
        List<Movie> Movies=new ArrayList<>();
        ALL_MOVIES.put(b,Movies);

        Business b1=new Business();
        b1.setLoginname("lsp888");
        b1.setPassword("123456");
        b1.setUsername("老包");
        b1.setMoney(0);
        b1.setSex('女');
        b1.setPhone("110110");
        b1.setPlace("火星8号88二层");
        b1.setShopname("巧克力国际影城");
        ALL_USER.add(b1);
        List<Movie> Movies1=new ArrayList<>();
        ALL_MOVIES.put(b1,Movies1);
    }
    //通过调用showmain方法进入之后的操作
    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 commend=sc.nextLine();
            switch (commend){
                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=sc.nextLine();
            System.out.println("请输入登录密码");
            String password=sc.nextLine();
            //根据登录名称查询用户对象。(重新定义一个方法进行判断)
            User u= GetUserByLoginName(loginname);
            if (u!=null){
                if (u.getPassword().equals(password)){
                    //登录成功
                    loginuser=u;
                    //判断登录进去的是商家用户还是普通用户
                    if (u instanceof Customer){
                        //当前登录的是普通用户
                        showCustomer();
                    }else {
                        //当前登陆的是商家用户
                        showBusiness();
                    }
                    return;
                }else {
                    System.out.println("密码有误");
                }
            }else {
                System.out.println("登录名称错误");
            }
        }
    }
    //用户操作界面
    private static void showCustomer() {
        System.out.println("===电影客户端===");
        System.out.println(loginuser.getLoginname()+(loginuser.getSex()=='男'?"先生":"女士"+"欢迎您进入系统"));
        System.out.println("请选择要操作的功能");
        System.out.println("1.展示所有影片信息功能");
        System.out.println("2.根据电影名称查询电影信息");
        System.out.println("3.评分功能");
        System.out.println("4.购票功能");
        System.out.println("5.退出功能");
        while (true){
            System.out.println("请输入您要操作的命令");
            String commend=sc.nextLine();
            switch (commend){
                case "1":
                    //展示所有影片信息
                    showAllMovies();
                    break;
                case "2":
                    //根据电影名称查询电影信息
                    break;
                case "3":
                    //评分功能
                    break;
                case "4":
                    //购票功能
                    buyMovie();
                    break;
                case "5":
                    //退出功能
                    return;
                default:
                    System.out.println("不存在该命令");
                    break;
            }
        }
    }

    private static void buyMovie() {
        showAllMovies();
        System.out.println("===用户购票信息===");
        while (true) {
            System.out.println("请输入需要购票的门店");
            String shopname= sc.nextLine();
            //查询是否存在商家
            Business business=getbussinessbyshopname(shopname);
            if (business==null){
                System.out.println("对不起,没有该店铺");
            }else {
                //此时商家的全部排片
                List<Movie> movies=ALL_MOVIES.get(business);
                //判断是否存在上架的电影
                if (movies.size()>0){
                    //开始进行购买
                    System.out.println("请输入需要购买的电影名称");
                    String name= sc.nextLine();
                    //去当前商家下,查询该电影对象
                    Movie movie=getMovieByShopAndName(business,name);
                    if (movie!=null){
                        //开始购买
                        System.out.println("请输入要购买的电影票个数");
                        String number= 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("余额不足");
                                System.out.println("是否继续买票 y/n");
                                String commend= sc.nextLine();
                                switch (commend){
                                    case "y":
                                        break;
                                    case "n":
                                        System.out.println("好的");
                                        return;
                                }
                            }
                        }else {
                            //票数不够
                            System.out.println("您当前最多可购买"+movie.getNumber());
                            System.out.println("是否继续买票 y/n");
                            String commend= sc.nextLine();
                            switch (commend){
                                case "y":
                                    break;
                                case "n":
                                    System.out.println("好的");
                                    return;
                            }
                        }
                    }

                }else {
                    System.out.println("该电影院暂不营业");
                    System.out.println("是否继续买票 y/n");
                    String commend= sc.nextLine();
                    switch (commend){
                        case "y":
                            break;
                        case "n":
                            System.out.println("好的");
                            return;
                    }
                }
            }
        }
    }
    //在普通用户够票时判断是否存在输入的电影
    public static Movie getMovieByShopAndName(Business business,String name){
        List<Movie> movies=ALL_MOVIES.get(business);
        for (Movie movie : movies) {
            if (movie.getName().equals(name)){
                return movie;
            }
        }
        return null;
    }
    //在普通用户够票时判断是否存在输入的影院
    private static Business getbussinessbyshopname(String shopname) {
        Set<Business> businesses=ALL_MOVIES.keySet();
        for (Business business : businesses) {
            if (business.getShopname().equals(shopname)){
                return business;
            }
        }
        return null;
    }
    /*
    用户操做
    所有商家影片信息
    */
    private static void showAllMovies() {
        System.out.println("===展示全部商品排片信息===");
        ALL_MOVIES.forEach((business, movies) -> {
            System.out.println(business.getShopname()+"\t\t电话"+business.getPhone()+"\t\t地址"+business.getPlace());
            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()));
            }
        });
    }

    /*
    进入商家后台操作界面
     */
    private static void showBusiness() {
        while (true){
            System.out.println("===商家界面===");
            System.out.println(loginuser.getLoginname()+(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 commend=sc.nextLine();
            switch (commend){
                case "1":
                    //展示全部排片信息
                    showBussinessInfos();
                    break;
                case "2":
                    //上架电影信息
                    addMovie();
                    break;
                case "3":
                    //下架电影信息
                    deleteMovie();
                    break;
                case "4":
                    //修改电影信息
                    updateMovie();
                    break;
                case "5":
                    //退出
                    return;
                default:
                    System.out.println("不存在该命令");
                    break;
            }
        }
    }
    /*
    电影信息更新
     */
    private static void updateMovie() {
        System.out.println("===修改电影===");
        Business business=(Business) loginuser;
        List<Movie> movies=ALL_MOVIES.get(loginuser);
        if (movies.size()==0){
            System.out.println("当前无片可修改");
            return;
        }
        while (true) {
            System.out.println("请您输入需要修改的电影名称");
            String moviename= sc.nextLine();
            //去查询有没有这个影片对象
            Movie movie=getmoviebyname(moviename);
            if (movie!=null){
                System.out.println("请输入修改后的新片名:");
                String name= sc.nextLine();
                System.out.println("请输入修改后的主演:");
                String actor=sc.nextLine();
                System.out.println("请输入修改后的时长");
                double time= sc.nextDouble();
                System.out.println("请输入修改后的票价");
                double price= sc.nextInt();
                System.out.println("请输入修改后的票数");
                int number=sc.nextInt();
                while (true) {
                    try {
                        System.out.println("请输入修改后的放映时长");
                        String stime= sc.nextLine();
                        movie.setName(name);
                        movie.setActor(actor);
                        movie.setTime(time);
                        movie.setPrice(price);
                        movie.setNumber(number);
                        movie.setStarttime(sdf.parse(stime));
                        System.out.println("恭喜您成功修改影片");
                        showBussinessInfos();
                        return;
                    } catch (Exception e) {
                        e.printStackTrace();
                        System.out.println("输入时长形式可能有误");
                    }
                }
            }else {
                System.out.println("您的店铺没有上架该影片");
                System.out.println("请问还要继续修改吗? y/n");
                String commend= sc.nextLine();
                switch (commend){
                    case "y":
                        break;
                    case "n":
                        System.out.println("好的");
                        return;

                }
            }
        }
    }
    /*
    电影下架
     */
    private static void deleteMovie() {
        System.out.println("===下架电影===");
        //将登录的用户信息强转为Business类型。
        Business business=(Business) loginuser;
        List<Movie> movies=ALL_MOVIES.get(loginuser);
        if (movies.size()==0){
            System.out.println("当前无片可下架");
            return;
        }
        //让用户选择需要下架的电影名称
        while (true) {
            System.out.println("请您输入需要下架的电影名称");
            String moviename= sc.nextLine();
            //去查询有没有这个影片对象
            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 commend= sc.nextLine();
                switch (commend){
                    case "y":
                        break;
                    case "n":
                        System.out.println("好的");
                        return;
                }
            }
        }
    }
    private static Movie getmoviebyname(String moviename) {
        Business business= (Business) loginuser;
        List<Movie> movies=ALL_MOVIES.get(loginuser);
        for (Movie movie : movies) {
            if (movie.getName().equals(moviename)){
                return movie;
            }
        }
        return null;
    }
    /*
    进行电影上架
     */
    private static void addMovie() {
        System.out.println("===上架电影===");
        Business business= (Business) loginuser;
        List<Movie> movies=ALL_MOVIES.get(loginuser);
        System.out.println("请输入新片名:");
        String name= sc.nextLine();
        System.out.println("请输入主演:");
        String actor=sc.nextLine();
        System.out.println("请输入时长");
        double time= sc.nextDouble();
        System.out.println("请输入票价");
        double price= sc.nextInt();
        System.out.println("请输入票数");
        int number=sc.nextInt();
        while (true) {
            try {
                System.out.println("请输入放映时长");
                String stime= sc.nextLine();
                Movie movie=new Movie(name,actor,time,price,number,  sdf.parse(stime));
                movies.add(movie);
                System.out.println("您已成功上架了,《"+movie.getName()+"》");
                return;
            } catch (ParseException e) {
                e.printStackTrace();
                System.out.println("输入时长形式可能有误");
            }
        }
    }


    //展示电影信息
    private static void showBussinessInfos() {
        System.out.println("===商家详情界面===");
      //根据商品的建,提取的值就是电影信息
      Business business= (Business) loginuser;
      System.out.println(business.getLoginname()+"\t\t电话"+business.getPhone()+"\t\t地址"+business.getPlace());
      //loginuser中储存的可以看作Map集合的建,然后调用API根据建提取出对应的值。
      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放映时间");
          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("您的店铺当前无片可播");
      }
    }

    public static User GetUserByLoginName(String loginname){
         for (User user : ALL_USER) {
             if (user.getLoginname().equals(loginname)){
                 return user;
             }
         }
         return null;
     }


至此可实现一些基本的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值