#include <iostream>
#include <vector>
#include <string>
class grade
{
public:
int actual, max;
std::string subject;
grade(int actual_grade = 0, int max_grade = 0, std::string init_subject = "")
: actual(actual_grade)
, max(max_grade)
, subject(init_subject)
{ }
void read(std::istream& in, std::ostream& out)
{
out << "What subject is this mark for?";
in >> subject;
out << "What mark did you get?";
in >> actual;
out << "What is the mark out of?";
in >> max;
}
float percentage() const
{
return static_cast<float>(actual) / static_cast<float>(max);
}
friend std::ostream& operator<<(std::ostream& out, grade& g)
{
return out << "Subject: " << g.subject << std::endl
<< "Mark: " << g.actual << " / " << g.max;
}
};
class report_card : public std::vector<grade>
{
protected:
int num_grades;
public:
report_card(int init_num_grades = 0)
: std::vector<grade>()
, num_grades(init_num_grades)
{
for (int i = 0; i < num_grades; i++)
push_back(grade());
}
};
int main(int argc, char ** argv)
{
report_card rc;
int num_grades;
std::cout << "This program will take marks from a report card and output them." << std::endl;
std::cout << "Enter the number of grades you'd like to input: ";
std::cin >> num_grades;
rc = report_card(num_grades);
for (report_card::iterator iter = rc.begin(); iter != rc.end(); iter++)
iter->read(std::cin, std::cout);
std::cout << "Your marks:" << std::endl;
for (report_card::iterator iter = rc.begin(); iter != rc.end(); iter++)
std::cout << *iter << std::endl;
return 0;
} |