Share
Explore BrainMass

Definition of a class named Doctor

Give the definition of a class named Doctor whose objects are records for a clinic's doctors. This class will be a derived class of the class SalariedEmployee given in Display 7.5. A Doctor record has the doctor's specialty (such as "Pediatrician", "Obstetrician", "General Practitioner", and so forth; so use the type String), and office visit fee (use type double). Be sure your class has a reasonable complement of constructors, accessor and mutator methods, and suitably defined equals, and toString methods. Write a program to test all your methods.

You should implement the following methods:

public Doctor()
public Doctor(String theName, Date theDate, double theSalary,
String theSpecialty, double theVisitFee)
public Doctor(Doctor orig)
public String getSpecialty()
public void setSpecialty(String theSpecialty)
public double getVisitFee()
public void setVisitFee(double theVisitFee)
public boolean equals(Doctor other)

HINT:

Constructors defined in the Doctor class can call the superclass's constructor (e.g. super(theName, theDate, theSalary)) nto initialize the instance variables in SalariedEmployee.
By subclassing SalariedEmployee, the Doctor class will inherit not only the methods defined in SalariedEmployee, but also those defined in Employee. You may override (re-implement) methods in the Employee class, but in this project you need only override the toString and equals methods.
Make sure that you initialize the specialty and visitFee fields in your zero-argument constructor.

/**
Subclass of SalariedEmployee that adds specicialty and visit fee fields.
*/
class Doctor extends SalariedEmployee {
/**
The doctor's specialty
*/
private String specialty;

/**
The doctor's visit fee
*/
private double visitFee;

// --------------------------------
// ----- ENTER YOUR CODE HERE -----
// --------------------------------

// --------------------------------
// --------- END USER CODE --------
// --------------------------------

public String toString() {
// Adapted from SalariedEmployee.toString()
return getName() + " (Specialty: " +
getSpecialty() + ")" + "n Fee for office visit: " +
getVisitFee() + "n Hired " + getHireDate() +
", $" + getSalary() + " per year";
}

}

/**
Demo program that tests the methods of the Doctor class
*/
public class DoctorDemo {

public static void main(String[] args) {
// Test the constructors
Doctor doc = new Doctor();
System.out.println("Doctor created without arguments:");
System.out.println(doc);
System.out.println();

Doctor pediatrician = new Doctor("Dr. John Doe",
new Date("March", 15, 2001), 123500.00,
"Pediatrics", 125.00);
System.out.println("Doctor created with all arguments:");
System.out.println(pediatrician);
System.out.println();

// Test the copy constructor and equals method
Doctor p2 = new Doctor(pediatrician);
System.out.println("Doctor created with copy constructor:");
System.out.println(p2);
System.out.println();
System.out.println("pediatrician == p2? " + (pediatrician == p2));
System.out.println(
"pediatrician.equals(p2)? " + pediatrician.equals(p2));
System.out.println(
"pediatrician.equals(doc)? " + pediatrician.equals(p2));
System.out.println();

// Test the setter and getter methods
p2.setName("Dr. Joe Smith");
p2.setSpecialty("Opthomology");
p2.setVisitFee(110.0);
System.out.println(
"After resetting name, specialty, and office visit fee:");
System.out.println(p2);
System.out.println();
System.out.println("Specialty: " + p2.getSpecialty());
System.out.println("OfficeVisitFee: $" + p2.getVisitFee());
System.out.println();

}

}

Employee.java

/**
Class Invariant: All objects have a name string and hire date.
A name string of "No name" indicates no real name specified yet.
A hire date of Jan 1, 1000 indicates no real hire date specified yet.
*/
public class Employee
{
private String name;
private Date hireDate;

public Employee( )
{
name = "No name";
hireDate = new Date("January", 1, 1000); //Just a place holder.
}

/**
Precondition: Neither theName nor theDate are null.
*/
public Employee(String theName, Date theDate)
{
if (theName == null || theDate == null)
{
System.out.println("Fatal Error creating employee.");
System.exit(0);
}
name = theName;
hireDate = new Date(theDate);
}

public Employee(Employee originalObject)
{
name = originalObject.name;
hireDate = new Date(originalObject.hireDate);
}

public String getName( )
{
return name;
}

public Date getHireDate( )
{
return new Date(hireDate);
}

/**
Precondition newName is not null.
*/
public void setName(String newName)
{
if (newName == null)
{
System.out.println("Fatal Error setting employee name.");
System.exit(0);
}
else
name = newName;
}

/**
Precondition newDate is not null.
*/
public void setHireDate(Date newDate)
{
if (newDate == null)
{
System.out.println("Fatal Error setting employee hire date.");
System.exit(0);
}
else
hireDate = new Date(newDate);
}

public String toString( )
{
return (name + " " + hireDate.toString( ));
}

public boolean equals(Employee otherEmployee)
{
return (name.equals(otherEmployee.name)
&& hireDate.equals(otherEmployee.hireDate));
}
}

SalariedEmploye.java

/**
Class Invariant: All objects have a name string, hire date, and nonnegative salary.
A name string of "No name" indicates no real name specified yet.
A hire date of Jan 1, 1000 indicates no real hire date specified yet.
*/
public class SalariedEmployee extends Employee
{
private double salary; //annual

public SalariedEmployee( )
{
super( );
salary = 0;
}

/**
Precondition: Neither theName nor theDate are null;
theSalary is nonnegative.
*/
public SalariedEmployee(String theName, Date theDate, double theSalary)
{
super(theName, theDate);
if (theSalary >= 0)
salary = theSalary;
else
{
System.out.println("Fatal Error: Negative salary.");
System.exit(0);
}
}

public SalariedEmployee(SalariedEmployee originalObject )
{
super(originalObject);
salary = originalObject.salary;
}
public double getSalary( )
{
return salary;
}

/**
Returns the pay for the month.
*/
public double getPay( )
{
return salary/12;
}

/**
Precondition: newSalary is nonnegative.
*/
public void setSalary(double newSalary)
{
if (newSalary >= 0)
salary = newSalary;
else
{
System.out.println("Fatal Error: Negative salary.");
System.exit(0);
}
}

public String toString( )
{
return (getName( ) + " " + getHireDate( ).toString( )
+ "n$" + salary + " per year");
}

public boolean equals(SalariedEmployee other)
{
return (getName( ).equals(other.getName( ))
&& getHireDate( ).equals(other.getHireDate( ))
&& salary == other.salary);
}
}

Date.java

import java.util.Scanner;

public class Date
{
private String month;
private int day;
private int year; //a four digit number.

public Date( )
{
month = "January";
day = 1;
year = 1000;
}

public Date(int monthInt, int day, int year)
{
setDate(monthInt, day, year);
}

public Date(String monthString, int day, int year)
{
setDate(monthString, day, year);
}

public Date(int year)
{
setDate(1, 1, year);
}

public Date(Date aDate)
{
if (aDate == null)//Not a real date.
{
System.out.println("Fatal Error.");
System.exit(0);
}

month = aDate.month;
day = aDate.day;
year = aDate.year;
}

public void setDate(int monthInt, int day, int year)
{
if (dateOK(monthInt, day, year))
{
this.month = monthString(monthInt);
this.day = day;
this.year = year;
}
else
{
System.out.println("Fatal Error");
System.exit(0);
}
}

public void setDate(String monthString, int day, int year)
{
if (dateOK(monthString, day, year))
{
this.month = monthString;
this.day = day;
this.year = year;
}
else
{
System.out.println("Fatal Error");
System.exit(0);
}
}

public void setDate(int year)
{
setDate(1, 1, year);
}

public void setYear(int year)
{
if ( (year < 1000) || (year > 9999) )
{
System.out.println("Fatal Error");
System.exit(0);
}
else
this.year = year;
}
public void setMonth(int monthNumber)
{
if ((monthNumber <= 0) || (monthNumber > 12))
{
System.out.println("Fatal Error");
System.exit(0);
}
else
month = monthString(monthNumber);
}

public void setDay(int day)
{
if ((day <= 0) || (day > 31))
{
System.out.println("Fatal Error");
System.exit(0);
}
else
this.day = day;
}

public int getMonth( )
{
if (month.equals("January"))
return 1;
else if (month.equals("February"))
return 2;
else if (month.equalsIgnoreCase("March"))
return 3;
else if (month.equalsIgnoreCase("April"))
return 4;
else if (month.equalsIgnoreCase("May"))
return 5;
else if (month.equals("June"))
return 6;
else if (month.equalsIgnoreCase("July"))
return 7;
else if (month.equalsIgnoreCase("August"))
return 8;
else if (month.equalsIgnoreCase("September"))
return 9;
else if (month.equalsIgnoreCase("October"))
return 10;
else if (month.equals("November"))
return 11;
else if (month.equals("December"))
return 12;
else
{
System.out.println("Fatal Error");
System.exit(0);
return 0; //Needed to keep the compiler happy
}
}

public int getDay( )
{
return day;
}

public int getYear( )
{
return year;
}

public String toString( )
{
return (month + " " + day + ", " + year);
}

public boolean equals(Date otherDate)
{
if (otherDate == null)
return false;
else
return ( (month.equals(otherDate.month)) &&
(day == otherDate.day) && (year == otherDate.year) );
}

public boolean precedes(Date otherDate)
{
return ( (year < otherDate.year) ||
(year == otherDate.year && getMonth( ) < otherDate.getMonth( )) ||
(year == otherDate.year && month.equals(otherDate.month)
&& day < otherDate.day) );
}

public void readInput( )
{
boolean tryAgain = true;
Scanner keyboard = new Scanner(System.in);
while (tryAgain)
{
System.out.println("Enter month, day, and year.");
System.out.println("Do not use a comma.");
String monthInput = keyboard.next( );
int dayInput = keyboard.nextInt( );
int yearInput = keyboard.nextInt( );
if (dateOK(monthInput, dayInput, yearInput) )
{
setDate(monthInput, dayInput, yearInput);
tryAgain = false;
}
else
System.out.println("Illegal date. Reenter input.");
}
}

private boolean dateOK(int monthInt, int dayInt, int yearInt)
{
return ( (monthInt >= 1) && (monthInt <= 12) &&
(dayInt >= 1) && (dayInt <= 31) &&
(yearInt >= 1000) && (yearInt <= 9999) );
}

private boolean dateOK(String monthString, int dayInt, int yearInt)
{
return ( monthOK(monthString) &&
(dayInt >= 1) && (dayInt <= 31) &&
(yearInt >= 1000) && (yearInt <= 9999) );
}

private boolean monthOK(String month)
{
return (month.equals("January") || month.equals("February") ||
month.equals("March") || month.equals("April") ||
month.equals("May") || month.equals("June") ||
month.equals("July") || month.equals("August") ||
month.equals("September") || month.equals("October") ||
month.equals("November") || month.equals("December") );
}

private String monthString(int monthNumber)
{
switch (monthNumber)
{
case 1:
return "January";
case 2:
return "February";
case 3:
return "March";
case 4:
return "April";
case 5:
return "May";
case 6:
return "June";
case 7:
return "July";
case 8:
return "August";
case 9:
return "September";
case 10:
return "October";
case 11:
return "November";
case 12:
return "December";
default:
System.out.println("Fatal Error");
System.exit(0);
return "Error"; //to keep the compiler happy
}
}
}

Solution Summary

The definition of a class named Doctor whose objects are records for a clinic's doctors is given.

$2.19