Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {$mode objfpc}
- {$m+}
- program Lab4;
- uses
- SysUtils;
- type
- TGrades = class
- private
- f: string;
- ar : array of Integer;
- function GetArray (Index: Integer) : Integer;
- procedure SetArray (Index: Integer; AValue: Integer);
- function GetCount : Integer;
- procedure SetCount (newc: Integer);
- procedure Load (name: string);
- procedure Save (name: string);
- public
- procedure Debug ();
- constructor create(name: string);
- property Count: Integer read GetCount write SetCount;
- property Grades[Index: Integer]: Integer read GetArray write SetArray;
- end;
- constructor TGrades.create(name: string);
- begin
- f:= name;
- if FileExists(name) then
- begin
- Load(name);
- end
- else
- Count:=1;
- end;
- procedure TGrades.SetArray(Index: Integer; AValue: Integer);
- begin
- if Index>Count then Count:=Index;
- ar[Index]:=AValue;
- Save(f);
- end;
- procedure TGrades.Load(name: string);
- var
- Fi:Text;
- Line:string;
- c: integer;
- begin
- AssignFile(Fi,name);
- Reset(Fi);
- c:=0;
- while not eof(Fi) do
- begin
- ReadLn(Fi,Line);
- c:=c+1;
- SetCount(c);
- ar[c]:=StrToInt(Line);
- end;
- Close(Fi);
- end;
- procedure TGrades.Save(name: string);
- var
- i:Integer;
- Fi:Text;
- begin
- AssignFile(Fi,name);
- ReWrite(Fi);
- for i:=1 to Count do
- begin
- writeln(Fi,ar[i]);
- end;
- Close(Fi);
- end;
- procedure TGrades.SetCount(newc: Integer);
- begin
- SetLength(ar,newc+1);
- end;
- function TGrades.GetCount : Integer;
- begin
- GetCount:=Length(ar)-1;
- end;
- procedure TGrades.Debug();
- var
- i: Integer;
- begin
- write(f+': ');
- for i:=1 to Count do
- begin
- write(IntToStr(ar[i])+' ');
- end;
- writeln('');
- end;
- function TGrades.GetArray(Index: Integer) : Integer;
- begin
- GetArray:=ar[index];
- end;
- //////////////////////////////////////////////////////////////////////////////////////////////////
- type
- TStudents = class
- private
- ar : array of String;
- ar2 : array of TGrades;
- folder: string;
- function GetStudentName (Index: Integer) : String;
- function FindInArray (Index: String) : Integer;
- function GetGrade(Index: String) : TGrades;
- procedure SetGrade (Index: String; AValue: TGrades);
- function GetStudentsArraylength : Integer;
- procedure SetStudentsArraylength (Count: Integer);
- public
- destructor Destroy; override;
- constructor create(name: string);
- property StudentCount: Integer read GetStudentsArraylength write SetStudentsArraylength;
- property Students[Index: Integer]: String read GetStudentName;
- property Grades[Index: String]: TGrades read GetGrade write SetGrade;
- end;
- constructor TStudents.create(name: string);
- var
- Info : TSearchRec;
- c: Integer;
- begin
- folder:= name;
- c:=0;
- if FindFirst(name + '/*.txt', faAnyFile, Info)=0 then begin
- repeat
- //WriteLn(copy(Info.Name,1,Pos('.',Info.Name)-1));
- c:=c+1;
- SetLength(ar,c+1);
- SetLength(ar2,c+1);
- ar[c]:=copy(Info.Name,1,Pos('.',Info.Name)-1);
- until FindNext(Info) <> 0;
- end;
- FindClose(Info);
- end;
- destructor TStudents.Destroy;
- var
- i:Integer;
- begin
- for i:=1 to StudentCount do
- begin
- ar2[i].free;
- end;
- end;
- function TStudents.GetStudentsArraylength : Integer;
- begin
- GetStudentsArraylength:=Length(ar2)-1;
- end;
- procedure TStudents.SetStudentsArraylength(Count: Integer);
- begin
- SetLength(ar,Count);
- SetLength(ar2,Count);
- end;
- procedure TStudents.SetGrade (Index: String; AValue: TGrades);
- begin
- if FindInArray(index)=-1 then
- begin
- StudentCount:=StudentCount+1;
- ar2[StudentCount]:=AValue;
- ar[StudentCount]:=Index;
- end;
- end;
- function TStudents.FindInArray (Index: String) : Integer;
- var
- i: Integer;
- begin
- FindInArray:=-1;
- for i:=1 to StudentCount do
- begin
- if ar[i]=Index then FindInArray:=i;
- end;
- end;
- function TStudents.GetStudentName(Index: Integer) : String;
- begin
- GetStudentName:=ar[index];
- end;
- function TStudents.GetGrade(Index: String) : TGrades;
- var
- n: Integer;
- begin
- n:=FindInArray(index);
- if n=-1 then
- begin
- StudentCount:=StudentCount+1;
- n:=StudentCount;
- end;
- if not(Assigned(ar2[n])) or (ar2[n]=nil) then ar2[n]:=TGrades.create(folder+'/'+Index+'.txt');
- GetGrade:=ar2[n];
- end;
- //////////////////////////////////////////////////////////////////////////////////////////////////
- var
- students: TStudents;
- begin
- students:= TStudents.create('test');
- writeln('Количество студентов: '+IntToStr(students.StudentCount));
- students.Grades['IvanovIvan'].Debug();
- students.Grades['IvanovIvan'].Grades[10]:=1;
- students.Grades['IvanovIvan'].Debug();
- students.Grades['FedorovSergey'].Debug();
- students.Grades['TestTest'].Debug();
- students.free;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement