Advertisement
ssccsscc

Untitled

Oct 16th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.94 KB | None | 0 0
  1. {$mode objfpc}
  2. {$m+}
  3.  
  4. program Lab4;
  5. uses
  6. SysUtils;
  7.  
  8. type
  9. TGrades = class
  10. private
  11. f: string;
  12. ar : array of Integer;
  13. function GetArray (Index: Integer) : Integer;
  14. procedure SetArray (Index: Integer; AValue: Integer);
  15. function GetCount : Integer;
  16. procedure SetCount (newc: Integer);
  17. procedure Load (name: string);
  18. procedure Save (name: string);
  19. public
  20. procedure Debug ();
  21. constructor create(name: string);
  22. property Count: Integer read GetCount write SetCount;
  23. property Grades[Index: Integer]: Integer read GetArray write SetArray;
  24.  
  25. end;
  26.  
  27. constructor TGrades.create(name: string);
  28. begin
  29. f:= name;
  30. if FileExists(name) then
  31. begin
  32. Load(name);
  33. end
  34. else
  35. Count:=1;
  36. end;
  37.  
  38. procedure TGrades.SetArray(Index: Integer; AValue: Integer);
  39. begin
  40. if Index>Count then Count:=Index;
  41. ar[Index]:=AValue;
  42. Save(f);
  43. end;
  44.  
  45. procedure TGrades.Load(name: string);
  46. var
  47. Fi:Text;
  48. Line:string;
  49. c: integer;
  50. begin
  51. AssignFile(Fi,name);
  52. Reset(Fi);
  53. c:=0;
  54. while not eof(Fi) do
  55. begin
  56. ReadLn(Fi,Line);
  57. c:=c+1;
  58. SetCount(c);
  59. ar[c]:=StrToInt(Line);
  60. end;
  61. Close(Fi);
  62. end;
  63.  
  64. procedure TGrades.Save(name: string);
  65. var
  66. i:Integer;
  67. Fi:Text;
  68. begin
  69. AssignFile(Fi,name);
  70. ReWrite(Fi);
  71. for i:=1 to Count do
  72. begin
  73. writeln(Fi,ar[i]);
  74. end;
  75. Close(Fi);
  76. end;
  77.  
  78. procedure TGrades.SetCount(newc: Integer);
  79. begin
  80. SetLength(ar,newc+1);
  81. end;
  82.  
  83. function TGrades.GetCount : Integer;
  84. begin
  85. GetCount:=Length(ar)-1;
  86. end;
  87.  
  88. procedure TGrades.Debug();
  89. var
  90. i: Integer;
  91. begin
  92. write(f+': ');
  93. for i:=1 to Count do
  94. begin
  95. write(IntToStr(ar[i])+' ');
  96. end;
  97. writeln('');
  98. end;
  99.  
  100. function TGrades.GetArray(Index: Integer) : Integer;
  101. begin
  102. GetArray:=ar[index];
  103. end;
  104. //////////////////////////////////////////////////////////////////////////////////////////////////
  105. type
  106. TStudents = class
  107. private
  108. ar : array of String;
  109. ar2 : array of TGrades;
  110. folder: string;
  111. function GetStudentName (Index: Integer) : String;
  112. function FindInArray (Index: String) : Integer;
  113. function GetGrade(Index: String) : TGrades;
  114. procedure SetGrade (Index: String; AValue: TGrades);
  115. function GetStudentsArraylength : Integer;
  116. procedure SetStudentsArraylength (Count: Integer);
  117. public
  118. destructor Destroy; override;
  119. constructor create(name: string);
  120. property StudentCount: Integer read GetStudentsArraylength write SetStudentsArraylength;
  121. property Students[Index: Integer]: String read GetStudentName;
  122. property Grades[Index: String]: TGrades read GetGrade write SetGrade;
  123. end;
  124. constructor TStudents.create(name: string);
  125. var
  126. Info : TSearchRec;
  127. c: Integer;
  128. begin
  129. folder:= name;
  130. c:=0;
  131. if FindFirst(name + '/*.txt', faAnyFile, Info)=0 then begin
  132. repeat
  133. //WriteLn(copy(Info.Name,1,Pos('.',Info.Name)-1));
  134. c:=c+1;
  135. SetLength(ar,c+1);
  136. SetLength(ar2,c+1);
  137. ar[c]:=copy(Info.Name,1,Pos('.',Info.Name)-1);
  138. until FindNext(Info) <> 0;
  139. end;
  140. FindClose(Info);
  141. end;
  142.  
  143. destructor TStudents.Destroy;
  144. var
  145. i:Integer;
  146. begin
  147. for i:=1 to StudentCount do
  148. begin
  149. ar2[i].free;
  150. end;
  151. end;
  152.  
  153. function TStudents.GetStudentsArraylength : Integer;
  154. begin
  155. GetStudentsArraylength:=Length(ar2)-1;
  156. end;
  157.  
  158. procedure TStudents.SetStudentsArraylength(Count: Integer);
  159. begin
  160. SetLength(ar,Count);
  161. SetLength(ar2,Count);
  162. end;
  163.  
  164. procedure TStudents.SetGrade (Index: String; AValue: TGrades);
  165. begin
  166. if FindInArray(index)=-1 then
  167. begin
  168. StudentCount:=StudentCount+1;
  169. ar2[StudentCount]:=AValue;
  170. ar[StudentCount]:=Index;
  171. end;
  172. end;
  173.  
  174. function TStudents.FindInArray (Index: String) : Integer;
  175. var
  176. i: Integer;
  177. begin
  178. FindInArray:=-1;
  179. for i:=1 to StudentCount do
  180. begin
  181. if ar[i]=Index then FindInArray:=i;
  182. end;
  183. end;
  184.  
  185. function TStudents.GetStudentName(Index: Integer) : String;
  186. begin
  187. GetStudentName:=ar[index];
  188. end;
  189.  
  190. function TStudents.GetGrade(Index: String) : TGrades;
  191. var
  192. n: Integer;
  193. begin
  194. n:=FindInArray(index);
  195. if n=-1 then
  196. begin
  197.  
  198. StudentCount:=StudentCount+1;
  199. n:=StudentCount;
  200. end;
  201. if not(Assigned(ar2[n])) or (ar2[n]=nil) then ar2[n]:=TGrades.create(folder+'/'+Index+'.txt');
  202. GetGrade:=ar2[n];
  203. end;
  204. //////////////////////////////////////////////////////////////////////////////////////////////////
  205. var
  206. students: TStudents;
  207. begin
  208. students:= TStudents.create('test');
  209. writeln('Количество студентов: '+IntToStr(students.StudentCount));
  210. students.Grades['IvanovIvan'].Debug();
  211. students.Grades['IvanovIvan'].Grades[10]:=1;
  212. students.Grades['IvanovIvan'].Debug();
  213. students.Grades['FedorovSergey'].Debug();
  214. students.Grades['TestTest'].Debug();
  215. students.free;
  216. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement