/* ++[   MP4 - Student.h  ]++++++++++++++++++++++++++++++++++++++
   +                                                            +
   + Zaczek, Mariusz                                            +
   + CS 223 - Monday 11:00am - 1:00 pm                          +
   + 4/1/98                                                     +
   +                                                            +
   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */

#ifndef STUDENT_H
#define STUDENT_H

/* ++[ Class - Student ]+++++++++++++++++++++++++++++++++++++++++
   + 		                                                +
   + Student Class (BASE)					+
   +								+
   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */

class Student 
{
private:
  int ssno;
  double finalScore;
  char grade;
  Student *next;
public:
  Student();
  void printGrade();
  void set_id(int id);
  void set_final_score(double s);
  void set_final_grade(char g);
  void Insert(Student *data,Student *dummy); 
  double GetFinalScore();
  void set_Next_Student(Student *new_next);
  Student *get_Next_Student();
};


/* ++[ Class - RegularStudent ]++++++++++++++++++++++++++++++++++      
   +                                                            +
   + RegularStudent Class (DERIVED)				+
   +                                                            +
   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */

class RegularStudent : public Student
{
private:
  double score;
public:
  RegularStudent();
  void computeGrade(double score);
  void computeFinalScore(int id_no, double s1, double s2, double s3);
};

/* ++[ Class - ProficiencyStudent ]++++++++++++++++++++++++++++++      
   +                                                            +
   + ProficiencyStudent Class (DERIVED)                         +
   +                                                            +
   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */

class ProficiencyStudent : public Student
{
private:
  double score;
public:
  ProficiencyStudent();
  void computeGrade(double score);
  void computeFinalScore(int id_no, double s1, double s2);
};


/* ++[ Class - List ]++++++++++++++++++++++++++++++++++++++++++++
   +                                                            +
   + List Class 			                        +
   +                                                            +
   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */

class List
{
private:
  Student *dummy;
public:
  List();
  ~List();
  void InsertStudent(Student *data);
  void Print();
};

#endif
