// Определение класса GradeBook, усредняющего оценки в группе
#include <string>
using std::string;
class GradeBook
{
public:
GradeBook( string ); // конструктор инициализирует название курса
void setCourseName ( string ); // функция установки названия курса
string getCourseName (); // функция для получения имени курса
void displayMessage(); // вывести привтственное сообщение
void determineClassAverage(); // усредняет введённые значения
private:
string courseName; // название курса для данного GradeBook
}; //конец класса GradeBook
// Определение элементов-функций класса gradeBook, реализующего программу вычисления среднего с повторением по счётчику.
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
using std::fixed; // гарантирует вывод десятичной точки
#include <iomanip> // параметризированные манипуляторы потока
using std::setprecision; // устанавливает точность вывода чисел
//#include "GradeBook.h"
// Конструктор инициализирует courseName переданный строкой
GradeBook::GradeBook(string name)
{
setCourseName(name);
}// Конец конструктора GradeBook
// функция установки названия курса
void GradeBook::setCourseName(string name)
{
if ( name.length() <= 25 ) // если не более 25 символов
{
courseName = name; // сохранить название курса в объекте
}
else
{
courseName = name.substr( 0, 25 ); // сохранить н.к. в об. начать с 0, длина 25
cout << "Имя \"" << name << "\" за пределами максимальной длины.\n"
<< "ограничение courseName - первые 25 символов\n" << endl;
}
} // конец функции setCourseName
string GradeBook::getCourseName()
{
return courseName;
} // конец функции getCourseName
void GradeBook::displayMessage()
{
cout << "Добро пожаловть в классный журнал \n" << getCourseName() << "!" << endl;
}// конец функции displayMessage
// определить среднее по группе, исходя из 10 введённых оценок
void GradeBook::determineClassAverage()
{
int total; // сумма оценок, введённых пользователем
int gradeCounter; // номер следующей вводимой оценки
int grade;
double average; // средняя оценка
// этап инициализации
total = 0;
gradeCounter = 0;
// этап обработки
// запросить ввод и прочитать введённую пользователем оценку
cout << "Введите оценку от 1 до 100 или -1 для выхода: ";
cin >> grade; // ввести оценку или контрольное значение
while (grade != -1) // повторить 10 раз
{
total = total + grade; // прибавить оценку к total
gradeCounter = gradeCounter + 1; // увеличить счётчик на 1
cout << "Введите оценку от 1 до 100 или -1 для выхода: ";
cin >> grade; // ввести оценку или контрольное значение
} // конец while
// этап завершения
if (gradeCounter != 0) //если введена хотя-бы одна оценка
{
// вычислить среднее по всем введённым оценкам
average = static_cast< double >( total ) / gradeCounter; // явное приведение типа, при этом создаётся копия аргумента (total) и уже эта копия делится на целое тотал
// вывести сумму и среднее значение оценок
cout << "\nВ сумме: " << total << endl;
cout << "Среднее значение:" << setprecision( 2 ) << fixed << average << endl;
/*
* setprecision - парметризированный
* манипулятор потока, требует #include
* округляет до заданного кол-ва знаков после
* запятой
* <iomanip>, endl - непараметризированный
* манипулятор потока, iomanip не трубует.
* fixed - манипулятор потока, указывает, что значения с плавающей точкой
* должны выводиться в так называемом формате
* с фиксированной точкой, в
* противополоэность научной нотации
* стр.232
*/
}
else // ничего не введено, gradeCounter = 0
{
cout << "Не введено никаких оценок" << endl;
}
} // конец функции determineClassAverage
// Тестирование GradeBook
// Создать GradeBook и вызвать его функцию determineClassAverage
//#include "GradeBook.h"
int main ()
{
// создать объект myGradeBook класса GradeBook
// передать конструктору название курса
GradeBook myGradeBook ( "CS101 C++ Programming" );
myGradeBook.displayMessage(); // вывести приветствие
myGradeBook.determineClassAverage(); // найти среднее 10 оценок
return 0;
} // конец main