Advertisement
Gaudenz

Book Store

Apr 22nd, 2024
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 22.00 KB | None | 0 0
  1.  
  2. import java.awt.BorderLayout;
  3. import java.awt.Color;
  4. import java.awt.Dimension;
  5. import java.awt.GridLayout;
  6. import java.awt.event.ActionEvent;
  7. import java.awt.event.ActionListener;
  8. import java.util.ArrayList;
  9. import java.util.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12.  
  13. import javax.swing.BoxLayout;
  14. import javax.swing.JButton;
  15. import javax.swing.JComboBox;
  16. import javax.swing.JFrame;
  17. import javax.swing.JLabel;
  18. import javax.swing.JOptionPane;
  19. import javax.swing.JPanel;
  20. import javax.swing.JPasswordField;
  21. import javax.swing.JScrollPane;
  22. import javax.swing.JTable;
  23. import javax.swing.JTextField;
  24. import javax.swing.SwingConstants;
  25. import javax.swing.SwingUtilities;
  26. import javax.swing.border.EtchedBorder;
  27. import javax.swing.border.TitledBorder;
  28. import javax.swing.table.DefaultTableModel;
  29.  
  30. class Book {
  31.     private String title;
  32.     private String author;
  33.     private int quantity;
  34.     private double price;
  35.     private String genre;
  36.  
  37.     public Book(String title, String author, int quantity, double price, String genre) {
  38.         this.title = title;
  39.         this.author = author;
  40.         this.quantity = quantity;
  41.         this.price = price;
  42.         this.genre = genre;
  43.     }
  44.  
  45.     public String getTitle() {
  46.         return title;
  47.     }
  48.  
  49.     public String getAuthor() {
  50.         return author;
  51.     }
  52.  
  53.     public int getQuantity() {
  54.         return quantity;
  55.     }
  56.  
  57.     public void setQuantity(int quantity) {
  58.         this.quantity = quantity;
  59.     }
  60.  
  61.     public double getPrice() {
  62.         return price;
  63.     }
  64.  
  65.     public String getGenre() {
  66.         return genre;
  67.     }
  68.  
  69.     public void decreaseQuantity() {
  70.         quantity--;
  71.     }
  72. }
  73.  
  74. class BookManager {
  75.     private static BookManager instance;
  76.     private List<Book> books;
  77.  
  78.     private BookManager() {
  79.         books = new ArrayList<>();
  80.         // Initialize with some sample books
  81.         books.add(new Book("It", "Stephen King", 10, 15.99, "Fiction"));
  82.         books.add(new Book("Sapiens", "Yuval Noah Harari", 5, 12.50, "Non-Fiction"));
  83.     }
  84.  
  85.     public static BookManager getInstance() {
  86.         if (instance == null) {
  87.             instance = new BookManager();
  88.         }
  89.         return instance;
  90.     }
  91.  
  92.     public List<Book> getAllBooks() {
  93.         return books;
  94.     }
  95.  
  96.     public void addBook(Book book) {
  97.         books.add(book);
  98.     }
  99.  
  100.     // New method to get books by genre
  101.     public List<Book> getBooksByGenre(String genre) {
  102.         List<Book> booksByGenre = new ArrayList<>();
  103.         for (Book book : books) {
  104.             if (book.getGenre().equalsIgnoreCase(genre) || genre.equalsIgnoreCase("All")) {
  105.                 booksByGenre.add(book);
  106.             }
  107.         }
  108.         return booksByGenre;
  109.     }
  110.  
  111.     public void updateBook(int index, Book updatedBook) {
  112.         if (index >= 0 && index < books.size()) {
  113.             books.set(index, updatedBook);
  114.         } else {
  115.             throw new IllegalArgumentException("Invalid book index");
  116.         }
  117.     }
  118.  
  119.     public void removeBook(int index) {
  120.         if (index >= 0 && index < books.size()) {
  121.             books.remove(index);
  122.         } else {
  123.             throw new IllegalArgumentException("Invalid book index");
  124.         }
  125.     }
  126. }
  127.  
  128. // User class to represent a user
  129. class User {
  130.     private String username;
  131.     private String password;
  132.  
  133.     public User(String username, String password) {
  134.         this.username = username;
  135.         this.password = password;
  136.     }
  137.  
  138.     public String getUsername() {
  139.         return username;
  140.     }
  141.  
  142.     public boolean validatePassword(String password) {
  143.         return this.password.equals(password);
  144.     }
  145. }
  146.  
  147. // UserManager class to manage user authentication
  148. class UserManager {
  149.     private static UserManager instance;
  150.     private Map<String, User> users;
  151.  
  152.     private UserManager() {
  153.         users = new HashMap<>();
  154.         // Default admin user
  155.         users.put("admin", new User("admin", "admin"));
  156.     }
  157.  
  158.     public static UserManager getInstance() {
  159.         if (instance == null) {
  160.             instance = new UserManager();
  161.         }
  162.         return instance;
  163.     }
  164.  
  165.     public boolean userExists(String username) {
  166.         return users.containsKey(username);
  167.     }
  168.  
  169.     public boolean addUser(String username, String password) {
  170.         if (!userExists(username)) {
  171.             users.put(username, new User(username, password));
  172.             return true;
  173.         }
  174.         return false;
  175.     }
  176.  
  177.     public boolean validateCredentials(String username, String password) {
  178.         if (userExists(username)) {
  179.             User user = users.get(username);
  180.             return user.validatePassword(password);
  181.         }
  182.         return false;
  183.     }
  184. }
  185.  
  186. class Login extends JFrame {
  187.     private JTextField usernameField;
  188.     private JPasswordField passwordField;
  189.     private JLabel errorLabel;
  190.     private UserManager userManager;
  191.  
  192.     public Login() {
  193.         userManager = UserManager.getInstance();
  194.         setTitle("Login");
  195.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  196.         setResizable(false);
  197.         setSize(320, 150);
  198.         setLocationRelativeTo(null); // Center the window on the screen
  199.  
  200.         JPanel panel = new JPanel();
  201.         panel.setLayout(new GridLayout(3, 2, 5, 5));
  202.  
  203.         JLabel usernameLabel = new JLabel("Username:");
  204.         panel.add(usernameLabel);
  205.  
  206.         usernameField = new JTextField();
  207.         panel.add(usernameField);
  208.  
  209.         JLabel passwordLabel = new JLabel("Password:");
  210.         panel.add(passwordLabel);
  211.  
  212.         passwordField = new JPasswordField();
  213.         panel.add(passwordField);
  214.  
  215.         JButton loginButton = new JButton("Login");
  216.         loginButton.addActionListener(new ActionListener() {
  217.             @Override
  218.             public void actionPerformed(ActionEvent e) {
  219.                 login();
  220.             }
  221.         });
  222.         panel.add(loginButton);
  223.  
  224.         errorLabel = new JLabel("");
  225.         errorLabel.setForeground(Color.RED);
  226.         panel.add(errorLabel);
  227.  
  228.         add(panel);
  229.         setVisible(true);
  230.     }
  231.  
  232.     private void login() {
  233.         String username = usernameField.getText();
  234.         String password = new String(passwordField.getPassword());
  235.  
  236.         if (userManager.validateCredentials(username, password)) {
  237.             dispose();
  238.             if (username.equals("admin")) {
  239.                 SwingUtilities.invokeLater(AdminPane::new);
  240.             } else {
  241.                 SwingUtilities.invokeLater(OnlineBookStore::new);
  242.             }
  243.         } else {
  244.             // Incorrect username or password
  245.             errorLabel.setText("Invalid username or password.");
  246.             usernameField.setText(""); // Clear username field
  247.             passwordField.setText(""); // Clear password field
  248.         }
  249.     }
  250. }
  251.  
  252. class SignUp extends JFrame {
  253.     private JTextField usernameField;
  254.     private JPasswordField passwordField;
  255.     private JLabel errorLabel;
  256.     private UserManager userManager;
  257.  
  258.     public SignUp() {
  259.         userManager = UserManager.getInstance();
  260.         setTitle("Sign Up");
  261.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  262.         setResizable(false);
  263.         setSize(320, 150);
  264.         setLocationRelativeTo(null); // Center the window on the screen
  265.  
  266.         JPanel panel = new JPanel();
  267.         panel.setLayout(new GridLayout(3, 2, 5, 5));
  268.  
  269.         JLabel usernameLabel = new JLabel("Username:");
  270.         panel.add(usernameLabel);
  271.  
  272.         usernameField = new JTextField();
  273.         panel.add(usernameField);
  274.  
  275.         JLabel passwordLabel = new JLabel("Password:");
  276.         panel.add(passwordLabel);
  277.  
  278.         passwordField = new JPasswordField();
  279.         panel.add(passwordField);
  280.  
  281.         JButton signUpButton = new JButton("Sign Up");
  282.         signUpButton.addActionListener(new ActionListener() {
  283.             @Override
  284.             public void actionPerformed(ActionEvent e) {
  285.                 signUp();
  286.             }
  287.         });
  288.         panel.add(signUpButton);
  289.  
  290.         errorLabel = new JLabel("");
  291.         errorLabel.setForeground(Color.RED);
  292.         panel.add(errorLabel);
  293.  
  294.         add(panel);
  295.         setVisible(true);
  296.     }
  297.  
  298.     private void signUp() {
  299.         String username = usernameField.getText();
  300.         String password = new String(passwordField.getPassword());
  301.  
  302.         if (username.isEmpty() || password.isEmpty()) {
  303.             errorLabel.setText("Username and password cannot be empty.");
  304.         } else {
  305.             if (userManager.addUser(username, password)) {
  306.                 dispose(); // Close the sign-up frame
  307.                 // Proceed to the login frame
  308.                 SwingUtilities.invokeLater(Login::new);
  309.             } else {
  310.                 errorLabel.setText("Username already exists.");
  311.             }
  312.         }
  313.     }
  314. }
  315.  
  316. class AdminPane extends JFrame {
  317.     private JTable bookTable;
  318.     private DefaultTableModel bookTableModel;
  319.  
  320.     private BookManager bookManager; // Instantiate the BookManager
  321.  
  322.     public AdminPane() {
  323.         setTitle("Admin Panel");
  324.         setSize(800, 600);
  325.         setDefaultCloseOperation(EXIT_ON_CLOSE);
  326.         getContentPane().setBackground(Color.LIGHT_GRAY);
  327.  
  328.         // Instantiate the BookManager
  329.         bookManager = BookManager.getInstance();
  330.  
  331.         // Main panel with BorderLayout
  332.         JPanel mainPanel = new JPanel();
  333.         setContentPane(mainPanel);
  334.  
  335.         // Books table
  336.         bookTableModel = new DefaultTableModel(new Object[] { "Title", "Author", "Quantity", "Price", "Genre" }, 0);
  337.  
  338.         mainPanel.setLayout(new BorderLayout());
  339.  
  340.         JPanel panel = new JPanel();
  341.         panel.setBorder(new TitledBorder(
  342.                 new EtchedBorder(EtchedBorder.LOWERED, new Color(255, 255, 255), new Color(160, 160, 160)), "Books",
  343.                 TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0)));
  344.         mainPanel.add(panel, BorderLayout.CENTER);
  345.         panel.setLayout(new BorderLayout(0, 0));
  346.  
  347.         bookTable = new JTable(bookTableModel);
  348.         JScrollPane bookScrollPane = new JScrollPane(bookTable);
  349.         bookScrollPane.setPreferredSize(new Dimension(100, 150));
  350.         panel.add(bookScrollPane, BorderLayout.CENTER);
  351.  
  352.         JPanel buttonsPanel = new JPanel();
  353.         panel.add(buttonsPanel, BorderLayout.SOUTH);
  354.  
  355.         JButton addBookBtn = new JButton("Add Book");
  356.         addBookBtn.addActionListener(new ActionListener() {
  357.             @Override
  358.             public void actionPerformed(ActionEvent e) {
  359.                 // Add book functionality
  360.                 addBook();
  361.             }
  362.         });
  363.         buttonsPanel.add(addBookBtn);
  364.  
  365.         JButton updateBookBtn = new JButton("Update Book");
  366.         updateBookBtn.addActionListener(new ActionListener() {
  367.             @Override
  368.             public void actionPerformed(ActionEvent e) {
  369.                 // Update book functionality
  370.                 updateBook();
  371.             }
  372.         });
  373.         buttonsPanel.add(updateBookBtn);
  374.  
  375.         JButton removeBookBtn = new JButton("Remove Book");
  376.         removeBookBtn.addActionListener(new ActionListener() {
  377.             @Override
  378.             public void actionPerformed(ActionEvent e) {
  379.                 // Remove book functionality
  380.                 removeBook();
  381.             }
  382.         });
  383.         buttonsPanel.add(removeBookBtn);
  384.  
  385.         JButton logoutBtn = new JButton("Logout");
  386.         logoutBtn.addActionListener(new ActionListener() {
  387.             @Override
  388.             public void actionPerformed(ActionEvent e) {
  389.                 dispose();
  390.                 SwingUtilities.invokeLater(Login::new);
  391.  
  392.             }
  393.         });
  394.         buttonsPanel.add(logoutBtn);
  395.  
  396.         // Populate table with existing books
  397.         refreshBookTable();
  398.  
  399.         setVisible(true);
  400.     }
  401.  
  402.     private void refreshBookTable() {
  403.         // Clear existing rows
  404.         bookTableModel.setRowCount(0);
  405.  
  406.         // Get all books from the BookManager
  407.         List<Book> allBooks = bookManager.getAllBooks();
  408.  
  409.         // Add each book to the table
  410.         for (Book book : allBooks) {
  411.             // Add book details including the genre
  412.             bookTableModel.addRow(new Object[] { book.getTitle(), book.getAuthor(), book.getQuantity(), book.getPrice(),
  413.                     book.getGenre() });
  414.         }
  415.     }
  416.  
  417.     private void addBook() {
  418.         // Prompt the admin for book details
  419.         String title = JOptionPane.showInputDialog("Enter title:");
  420.         String author = JOptionPane.showInputDialog("Enter author:");
  421.         String quantityStr = JOptionPane.showInputDialog("Enter quantity:");
  422.         String priceStr = JOptionPane.showInputDialog("Enter price:");
  423.         String genre = JOptionPane.showInputDialog("Enter genre (Fiction or Non-Fiction):");
  424.  
  425.         // Convert quantity and price to integers
  426.         int quantity = Integer.parseInt(quantityStr);
  427.         double price = Double.parseDouble(priceStr);
  428.  
  429.         // Create a new Book object
  430.         Book newBook = new Book(title, author, quantity, price, genre);
  431.  
  432.         // Add the new book to the BookManager
  433.         bookManager.addBook(newBook);
  434.  
  435.         // Refresh the table
  436.         refreshBookTable();
  437.     }
  438.  
  439.     private void removeBook() {
  440.         int selectedRow = bookTable.getSelectedRow();
  441.         if (selectedRow != -1) {
  442.             int confirm = JOptionPane.showConfirmDialog(null, "Are you sure you want to remove this book?",
  443.                     "Confirm Removal", JOptionPane.YES_NO_OPTION);
  444.             if (confirm == JOptionPane.YES_OPTION) {
  445.                 bookManager.removeBook(selectedRow);
  446.                 refreshBookTable();
  447.             }
  448.         } else {
  449.             JOptionPane.showMessageDialog(null, "Please select a book to remove.");
  450.         }
  451.     }
  452.  
  453.     private void updateBook() {
  454.         int selectedRow = bookTable.getSelectedRow();
  455.         if (selectedRow != -1) {
  456.             Book selectedBook = bookManager.getAllBooks().get(selectedRow);
  457.             // Prompt the admin for updated details
  458.             String title = JOptionPane.showInputDialog("Enter updated title:", selectedBook.getTitle());
  459.             String author = JOptionPane.showInputDialog("Enter updated author:", selectedBook.getAuthor());
  460.             String quantityStr = JOptionPane.showInputDialog("Enter updated quantity:", selectedBook.getQuantity());
  461.             String priceStr = JOptionPane.showInputDialog("Enter updated price:", selectedBook.getPrice());
  462.  
  463.             // Convert quantity and price to integers
  464.             int quantity = Integer.parseInt(quantityStr);
  465.             double price = Double.parseDouble(priceStr);
  466.             // Prompt the admin for updated details including the genre
  467.             String genre = JOptionPane.showInputDialog("Enter updated genre (Fiction or Non-Fiction):");
  468.  
  469.             // Create an updated Book object
  470.             Book updatedBook = new Book(title, author, quantity, price, genre);
  471.  
  472.             // Update the book in the BookManager
  473.             bookManager.updateBook(selectedRow, updatedBook);
  474.  
  475.             // Refresh the table
  476.             refreshBookTable();
  477.         } else {
  478.             JOptionPane.showMessageDialog(null, "Please select a book to update.");
  479.         }
  480.     }
  481.  
  482. }
  483.  
  484. public class OnlineBookStore extends JFrame {
  485.     private JTable bookTable, cartTable;
  486.     private JComboBox<String> categoryComboBox;
  487.     private DefaultTableModel bookTableModel, cartTableModel;
  488.     private JLabel errorLabel;
  489.  
  490.     private List<Book> books = new ArrayList<>();
  491.     private List<Book> cart = new ArrayList<>();
  492.     private BookManager bookManager; // Add a reference to BookManager
  493.     private List<Order> orders = new ArrayList<>();
  494.  
  495.     public OnlineBookStore() {
  496.         setTitle("Online Bookstore Management System");
  497.         setSize(800, 600);
  498.         setDefaultCloseOperation(EXIT_ON_CLOSE);
  499.         getContentPane().setBackground(Color.LIGHT_GRAY);
  500.  
  501.         // Instantiate the BookManager
  502.         bookManager = BookManager.getInstance();
  503.  
  504.         ;
  505.  
  506.         // Populate books list with existing books from BookManager
  507.         books = bookManager.getAllBooks();
  508.  
  509.         // Initialize the bookTableModel
  510.         bookTableModel = new DefaultTableModel(new Object[] { "Title", "Author", "Quantity", "Price" }, 0);
  511.  
  512.         // Refresh the table to display all books by default
  513.         refreshBookTable("All");
  514.  
  515.         // Main panel with BorderLayout
  516.         JPanel mainPanel = new JPanel();
  517.         setContentPane(mainPanel);
  518.  
  519.         // Cart table
  520.         cartTableModel = new DefaultTableModel(new Object[] { "Title", "Author", "Quantity", "Price", "Genre" }, 0);
  521.         mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.X_AXIS));
  522.  
  523.         JPanel panel = new JPanel();
  524.         panel.setBorder(new TitledBorder(
  525.                 new EtchedBorder(EtchedBorder.LOWERED, new Color(255, 255, 255), new Color(160, 160, 160)), "Books",
  526.                 TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0)));
  527.         mainPanel.add(panel);
  528.         panel.setLayout(new BorderLayout(0, 0));
  529.  
  530.         // Category dropdown and search button
  531.         JPanel booksPanel = new JPanel();
  532.         panel.add(booksPanel, BorderLayout.NORTH);
  533.         booksPanel.setLayout(new BorderLayout(0, 0));
  534.  
  535.         JPanel searchPanel = new JPanel();
  536.         panel.add(searchPanel, BorderLayout.NORTH);
  537.         JButton searchButton = new JButton("Search/Browse");
  538.         searchButton.addActionListener(new ActionListener() {
  539.             @Override
  540.             public void actionPerformed(ActionEvent e) {
  541.                 String selectedGenre = (String) categoryComboBox.getSelectedItem();
  542.                 refreshBookTable(selectedGenre);
  543.             }
  544.         });
  545.         searchPanel.add(searchButton);
  546.  
  547.         categoryComboBox = new JComboBox<>(new String[] { "All", "Fiction", "Non-fiction" });
  548.         searchPanel.add(categoryComboBox);
  549.         bookTable = new JTable(bookTableModel);
  550.         JScrollPane bookScrollPane = new JScrollPane(bookTable);
  551.         panel.add(bookScrollPane, BorderLayout.CENTER);
  552.         bookScrollPane.setBounds(10, 121, 311, 118);
  553.         bookScrollPane.setPreferredSize(new Dimension(350, 200));
  554.  
  555.         JPanel buttonsAndErrorPanel = new JPanel();
  556.         panel.add(buttonsAndErrorPanel, BorderLayout.SOUTH);
  557.         buttonsAndErrorPanel.setLayout(new GridLayout(0, 2, 0, 0));
  558.  
  559.         errorLabel = new JLabel("");
  560.         errorLabel.setHorizontalAlignment(SwingConstants.RIGHT);
  561.         buttonsAndErrorPanel.add(errorLabel);
  562.  
  563.         JButton addToCartBtn = new JButton("Add To Cart");
  564.         addToCartBtn.addActionListener(new ActionListener() {
  565.             public void actionPerformed(ActionEvent e) {
  566.                 int selectedRow = bookTable.getSelectedRow();
  567.                 if (selectedRow != -1) {
  568.                     Book selectedBook = books.get(selectedRow);
  569.                     if (selectedBook.getQuantity() > 0) {
  570.                         addToCart(selectedBook);
  571.                         refreshCartTable();
  572.                         selectedBook.decreaseQuantity();
  573.                         refreshBookTable("All");
  574.  
  575.                     } else {
  576.                         showError("Selected book is out of stock!");
  577.                     }
  578.                 } else {
  579.                     showError("Please select a book to add to cart!");
  580.                 }
  581.             }
  582.         });
  583.         buttonsAndErrorPanel.add(addToCartBtn);
  584.  
  585.         // Login button
  586.         JButton logout = new JButton("Logout");
  587.         logout.addActionListener(new ActionListener() {
  588.             @Override
  589.             public void actionPerformed(ActionEvent e) {
  590.                 dispose();
  591.                 SwingUtilities.invokeLater(Login::new);
  592.  
  593.             }
  594.         });
  595.         buttonsAndErrorPanel.add(logout);
  596.  
  597.         JPanel addToCartPanel = new JPanel();
  598.         addToCartPanel.setBorder(new TitledBorder(
  599.                 new EtchedBorder(EtchedBorder.LOWERED, new Color(255, 255, 255), new Color(160, 160, 160)),
  600.                 "Add To Cart Panel", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0)));
  601.         mainPanel.add(addToCartPanel);
  602.         addToCartPanel.setLayout(new BorderLayout(0, 0));
  603.  
  604.         JPanel btnPanel = new JPanel();
  605.         addToCartPanel.add(btnPanel, BorderLayout.SOUTH);
  606.  
  607.         JButton updateQuantityBtn = new JButton("Update Cart");
  608.         updateQuantityBtn.addActionListener(new ActionListener() {
  609.             @Override
  610.             public void actionPerformed(ActionEvent e) {
  611.  
  612.                 int selectedRow = cartTable.getSelectedRow();
  613.                 if (selectedRow != -1) {
  614.                     String input = JOptionPane.showInputDialog("Enter new quantity:");
  615.                     try {
  616.                         int newQuantity = Integer.parseInt(input);
  617.                         if (newQuantity > 0) {
  618.                             Book selectedBook = cart.get(selectedRow);
  619.                             selectedBook.setQuantity(newQuantity);
  620.                             refreshCartTable();
  621.                         } else {
  622.                             showError("Quantity must be a positive number!");
  623.                         }
  624.                     } catch (NumberFormatException ex) {
  625.                         showError("Invalid input! Please enter a number.");
  626.                     }
  627.                 } else {
  628.                     showError("Please select a book from the cart to update quantity.");
  629.                 }
  630.             }
  631.         });
  632.         btnPanel.add(updateQuantityBtn);
  633.  
  634.         JButton removeFromCartBtn = new JButton("Remove");
  635.         removeFromCartBtn.addActionListener(new ActionListener() {
  636.             @Override
  637.             public void actionPerformed(ActionEvent e) {
  638.  
  639.                 int selectedRow = cartTable.getSelectedRow();
  640.                 if (selectedRow != -1) {
  641.                     Book removedBook = cart.remove(selectedRow);
  642.                     for (Book book : books) {
  643.                         if (book.getTitle().equals(removedBook.getTitle())) {
  644.                             book.setQuantity(book.getQuantity() + removedBook.getQuantity());
  645.                             break;
  646.                         }
  647.                     }
  648.                     refreshCartTable();
  649.                     refreshBookTable("All");
  650.                 } else {
  651.                     showError("Please select a book from the cart to remove.");
  652.                 }
  653.             }
  654.         });
  655.         btnPanel.add(removeFromCartBtn);
  656.  
  657.         JButton placeOrderBtn = new JButton("Place Order");
  658.         placeOrderBtn.addActionListener(new ActionListener() {
  659.             @Override
  660.             public void actionPerformed(ActionEvent e) {
  661.  
  662.                 placeOrder();
  663.             }
  664.         });
  665.         btnPanel.add(placeOrderBtn);
  666.  
  667.         cartTable = new JTable(cartTableModel);
  668.         JScrollPane cartScrollPane = new JScrollPane(cartTable);
  669.         addToCartPanel.add(cartScrollPane);
  670.         cartScrollPane.setPreferredSize(new Dimension(350, 200));
  671.  
  672.         setVisible(true);
  673.         refreshBookTable("All");
  674.     }
  675.  
  676.     private void refreshBookTable(String genre) {
  677.         bookTableModel.setRowCount(0);
  678.         List<Book> filteredBooks = bookManager.getBooksByGenre(genre);
  679.         for (Book book : filteredBooks) {
  680.             bookTableModel
  681.                     .addRow(new Object[] { book.getTitle(), book.getAuthor(), book.getQuantity(), book.getPrice() });
  682.         }
  683.     }
  684.  
  685.     private void refreshCartTable() {
  686.         cartTableModel.setRowCount(0);
  687.         for (Book book : cart) {
  688.             cartTableModel.addRow(new Object[] { book.getTitle(), book.getAuthor(), book.getQuantity(), book.getPrice(),
  689.                     book.getGenre() });
  690.         }
  691.     }
  692.  
  693.     private void addToCart(Book book) {
  694.         cart.add(book);
  695.     }
  696.  
  697.     private void showError(String message) {
  698.         errorLabel.setText(message);
  699.     }
  700.  
  701.     private void placeOrder() {
  702.         if (cart.isEmpty()) {
  703.             JOptionPane.showMessageDialog(null, "Your cart is empty. Please add items before placing an order.");
  704.         } else {
  705.             int confirm = JOptionPane.showConfirmDialog(null, "Are you sure you want to place this order?",
  706.                     "Confirm Order", JOptionPane.YES_NO_OPTION);
  707.             if (confirm == JOptionPane.YES_OPTION) {
  708.                 double totalPrice = 0.0;
  709.                 for (Book book : cart) {
  710.                     totalPrice += book.getPrice() * book.getQuantity();
  711.                 }
  712.  
  713.                 // Create and store the new order
  714.                 Order newOrder = new Order(cart, totalPrice);
  715.                 orders.add(newOrder);
  716.  
  717.                 // Clear the cart
  718.                 cart.clear();
  719.                 refreshCartTable();
  720.                 refreshBookTable("All");
  721.  
  722.                 // Display the list of orders using JOptionPane
  723.                 StringBuilder orderList = new StringBuilder();
  724.                 for (Order order : orders) {
  725.                     orderList.append(order.toString()).append("\n");
  726.                 }
  727.  
  728.                 JOptionPane.showMessageDialog(this, orderList.toString(), "Orders to Ship",
  729.                         JOptionPane.INFORMATION_MESSAGE);
  730.             }
  731.         }
  732.     }
  733.  
  734.     public static void main(String[] args) {
  735.         SwingUtilities.invokeLater(SignUp::new);
  736.     }
  737. }
  738.  
  739. class Order {
  740.     private List<Book> orderedBooks;
  741.     private double totalPrice;
  742.  
  743.     public Order(List<Book> orderedBooks, double totalPrice) {
  744.         this.orderedBooks = new ArrayList<>(orderedBooks);
  745.         this.totalPrice = totalPrice;
  746.     }
  747.  
  748.     public List<Book> getOrderedBooks() {
  749.         return orderedBooks;
  750.     }
  751.  
  752.     public double getTotalPrice() {
  753.         return totalPrice;
  754.     }
  755.  
  756.     @Override
  757.     public String toString() {
  758.         StringBuilder sb = new StringBuilder();
  759.         sb.append("Order Details:\n");
  760.         for (Book book : orderedBooks) {
  761.             sb.append(" - ").append(book.getTitle()).append(" by ").append(book.getAuthor()).append(", Quantity: ")
  762.                     .append(book.getQuantity()).append(", Price: $").append(book.getPrice()).append("\n");
  763.         }
  764.         sb.append("Total Price: $").append(totalPrice).append("\n");
  765.         return sb.toString();
  766.     }
  767. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement