Write a program to implement an appointment book. Implement a superclass Appointment and subclasses Onetime, Daily, and Monthly. An appointment has a description (for example, “meet with accountant”) and a date. Write a method occursOn(int year, int month, int day) that checks whether the appointment occurs on that date. For example, for a monthly appointment, you must check whether the day of the month matches. Then fill an array of Appointment objects with a mixture of appoin tments. Have the user enter a date and print out all appointments that occur on that date. Allow the user to add new appointments. The user must specify the type of appointment, the description, and the date. Provide a test class to show the implementation of your appointment book. (Java)
Expert Answer
Appointment.java
package appointment;
public class Appointment {
private String description;
private int year;
private int month;
private int day;
public Appointment(String description, int year, int month, int day) {
this.description = description;
this.year = year;
this.month = month;
this.day = day;
}
public int getYear() {
return year;
}
public int getMonth() {
return month;
}
public int getDay() {
return day;
}
public String getDescription()
{
return description;
}
public void setDescription(String desc)
{
this.description = desc;
}
public String getDate()
{
return month + “/” + day + “/” + year;
}
public boolean occursOn(int year, int month, int day)
{
return this.year >= year ;
}
@Override
public String toString() {
return getDate() + ” – ” + description ;
}
}
OneTime.java
package appointment;
public class OneTime extends Appointment
{
public OneTime(String description, int year, int month, int day) {
super(description, year, month, day);
}
@Override
public boolean occursOn(int year, int month, int day) {
// TODO Auto-generated method stub
return super.occursOn(year, month, day) && getMonth() == month && getDay() == day;
}
@Override
public String toString() {
return “One time Appointment: ” + super.toString();
}
}
Daily.java
package appointment;
public class Daily extends Appointment{
public Daily(String description, int year, int month, int day) {
super(description, year, month, day);
// TODO Auto-generated constructor stub
}
//it occurs daily so its true all the time
@Override
public boolean occursOn(int year, int month, int day) {
return super.occursOn(year, month, day);
}
@Override
public String toString() {
// TODO Auto-generated method stub
return “Daily Appointment: ” + super.toString();
}
}
Monthly.java
package appointment;
public class Monthly extends Appointment{
public Monthly(String description, int year, int month, int day) {
super(description, year, month, day);
// TODO Auto-generated constructor stub
}
@Override
public boolean occursOn(int year, int month, int day) {
// TODO Auto-generated method stub
return super.occursOn(year, month, day) && getDay() == day;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return “Monthly Appointment: ” + super.toString();
}
}
AppointmentBook.java
package appointment;
import java.util.Scanner;
public class AppointmentBook {
int y , m , d , counter ;
Scanner kbd;
Appointment appointments[];
public AppointmentBook() {
y = 0;
m = 0;
d = 0;
counter = 0;
appointments = new Appointment[20];
kbd = new Scanner(System.in);
}
public boolean isValidMonth(int m)
{
if(m<1 || m>12)
return false;
else return true;
}
public boolean isLeapYear(int y)
{
if(y%400 == 0)
return true;
else if(y%4 == 0)
return true;
else
return false;
}
public boolean isValidDate(int m, int d, int y)
{
if(d<1)
return false;
if(m==2 )
{
if(isLeapYear(y))
if(d>29)
return false;
else
if(d>28)
return false;
}
else if(m==1 || m==3 || m==5 || m == 7 || m == 8 || m == 10 || m == 12)
if(d>31)
return false;
else
if(d>30)
return false;
return true;
}
public void readDate()
{
System.out.print(“Enter year: “);
y = kbd.nextInt();
while(true)
{
System.out.print(“nEnter month: “);
m = kbd.nextInt();
if(isValidMonth(m))
break;
}
while(true)
{
System.out.print(“nEnter Date: “);
d = kbd.nextInt();
if(isValidDate(m, d, y))
break;
}
}
public void process() {
appointments[counter++] = new Monthly(“Dentist check up”, 2017, 4, 5);
appointments[counter++] = new OneTime(“Meeting with Zac”, 2017, 6, 20);
appointments[counter++] = new Daily(“Grocery Shopping”, 2017, 5, 15);
appointments[counter++] = new OneTime(“Follow up on zac’s request”, 2017, 9, 10);
appointments[counter++] = new Monthly(“Get Hair cut”, 2017, 2, 3);
while(true)
{
String desc;
int ch = 0, type = 0;
System.out.print(“n1. Check for appointmentsn2. Make an appointmentn3. ExitnEnter your choice: “);
ch = kbd.nextInt();
if(ch == 1)
{
readDate();
System.out.println(“nThe appointments that occur on ” + m + “/” + d + “/” + y + ” are..”);
for(Appointment app: appointments)
if(app != null && app.occursOn(y, m, d))
System.out.println(app);
}
else if(ch ==2)
{
System.out.print(“nEnter description for new appointment(q to quit): “);
//flushing out newline
kbd.nextLine();
desc = kbd.nextLine();
if(desc.equals(“q”))
break;
readDate();
while(type<1 || type>3)
{
System.out.print(“n1. One timen2. Dailyn3. MonthlynSelect an appointment: “);
type = kbd.nextInt();
}
if(type == 1)
appointments[counter++] = new OneTime(desc, y, m, d);
else if(type == 2)
appointments[counter++] = new Daily(desc, y, m, d);
else
appointments[counter++] = new Monthly(desc, y, m, d);
}
else if(ch == 3)
{
System.out.println(“Thank you !”);
System.exit(0);
}
else
System.out.println(“Wrong choice…”);
}
}
}
AppointmentTester.java
package appointment;
public class AppointmentTester {
public static void main(String[] args) {
AppointmentBook book = new AppointmentBook();
book.process();
}
}
OUTPUT:
1. Check for appointments
2. Make an appointment
3. Exit
Enter your choice: 1
Enter year: 2017
Enter month: 12
Enter Date: 11
The appointments that occur on 12/11/2017 are..
Daily Appointment: 5/15/2017 – Grocery Shopping
1. Check for appointments
2. Make an appointment
3. Exit
Enter your choice: 2
Enter description for new appointment(q to quit): go to the mall
Enter year: 2017
Enter month: 4
Enter Date: 5
1. One time
2. Daily
3. Monthly
Select an appointment: 1
1. Check for appointments
2. Make an appointment
3. Exit
Enter your choice: 3