#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
class Student
{
private:
string name;
int year;
string semester;
int AmtClass;
string *CName;
static string cohort[4];
public:
Student();
Student(int AmtClass);
Student(Student &);
void setCourses(string courses[], int n);
void setName(string name);
void setYear(int year);
void setSemester(string semester);
string getName();
int getYear();
string getSemester();
int getAmtClass();
string getCohort();
string getCNames();
// ~Student();
};
string Student::cohort[4] = "";
Student::Student()
{
name = "";
year = 0;
semester = "";
AmtClass = 0;
}
//I am trying to create a dynamically allocated array of strings
Student::Student(int amount)
{
AmtClass = amount;
CName = new string[AmtClass];
}
void Student::setCourses(string courses[], int n)
{
CName[n] = courses[n];
}
Student::Student(Student &obj)
{
*this = obj;
}
void Student::setName(string Name)
{
name = Name;
}
void Student::setYear(int Year)
{
year = Year;
switch(year)
{
case 1:
cohort[0] = "Freshman";
break;
case 2:
cohort[1] = "Sophomore";
break;
case 3:
cohort[2] = "Junior";
break;
case 4:
cohort[3] = "Senior";
break;
}
}
void Student::setSemester(string Semester)
{
semester = Semester;
}
string Student::getName()
{
return name;
}
int Student::getYear()
{
return year;
}
string Student::getSemester()
{
return semester;
}
int Student::getAmtClass()
{
return AmtClass;
}
string Student::getCohort()
{
year -= 1;
return cohort[year];
}
//Returns only the first course name i entered, i want to return all
string Student::getCNames()
{
return *CName;
}
void readStudentData(Student &);
void printStudentData(Student);
int main()
{
int amount;
cout << "How many courses are you currently taking? ";
cin >> amount;
Student kid(amount);
readStudentData(kid);
printStudentData(kid);
}
void readStudentData(Student &kid)
{
cin.ignore(10000, '\n');
int amount = kid.getAmtClass();
string name = "";
string semester = "";
int year = 0;
string *pName = new string[amount];
cout << "What is your full name? ";
getline(cin,name);
kid.setName(name);
cout << "Type in 1 for Freshman, 2 for Sophomore, 3 for Junior or 4 for Senior.";
cout << "\nWhat year are you? ";
cin >> year;
while(cin)
{ if(year >=1 && year <= 4)
{
kid.setYear(year);
break;
}
else
{
cout << "Number must be between 1 and 4 Please try again." << endl;
year = 0;
cin >> year;
}
}
cin.ignore();
cout << "What is your current semester? ";
getline(cin,semester);
kid.setSemester(semester);
cout << "Please enter the name of all your courses." << endl;
for(int i = 0; i < amount; i++)
{
cout << "Course #" << i+1 << " : ";
getline(cin,pName[i]);
kid.setCourses(pName, i);
}
}
void printStudentData(Student kid)
{
Student kid2 = kid;
cout << "\nHere is your information:" << endl;
cout << "Name : " << kid2.getName() << endl;
cout << "Semester : " << kid2.getSemester() << endl;
cout << "Year : " << kid2.getCohort() << endl;
for(int i = 0; i < kid2.getAmtClass(); i++)
{
cout << "Course #" << i+1 << " : " << kid2.getCNames() << endl;
}
}
So in this function I am trying to create a program that'll store information about a student. When I am taking the student's courses name and then printing them out later, I only end up with only the first course name that was entered in. I am trying to print all of the courses name the user has entered. I believe the problem is within the accessor function.
Here are my results
How many courses are you currently taking? 2
What is your full name? Testing Name
Type in 1 for Freshman, 2 for Sophomore, 3 for Junior or 4 for Senior.
What year are you? 4
What is your current semester? Spring 2014
Please enter the name of all your courses.
Course #1 : C++
Course #2 : Adv C++
Here is your information:
Name : Testing Name
Semester : Spring 2014
Year : Senior
Course #1 : C++
Course #2 : C++