Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Topics This assignment will give you practice with classes, inheritance, arrays,

ID: 3729062 • Letter: T

Question

Topics

This assignment will give you practice with classes, inheritance, arrays, and thinking/designing code with an Object-Oriented approach.

Instructions

You are going to write a program that will simulate the very beginnings of a Ticketing System for an entertainment venue (think Key Arena, Tacoma Dome, Quest Field, etc). You will design a Ticket class and a VIPTicket. You will then write a main program that will create a set number of Tickets and print out an ascii art version of the tickets.

In theory, we could continue to build on this program to create a more complicated system that allows people to purchase tickets (become owners of tickets), calculate sales, and much more like TicketMaster or StubHub.

Ticket Class

You need to write a Ticket class, where:

A ticket has a the following state fields: seat number, cost, and owner.

The Ticket class should also share a class variables with all Tickets for the next available seat (this changes every time a ticket is issued).

A Ticket should be able to be created given no information. Only a constructor with no parameters needs to be defined.

Tickets should be created starting with seat #1, and every subsequent ticket should be one seat higher.

Tickets should cost $10 by default.

You determine what the starting value of the owner field is.

A Ticket should have accessors for all fields.

A Ticket should have mutators for only the owner. (You cannot change the price of a ticket after creation, nor the seat number assigned to a ticket.)

A Ticket should have a getType method which returns a String that returns "General Admission" as the ticket type.

A Ticket should have a discounts method which returns a String that indicates that Tickets (regular tickets) have no associated discounts. Other types of tickets will have discounts and you will override this method.

A Ticket should have a toString method which can be used to print a ticket. You determine how a ticket should print.

Tester Code

After you create (or as you create) your Ticket class, you should write tester code to make sure that your Ticket performs as expected. You will need to turn this code in. In this file, everything can be done in the main - it just needs to appropriately test all the functionality of your Ticket class by creating a Ticket object and then calling various methods on it.

VIPTicket

Create a VIPTicket class which is a subclass of Ticket. VIPTickets have mostly the same state and behavior of a Ticket, except:

A VIPTicket should be able to be created given no information. Only a constructor with no parameters needs to be defined.

This constructor should appropriate initialize all of the inherited fields from the Ticket superclass.

A VIPTicket should cost three times the cost of a general Ticket.

A VIPTicket should have a type of "VIP"

A VIPTicket should receive a discount of Free Parking.

You should add some testing code to your tester file to test that objects of this type work as expected.

Ticket Client

You should create a Client program to create tickets and then print those tickets.

This class should contain a main method and should declare an array of Tickets.

The number of tickets created should be a class constant at the top of the program so that it can be easily changed.

You should have a method that takes the Ticket array as a parameter and create new Tickets according to the following:

95% of the total tickets should be general admissions tickets (Ticket objects)

5% of the total tickets should be VIP tickets (VIPTicket objects)

Make sure that the total number of tickets adds up to the constant at the top of the program! Do not hardcore in the amounts for each type of ticket - come up with a formula using the class constant.

You should have a method that takes the Ticket array as a parameter and prints all the tickets by utilizing the methods in the Ticket/VIPTicket classes. YOUR PRINTED TICKET SHOULD NOT LOOK EXACTLY LIKE MINE!

Your printed tickets must print: the seat, the cost, the type of ticket, and any ticket's associated discounts.

Sample Output

Explanation / Answer

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

// 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). "+

"If you haven't already done so, please re-run the program and"+

" select this option again if you wish to delete the databases. "+

"The Command will still run regardless, but will not work without"+

" the the above steps "+

"Would you like to Reset all the Databases? ",

"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 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

}

}

Ticket.java

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;

}

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote