Advertisement
Guest User

Untitled

a guest
May 25th, 2015
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.16 KB | None | 0 0
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8. Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  9. ComCtrls;
  10.  
  11. type
  12. Tperson = class;
  13. { TForm1 }
  14.  
  15. TForm1 = class(TForm)
  16. Button1: TButton;
  17. Button2: TButton;
  18. Button3: TButton;
  19. Button4: TButton;
  20. Edit1: TEdit;
  21. Edit2: TEdit;
  22. Edit3: TEdit;
  23. Edit4: TEdit;
  24. Edit5: TEdit;
  25. GroupBox1: TGroupBox;
  26. GroupBox2: TGroupBox;
  27. Label1: TLabel;
  28. Label2: TLabel;
  29. ListView1: TListView;
  30. OpenDialog1: TOpenDialog;
  31. PageControl1: TPageControl;
  32. SaveDialog1: TSaveDialog;
  33. TabSheet1: TTabSheet;
  34. TabSheet2: TTabSheet;
  35. TabSheet3: TTabSheet;
  36. procedure Button1Click(Sender: TObject);
  37. procedure Button2Click(Sender: TObject);
  38. procedure Button3Click(Sender: TObject);
  39. procedure Button4Click(Sender: TObject);
  40. procedure Edit1Change(Sender: TObject);
  41. procedure Edit3Change(Sender: TObject);
  42. procedure FormCreate(Sender: TObject);
  43. procedure PageControl1Change(Sender: TObject);
  44. private
  45. { private declarations }
  46. procedure addtoview(Person:Tperson);
  47. public
  48. { public declarations }
  49. end;
  50.  
  51. type
  52. TStoredData = record
  53. A: Integer;
  54. B: Extended;
  55. C: array[0..25] of Char;
  56. end;
  57.  
  58. TStoredObject = class
  59. private
  60. FA: Integer;
  61. FB: Extended;
  62. FC: array[0..25] of Char;
  63. public
  64. procedure LoadFromFile(AFile: THandle); virtual;
  65. procedure SaveToFile(AFile: THandle); virtual;
  66. end;
  67. Tperson = class
  68. FIO: string;
  69. number: integer;
  70. procedure LoadFromFile(AFile: THandle); virtual;
  71. procedure SaveToFile(AFile: THandle); virtual;
  72. end;
  73.  
  74. Master = class(Tperson)
  75. f1: single;
  76. procedure LoadFromFile(AFile: THandle); override;
  77. procedure SaveToFile(AFile: THandle); override;
  78. end;
  79. Buhg = class(Tperson)
  80. f2: integer;
  81. procedure LoadFromFile(AFile: THandle); override;
  82. procedure SaveToFile(AFile: THandle); override;
  83. end;
  84. Manager = class(Tperson)
  85. f3: array[0..15] of char;
  86. procedure LoadFromFile(AFile: THandle); override;
  87. procedure SaveToFile(AFile: THandle); override;
  88. end;
  89. TPersonCollection = class
  90. private
  91. FPersons: array of TPerson;
  92. function GetPerson(Index: Integer): TPerson;
  93. function GetCount: Integer;
  94. public
  95. procedure Add(Person: TPerson);
  96. procedure Delete(Index: Integer);
  97. procedure clear;
  98. procedure LoadFromFile(const filename: string);
  99. procedure SaveToFile(const filename: string);
  100. property Count: Integer read GetCount;
  101. property Persons[Index: Integer]: TPerson read GetPerson; default;
  102. end;
  103.  
  104.  
  105. var
  106. Form1: TForm1;
  107. Count: integer =-1;
  108. Persons: TPersonCollection;
  109.  
  110. implementation
  111.  
  112. {$R *.lfm}
  113.  
  114. { TForm1 }
  115.  
  116. procedure WriteString(AFile:THandle; const s:string);
  117. var
  118. Len:Integer;
  119. i: integer;
  120. begin
  121. Len:= Length(S);
  122. FileWrite(AFile, Len, sizeof(Len));
  123. FileWrite(AFile, PByte(S)^, sizeof(S[i])*Len);
  124. end;
  125. function ReadString(AFile:THandle):string;
  126. var
  127. Len:Integer;
  128. i: integer;
  129. begin
  130. FileRead(AFile, Len, sizeof(Len));
  131. SetLength(Result, Len);
  132. FileRead(AFile, PByte(Result)^, sizeof(Result[i])*Len);
  133. end;
  134.  
  135. procedure TForm1.FormCreate(Sender: TObject);
  136. begin
  137. persons:= tpersoncollection.create;
  138. end;
  139.  
  140. procedure TForm1.Button2Click(Sender: TObject);
  141. var
  142. i: integer;
  143. begin
  144. If OpenDialog1.Execute then
  145. begin
  146. persons.LoadFromFile(opendialog1.FileName);
  147. Listview1.items.beginupdate;
  148. listview1.items.clear;
  149. for i:=0 to persons.count-1 do
  150. addtoview(persons[i]);
  151. listview1.items.EndUpdate;
  152. end;
  153.  
  154. end;
  155.  
  156. procedure TForm1.Button1Click(Sender: TObject);
  157. begin
  158. ListView1.clear;
  159. Persons.clear;
  160. end;
  161.  
  162. procedure TForm1.Button3Click(Sender: TObject);
  163. begin
  164. If SaveDialog1.Execute then
  165. begin
  166. persons.savetofile(savedialog1.filename);
  167. end;
  168.  
  169. end;
  170.  
  171. procedure TForm1.Button4Click(Sender: TObject);
  172. var
  173. SamplePerson: TPerson;
  174. begin
  175. case pagecontrol1.TabIndex of
  176. 0: SamplePerson := Master.Create;
  177. 1: SamplePerson := Buhg.Create;
  178. 2: SamplePerson := Manager.Create;
  179. end;
  180. sampleperson.fio:= edit1.text;
  181. sampleperson.number:= strtoint(edit2.text);
  182. if sampleperson is master then
  183. master(sampleperson).f1:= strtofloat(edit3.text);
  184. if sampleperson is Buhg then
  185. buhg(sampleperson).f2:= strtoint(edit4.text);
  186. if sampleperson is Manager then
  187. manager(sampleperson).f3:= edit5.text;
  188. Persons.Add(SamplePerson);
  189. addtoview(sampleperson);
  190. end;
  191.  
  192. procedure TForm1.Edit1Change(Sender: TObject);
  193. begin
  194.  
  195. end;
  196.  
  197. procedure TForm1.Edit3Change(Sender: TObject);
  198. begin
  199.  
  200. end;
  201.  
  202. procedure TForm1.PageControl1Change(Sender: TObject);
  203. begin
  204.  
  205. end;
  206.  
  207. procedure TStoredObject.LoadFromFile(AFile: THandle);
  208. var
  209. IntData: TStoredData;
  210. begin
  211. FileRead(AFile, IntData, sizeof(IntData));
  212. FA := IntData.A;
  213. FB := IntData.B;
  214. FC := IntData.C;
  215. end;
  216. procedure TStoredObject.SaveToFile(AFile: THandle);
  217. var
  218. IntData: TStoredData;
  219. begin
  220. IntData.A := FA;
  221. IntData.B := FB;
  222. IntData.C := FC;
  223. FileWrite(AFile, IntData, sizeof(IntData));
  224. end;
  225. procedure TPerson.LoadFromFile(AFile: THandle);
  226. begin
  227. FIO:= ReadString(AFile);
  228. FileRead(AFile, number, sizeof(number));
  229.  
  230. end;
  231.  
  232. procedure TPerson.SaveToFile(AFile: THandle);
  233. begin
  234. WriteString(AFile, FIO);
  235. FileWrite(AFile, number, sizeof(number));
  236. end;
  237. procedure TPersonCollection.Add(Person: TPerson);
  238. var
  239. Len: Integer;
  240. begin
  241. Len := Length(FPersons);
  242. SetLength(FPersons, Len+1);
  243. FPersons[Len] := Person;
  244. end;
  245. procedure TPersonCollection.Delete(Index: Integer);
  246. var
  247. i: integer;
  248. begin
  249. for i:= Index+1 to Length(FPersons)-1 do
  250. FPersons[i-1]:= FPersons[i];
  251. SetLength(FPersons, Length(FPersons)-1);
  252. end;
  253. function TPersonCollection.GetPerson(Index: Integer): TPerson;
  254. begin
  255. Result:=FPersons[Index];
  256. end;
  257. function TPersonCollection.GetCount: Integer;
  258. begin
  259. Result:= Length(FPersons);
  260. end;
  261. procedure TPersonCollection.clear;
  262. var
  263. i:integer;
  264. begin
  265. for i:=0 to Length(Fpersons)-1 do
  266. Fpersons[i].free;
  267. setlength(Fpersons, 0);
  268. end;
  269.  
  270. procedure Tform1.addtoview(Person:Tperson);
  271. var
  272. newitem: Tlistitem;
  273. begin
  274. newitem:= listview1.Items.add;
  275. newitem.caption:= person.fio;
  276. newitem.subitems.add(inttostr(person.number));
  277. if person is master then
  278. newitem.subitems.add(floattostr(master(person).f1));
  279. if person is buhg then
  280. newitem.subitems.add(inttostr(buhg(person).f2));
  281. if person is manager then
  282. newitem.subitems.add(manager(person).f3);
  283. end;
  284.  
  285. procedure TPersonCollection.LoadFromFile(const filename: string);
  286. var
  287. AFile: Thandle;
  288. sig: integer;
  289. newperson: TPerson;
  290. begin
  291. clear;
  292. AFile:= FileOpen(filename, fmopenread);
  293. while FileRead(AFile, sig, sizeof(sig)) >0
  294. do
  295. begin
  296. case sig of
  297. 101: Newperson:= Master.Create;
  298. 102: Newperson:= Buhg.Create;
  299. 103: Newperson:= Manager.Create;
  300. end;
  301. Newperson.LoadFromFile(AFile);
  302. Add(NewPerson);
  303. end;
  304. fileclose(AFile);
  305. end;
  306.  
  307. procedure TPersonCollection.SaveToFile(const filename: string);
  308. var
  309. AFile: Thandle;
  310. sig: integer;
  311. i: integer;
  312. begin
  313. AFile:= FileCreate(filename);
  314. for i:=0 to Length(Fpersons)-1 do
  315. begin
  316. if FPersons[i] is Master then
  317. sig:=101 else
  318. if Fpersons[i] is Buhg then
  319. sig:=102 else
  320. if FPersons[i] is Manager then
  321. sig:=103;
  322. filewrite(AFile, sig, sizeof(sig));
  323. FPersons[i].SaveToFile(AFile);
  324. end;
  325. fileclose(AFile);
  326. end;
  327. procedure Master.LoadFromFile(AFile: THandle);
  328. begin
  329. inherited;
  330. fileread(AFile, f1, sizeof(f1));
  331. end;
  332.  
  333. procedure Master.SaveToFile(AFile: THandle);
  334. begin
  335. inherited;
  336. filewrite(AFile, f1, sizeof(f1));
  337. end;
  338. procedure Buhg.LoadFromFile(AFile: THandle);
  339. begin
  340. inherited;
  341. fileread(AFile, f2, sizeof(f2));
  342. end;
  343.  
  344. procedure buhg.SaveToFile(AFile: THandle);
  345. begin
  346. inherited;
  347. filewrite(AFile, f2, sizeof(f2));
  348. end;
  349. procedure Manager.LoadFromFile(AFile: THandle);
  350. begin
  351. inherited;
  352. fileread(AFile, f3, sizeof(f3));
  353. end;
  354.  
  355. procedure Manager.SaveToFile(AFile: THandle);
  356. begin
  357. inherited;
  358. filewrite(AFile, f3, sizeof(f3));
  359. end;
  360.  
  361. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement