import java.lang.Comparable; /** Creates a class Appointment **/ public class Appointment implements Comparable{ public Appointment() { } /** Appointment Cons. with String day (yyyy/mm/dd) String descripition, double start(7.00) and double end(8.00) **/ public Appointment(String d, String de, double st, double et) { day = d; description = de; start = st; end = et; } /** Sets Day **/ public void setDay(String d) { day = d; } /** gets Day **/ public String getDay() { return day; } /** set Descripition **/ public void setDescription(String de) { description = de; } /** gets Descripition **/ public String getDescription() { return description; } /** sets Start time **/ public void setStart(int st) { start = st; } /** gets Start time **/ public double getStart() { return start; } /** sets End time **/ public void setEnd(int et) { end = et; } /** get End time **/ public double getEnd() { return end; } /** returns a toString for Appointment **/ public String toString() { return "Appointment[Day: " + day + " Description: " + description + " Start Time: " + start + " End Time: " + end + "]"; } /** compares two Appointments and returns 1 if a is before b, -1 if a is after b and 0 if they overlap. **/ public int compareTo(Appointment b) { String aday = this.getDay(); String bday = b.getDay(); if (aday.compareTo(bday) == 0) { double ast = this.getStart(); double ae = this.getEnd(); double bst = b.getStart(); double be = b.getEnd(); if (ast == bst) { return 0; } else if (ast < bst) { if (ae <= bst) { return 1; } else { return 0; } } else if (ast > be) { return -1; } else { return 0; } } else { return aday.compareTo(bday); } } private String day, description; private double start; private double end; } import java.util.*; /** AppointmentBook Class **/ public class AppointmentBook{ /** Empty cons. Appointmentbook **/ public AppointmentBook(){ } /** Cons. AppointmentBook with ArrayList holding Appointments **/ public AppointmentBook(ArrayList an){ anArray = an; i = 0; } /** Adds a appointment to the List but checks to make sure it is not overlapping first **/ public String add(Appointment a){ BinarySearcher searcher = new BinarySearcher(anArray); int sea = searcher.search(a); if (sea == -1 && i > 0){ return "Error: Overlapping Appointments!"; } else{ i++; anArray.add(sea, a); return "Appointment Added!"; } } /** Prints a day of appointments **/ public String print(String a){ String rvalue = ""; for (int n = 0; n < anArray.size(); n++){ x = anArray.get(n); String c = x.getDay(); if (c.equals(a)){ rvalue = rvalue + x.toString() + "\n"; } } return rvalue; } private Appointment x; private ArrayList anArray; private int i; } import java.util.ArrayList; /** A class for executing binary searches through an array. */ public class BinarySearcher { /** Constructs a BinarySearcher. @param anArray a sorted array of integers */ public BinarySearcher(ArrayList anArray) { a = anArray; } /** Finds a value in a sorted array, using the binary search algorithm. @param v the value to search @return the index at which the value occurs, or -1 if it does not occur in the array */ public int search(Appointment v) { int midp = 0; int low = 0; int high = a.size() - 1; while (low <= high) { int mid = (low + high) / 2; midp = Math.round(mid); int diff = a.get(mid).compareTo(v); if (diff == 0) // a[mid] == v return -1; else if (diff < 0) // a[mid] < v low = mid + 1; else high = mid - 1; } return midp; } private ArrayList a; } import java.awt.event.*; import java.awt.*; import javax.swing.*; import java.io.*; import java.util.*; public class AppointmentBookTester { private static final int FWIDTH = 400; private static final int FHEIGHT = 300; public static void main(String[] args){ JFrame frame = new JFrame(); final int WIDTH = 10; final int COLUMNS = 30; final int ROWS = 10; final JTextArea text = new JTextArea(ROWS, COLUMNS); text.setEditable(false); JScrollPane sPane = new JScrollPane(text); JButton Add = new JButton("Add"); JButton Print = new JButton("Print"); JLabel day = new JLabel("Day:"); JLabel desc = new JLabel("Description:"); JLabel st = new JLabel("Start Time:"); JLabel et = new JLabel("End Time"); final JTextField dayField = new JTextField(WIDTH); dayField.setText(""); final JTextField descField = new JTextField(WIDTH); descField.setText(""); final JTextField stField = new JTextField(WIDTH); stField.setText(""); final JTextField etField = new JTextField(WIDTH); etField.setText(""); JPanel panelleft = new JPanel(); JPanel panelright = new JPanel(); panelleft.setLayout(new GridLayout(2,1)); panelleft.add(Add); panelleft.add(Print); panelright.setLayout(new GridLayout(2,4)); panelright.add(day); panelright.add(dayField); panelright.add(desc); panelright.add(descField); panelright.add(st); panelright.add(stField); panelright.add(et); panelright.add(etField); frame.add(panelright, BorderLayout.NORTH); frame.add(panelleft, BorderLayout.CENTER); frame.add(sPane, BorderLayout.SOUTH); ArrayList anArray = new ArrayList(); final AppointmentBook Book = new AppointmentBook(anArray); class AddActionListener implements ActionListener{ public void actionPerformed(ActionEvent event){ String DaY, DesC; double St, Et; DaY = dayField.getText(); DesC = descField.getText(); St = Double.parseDouble(stField.getText()); Et = Double.parseDouble(etField.getText()); Appointment appoint = new Appointment(DaY, DesC, St, Et); text.append(Book.add(appoint)+ "\n"); } } class PrintActionListener implements ActionListener{ public void actionPerformed(ActionEvent event){ String DaY = dayField.getText(); text.append(Book.print(DaY) + "\n"); } } ActionListener AddActionListener = new AddActionListener(); Add.addActionListener(AddActionListener); ActionListener PrintActionListener = new PrintActionListener(); Print.addActionListener(PrintActionListener); frame.setSize(FWIDTH, FHEIGHT); frame.setTitle("Appointment Book"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }