title: Multiple Bookings System
body: <p>I am currently developing a booking system as a task for my degree. I need the seating plan to be "saved/stored" for each showing time (radio buttons), so that e.g. If I book 2 tickets at 13:00, I can also book 2 tickets on the same spot for 15:00. What is the best way of doing this?</p>
  
  <p>PS: I'm not making use of a database and I would prefer not to; due to task's requirements.</p>
  
  <p>Here's my code, please run it if you can.</p>
  
  <pre><code>// CM1203 Fundamentals of Computing with Java; Second Assignement.
  // Walter Carvalho - C1001984; 2012.
  // Cardiff University
  
  // Load Libraries
  import java.awt.*;
  import java.awt.event.*;
  import javax.swing.*;
  import java.util.*;
  import java.text.*;
  
  public class cinemaSystem extends JFrame implements ActionListener {
      // Global Variables
      boolean lselected, rselected, mselected;
      double chargeDue;
      int a, b, c;
      static Ticket oapticket, childticket, adultticket;
      JFrame frame = new JFrame(); // Creates JFrame
      JLabel title, lchild, ladult, loap, ltotalprice, time;
      JTextField child, adult, oap, totalprice;
      JButton submit;
      JRadioButton time1, time2, time3, time4, time5; // Radio Butons
      JToggleButton l[][], m[][], r[][]; // Names grid of JButtons
      JPanel panel1, panel2, panel3, panel4, panel5, panel6;
      ArrayList&lt;String&gt; seatsAvailable = new ArrayList&lt;String&gt;();
      ArrayList&lt;String&gt; coupon = new ArrayList&lt;String&gt;();
  
      // Constructor
      public cinemaSystem(){
  
              title = new JLabel("Cinema Booking System");
              title.setFont(new Font("Helvetica", Font.BOLD, 30));
              title.setLocation(12,5);
              title.setSize(600, 60);
  
              frame.setLayout(null); // Setting Grid Layout
              // panel1.setLayout(new GridLayout(seat,row));
              l = new JToggleButton[4][4]; // Allocating Size of Grid
              panel1 = new JPanel(new GridLayout(4,4));
              panel1.setBounds(20, 95, 220, 140);
              for(int y = 0; y &lt;4 ; y++){
                      for(int x = 0; x &lt; 4; x++){
                          l[x][y] = new JToggleButton("L" + y + x); // Creates New JButton
                          l[x][y].addActionListener(this);
                          seatsAvailable.add("L" + y + x);
                          panel1.add(l[x][y]); //adds button to grid
                      }
              }
  
              m = new JToggleButton[4][2]; // Allocating Size of Grid
              panel2 = new JPanel(new GridLayout(2,4));
              panel2.setBounds(240, 165, 220, 70);
              for(int y = 0; y &lt;2 ; y++){
                      for(int x = 0; x &lt; 4; x++){
                          m[x][y] = new JToggleButton("M" + y + x); // Creates New JButton
                          m[x][y].addActionListener(this);
                          seatsAvailable.add("M" + y + x);
                          panel2.add(m[x][y]); //adds button to grid
                      }
              }
  
              r = new JToggleButton[4][4]; // Allocating Size of Grid
              panel3 = new JPanel(new GridLayout(4,4));
              panel3.setBounds(460, 95, 220, 140);
              for(int y = 0; y &lt;4 ; y++){
                      for(int x = 0; x &lt; 4; x++){
                          r[x][y] = new JToggleButton("R" + y + x); // Creates New JButton
                          r[x][y].addActionListener(this);
                          seatsAvailable.add("R" + y + x);
                          panel3.add(r[x][y]); //adds button to grid
                      }
              }
  
              panel4 = new JPanel(new FlowLayout());
              panel4.setBounds(0, 250, 300, 70);
  
              lchild = new JLabel("Child");
              child = new JTextField("0", 2);
              child.addActionListener(this);
  
              ladult = new JLabel("Adult");
              adult = new JTextField("0", 2);
              adult.addActionListener(this);
  
              loap = new JLabel("OAP");
              oap = new JTextField("0", 2);
              oap.addActionListener(this);
  
              submit = new JButton("Submit");
              submit.addActionListener(this);
  
              oapticket = new Ticket(4.70);
              childticket = new Ticket(3.50);
              adultticket = new Ticket(6.10);     
  
              child.addKeyListener(new MyKeyAdapter());
              oap.addKeyListener(new MyKeyAdapter());
              adult.addKeyListener(new MyKeyAdapter());
  
              panel4.add(lchild);
              panel4.add(child);
              panel4.add(ladult);
              panel4.add(adult);
              panel4.add(loap);
              panel4.add(oap);
              panel4.add(submit);
  
              panel5 = new JPanel(new FlowLayout());
              panel5.setBounds(240, 250, 300, 70);
  
              ltotalprice = new JLabel("Charge Due (£): ");
              totalprice = new JTextField("£0.00", 5);
              totalprice.setEnabled(false);
              panel5.add(ltotalprice);
              panel5.add(totalprice);
  
              panel6 = new JPanel(new FlowLayout());
              panel6.setBounds(0, 55, 560, 30);
  
              time = new JLabel("Please select a film time: ");
              time1 = new JRadioButton("13:00", true);
              time2 = new JRadioButton("15:00", false);
              time3 = new JRadioButton("17:00", false);
              time4 = new JRadioButton("19:00", false);
              time5 = new JRadioButton("21:00", false);
  
              ButtonGroup group = new ButtonGroup();
              group.add(time1);
              group.add(time2);
              group.add(time3);
              group.add(time4);
              group.add(time5);
              panel6.add(time);
              panel6.add(time1);
              panel6.add(time2);
              panel6.add(time3);
              panel6.add(time4);
              panel6.add(time5);
              time1.addActionListener(this);
              time2.addActionListener(this);
              time3.addActionListener(this);
              time4.addActionListener(this);
              time5.addActionListener(this);
              frame.add(title);
              frame.add(panel1);
              frame.add(panel2);
              frame.add(panel3);
              frame.add(panel4);
              frame.add(panel5);
              frame.add(panel6);
              frame.setPreferredSize(new Dimension(700, 350));
              frame.setTitle("Cinema Booking");
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              frame.pack(); //sets appropriate size for frame
              frame.setVisible(true); //makes frame visible
  
  
      }
  
      // Calculates Charge Due for current transaction.
      public double calcChargeDue(){
          DecimalFormat df = new DecimalFormat("#.##");
          double chargeDue = 0.0;
          chargeDue = (a*childticket.price) + (b*oapticket.price) + (c*adultticket.price);
          totalprice.setText("£"+df.format(chargeDue));
          return chargeDue;
      }
  
      // Method to check if the number of people matches the number of seats selected.
      public void check(){
          int check = coupon.size();
          int noTickets = a + b + c;
          if (check != noTickets){
              submit.setEnabled(false);
          }
          else {
              submit.setEnabled(true);
          }
  
      }
  
      // Ticket Object
      public class Ticket {
  
          double price;
  
          // Constructor
          public Ticket(double cost) {
              price = cost;
          }
  
          public double getTicketPrice() {
              return price;
          }
  
      }
  
      public void actionPerformed(ActionEvent e)
      {
  
          a = Integer.parseInt(child.getText());
          b = Integer.parseInt(oap.getText());
          c = Integer.parseInt(adult.getText());
  
          for(int y = 0; y &lt; 4; y++){
              for(int x = 0; x &lt; 4; x++){
  
                  lselected = l[x][y].isSelected();
                  rselected = r[x][y].isSelected();
  
                  if (e.getSource() == l[x][y]) {
                      if(lselected == true){
                          coupon.add(e.getActionCommand());
                          calcChargeDue();
                          check();
                      }
                      else {
                          coupon.remove(e.getActionCommand());
                          check();
                      }
                  }
  
                  if (e.getSource() == r[x][y]) {
                      if(rselected == true){
                          coupon.add(e.getActionCommand());
                          calcChargeDue();
                          check();
                      }
                      else {
                          coupon.remove(e.getActionCommand());
                          check();
                      }
                  }
  
                  if (e.getSource() == oap){
                      calcChargeDue();
                      check();
                  }
  
                  if (e.getSource() == adult){
                      calcChargeDue();
                      check();
                  }
  
                  if (e.getSource() == child){
                      calcChargeDue();
                      check();
                  }
  
              }
          }
  
          for(int y = 0; y &lt; 2; y++){
              for(int x = 0; x &lt; 4; x++){
  
                  mselected = m[x][y].isSelected();
  
                  if (e.getSource() == m[x][y]) {
                      if(mselected == true){
                          coupon.add(e.getActionCommand());
                          calcChargeDue();
                          check();
                      }
                      else {
                          coupon.remove(e.getActionCommand());
                          check();
                      }
                  }
              }
          }
  
          if(time1 == e.getSource()){
  
          }
  
          if(time2 == e.getSource()){
  
          }
  
          if(time3 == e.getSource()){
  
          }
  
          if(time4 == e.getSource()){
  
          }
  
          if(time5 == e.getSource()){
  
          }
  
          if(submit == e.getSource()) {
  
              for(int y = 0; y &lt; 4; y++){
                  for(int x = 0; x &lt; 4; x++){
  
                      lselected = l[x][y].isSelected();
                      rselected = r[x][y].isSelected();
  
                      if (lselected == true) {
                              l[x][y].setEnabled(false);
                      }
  
                      if (rselected == true) {
                              r[x][y].setEnabled(false);
                      }
  
                  }
              }
  
              for(int y = 0; y &lt; 2; y++){
                  for(int x = 0; x &lt; 4; x++){
  
                      mselected = m[x][y].isSelected();
  
                      if (mselected == true) {
                              m[x][y].setEnabled(false);
                      }
                  }
              }
  
              Collections.sort(coupon);
              System.out.println("Here's your ticket:");
              System.out.println(coupon);
              System.out.println("Child: " + child.getText());
              System.out.println("Adult: " + adult.getText());
              System.out.println("OAP: " + oap.getText());
              System.out.println("Total Price: " + totalprice.getText());
              System.out.println("Thank you. Enjoy your film.");
              System.out.println(" ");
              coupon.clear();
              child.setText("0");
              adult.setText("0");
              oap.setText("0");
          }
  
      }
  
      // Main Class
      public static void main(String[] args) {
              new cinemaSystem(); //makes new ButtonGrid with 2 parameters
      }
  }
  </code></pre>
  
  <p>Related: <a href="https://stackoverflow.com/questions/10092353/java-disable-all-jtogglebuttons-after-submission-setenabledfalse">Java: Disable all JToggleButtons after Submission — setEnabled(false);</a></p>