import java.text.*;
import java.io.*;
//-------------------------------------------------------------------
// Program P2 Q2
//
// This program defines two classes of Gym membership, and illustrates
// how the classes work with a simple program.
//
// The yearly charge is calculated based on average weekly frequency
// over the year. More complicated calculation is possible, for
// example, this code can be modifed to keep track of frequency each
// month, and charge the extras on a monthly basis. This requires
// more complex data structures such as arrays.
//
// Author : Wei Tsang Ooi
// Date : 11 July 1999
//-------------------------------------------------------------------
//-------------------------------------------------------------------
// class GymMembership
//
// This class represents a gym membership.
//
// Author : Wei Tsang Ooi
// Date : 11 July 1999
//-------------------------------------------------------------------
class GymMembership {
protected final static double YOGURT_PRICE = 9.95;
protected String description; // description of the membership type;
protected String id; // membersip id.
protected String name; // name of the member
protected int frequency; // how many this member have frequent the gym
protected int numOfYogurt; // how many yogurt this member have consumed
// helper object for formatting member's id
protected static DecimalFormat idFormatter = new DecimalFormat("000000");
// helper object for formatting costs
protected static DecimalFormat costFormatter = new DecimalFormat("####.00");
//-------------------------------------------------------------------
// GymMembership's constructor
//
// input : memberName - name of a new member
//-------------------------------------------------------------------
GymMembership (String memberName)
{
name = memberName;
frequency = 0;
numOfYogurt = 0;
description = "ERROR : No account type specified";
}
//-------------------------------------------------------------------
// buyYogurt
//
// input : number of Yogurt this member has bought
//
// This increments the total number of yogurt consumed by this member.
//-------------------------------------------------------------------
public void buyYogurt(int howMany)
{
numOfYogurt += howMany;
}
//-------------------------------------------------------------------
// comeToGym
//
// input : number of times this member has come to gym.
//
// This increments the total number of times this member has come to
// the gym.
//-------------------------------------------------------------------
public void comeToGym(int howMany)
{
frequency += howMany;
}
//-------------------------------------------------------------------
// toString
//
// input : none
// Returns a string describing this member.
//-------------------------------------------------------------------
public String toString()
{
return "\nMember : " + name + "\n" +
"ID : " + id + "\n" +
"Type : " + description + "\n" +
"Mean Frequency/Week : " + frequency/52f + "\n" +
"Yogurts Comsumed : " + numOfYogurt;
}
};
//-------------------------------------------------------------------
// class FitMembership
//
// This class represents a membership with a Fit account.
//
//-------------------------------------------------------------------
class FitMembership extends GymMembership {
private static int lastId = 0;
//-------------------------------------------------------------------
// FitMembership
//
// constructor for this class.
//-------------------------------------------------------------------
FitMembership(String memberName)
{
super(memberName);
id = generateNewId();
description = "Fit";
}
//-------------------------------------------------------------------
// generateNewID
//
// input : none
// return : a unique id for this new member.
//-------------------------------------------------------------------
private String generateNewId()
{
lastId ++;
return idFormatter.format(lastId);
}
//-------------------------------------------------------------------
// getTotalCharge
//
// input : none
// return : how much this member needs to pay.
// $250/year + $240/year charge if _average_ frequency is
// less then 4/week over the year. (assuming 1 year = 52
// weeks) + total Yogurt cost.
//-------------------------------------------------------------------
public float getTotalCharge()
{
float sum = 250; // yearly fee
float meanFreq = frequency/52f;
if (meanFreq < 4)
sum += 20*12; // extra charge
sum += (numOfYogurt * 0.75 * YOGURT_PRICE);
return sum;
}
};
//-------------------------------------------------------------------
// class FabMembership
//
// This class represents a membership with a Fab account.
//
//-------------------------------------------------------------------
class FabMembership extends GymMembership {
private static int lastId = 500000;
//-------------------------------------------------------------------
// FabMembership
//
// constructor for this class.
//-------------------------------------------------------------------
FabMembership(String memberName)
{
super(memberName);
id = generateNewId();
description = "Fab";
}
//-------------------------------------------------------------------
// generateNewID
//
// input : none
// returns : a unique id for this new member.
//-------------------------------------------------------------------
private String generateNewId()
{
lastId ++;
return idFormatter.format(lastId);
}
//-------------------------------------------------------------------
// getTotalCharge
//
// input : none
// returns : how much this member needs to pay.
// $250/year + $240/year charge if _average_ frequency is
// less then 4/week over the year. (assuming 1 year = 52
// weeks) + total Yogurt cost.
//-------------------------------------------------------------------
public float getTotalCharge()
{
float sum = 100; // yearly fee
float meanFreq = frequency/52f;
if (meanFreq > 3)
sum += 25*12; // extra charge
sum += (numOfYogurt * YOGURT_PRICE); // yogurt cost
return sum;
}
};
//-------------------------------------------------------------------
// class Gym
//
// This simple class demonstrates the classes defined above.
//
//-------------------------------------------------------------------
class Gym {
//---------------------------------------------------------------
// main
//
// This creates three members, records how many times they frequent
// the gym and how many yogurts they ate, and finally print out
// how much each member owes.
//
//---------------------------------------------------------------
public static void main (String args[])
{
FitMembership billGates = new FitMembership ("Bill Gates");
billGates.buyYogurt(1);
billGates.buyYogurt(29);
billGates.comeToGym(41);
billGates.buyYogurt(9);
billGates.comeToGym(21);
billGates.comeToGym(19);
billGates.comeToGym(50);
float cost = billGates.getTotalCharge();
System.out.println(billGates.toString());
System.out.println("Total cost : $" + GymMembership.costFormatter.format(cost));
FabMembership alGore = new FabMembership ("Al Gore");
alGore.buyYogurt(21);
alGore.buyYogurt(23);
alGore.comeToGym(21);
alGore.buyYogurt(19);
alGore.comeToGym(11);
alGore.comeToGym(9);
alGore.comeToGym(5);
cost = alGore.getTotalCharge();
System.out.println(alGore.toString());
System.out.println("Total cost : $" + GymMembership.costFormatter.format(cost));
FabMembership west = new FabMembership ("James West");
west.buyYogurt(91);
west.comeToGym(231);
west.comeToGym(135);
west.buyYogurt(84);
west.comeToGym(160);
west.comeToGym(70);
cost = west.getTotalCharge();
System.out.println(west.toString());
System.out.println("Total cost : $" + GymMembership.costFormatter.format(cost));
}
}