StudentUnit (Переопределение Equals, ToString)
Материал из Вики ИТ мехмата ЮФУ
unit StudentUnit;
interface
uses System, PersonUnit;
const
/// Первый курс
FIRST_COURSE = 1;
/// Последний курс для студентов младших курсов
LAST_UNDERGRADUATE_COURSE = 4;
// -------------------------------------------- Student -------------------------------------------
type
/// Студент
Student = class (Person)
private
///Курс
fCourse: integer;
///Группа
fGroup: integer;
/// Устанавливает номер группы равным group,
/// если он неотрицателен
procedure SetGroup(group: integer);
public
/// <summary>
/// Создает нового студента
/// </summary>
/// <param name="Name">Имя (пустое недопустимо)</param>
/// <param name="Age">Возраст (отрицательный недопустим)</param>
/// <param name="Course">Курс (отрицательный или больший LAST_UNDERGRADUATE_COURSE недопустим)</param>
/// <param name="Group">Группа (отрицательная недопустима)</param>
constructor Create(Name: string; Age, Course, Group: integer);
/// Переводит студента на следующий курс, если он меньше LAST_UNDERGRADUATE_COURSE
procedure NextCourse;
/// Возвращает истину, если текущий объект равен по значению объекту o
function Equals(o: object): boolean; override;
/// Возвращает строковое представление студента
function ToString: string; override;
/// Курс — доступ только на чтение
property Course: integer read fCourse;
/// Группа
property Group: integer read fGroup write SetGroup;
/// Выводит на консоль информацию о студенте
procedure Print; override;
end;
implementation
// -------------------------------------------- Student -------------------------------------------
{Устанавливает номер группы равным Group, если он неотрицателен}
procedure Student.SetGroup(group: integer);
begin
if group > 0 then
fGroup := group
else
raise new Exception(
'Попытка присвоить номеру группы отрицательное значение.');
end;
constructor Student.Create(Name: string; Age, Course, Group: integer);
begin
inherited Create(name, age);
SetGroup(Group);
if (Course >= FIRST_COURSE) and (Course <= LAST_UNDERGRADUATE_COURSE) then
fCourse := Course
else
raise new Exception(
'Выход за границы диапазона допустимых курсов [' +
FIRST_COURSE.ToString + '..' + LAST_UNDERGRADUATE_COURSE.ToString + ']!');
end;
{Переводит студента на следующий курс, если он меньше LAST_UNDERGRADUATE_COURSE}
procedure Student.NextCourse;
begin
if fCourse < LAST_UNDERGRADUATE_COURSE then
fCourse += 1
else
raise new Exception(
'Выход за границы диапазона допустимых курсов [' +
FIRST_COURSE.ToString + '..' + LAST_UNDERGRADUATE_COURSE.ToString + ']!');
end;
{Возвращает истину, если текущий объект равен по значению объекту o}
function Student.Equals(o: object): boolean;
begin
Result := inherited Equals(o);
if Result then
begin
var s := Student(o);
Result := (Course = s.Course) and (Group = s.Group);
end;
end;
function Student.ToString: string;
begin
Result := inherited ToString + Format(
'Курс: {0} Группа: {1} ',
fCourse, fGroup);
end;
procedure Student.Print;
begin
inherited Print;
WriteFormat(
'Курс: {0} Группа: {1} ',
fCourse, fGroup);
end;
end.