Java卖票系统的简单实现

在现代应用程序中,卖票系统是一个经典的案例,广泛应用于电影院、火车站和各种活动。本文将使用Java语言展示一个简单的卖票系统,并包含代码示例来说明其实现过程。同时,我们也会使用Mermaid语法绘制类图,帮助大家更好地理解系统结构。

系统需求

我们设想一个简单的卖票系统,需要具备以下功能:

  1. 查询当前可售票数量。
  2. 购买票,必须检查是否有足够的票。
  3. 退票,必须检验用户是否有有效的票。

类图

首先,让我们看看整个系统的类图。这将有助于我们理解类之间的关系。

classDiagram
    class Ticket {
        +int ticketId
        +String movieName
        +int totalTickets
        +int soldTickets
        +int availableTickets()
        +boolean sellTicket(int number)
        +boolean refundTicket(int number)
    }
    Ticket o-- "1" User : owns
    class User {
        +String userName
        +List<Ticket> tickets
        +boolean buyTicket(Ticket ticket, int number)
        +boolean returnTicket(Ticket ticket, int number)
    }

Ticket类

Ticket类负责管理电影票的信息和售票的相关操作。它包含总票数、已售出票数和可售票数等属性。

public class Ticket {
    private int ticketId;
    private String movieName;
    private int totalTickets;
    private int soldTickets = 0;

    public Ticket(int ticketId, String movieName, int totalTickets) {
        this.ticketId = ticketId;
        this.movieName = movieName;
        this.totalTickets = totalTickets;
    }

    public int availableTickets() {
        return totalTickets - soldTickets;
    }

    public boolean sellTicket(int number) {
        if (availableTickets() >= number) {
            soldTickets += number;
            return true;
        }
        return false;
    }

    public boolean refundTicket(int number) {
        if (soldTickets >= number) {
            soldTickets -= number;
            return true;
        }
        return false;
    }
}

User类

接下来是User类,它代表用户并持有电影票。用户可以购买或退回票。

import java.util.ArrayList;
import java.util.List;

public class User {
    private String userName;
    private List<Ticket> tickets = new ArrayList<>();

    public User(String userName) {
        this.userName = userName;
    }

    public boolean buyTicket(Ticket ticket, int number) {
        if (ticket.sellTicket(number)) {
            tickets.add(ticket);
            return true;
        }
        return false;
    }

    public boolean returnTicket(Ticket ticket, int number) {
        if (ticket.refundTicket(number)) {
            tickets.remove(ticket);
            return true;
        }
        return false;
    }
}

实际操作示例

现在我们可以创建一个简单的主类来测试我们的系统是否正常工作。

public class Main {
    public static void main(String[] args) {
        Ticket ticket = new Ticket(1, "Inception", 100);
        User user = new User("Alice");

        // 查询可售票
        System.out.println("可售票数量: " + ticket.availableTickets());

        // 用户购买票
        if (user.buyTicket(ticket, 5)) {
            System.out.println("购买成功!");
        } else {
            System.out.println("购买失败!");
        }

        // 查询可售票
        System.out.println("可售票数量: " + ticket.availableTickets());

        // 用户返还票
        if (user.returnTicket(ticket, 5)) {
            System.out.println("退票成功!");
        } else {
            System.out.println("退票失败!");
        }

        // 查询可售票
        System.out.println("可售票数量: " + ticket.availableTickets());
    }
}

总结

本文通过简单的Java代码展示了一个基本的卖票系统,从类的定义到操作,展示了对象之间的关系。这样的系统可以扩展和优化,包括实现更复杂的异常处理、并发控制等功能。希望通过这篇文章,大家能对Java中的面向对象编程有更深刻的理解。