Untitled

 avatar
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...