Untitled
unknown
plain_text
2 years ago
7.6 kB
8
Indexable
import java.io.*; import java.net.*; import java.util.*; import java.util.concurrent.ConcurrentHashMap; //Server public class MovieTicketServer { private static final String TICKET_FILE = "tickets.txt"; private static Map<Integer, MovieTicket> tickets = new ConcurrentHashMap<>(); private static int ticketCount = 0; public static void main(String[] args) { loadTickets(); try { ServerSocket serverSocket = new ServerSocket(12345); System.out.println("Server is running..."); while (true) { Socket clientSocket = serverSocket.accept(); System.out.println("Client connected."); Thread clientThread = new ClientHandler(clientSocket); clientThread.start(); } } catch (IOException e) { e.printStackTrace(); } } private static class ClientHandler extends Thread { private Socket clientSocket; private PrintWriter out; private BufferedReader in; public ClientHandler(Socket socket) { this.clientSocket = socket; } @Override public void run() { try { out = new PrintWriter(clientSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String message; while ((message = in.readLine()) != null) { if (message.equals("BOOK")) { bookTicket(); } else if (message.equals("LIST")) { listBookedTickets(); } else if (message.equals("EXIT")) { break; } } in.close(); out.close(); clientSocket.close(); System.out.println("Client disconnected."); } catch (IOException e) { e.printStackTrace(); } } private void bookTicket() { // Simulate booking a ticket MovieTicket ticket = findAvailableTicket(); if (ticket != null) { ticket.setBuyerName("John Doe"); updateTicketFile(); out.println("Ticket booked: " + ticket.toString()); } else { out.println("No available tickets."); } } private void listBookedTickets() { // Send the list of booked tickets to the client out.println("Booked Tickets: " + getBookedTickets().toString()); } private synchronized MovieTicket findAvailableTicket() { for (MovieTicket ticket : tickets.values()) { if (ticket.getBuyerName() == null) { ticket.setBuyerName("John Doe"); return ticket; } } return null; } private synchronized List<MovieTicket> getBookedTickets() { List<MovieTicket> booked = new ArrayList<>(); for (MovieTicket ticket : tickets.values()) { if (ticket.getBuyerName() != null) { booked.add(ticket); } } return booked; } private synchronized void updateTicketFile() { try (FileWriter writer = new FileWriter(TICKET_FILE)) { for (MovieTicket ticket : tickets.values()) { writer.write(ticket.toFileString() + "\n"); } } catch (IOException e) { e.printStackTrace(); } } } private static void loadTickets() { try (BufferedReader reader = new BufferedReader(new FileReader(TICKET_FILE))) { String line; while ((line = reader.readLine()) != null) { MovieTicket ticket = MovieTicket.fromFileString(line); if (ticket != null) { tickets.put(ticket.getTicketId(), ticket); if (ticket.getTicketId() > ticketCount) { ticketCount = ticket.getTicketId(); } } } } catch (IOException e) { e.printStackTrace(); } } } //Client import java.io.*; import java.net.*; import java.util.Scanner; public class MovieTicketClient { public static void main(String[] args) { try { Socket socket = new Socket("localhost", 12345); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); Scanner consoleInput = new Scanner(System.in); String message; do { System.out.println("Enter a command (BOOK, LIST, EXIT):"); message = consoleInput.nextLine().trim().toUpperCase(); out.println(message); String response; while (!(response = in.readLine()).isEmpty()) { System.out.println(response); } } while (!message.equals("EXIT")); in.close(); out.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } //MovieTicket Class: import java.util.StringTokenizer; public class MovieTicket { private int ticketId; private String movieName; private String seat; private String showDate; private String startTime; private String buyerName; private double price; public MovieTicket(int ticketId, String movieName, String seat, String showDate, String startTime, String buyerName, double price) { this.ticketId = ticketId; this.movieName = movieName; this.seat = seat; this.showDate = showDate; this.startTime = startTime; this.buyerName = buyerName; this.price = price; } public int getTicketId() { return ticketId; } public String getMovieName() { return movieName; } public String getSeat() { return seat; } public String getShowDate() { return showDate; } public String getStartTime() { return startTime; } public String getBuyerName() { return buyerName; } public void setBuyerName(String buyerName) { this.buyerName = buyerName; } public double getPrice() { return price; } public String toFileString() { return ticketId + "," + movieName + "," + seat + "," + showDate + "," + startTime + "," + (buyerName == null ? "null" : buyerName) + "," + price; } @Override public String toString() { return "Ticket #" + ticketId + ": " + movieName + " - Seat " + seat + " - Date: " + showDate + " - Time: " + startTime + " - Price: $" + price + " - Buyer: " + (buyerName == null ? "Not booked" : buyerName); } public static MovieTicket fromFileString(String fileString) { StringTokenizer tokenizer = new StringTokenizer(fileString, ","); int ticketId = Integer.parseInt(tokenizer.nextToken()); String movieName = tokenizer.nextToken(); String seat = tokenizer.nextToken();
Editor is loading...