/*
 * student.cpp
 *
 * Implementation of the Student class. See header file for function
 * descriptions.
 *
 * Note to CS70 students: this is an incomplete source file.  You must
 * complete it as you feel appropriate.  Search for "ADD STUFF" to
 * find places you *MAY* need to change.
 *
 * Note that many comments are missing.  We have not provided "ADD
 * STUFF" hints for missing comments.
 */

#include "course.hpp"
#include "student.hpp"

#include <iostream>
#include <string>
using namespace std;

Student::Student()
    : fullName_(),
      hairColor_(),
      courseCount_(0)
{
    // ADD PSEUDOCODE
}

Student::~Student()
{
    // ADD STUFF (PSEUDOCODE NOT NEEDED)
}

/*
 * Pseudo-constructor to fill in student information after the fact.
 * This should really be done using a constructor and assignment
 * operator, but I'm not 100% sure we'll have covered them in time.
 */
void Student::fillInInfo(
    const string&       firstName,
    const string&       lastName,
    const string&       hairColor)
{
    // ADD STUFF (PSEUDOCODE NOT NEEDED)
}

/*
 * Return the student's full name in "last, first" format.  Depending
 * on how this function is implemented, it might be possible to return
 * a "const string&", which would make it more efficient.  However,
 * the "string" return type declaration is necessary if the full name
 * is constructed "on the fly", and causes no harm in other
 * situations, so I have chosen that form.
 */
string Student::name()                  // Return student's full name
    const
{
    // ADD STUFF (PSEUDOCODE NOT NEEDED)
    return string("");			// Dummy code as placeholder.	
}

bool Student::hasMaximumLoad()          // True if can't add any more courses
    const
{
    // ADD STUFF (PSEUDOCODE NOT NEEDED)
    return true;			// Dummy code as placeholder.
}

void Student::changeHairColor(          // Dye student's hair
    const string&       newColor)       // New color to give to hair
{
    // ADD STUFF (PSEUDOCODE NOT NEEDED)
}

bool Student::addCourseToSchedule(      // Insert course in schedule
    Course*             course)         // Course being added
{
    // ADD PSEUDOCODE
    return false;			// Dummy code as placeholder.
}

bool Student::removeCourseFromSchedule( // Remove course from schedule
    Course*             course)         // Course being removed
{
    // ADD PSEUDOCODE
    return false;			// Dummy code as placeholder.
}

ostream& Student::print(                // Produce representation of student
    ostream&            out)		// Stream to print to
    const
{
    // ADD STUFF (PSEUDOCODE NOT NEEDED)
    // THIS ROUTINE SHOULD PRODUCE THE FULL STUDENT OUTPUT: NAME, HAIR
    // COLOR, AND COURSE LIST

    return out;
}

void Student::dropAllCourses()          // Remove student from all enrollments
{
    // ADD PSEUDOCODE
}


/* Junk to make emacs use the right C++ style when editing this code:
 *   Local Variables:
 *   c-file-style: "stroustrup"
 *   End:
 */
