-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStudent.pas
More file actions
90 lines (72 loc) · 2.54 KB
/
Student.pas
File metadata and controls
90 lines (72 loc) · 2.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
{$MODE OBJFPC}
unit Student;
interface
uses Grading, sysutils;
type
TNameRecord = record
firstname, middlename, lastname: string[50];
end;
TGradeLevel = 0..12;
TGender = (male, female, other);
TStudent = record
name: TNameRecord;
gender: TGender;
dateofbirth: TDateTime;
score: TGradeScore;
grade: TGradeLetter;
gradeLevel: TGradeLevel //0 is kindergarden
end;
ENameLengthExceed = class(Exception);
function ParseGender(genderString: string): TGender;
function GradeLevelToString(level: TGradeLevel): string;
function CreateStudent(firstname, middlename, lastname: string;
gender: string;
dob: TDateTime;
score: TGradeScore;
gradeLevel: TGradeLevel
): TStudent;
implementation
// Creates a TGender from a string, accepts 'm*' for male and 'f*' for female
function ParseGender(genderString: string): TGender;
begin
genderString := Trim(genderString);
if Length(genderString) = 0 then Exit(other);
case LowerCase(genderString[1]) of
'm' : ParseGender := male;
'f' : ParseGender := female;
else
ParseGender := other;
end;
end;
// Create string out of TGradeLevel
function GradeLevelToString(level: TGradeLevel): string;
begin
if level = 0 then
GradeLevelToString := 'Kindergarten'
else
GradeLevelToString := 'Grade ' + IntToStr(level);
end;
//
function CreateStudent( firstname, middlename, lastname: string;
gender: string;
dob: TDateTime;
score: TGradeScore;
gradeLevel: TGradeLevel
): TStudent;
var
returnStudent: TStudent;
begin
if Length(firstname) > 50 then raise ENameLengthExceed.Create('Firstname exceeds name length limit.');
returnStudent.name.firstname := firstname;
if Length(middlename) > 50 then raise ENameLengthExceed.Create('Middlename exceeds name length limit.');
returnStudent.name.middlename := middlename;
if Length(lastname) > 50 then raise ENameLengthExceed.Create('lastname exceeds name length limit.');
returnStudent.name.lastname := lastname;
returnStudent.gender := ParseGender(gender);
returnStudent.dateofbirth := dob;
returnStudent.score := score;
returnStudent.grade := Grading.GetLetterFromScore(score);
returnStudent.gradeLevel := gradeLevel;
CreateStudent := returnStudent;
end;
end.