电影院买票程序项目

该文章展示了一个简单的Java程序,实现了电影票务系统的基本功能。包括电影类(包含电影名、导演、主演、价格和放映时间),普通票类(包含电影、座位号和计算票价的方法),以及其子类学生票和赠票。电影院类用于存储电影信息并提供查询功能,而TicketFactory类则作为工厂模式用于创建不同类型的票。此外,还有一个购票打印接口IPrint和其实现。用户可以通过输入选择浏览电影、购票等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.电影类

package com.xu.cinema;

public class Movie {
    private String name;//电影名
    private String direction;//导演
    private String actor;//主演
    private int price;//价格
    private String time;//放映时间

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDirection() {
        return direction;
    }

    public void setDirection(String direction) {
        this.direction = direction;
    }

    public String getActor() {
        return actor;
    }

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

    public int getPrice() {
        return price;
    }

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

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public Movie() {
    }

    public Movie(String name, String direction, String actor, int price, String time) {
        this.name = name;
        this.direction = direction;
        this.actor = actor;
        this.price = price;
        this.time = time;
    }

    @Override
    public String toString() {
        return "Movie{" +
                "name='" + name + '\'' +
                ", direction='" + direction + '\'' +
                ", actor='" + actor + '\'' +
                ", price=" + price +
                ", time='" + time + '\'' +
                '}';
    }
}

2.普通票类

package com.xu.cinema;
/**
 * 普通票类(学生票与赠票的父类)
 * */
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

public class Ticket implements  IPrint{
    private Movie movie;//电影
    private String seatnum;//座位号
    private String createNum(){
        Random rand=new Random();
        int m=rand.nextInt(20)+1;//排
        int n= rand.nextInt(30)+1;//号
        return m+"排"+n+"号";
    }
    protected int calc(){
        //计算票价的方法:需要子类进行重写
        //普通票价格就是电影的价格
        return this.movie.getPrice();
    }

    public Movie getMovie() {
        return movie;
    }

    public void setMovie(Movie movie) {
        this.movie = movie;
    }

    public String getSeatnum() {
        return seatnum;
    }

    public void setSeatnum(String seatnum) {
        this.seatnum = seatnum;
    }

    public Ticket() {
        this.seatnum =this.createNum();
    }

    public Ticket(Movie movie) {
        this();//调用本类的默认构造,必须第一行
        this.movie = movie;
    }

    @Override
    public String toString() {
        return "Ticket{" +
                "movie=" + movie +
                ", seatnum='" + seatnum + '\'' +
                '}';
    }

    public static void main(String[] args) {
        Ticket ticket=new Ticket();
        System.out.println(ticket);
    }
    //重写接口方法
    @Override
    public void print() {
        //打印用户购票样式
        SimpleDateFormat sdf=new SimpleDateFormat();
        System.out.println("===============夜不归宿电影院===============");
        System.out.println("电影名称:【"+this.movie.getName()+"】\t座位:"+this.seatnum+"\n");
        System.out.println("票价:¥"+this.calc()+"元\t放映时间:"+this.movie.getTime());
        System.out.println("=======购票时间【"+sdf.format(new Date())+"】=======");
    }
}

3.学生票类

package com.xu.cinema;

public class StudentTicket extends Ticket{
    //特有属性(折扣)
    private int discont;

    public int getDiscont() {
        return discont;
    }

    public void setDiscont(int discont) {
        this.discont = discont;
    }

    public StudentTicket() {
    }

    public StudentTicket(Movie movie) {
        super(movie);
    }

    @Override
    public String toString() {
        return super.toString();
    }

    @Override
    protected int calc() {
        return this.getMovie().getPrice()/10*this.discont;
    }
}

4.赠票类

package com.xu.cinema;

public class FreeTicket extends Ticket{
    //特有的客户姓名
    private String cname;

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public FreeTicket() {
    }

    public FreeTicket(Movie movie) {
        super(movie);
    }

    @Override
    protected int calc() {
        return 0;
    }
}

5.电影院类

package com.xu.cinema;

public class Cinema {
    //定义一个电影数组:来存放当前电影院要放映的所有电影
    private static Movie[] movies=new Movie[4];
    //静态代码块
    static {
        //为了提高速度,且只执行一次
        //存放若干个电影
        //创建电影
        Movie m1=new Movie("变形金刚","迈克尔","张三",100,"20:00");
        Movie m2=new Movie("变形金刚2","迈克尔","张三",36,"19:00");
        Movie m3=new Movie("变形金刚3","迈克尔","张三",40,"20:30");
        Movie m4=new Movie("变形金刚4","迈克尔","张三",80,"15:00");
        //存入到数组中
        movies[0]=m1;
        movies[1]=m2;
        movies[2]=m3;
        movies[3]=m4;
    }
    //浏览所有电影信息
    public void showMovies(){
        if (movies.length>0){
            for (Movie movie:movies){
                System.out.println(movie);
            }
        }
    }
    /*
    * 根据电影名称获取电影对象
    * */
    public Movie findByName(String cname){
        Movie m=null;
        //遍历数组
        for (Movie movie:movies){
            //根据名称进行查询
            if (cname.equals(movie.getName())){
                m= movie;
                break;
            }
        }
        return m;
    }
}

6.电影票工厂

package com.xu.cinema;

public class TicketFactory {
    public static Ticket choose(int m,Movie movie){
        Ticket ticket=null;
        switch (m){
            case 1:ticket=new Ticket(movie);break;
            case 2:ticket=new StudentTicket(movie);break;
            case 3:ticket=new FreeTicket(movie);break;
        }
        return ticket;
    }
}

7.创建购票打印接口

package com.xu.cinema;
/**
 * 打印接口
 * */
public interface IPrint {
    void print();
}

8.实现打印效果

package com.xu.cinema;
/**
 * 电影院项目测试类
 * */
import java.util.Scanner;

public class View {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int m=0;
        //创建Cinema的对象
        Cinema cinema=new Cinema();
        do {
            System.out.println("夜不归宿电影院欢迎您!");
            System.out.println("1:浏览电影 2:购票 3:退出");
            m=in.nextInt();
            switch(m){
                case 1://浏览电影
                    cinema.showMovies();
                    break;
                case 2://购票
                    System.out.println("请输入电影名称:");
                    String name=in.next();
                    //接收获取的电影对象
                    Movie movie=cinema.findByName(name);
                    //输出电影对象
                    if (movie!=null) {
                        System.out.println(movie);
                        System.out.println("请选择票的类型:1.普通 2.学生 3.增票");
                        int n=in.nextInt();
                        //调用工厂类
                        Ticket ticket= TicketFactory.choose(n, movie);
                        //普通
                        //学生
                        if (ticket instanceof  StudentTicket){
                            System.out.println("请输入折扣:");
                            int zk=in.nextInt();
                            ((StudentTicket) ticket).setDiscont(zk);
                        }
                        //赠票
                        if (ticket instanceof  FreeTicket){
                            //设置客户姓名
                            System.out.println("请输入客户姓名:");
                            String cname=in.next();
                            ((FreeTicket) ticket).setCname(cname);
                        }
                        //计算价格
                        int calc = ticket.calc();
                        //输出用户购票信息
                        ticket.print();
                        System.out.println("票价是"+calc+"元");

                    }else{
                        System.out.println("对不起,电影不存在!");
                    }
                    break;
                case 3://退出
                    System.out.println("谢谢光临,下次再见!");
                    System.exit(0);//参数0表示正常退出
                    break;
            }
        }while(m!=0);
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值