Skip to content

Instantly share code, notes, and snippets.

@parsons-Jsr
Created November 9, 2012 02:17
Show Gist options
  • Save parsons-Jsr/4043298 to your computer and use it in GitHub Desktop.
Save parsons-Jsr/4043298 to your computer and use it in GitHub Desktop.
Java Cinema Booking System
// Class that contains methods for Database manipulation
import java.awt.*;
//import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
public class FullDataBaseGenerator
{
// Method that takes a String (from the film time cb)
// And returns a String of the name of the text file it belongs to
public static String returnFileName(String input)
{
String timeFileName = input;
if (input.equals("1.00 PM"))
{
timeFileName = "SEAT DATABASE 1.00 PM.txt";
}
else if (input.equals("3.00 PM"))
{
timeFileName= "SEAT DATABASE 3.00 PM.txt";
}
else if (input.equals("5.00 PM"))
{
timeFileName= "SEAT DATABASE 5.00 PM.txt";
}
else if (input.equals("7.00 PM"))
{
timeFileName = "SEAT DATABASE 7.00 PM.txt";
}
else if (input.equals("9.00 PM"))
{
timeFileName= "SEAT DATABASE 9.00 PM.txt";
}
return timeFileName;
}
//Method to Create a blank database of all the seats available
public ArrayList<Integer> seatNumberCalculate()
{
// Variables to values for each block of seats
int A = 0;
int B = 0;
int C = 0;
// ArrayList to hold the values
ArrayList<Integer> al = new ArrayList<Integer>();
// Add zero at the start of the array to act as a defauilt value for the cbs
al.add(0);
// Calculate the seatnumbers and add them into the array
for (int i=0; i < 36; i++)
{
A = 101+i;
al.add(A);
}
for (int i = 0; i < 40; i++)
{
B = 201+i;
al.add(B);
}
for (int i = 0; i < 36; i++)
{
C = 301+i;
al.add(C);
}
return al;
}
// Method that generates a fresh database
public void FullDataBaseGeneration(String file_name)
{
// Name of database (calculated by 'returnFileName' method)
String name = file_name;
// Get ArrayList cointaining values for every seat
ArrayList <Integer> input = seatNumberCalculate();
// Name of database
String selectedTime = returnFileName(name);
File selectedTimeFile = new File(selectedTime);
try{
// if the file exists, do not create a new file (leave existing file alone)
if (selectedTimeFile.exists() == true)
{
return;
}
}catch (Exception ex){
System.err.println(ex.getMessage());
}
// if the file doesnt exist..
try{
// create a new file with the correct name
selectedTimeFile.createNewFile();
// Start dependencies for file reading
FileInputStream fs = new FileInputStream(selectedTimeFile.toString());
DataInputStream in = new DataInputStream(fs);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
//Start dependancy for file writing
String stringLine;
BufferedWriter fw1 = new BufferedWriter(new FileWriter(selectedTime));
// Write a ; to the file (this is needed to add some content to replace)
fw1.write(";");
// Close this write dependancy
fw1.close();
// While there are Lines left to be read
while ((stringLine = br.readLine()) != null)
{
// Create dependencies for writing to same file
BufferedWriter fw = new BufferedWriter(new FileWriter(selectedTime));
int x=0;
// Iterate through the new edited array (orginal array minus selected seat)
while(x < input.size())
{
// Rewrite every line of the text file with each entry in the new array
String line = input.get(x).toString();
fw.write(line + ";");
x++;
}
//Close the file writing dependency
fw.close();
}
}catch (Exception ex){
System.err.println(ex.getMessage());}
}
// Method for returning an array of the available seats, for passing into the Main class
public static ArrayList<Integer> AvailableSeatsArrayReturn(String file_name)
{
ArrayList<Integer> temp = new ArrayList<Integer>();
String name = file_name;
String selectedTime = returnFileName(name);
File selectedTimeFile = new File(selectedTime);
if (selectedTimeFile.exists())
{
try{
FileInputStream fs = new FileInputStream(selectedTimeFile.toString());
DataInputStream in = new DataInputStream(fs);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String stringLine;
while ((stringLine = br.readLine()) != null)
{
String[] array = stringLine.split(";");
// For every object in the array, built from items in the text file
for (int i=0; i < array.length; i++)
{
// Convert the item to an integer
Integer num = Integer.parseInt(array[i]);
// Add Item to arraylist to be rerturned
temp.add(num);
}
}
in.close();
}catch (Exception ex){System.err.println(ex.getMessage());}
}
return temp;
}
}
// Main Class File
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
public class Main extends JFrame implements ActionListener
{
// Creates an icon, attached to a label to act as a banner for the program
// Get resource is required for finding the image within the JAR achive once packed
final public ImageIcon icon = (new ImageIcon(getClass().getResource("images/ProgramBanner.png")));
JLabel iconHolder = new JLabel(icon);
//Labels and TextFields for the GUI
JLabel filmTimeLabel = new JLabel("Time ");
JLabel ticketTypeTitle = new JLabel("Ticket ");
JLabel ticketTypeCostTitle = new JLabel("Total Price: ");
JLabel ticketQuantityTitle = new JLabel("Ticket Quantity: ");
JLabel adultLabel = new JLabel("Adult");
JLabel childLabel = new JLabel("Child");
JLabel oapLabel = new JLabel("OAP");
JTextField ticketQuantityValue = new JTextField(1);
JTextField ticketTypeCostValue = new JTextField(4);
// GUI Buttons
JButton orderButton = new JButton("ORDER");
JButton resetButton = new JButton("Delete DB");
//Labels For Each Ticket (Do not appear until called by selecting a Ticket Type quantity)
JLabel seatLabel1 = new JLabel ("Ticket 1");
JLabel seatLabel2 = new JLabel ("Ticket 2");
JLabel seatLabel3 = new JLabel ("Ticket 3");
JLabel seatLabel4 = new JLabel ("Ticket 4");
JLabel seatLabel5 = new JLabel ("Ticket 5");
// Labels and ComboBoxes for for various Quantity of Tickets (Like their label, also do not appear untill called)
JComboBox seatCombo1 = new JComboBox();
JComboBox seatCombo2= new JComboBox();
JComboBox seatCombo3= new JComboBox();
JComboBox seatCombo4= new JComboBox();
JComboBox seatCombo5= new JComboBox();
// Arrays for Quantity of each ticket type
Integer[] adultQuantityList = {0,1,2,3,4,5};
Integer[] childQuantityList = {0,1,2,3,4,5};
Integer[] oapQuantityList = {0,1,2,3,4,5};
// Comboboxes to hold the state of the desired quantity of each ticket type
JComboBox adultQuantityCombo = new JComboBox(adultQuantityList);
JComboBox childQuantityCombo = new JComboBox(childQuantityList);
JComboBox oapQuantityCombo = new JComboBox(oapQuantityList);
//ArrayList for a Combobox that shows Film Times
String[] timeList = {"-", "1.00 PM", "3.00 PM", "5.00 PM", "7.00 PM", "9.00 PM"};
JComboBox timeCombo = new JComboBox(timeList);
// ArrayList that holds the vaules of seats that are available
ArrayList<Integer> seatArrayList = new ArrayList<Integer>();
String timeString = new String();
//Creation of JPanels to be added to the frame
JPanel bannerPanel = new JPanel();
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
public Main() // Constructor Method for GUI
{
setLocationRelativeTo(null); // Centers the Frame (NOTE: Multi-monitor setups may not center correctly depending on collective resolution
setTitle("JSRP Cinema Booking System ver 1.2"); // Set Title of Main Window
setSize(775,480); // Set frame resolution to [x,y] pixels
setResizable(false); // Keeps Frame a constant resolution (Stops Resizing of Frame by user)
setDefaultCloseOperation(EXIT_ON_CLOSE); // Set frame to exit when 'CLOSE' window button is clicked
// Add Panels to the Frame and state Layout Manager constructor arguments
add(bannerPanel, BorderLayout.NORTH );
add(p1, BorderLayout.EAST);
add(p2, BorderLayout.WEST);
add(p3, BorderLayout.SOUTH);
// Addition of Content to respective Panel (Order determines position within panel)
bannerPanel.add(iconHolder);
bannerPanel.add(ticketQuantityTitle);
bannerPanel.add(ticketQuantityValue);
bannerPanel.add(ticketTypeCostTitle);
bannerPanel.add(ticketTypeCostValue);
p1.add(resetButton);
p2.add(filmTimeLabel);
p2.add(timeCombo);
p2.add(adultLabel);
p2.add(adultQuantityCombo);
p2.add(childLabel);
p2.add(childQuantityCombo);
p2.add(oapLabel);
p2.add(oapQuantityCombo);
// Set number of visible entries when a combobox is selected
adultQuantityCombo.setMaximumRowCount(4);
childQuantityCombo.setMaximumRowCount(4);
oapQuantityCombo.setMaximumRowCount(4);
timeCombo.setMaximumRowCount(4);
// Makes textfields non-editable, so that they can be used to display content
ticketQuantityValue.setEditable(false);
ticketTypeCostValue.setEditable(false);
// Addition of Action Listeners to Objects
timeCombo.addActionListener(this);
adultQuantityCombo.addActionListener(this);
childQuantityCombo.addActionListener(this);
oapQuantityCombo.addActionListener(this);
orderButton.addActionListener(this);
resetButton.addActionListener(this);
seatCombo1.addActionListener(this);
seatCombo2.addActionListener(this);
seatCombo3.addActionListener(this);
seatCombo4.addActionListener(this);
seatCombo5.addActionListener(this);
setVisible(true); // Set frame to be Visible, thus updating frame with all the selected elements
}
//STARTOF ACTIONEVENTS
public void actionPerformed (ActionEvent action) // Method that contain all conditions where an ActionEvent is needed
{
// ActionListener for Combobox that displays Film Viewing Times
if (action.getSource() == timeCombo)
{
// Create New Instance of the Database class
FullDataBaseGenerator db = new FullDataBaseGenerator();
// Get Name of database
String selectedTime = db.returnFileName(timeCombo.getSelectedItem().toString());
System.out.println(selectedTime);
// Make Name of Database global
timeString = selectedTime;
// Call DataBase Generator (will generate fresh database for that time if one does not exist)
db.FullDataBaseGeneration(selectedTime);
//Fetch array of available seats and pass it to the global ArrayList 'seatArrayList'
ArrayList<Integer> timeArray = db.AvailableSeatsArrayReturn(selectedTime);
seatArrayList= timeArray;
//Reset any user selection of tickets when a new database is selected
adultQuantityCombo.setSelectedIndex(0);
childQuantityCombo.setSelectedIndex(0);
oapQuantityCombo.setSelectedIndex(0);
//Repaint the Frame
repaint();
}
// ActionListener for all ticket type comboboxes collectively
if (action.getSource() == adultQuantityCombo || action.getSource()
== childQuantityCombo|| action.getSource() == oapQuantityCombo)
{
// Remove all existing items from each cb
seatCombo1.removeAllItems();
seatCombo2.removeAllItems();
seatCombo3.removeAllItems();
seatCombo4.removeAllItems();
seatCombo5.removeAllItems();
// If the arraylist no longer contains a zero (default answer)
// Add a zero at the beginning of the array
if (seatArrayList.contains(0) != true)
{
seatArrayList.add(0, 0);
}
// Add contents of the ArrayList to each combobox that display available seats
for (int z =0; z< seatArrayList.size(); z++)
{
seatCombo1.addItem(seatArrayList.get(z));
seatCombo2.addItem(seatArrayList.get(z));
seatCombo3.addItem(seatArrayList.get(z));
seatCombo4.addItem(seatArrayList.get(z));
seatCombo5.addItem(seatArrayList.get(z));
}
// Get new total price as a String and affix to a Label for display on Frame
String totalString = getTotal();
ticketTypeCostValue.setText("£" + totalString);
// Calculate total quantity of Tickets and affix to a label for display on Frame
Integer adultCounter = Integer.parseInt((adultQuantityCombo.getSelectedItem().toString()));
Integer childCounter = Integer.parseInt((childQuantityCombo.getSelectedItem().toString()));
Integer oapCounter = Integer.parseInt((oapQuantityCombo.getSelectedItem().toString()));
Integer countTotal = (adultCounter + childCounter + oapCounter);
ticketQuantityValue.setText(countTotal.toString());
repaint();
// Only 5 tickets can be ordered at one time. Returns error message if more are selected
if (countTotal >5)
{ adultQuantityCombo.setSelectedIndex(0);
childQuantityCombo.setSelectedIndex(0);
oapQuantityCombo.setSelectedIndex(0);
tooManyTickets();
return;
}
// Following 6 if statements state what labels/comboboxes should show when the ticket number changes:
// E.G. if no tickets are selected then no labels/cbs show
// if 3 tickets are chosen, then the labels/cbs for Ticket 1,2 and 3 are shown
// if 1 ticket is then chosen, cb/label for Ticket 2 and 3 dissapear by 1 stays
if (countTotal ==1 || countTotal ==2 || countTotal ==3 || countTotal ==4|| countTotal ==5 )
{
p3.remove(seatLabel2);
p3.remove(seatCombo2);
p3.remove(seatLabel3);
p3.remove(seatCombo3);
p3.remove(seatLabel4);
p3.remove(seatCombo4);
p3.remove(seatLabel5);
p3.remove(seatCombo5);
p3.add(seatLabel1);
p3.add(seatCombo1);
}
if (countTotal ==2 || countTotal ==3 || countTotal ==4|| countTotal ==5 )
{
p3.remove(seatLabel3);
p3.remove(seatCombo3);
p3.remove(seatLabel4);
p3.remove(seatCombo4);
p3.remove(seatLabel5);
p3.remove(seatCombo5);
p3.add(seatLabel2);
p3.add(seatCombo2);
}
if (countTotal ==3 || countTotal ==4|| countTotal ==5 )
{
p3.remove(seatLabel4);
p3.remove(seatCombo4);
p3.remove(seatLabel5);
p3.remove(seatCombo5);
p3.add(seatLabel3);
p3.add(seatCombo3);
}
if (countTotal ==4|| countTotal ==5 )
{
p3.remove(seatLabel5);
p3.remove(seatCombo5);
p3.add(seatLabel4);
p3.add(seatCombo4);
}
if (countTotal ==5 )
{
p3.add(seatLabel5);
p3.add(seatCombo5);
}
if (countTotal ==0 )
{
p3.remove(seatLabel1);
p3.remove(seatCombo1);
p3.remove(seatLabel2);
p3.remove(seatCombo2);
p3.remove(seatLabel3);
p3.remove(seatCombo3);
p3.remove(seatLabel4);
p3.remove(seatCombo4);
p3.remove(seatLabel5);
p3.remove(seatCombo5);
p3.remove(orderButton);
}
// if more tickets than available seats remaining is selected
// Then an error message states this face
if (countTotal > seatArrayList.size()-1)
{
notEnoughSeats();
return;
}
// if no tickets are selected, then the 'order' button does not appear
if (countTotal >0)
{
p3.add(orderButton);
}
repaint();
setVisible(true);
}
// ActionListener for orderButton
if (action.getSource() == orderButton)
{
// Validation for purchase of ticket(s)
Integer orderConfirm = JOptionPane.showConfirmDialog(getContentPane(),
"Are You sure you want you want to confirm this purchase?",
"Confirm Ticket Purchase?",
JOptionPane.YES_NO_OPTION);
if (orderConfirm ==1)
{
return;
}
// Get the Values of Each Ticket Quantity ComboBox (e.g. 102, 301, etc)..
Integer seat1Store = Integer.parseInt(seatCombo1.getSelectedItem().toString());
Integer seat2Store = Integer.parseInt(seatCombo2.getSelectedItem().toString());
Integer seat3Store = Integer.parseInt(seatCombo3.getSelectedItem().toString());
Integer seat4Store = Integer.parseInt(seatCombo4.getSelectedItem().toString());
Integer seat5Store = Integer.parseInt(seatCombo5.getSelectedItem().toString());
//Create an array to hold theese values
Integer[] proceedArray = new Integer[5];
proceedArray[0] =seat1Store;
proceedArray[1] =seat2Store;
proceedArray[2] =seat3Store;
proceedArray[3] =seat4Store;
proceedArray[4] =seat5Store;
// Repeat code to get value for number of Tickets
Integer adultCounter = Integer.parseInt((adultQuantityCombo.getSelectedItem().toString()));
Integer childCounter = Integer.parseInt((childQuantityCombo.getSelectedItem().toString()));
Integer oapCounter = Integer.parseInt((oapQuantityCombo.getSelectedItem().toString()));
Integer countTotal = (adultCounter + childCounter + oapCounter);
// for the number of tickets selected
// if that ticket number equals zero (the default value)
// then state that not all tickets have been assined seats //128
for (int z=0; z<countTotal; z++)
{
if (proceedArray[z] ==0)
{
notSelectedAllSeats();
return;
}
}
// Create a boolean that when true carries out the database portion of this ActionEvent
boolean proceed = false;
// Iterates through each object of the array and compares then with each other
for(int i = 0; i<proceedArray.length;i++)
{
for(int p=0; p<proceedArray.length; p++)
{
if(i != p)
{
// if the two compared objects have the same seat number...
if(proceedArray[i].equals(proceedArray[p]))
{
//...and is not a zero (this is a default value, not a seat number)
// then call an error stating duplicate seats have been allocated
if (proceedArray[i] != 0 || proceedArray[p] != 0)
{
duplicateSeats();
return;
}
}
}
}
// if no duplications are found, the rest of the event can proceed
proceed = true;
}
if (proceed == true)
{
// Remove the send values from the array
seatArrayList.remove(seat1Store);
seatArrayList.remove(seat2Store);
seatArrayList.remove(seat3Store);
seatArrayList.remove(seat4Store);
seatArrayList.remove(seat5Store);
try{ // Start try/catch
// State dependables for reading the database
FileInputStream fs = new FileInputStream(timeString);
DataInputStream in = new DataInputStream(fs);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
// While there are Lines left to be read
String stringLine;
while ((stringLine = br.readLine()) != null)
{
// Create dependencies for writing to same file
BufferedWriter fw = new BufferedWriter(new FileWriter(timeString));
int x=0;
// Iterate through the new edited array (orginal array minus selected seat)
while(x<seatArrayList.size())
{
// Rewrite every line of the text file with each entry in the new array
String line = seatArrayList.get(x).toString();
fw.write(line + ";");
x++;
}
//Close the file writing dependency
fw.close();
}
//try/catch end, if error- prints message to command line followed by error code
}catch (Exception ex){ System.err.println("Error in database manipulation, code: " + ex.getMessage());}
// Call Pop-up asking user if they want to restart the program for another transaction
ticketBought();
}
}
// ActionListener for database reset button
if(action.getSource() == resetButton)
{
// When button is selected, A YES/NO messagebox displays
Integer end = JOptionPane.showConfirmDialog(getContentPane(),
"(NOTE: You can only delete databases upon initially loading"+
" the program and before selecting any databases).\n"+
"If you haven't already done so, please re-run the program and"+
" select this option again if you wish to delete the databases.\n"+
"The Command will still run regardless, but will not work without"+
" the the above steps\n\n"+
"Would you like to Reset all the Databases?\n",
"Delete Databases?",
JOptionPane.YES_NO_OPTION);
// Is selected answer is YES
if (end == 0)
{
// Ask for validation of deltion
Integer yesno1 = JOptionPane.showConfirmDialog(getContentPane(),
"Are You sure you want you want to delete all the databases?",
"Delete Database?",
JOptionPane.YES_NO_OPTION);
// if selected yes
if (yesno1 == 0)
{
// Delete the current instance of the program
Main.this.dispose();
//Delete Current database
File fileToDelete = new File(timeString);
fileToDelete.delete();
// Delete all the databases (stated by name)
File file1 = new File("SEAT DATABASE 1.00 PM.txt");
File file2 = new File("SEAT DATABASE 3.00 PM.txt");
File file3 = new File("SEAT DATABASE 5.00 PM.txt");
File file4 = new File("SEAT DATABASE 7.00 PM.txt");
File file5 = new File("SEAT DATABASE 9.00 PM.txt");
file1.delete();
file2.delete();
file3.delete();
file4.delete();
file5.delete();
// Create new instance of the program (hence restart it)
new Main();
}
}
}
}
//END OF ACTIONEVENTS
// Method that returns total price as as String
public String getTotal()
{
// Get current value of each selected option that effects the price
Integer childInput = Integer.parseInt(childQuantityCombo.getSelectedItem().toString());
Integer oapInput = Integer.parseInt(oapQuantityCombo.getSelectedItem().toString());
Integer adultInput = Integer.parseInt(adultQuantityCombo.getSelectedItem().toString());
// Pass this value to 'Ticket.getSeatPrice' method to obtain price
int childTicketPrice = Ticket.getSeatPrice(childInput, "child");
int adultTicketPrice = Ticket.getSeatPrice(adultInput, "adult");
int oapTicketPrice = Ticket.getSeatPrice(oapInput, "oap");
// Calculate total
int total = (childTicketPrice +adultTicketPrice+oapTicketPrice);
//Convert this integer value to a string in the correct format
String totalString = Ticket.calculateStringTotal(total);
return totalString;
}
public void ticketBought()
{
// Display Message Stating the price of the ordered tickets
JOptionPane.showMessageDialog(getContentPane(),
"The total Cost is..£"+getTotal(), "Total Cost", JOptionPane.PLAIN_MESSAGE);
// Ask user if they want to restart the program
Integer a = JOptionPane.showConfirmDialog(getContentPane(),
"Transaction complete\n Would you like to make another?",
"Transaction Complete", JOptionPane.YES_NO_OPTION);
// If yes, deletes current instance of program then creates a new one
if (a == 0)
{System.out.println("Program Restart Initiated");
Main.this.dispose();
new Main();
}
// If no, then instance of program is deleted but no new instance is created, hence ending the program
if (a==1)
{
System.exit(0);
}
}
// Methods for displaying error messages
public void tooManyTickets()
{
JOptionPane.showMessageDialog(getContentPane(), "You cannot Process more than 5 tickets at a time!", "Ticket Quantity Error", JOptionPane.ERROR_MESSAGE);
}
public void notEnoughSeats()
{
JOptionPane.showMessageDialog(getContentPane(), "There are not enough seats remaining to process the number of tickets selected", "Ticket Quantity Error", JOptionPane.ERROR_MESSAGE);
}
public void duplicateSeats()
{
JOptionPane.showMessageDialog(getContentPane(), "There is a duplication of seats!", "Seat Selection Error", JOptionPane.ERROR_MESSAGE);
}
public void notSelectedAllSeats()
{
JOptionPane.showMessageDialog(getContentPane(), "Not all seats have been Assigned!", "Seat Selection Error", JOptionPane.ERROR_MESSAGE);
}
// Drawn Graphics Method
public void paint(Graphics g)
{
//ArrayList<Integer> list = new ArrayList<Integer>(array);
super.paint(g); // Clears the frame when method is called
int width = 32; // State width of each Rectangle
int height = 32; // State height of each Rectangle
int leftBlockSeatsCol = 6; // State number of Rows in the Left Block
int leftBlockSeatsRow = 6; // State number of Columns in the Left Block
int centerBlockSeatsRow = 5; // State number of Rows in the Center Block
int centerBlockSeatsCol = 8; // State number of Columns in the Center Block
int rightBlockSeatsRow = 6; // State number of Rows in the Right Block
int rightBlockSeatsCol = 6; // State number of Columns in the Right Block
int leftBlockPosX = 15; // Sets Left Block X-axis Position (in Pixels)
int leftBlockPosY = 225; // Sets Left Block Y-axis Position (in Pixels)
int centerBlockPosX = (leftBlockPosX+(leftBlockSeatsCol*width)) +50; // Sets Center Block X-axis Position (in Pixels)
int centerBlockPosY = 225; // Sets Center Block Y-axis Position (in Pixels)
int rightBlockPosX = (centerBlockPosX +(centerBlockSeatsCol*width)) +50; // Sets Right Block X-axis Position (in Pixels)
int rightBlockPosY = 225; // Sets Right Block Y-axis Position (in Pixels)
g.setColor(Color.black); // Set Default Draw Color to black
g.drawString("Left Block", (leftBlockPosX+(32*(leftBlockSeatsCol/2)-25)), (leftBlockPosY - 10)); // Title for Each Block
g.drawString("Center Block", (centerBlockPosX+(32*(centerBlockSeatsCol/2)-30)), (centerBlockPosY - 10));
g.drawString("Right Block", (rightBlockPosX+(32*(rightBlockSeatsCol/2)-25)), (rightBlockPosY - 10));
Color custom_grey = new Color(175,175,175);
//DRAW LEFT BLOCK OF SEATS
for(int i=0; i<leftBlockSeatsCol;i++) // Loop while there are Columns..
{
String colString = new Integer (i+101).toString(); // Creates an Integer of relative Seat Number and converts it to a String
g.drawString(colString, leftBlockPosX+5+(i*width), leftBlockPosY+20); // String is affixed to drawSring method and co-ordinates tweaked to center the text in each box.
g.drawRect(leftBlockPosX+(i*width), leftBlockPosY, width, height); // Draw a rectangle at the stated X and Y- Pos. The next rect = X-Pos + (width of rectangle * horizontal psotion) [hence in a sequence]
if (seatArrayList.contains((i+101)) != true) // If The Array of available seats does not contain i+101 (Seat 1 of leftBlock is 101, Seat 2 is 102, etc)...
{
g.setColor(Color.red); // Then change Draw Color to red
g.fillRect(leftBlockPosX+(i*width), leftBlockPosY, width, height); // Fill in the currently iterated rectangle
g.setColor(Color.black); // Change color back to default
g.drawRect(leftBlockPosX+(i*width), leftBlockPosY, width, height); // Redraw the Rectangle
g.drawString(colString, leftBlockPosX+5+(i*width),leftBlockPosY+20); // Redraw the number
}
for(int x=0; x<leftBlockSeatsRow; x++) // For each column, loop while there are Rows..
{
String rowString = new Integer((i+(leftBlockSeatsCol*x))+101).toString(); // [As above]
g.drawString (rowString, leftBlockPosX+5+(i*width), leftBlockPosY+(x*height)+20);
g.drawRect(leftBlockPosX+(i*width),leftBlockPosY+(x*height), width, height); // Draw A rectangle exactly like before but with Y-Pos + (height * vertical postition)
if (seatArrayList.contains((i+(leftBlockSeatsCol*x))+101) != true) // If the Array of available seats does not contain the relevent seat number...
{
g.setColor(Color.red); // Change Draw Color ot red
g.fillRect(leftBlockPosX+(i*width), leftBlockPosY+(x*height), width, height); // Fill in the currently iterated rectangle
g.setColor(Color.black); // Change draw color back to default
g.drawRect(leftBlockPosX+(i*width), leftBlockPosY+(x*height), width, height); // Redraw outline of rectangle
g.setColor(custom_grey); // Set Color to Custom
g.drawString (rowString, leftBlockPosX+5+(i*width), leftBlockPosY+(x*height)+20); // Redraw number
g.setColor(Color.black); // Change color back to default
}
}
}
// DRAW CENTER BLOCK OF SEATS
for(int i=0; i<centerBlockSeatsCol;i++) // [Refer to Left Block Code comments]
{
String colString = new Integer (i+201).toString();
g.drawString (colString, centerBlockPosX+5+(i*width), centerBlockPosY+20);
g.drawRect(centerBlockPosX+(i*width), centerBlockPosY, width, height);
if (seatArrayList.contains((i+201)) != true)
{
g.setColor(Color.red);
g.fillRect(centerBlockPosX+(i*width), centerBlockPosY, width, height);
g.setColor(Color.black);
g.drawRect(centerBlockPosX+(i*width), centerBlockPosY, width, height);
g.drawString(colString, centerBlockPosX+5+(i*width), centerBlockPosY+20);
}
for (int x=0; x<centerBlockSeatsRow; x++)
{
String rowString = new Integer ((i+(centerBlockSeatsCol*x))+201).toString();
g.drawString(rowString, centerBlockPosX+5+(i*width), centerBlockPosY+(x*height)+20);
g.drawRect(centerBlockPosX+(i*width), centerBlockPosY+(x*height), width, height);
if (seatArrayList.contains((i+(centerBlockSeatsCol*x))+201) != true)
{
g.setColor(Color.red);
g.fillRect(centerBlockPosX+(i*width), centerBlockPosY+(x*height), width, height);
g.setColor(Color.black);
g.drawRect(centerBlockPosX+(i*width), centerBlockPosY+(x*height), width, height);
g.setColor(custom_grey);
g.drawString (rowString, centerBlockPosX+5+(i*width), centerBlockPosY+(x*height)+20);
g.setColor(Color.black);
}
}
}
//DRAW RIGHT BLOCK OF SEATS
for (int i=0; i<rightBlockSeatsCol;i++) // [Refer to Left Block Code comments]
{
String colString = new Integer (i+301).toString();
g.drawString(colString, rightBlockPosX+5+(i*width), rightBlockPosY+20);
g.drawRect(rightBlockPosX+(i*width), rightBlockPosY, width, height);
if (seatArrayList.contains((i+301)) != true)
{
g.setColor(Color.red);
g.fillRect(rightBlockPosX+(i*width),rightBlockPosY,width,height);
g.setColor(Color.black);
g.drawRect(rightBlockPosX+(i*width), rightBlockPosY, width, height);
g.drawString (colString, rightBlockPosX+5+(i*width), rightBlockPosY+20);
}
for(int x=0; x<rightBlockSeatsRow; x++)
{
String rowString = new Integer ((i+(rightBlockSeatsCol*x))+301).toString();
g.drawString (rowString, rightBlockPosX+5+(i*width), rightBlockPosY+(x*height)+20);
g.drawRect(rightBlockPosX+(i*width), rightBlockPosY+(x*height), width, height);
if (seatArrayList.contains((i+(rightBlockSeatsCol*x))+301) != true)
{
g.setColor(Color.red);
g.fillRect(rightBlockPosX+(i*width), rightBlockPosY+(x*height), width, height);
g.setColor(Color.black);
g.drawRect(rightBlockPosX+(i*width), rightBlockPosY+(x*height), width, height);
g.setColor(custom_grey);
g.drawString (rowString, rightBlockPosX+5+(i*width), rightBlockPosY+(x*height)+20);
g.setColor(Color.black);
}
}
}
}
public static void main (String[] args) // Main Method Declaration
{
new Main(); // Create a new Instance of the main Program when ran
}
}
// Class that contains methods for Database manipulation
import java.awt.*;
//import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
public class FullDataBaseGenerator
{
// Method that takes a String (from the film time cb)
// And returns a String of the name of the text file it belongs to
public static String returnFileName(String input)
{
String timeFileName = input;
if (input.equals("1.00 PM"))
{
timeFileName = "SEAT DATABASE 1.00 PM.txt";
}
else if (input.equals("3.00 PM"))
{
timeFileName= "SEAT DATABASE 3.00 PM.txt";
}
else if (input.equals("5.00 PM"))
{
timeFileName= "SEAT DATABASE 5.00 PM.txt";
}
else if (input.equals("7.00 PM"))
{
timeFileName = "SEAT DATABASE 7.00 PM.txt";
}
else if (input.equals("9.00 PM"))
{
timeFileName= "SEAT DATABASE 9.00 PM.txt";
}
return timeFileName;
}
//Method to Create a blank database of all the seats available
public ArrayList<Integer> seatNumberCalculate()
{
// Variables to values for each block of seats
int A = 0;
int B = 0;
int C = 0;
// ArrayList to hold the values
ArrayList<Integer> al = new ArrayList<Integer>();
// Add zero at the start of the array to act as a defauilt value for the cbs
al.add(0);
// Calculate the seatnumbers and add them into the array
for (int i=0; i < 36; i++)
{
A = 101+i;
al.add(A);
}
for (int i = 0; i < 40; i++)
{
B = 201+i;
al.add(B);
}
for (int i = 0; i < 36; i++)
{
C = 301+i;
al.add(C);
}
return al;
}
// Method that generates a fresh database
public void FullDataBaseGeneration(String file_name)
{
// Name of database (calculated by 'returnFileName' method)
String name = file_name;
// Get ArrayList cointaining values for every seat
ArrayList <Integer> input = seatNumberCalculate();
// Name of database
String selectedTime = returnFileName(name);
File selectedTimeFile = new File(selectedTime);
try{
// if the file exists, do not create a new file (leave existing file alone)
if (selectedTimeFile.exists() == true)
{
return;
}
}catch (Exception ex){
System.err.println(ex.getMessage());
}
// if the file doesnt exist..
try{
// create a new file with the correct name
selectedTimeFile.createNewFile();
// Start dependencies for file reading
FileInputStream fs = new FileInputStream(selectedTimeFile.toString());
DataInputStream in = new DataInputStream(fs);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
//Start dependancy for file writing
String stringLine;
BufferedWriter fw1 = new BufferedWriter(new FileWriter(selectedTime));
// Write a ; to the file (this is needed to add some content to replace)
fw1.write(";");
// Close this write dependancy
fw1.close();
// While there are Lines left to be read
while ((stringLine = br.readLine()) != null)
{
// Create dependencies for writing to same file
BufferedWriter fw = new BufferedWriter(new FileWriter(selectedTime));
int x=0;
// Iterate through the new edited array (orginal array minus selected seat)
while(x < input.size())
{
// Rewrite every line of the text file with each entry in the new array
String line = input.get(x).toString();
fw.write(line + ";");
x++;
}
//Close the file writing dependency
fw.close();
}
}catch (Exception ex){
System.err.println(ex.getMessage());}
}
// Method for returning an array of the available seats, for passing into the Main class
public static ArrayList<Integer> AvailableSeatsArrayReturn(String file_name)
{
ArrayList<Integer> temp = new ArrayList<Integer>();
String name = file_name;
String selectedTime = returnFileName(name);
File selectedTimeFile = new File(selectedTime);
if (selectedTimeFile.exists())
{
try{
FileInputStream fs = new FileInputStream(selectedTimeFile.toString());
DataInputStream in = new DataInputStream(fs);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String stringLine;
while ((stringLine = br.readLine()) != null)
{
String[] array = stringLine.split(";");
// For every object in the array, built from items in the text file
for (int i=0; i < array.length; i++)
{
// Convert the item to an integer
Integer num = Integer.parseInt(array[i]);
// Add Item to arraylist to be rerturned
temp.add(num);
}
}
in.close();
}catch (Exception ex){System.err.println(ex.getMessage());}
}
return temp;
}
}
@syahir0159
Copy link

Please sent full coding tu [email protected] thank you

@abhishekbubun30
Copy link

Please send the full code to [email protected]

@nicky1999year
Copy link

HI, Can you Please send the full code to [email protected]

@aineishmere
Copy link

aineishmere commented Mar 7, 2021

Hello, please send me the full code, it will be a very big help. Thank you.
My email: [email protected]

@bananavasso
Copy link

HI, Can you Please send the full code to [email protected]

@bhavinshaa
Copy link

Hi everyone. Anyone who has the full code, can you send to: [email protected]
Thank you for your concern :)

@amandine-crg
Copy link

Hi,

Ticket.java and FullDataBaseGenerato.java is the same code. please provide Ticket.java class.
please send me Ticket.java class at: [email protected]
Thanks in advance.

@Wadkar07
Copy link

please send me Ticket.java [email protected]

@ShudoVerien
Copy link

ShudoVerien commented Jun 3, 2021

Hello! Please send me full code to: [email protected]

@sourabh-714
Copy link

please send me full code at [email protected]

@SchezShier
Copy link

hi..please sent me code for ticket at [email protected]

@maessrah
Copy link

maessrah commented Nov 7, 2021

hi if you could,please send me the full code at @[email protected] . and can anyone teach me how to run this code.

@parsons-Jsr
Copy link
Author

So I created this in 2012 for some university coursework. It works and got me decent marks, however it is horribly inefficient and runs on Java 1.6. I have not used Java in roughly 5 years now, so no idea how much work it would be to compile this on a newer version of the SDK.

The ticket.java appears to be the wrong file, I would just to need upload the correct code for that file. However, if you actually read the code you can see that that file simply contains some calculation functions for Seat price. Should be fairly easy to work this out yourself. This makes me believe that the interest in this is that similar coursework exists and people are looking for a shortcut.

If someone could explain the interest in it I could possibly update the code as I still have the source. However, If this is a coursework thing, then I would much prefer simply providing any answers you may have to help you code it yourself.

@Balajiking
Copy link

Hi
Can you send full code to " [email protected] "
Please

@alliefai
Copy link

alliefai commented Jun 1, 2022

Hi do you mind if I ask you to send me the full code please?
Here's my email [email protected]
Thank you in advance.

@wsong1026
Copy link

hi do u mind share me full code
[email protected]

@Dineshkumar40
Copy link

Hi pls send the full code , am in a urgent need of this. Here is the mail id: [email protected]
please bro

@sarveantharan
Copy link

Please send full code
[email protected]
tq in advance

@imasyraf
Copy link

Please send full code
[email protected]
tq in advance

@tim1027
Copy link

tim1027 commented Sep 13, 2023

Please send full code
[email protected]
tq in advance

@duongdinhnam
Copy link

please send me full code at [email protected]

@Saru1354
Copy link

Kindly send me the Full code to [email protected]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment