Intial Commit

This commit is contained in:
Lucas Mathews
2025-03-17 17:14:53 +01:00
parent a3aebe823e
commit 3d12df0d94
2 changed files with 353 additions and 0 deletions

71
Order.java Normal file
View File

@@ -0,0 +1,71 @@
/*
Programmer: Lucas Mathews 12070730
Course: Programming Fundamentals COIT11222
File: Order.java
Purpose: Assignment Two -- Rocky Dry Cleaners windowed application
Date: 19 May 2019
*/
public class Order //page 141 does not contain a main, organising classes
{
private String customerName = "";
private int garments = 0;
public Order() //Default constructor, name is set to "" and gar is set to 0
{
this("", 0);
}
public Order(String name, int gar) //Parameterised constructor
{
customerName = name;
garments = gar;
}
public void setCustomerName(String name)
{
customerName = name;
}
public void setGarments(int gar)
{
garments = gar;
}
public String getCustomerName() //returns data to RockyDryCleanersGUI.java
{
return customerName;
}
public int getGarments() //returns data to RockyDryCleanersGUI.java
{
return garments;
}
public double calculateCharge() //calculates the charge for the garments, calculation code from ASS1
{
double garmentCost = 8.50;
double garmentDiscount = 6.50;
double charge = 0; //do not store charge as an instance variable.. can I store it straight to array?
if (garments == 1 || garments == 2)
charge = garmentCost * garments;
else if (garments == 3)
charge = 20;
else
charge = 20 + (garmentDiscount * (garments - 3));
return charge;
}
}

282
RockyDryCleanersGUI.java Normal file
View File

@@ -0,0 +1,282 @@
/*
Programmer: Lucas Mathews 12070730
Course: Programming Fundamentals COIT11222
File: RockyDryCleanersGUI.java
Purpose: Assignment Two -- Rocky Dry Cleaners windowed application
Date: 19 May 2019
*/
import java.util.Scanner;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
public class RockyDryCleanersGUI extends JFrame implements ActionListener
{
private final int MAX_ORDERS = 10; //declare maximum orders constant
private Order [] orderArray = new Order[MAX_ORDERS]; //declare Order object array
private int currentOrder = 0; //declare current order variable
private JLabel titleLabel = new JLabel("Rocky Dry Cleaners Management System"); // program title
private JLabel nameLabel = new JLabel("Customer name: ");// for prompt
private JTextField nameField = new JTextField(26); // for name entry
private JLabel garmentsLabel = new JLabel("Number of plain garments: ");// for prompt
private JTextField garmentsField = new JTextField(4); // for number of garments entry
private JTextArea displayTextArea = new JTextArea("", 16, 56); // declare text area
private JScrollPane scrollPane; // scroll pane for the text area
// declare all of the buttons
private JButton enterButton = new JButton("Enter"); // buttons
private JButton displayButton = new JButton("Display All");
private JButton searchButton = new JButton("Search");
private JButton exitButton = new JButton("Exit");
public RockyDryCleanersGUI()
{ // constructor create the Gui
this.setLayout(new FlowLayout()); // set JFrame to FlowLayout
titleLabel.setFont(new Font("Ariel", Font.BOLD, 22));
add(titleLabel);
add(nameLabel);
add(nameField);
add(garmentsLabel);
add(garmentsField);
// set text area to a monospaced font so the columns can be aligned using a format string
displayTextArea.setFont(new Font("Monospaced", Font.PLAIN, 12));
displayTextArea.setEditable(false); // make text area read only
scrollPane = new JScrollPane(displayTextArea); // add text area to the scroll pane
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); // just need vertical scrolling
add(scrollPane);
add(enterButton);
add(displayButton);
add(searchButton);
add(exitButton);
enterButton.addActionListener(this); // add the action listener to the buttons
displayButton.addActionListener(this);
searchButton.addActionListener(this);
exitButton.addActionListener(this);
// when the user pushes the system close (X top right corner)
addWindowListener( // override window closing method
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
exit(); // Attempt to exit application
}
}
);
}
public void actionPerformed(ActionEvent e)
{ // process the clicks on all of the buttons
String command = e.getActionCommand();
if (command.compareTo("Enter") == 0)
enter();
else if (command.compareTo("Display All") == 0)
displayAll();
else if (command.compareTo("Search") == 0)
search();
else if (command.compareTo("Exit") == 0)
exit();
}
private void enter()
{
if (currentOrder == 10) //error message code to show max orders has been reached
{
JOptionPane.showMessageDialog(null, "Maximum number of orders has been reached", "Rocky Dry Cleaners Management System", JOptionPane.ERROR_MESSAGE);
nameField.requestFocus();
return;
}
if (nameField.getText().compareTo("") == 0) //error message code to prompt for name to be entered
{
JOptionPane.showMessageDialog(null, "You must enter a customer name", "Rocky Dry Cleaners Management System", JOptionPane.ERROR_MESSAGE);
nameField.requestFocus();
return;
}
if (garmentsField.getText().compareTo("") == 0) //error message code to prompt for number of garments to be entered
{
JOptionPane.showMessageDialog(null, "You must enter the number of garments", "Rocky Dry Cleaners Management System", JOptionPane.ERROR_MESSAGE);
garmentsField.requestFocus();
return;
}
String customerName = nameField.getText(); //Read in customer name and number of garments information and add to the Order array
int garments = Integer.parseInt(garmentsField.getText());
orderArray[currentOrder] = new Order(customerName, garments);
double charge = orderArray[currentOrder].calculateCharge();
displayHeading(); //Display customer name, number of garments and the order charge to the text area
displayTextArea.append(String.format("%-30s%-17s%5.2f", customerName, garments, charge));
//Clear input fields and return focus to the customer name field and increment current booking variable
nameField.setText("");
garmentsField.setText("");
nameField.requestFocus();
currentOrder ++;
}
private void displayHeading()
{
displayTextArea.setText(String.format("%-30s%-17s%-6s\n", "Customer Name", "Garments", "Charge"));
appendLine();
}
private void appendLine()
{
displayTextArea.append("-------------------------------------------------------\n");
}
private void displayAll()
{
displayTextArea.setText(String.format("%-30s%-17s%-6s\n", "Customer Name", "Garments", "Charge"));
displayTextArea.append("-------------------------------------------------------\n");
for (int i = 0; i < currentOrder; i++) //displays all of the entries in the array
{
displayTextArea.append(String.format("%-30s%-17s%5.2f\n", orderArray[i].getCustomerName(), orderArray[i].getGarments(), orderArray[i].calculateCharge()));
}
displayTextArea.append("-------------------------------------------------------\n");
double totalGarments = 0;
double totalCharge = 0;
for(int i = 0; i < currentOrder; i++) //adds up total garments and charge stored in array
{
totalGarments = totalGarments + orderArray[i].getGarments();
totalCharge = totalCharge + orderArray[i].calculateCharge();
}
double average = totalGarments / currentOrder; //calculates average garments
displayTextArea.append(String.format("Average garments per order: %.2f\nTotal charges: $%.2f\n", average, totalCharge));
if (currentOrder == 0) //error message for no order entered when pressing the Display All button
{
displayTextArea.setText("");
JOptionPane.showMessageDialog(null, "No order entered", "Rocky Dry Cleaners Management System", JOptionPane.ERROR_MESSAGE);
nameField.requestFocus();
return;
}
}
private void search()
{
if (currentOrder == 0)
{
displayTextArea.setText(""); //error message for no order entered when pressing the Search button
JOptionPane.showMessageDialog(null, "No order entered", "Rocky Dry Cleaners Management System", JOptionPane.ERROR_MESSAGE);
nameField.requestFocus();
return;
}
String searchName;
searchName = JOptionPane.showInputDialog(null, "Enter a customer name to search", "Search", JOptionPane.PLAIN_MESSAGE); //Read search name
boolean found = false;
int searchNum = 0;
for(int i = 0; i < currentOrder ; i++) //iterate through array to search for the search key
{
if(searchName.equalsIgnoreCase(orderArray[i].getCustomerName()))
{
found=true;
searchNum = i;
}
}
if(found == true) //display search entry
{
displayTextArea.setText(String.format("%-30s%-17s%-6s\n", "Customer Name", "Garments", "Charge"));
displayTextArea.append("-------------------------------------------------------\n");
displayTextArea.append(String.format("%-30s%-17s%5.2f\n", orderArray[searchNum].getCustomerName(), orderArray[searchNum].getGarments(), orderArray[searchNum].calculateCharge()));
}
else if(searchName.length() == 0) //error message for entering nothing in the search field
{
displayTextArea.setText("");
JOptionPane.showMessageDialog(null, "You must enter a search name", "Rocky Dry Cleaners Management System", JOptionPane.ERROR_MESSAGE);
nameField.requestFocus();
}
else //error message for not finding search
{
displayTextArea.setText("");
JOptionPane.showMessageDialog(null, searchName + " not found", "Rocky Dry Cleaners Management System", JOptionPane.ERROR_MESSAGE);
nameField.requestFocus();
}
}
private void exit()
{
//display exit message here
JOptionPane.showMessageDialog(null, "Thank you for using the Rocky Dry Cleaners Management System", "Rocky Dry Cleaners Management System", JOptionPane.PLAIN_MESSAGE);
System.exit(0);
} // exit
// Main method create instance of class
public static void main(String[] args)
{
RockyDryCleanersGUI f = new RockyDryCleanersGUI(); // Create instance of class
f.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); // allow the code to close the program
f.setBounds(200, 100, 470, 440); // Define position and size of app
f.setTitle("Rocky Dry Cleaners Management System"); // Set the title of the app
f.setVisible(true); // Make the application visible
f.setResizable(false); // Make the window not resizable
} // main
}