sry, here it is:
Coach.h
#ifndef COACH_H
#define COACH_H
#include <iostream>
#include <string>
#include "DataManager.h"
using namespace std;
class Coach

ublic AMember
{
static const int CUR_YEAR = 2004;
public:
Coach(Name name_in = Name(), int year_in = CUR_YEAR,
string email_in = "NONE", NameList medal_in = NameList(),
int years_in = 0, bool former_in = false);
~Coach();
string classType() const;
Coach* duplicate() const;
NameList getMedalists() const;
int getYearsCoaching() const;
bool getFormerAthlete() const; // better name is "isFormerAthlete"
// but do NOT change this
private:
NameList medalists;
int yearsCoaching;
bool formerAthlete;
istream& readin(istream& input);
ostream& writeout(ostream& output) const;
};
#endif
Coach.cpp
#include "Coach.h"
#include "NameList.h"
#include <iostream>
#include <string>
using namespace std;
Coach::Coach(Name name_in, int year_in,
string email_in, NameList medal_in,
int years_in, bool former_in):AMember(name_in, year_in, email_in)
{
medalists = medal_in;
yearsCoaching = years_in;
formerAthlete = former_in;
}
Coach::~Coach()
{
}
string Coach::classType() const
{
return "Coach";
}
Coach* Coach:

uplicate() const
{
Coach *newCoach;
newCoach = new Coach;
*newCoach = *this;
return newCoach;
}
NameList Coach::getMedalists() const
{
return medalists;
}
int Coach::getYearsCoaching() const
{
return yearsCoaching;
}
bool Coach::getFormerAthlete() const
{
return formerAthlete;
}
istream& Coach::readin(istream& input)
{
string former;
input >> yearsCoaching;
input >> former;
if (former == "ATHLETE")
formerAthlete = true;
else
formerAthlete = false;
input >> medalists;
return input;
}
ostream& Coach::writeout(ostream &output) const
{
output << "Years Coaching: " << yearsCoaching;
if (formerAthlete)
output << " (former athlete)";
output << endl;
if (medalists.size() > 0)
output << "Medalists:"<< endl << medalists;
else
output << "Medalists:" << endl << "none" << endl;
return output;
}
AMember.h
#ifndef AMEMBER_H
#define AMEMBER_H
#include "Name.h"
#include <iostream>
#include <string>
class AMember
{
friend std::istream& operator>>(std::istream& input, AMember &target);
friend std:

stream& operator<<(std:

stream& output, const AMember &src);
static const int CUR_YEAR = 2004;
public:
AMember(Name name_in = Name(), int year_in = CUR_YEAR,
std::string email_in = "NONE");
virtual ~AMember();
virtual std::string classType() const = 0;
virtual AMember* duplicate() const = 0;
Name getName() const;
Name getKey() const;
int getYear() const;
std::string getEmail() const;
static int getCurYear();
protected:
// moved here - see FAQ
virtual std::istream& readin(std::istream& input) =0;
virtual std:

stream& writeout(std:

stream& output) const =0;
private:
Name name;
int year;
std::string email;
};
#endif
AMember.cpp
#include "AMember.h"
#include <string>
using namespace std;
//default constructor for AMember
//Returns name of member
AMember::AMember(Name name_in, int year_in,
std::string email_in)
{
name = name_in;
year = year_in;
email = email_in;
}
AMember::~AMember()
{
delete this;
}
Name AMember::getName() const
{
return name;
}
//returns the name of member
Name AMember::getKey() const
{
return name;
}
//returns year member joined
int AMember::getYear() const
{
return year;
}
//returns member email address
string AMember::getEmail() const
{
return email;
}
//reads in AMember information from input stream
istream& operator>>(istream& input, AMember &target)
{
input>>target.name >> target.year >> target.email;
return target.readin(input);
}
//outputs AMember information to output stream
ostream& operator<<(ostream& output, const AMember &src)
{
output << src.name << "Member Since: "
<< src.year << ", " << "Email: " << src.email <<endl;
return src.writeout(output);
}
//returns the current year for the AMember
int AMember::getCurYear()
{
return CUR_YEAR;
}