package oopdesign; import java.math.BigDecimal; import java.time.LocalDate; import java.util.HashMap; import java.util.HashSet; /** * Created by jeremyhu on 9/17/22. */ // Actors // Class Theater Kiosk // Handles the logic for buying a ticket and updating class theater info // Class Theater: // Unique ID // Class Seats: // Two types: handicap, regular // Class Movie // Name // date time // Theater ID // Cost: [regular, child, veteran, elderly] // Workflow: // Buying a ticket and updating theater data // I will assume all the monetary transaction work is done elsewhere public class MovieTickets { HashMap theaters; private Integer theaterSizeDefault = 70; enum TicketTypes { REGULAR, CHILD, VETERAN, ELDER; } enum SeatTypes { HANDICAP, REGULAR; } class Movie { public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } private String title; public LocalDate getDate() { return date; } public void setDate(LocalDate date) { this.date = date; } private LocalDate date; public BigDecimal getRegularPrice() { return regularPrice; } public void setRegularPrice(BigDecimal regularPrice) { this.regularPrice = regularPrice; } private BigDecimal regularPrice; public Theater getTheater() { return theater; } public void setTheater(Theater theater) { this.theater = theater; } private Theater theater; public Movie(String title, LocalDate date, BigDecimal price, Theater theater) { this.title = title; this.date = date; this.regularPrice = price; this.theater = theater; } } class Kiosk { public int buyTicket(Movie m, Seat s, TicketTypes tType) { // I assume all the money transaction logic is taken care of somewhere else processTransaction(m, s, tType); Theater theater = m.getTheater(); if(theater.remainingSeats() <= 0) { return -1; } theater.takeSeat(s.getId()); return s.getId(); } public void processTransaction(Movie m, Seat s, TicketTypes tType) { return; } } class Seat { private int id; private SeatTypes type; public int getId() { return id; } public void setId(int id) { this.id = id; } public Seat(int id, SeatTypes type) { this.id = id; this.type = type; } } class Theater { private HashMap seats; private int id; public Theater(int id) { this.id = id; this.seats = new HashMap(); } public int getID() { return this.id; } public void setID(int id) { this.id = id; } public int remainingSeats() { return seats.size(); } public int takeSeat(int seatID) { seats.remove(seatID); return seats.size(); } } }