Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit1;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
- ComCtrls;
- type
- Tperson = class;
- { TForm1 }
- TForm1 = class(TForm)
- Button1: TButton;
- Button2: TButton;
- Button3: TButton;
- Button4: TButton;
- Edit1: TEdit;
- Edit2: TEdit;
- Edit3: TEdit;
- Edit4: TEdit;
- Edit5: TEdit;
- GroupBox1: TGroupBox;
- GroupBox2: TGroupBox;
- Label1: TLabel;
- Label2: TLabel;
- ListView1: TListView;
- OpenDialog1: TOpenDialog;
- PageControl1: TPageControl;
- SaveDialog1: TSaveDialog;
- TabSheet1: TTabSheet;
- TabSheet2: TTabSheet;
- TabSheet3: TTabSheet;
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- procedure Button4Click(Sender: TObject);
- procedure Edit1Change(Sender: TObject);
- procedure Edit3Change(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure PageControl1Change(Sender: TObject);
- private
- { private declarations }
- procedure addtoview(Person:Tperson);
- public
- { public declarations }
- end;
- type
- TStoredData = record
- A: Integer;
- B: Extended;
- C: array[0..25] of Char;
- end;
- TStoredObject = class
- private
- FA: Integer;
- FB: Extended;
- FC: array[0..25] of Char;
- public
- procedure LoadFromFile(AFile: THandle); virtual;
- procedure SaveToFile(AFile: THandle); virtual;
- end;
- Tperson = class
- FIO: string;
- number: integer;
- procedure LoadFromFile(AFile: THandle); virtual;
- procedure SaveToFile(AFile: THandle); virtual;
- end;
- Master = class(Tperson)
- f1: single;
- procedure LoadFromFile(AFile: THandle); override;
- procedure SaveToFile(AFile: THandle); override;
- end;
- Buhg = class(Tperson)
- f2: integer;
- procedure LoadFromFile(AFile: THandle); override;
- procedure SaveToFile(AFile: THandle); override;
- end;
- Manager = class(Tperson)
- f3: array[0..15] of char;
- procedure LoadFromFile(AFile: THandle); override;
- procedure SaveToFile(AFile: THandle); override;
- end;
- TPersonCollection = class
- private
- FPersons: array of TPerson;
- function GetPerson(Index: Integer): TPerson;
- function GetCount: Integer;
- public
- procedure Add(Person: TPerson);
- procedure Delete(Index: Integer);
- procedure clear;
- procedure LoadFromFile(const filename: string);
- procedure SaveToFile(const filename: string);
- property Count: Integer read GetCount;
- property Persons[Index: Integer]: TPerson read GetPerson; default;
- end;
- var
- Form1: TForm1;
- Count: integer =-1;
- Persons: TPersonCollection;
- implementation
- {$R *.lfm}
- { TForm1 }
- procedure WriteString(AFile:THandle; const s:string);
- var
- Len:Integer;
- i: integer;
- begin
- Len:= Length(S);
- FileWrite(AFile, Len, sizeof(Len));
- FileWrite(AFile, PByte(S)^, sizeof(S[i])*Len);
- end;
- function ReadString(AFile:THandle):string;
- var
- Len:Integer;
- i: integer;
- begin
- FileRead(AFile, Len, sizeof(Len));
- SetLength(Result, Len);
- FileRead(AFile, PByte(Result)^, sizeof(Result[i])*Len);
- end;
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- persons:= tpersoncollection.create;
- end;
- procedure TForm1.Button2Click(Sender: TObject);
- var
- i: integer;
- begin
- If OpenDialog1.Execute then
- begin
- persons.LoadFromFile(opendialog1.FileName);
- Listview1.items.beginupdate;
- listview1.items.clear;
- for i:=0 to persons.count-1 do
- addtoview(persons[i]);
- listview1.items.EndUpdate;
- end;
- end;
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- ListView1.clear;
- Persons.clear;
- end;
- procedure TForm1.Button3Click(Sender: TObject);
- begin
- If SaveDialog1.Execute then
- begin
- persons.savetofile(savedialog1.filename);
- end;
- end;
- procedure TForm1.Button4Click(Sender: TObject);
- var
- SamplePerson: TPerson;
- begin
- case pagecontrol1.TabIndex of
- 0: SamplePerson := Master.Create;
- 1: SamplePerson := Buhg.Create;
- 2: SamplePerson := Manager.Create;
- end;
- sampleperson.fio:= edit1.text;
- sampleperson.number:= strtoint(edit2.text);
- if sampleperson is master then
- master(sampleperson).f1:= strtofloat(edit3.text);
- if sampleperson is Buhg then
- buhg(sampleperson).f2:= strtoint(edit4.text);
- if sampleperson is Manager then
- manager(sampleperson).f3:= edit5.text;
- Persons.Add(SamplePerson);
- addtoview(sampleperson);
- end;
- procedure TForm1.Edit1Change(Sender: TObject);
- begin
- end;
- procedure TForm1.Edit3Change(Sender: TObject);
- begin
- end;
- procedure TForm1.PageControl1Change(Sender: TObject);
- begin
- end;
- procedure TStoredObject.LoadFromFile(AFile: THandle);
- var
- IntData: TStoredData;
- begin
- FileRead(AFile, IntData, sizeof(IntData));
- FA := IntData.A;
- FB := IntData.B;
- FC := IntData.C;
- end;
- procedure TStoredObject.SaveToFile(AFile: THandle);
- var
- IntData: TStoredData;
- begin
- IntData.A := FA;
- IntData.B := FB;
- IntData.C := FC;
- FileWrite(AFile, IntData, sizeof(IntData));
- end;
- procedure TPerson.LoadFromFile(AFile: THandle);
- begin
- FIO:= ReadString(AFile);
- FileRead(AFile, number, sizeof(number));
- end;
- procedure TPerson.SaveToFile(AFile: THandle);
- begin
- WriteString(AFile, FIO);
- FileWrite(AFile, number, sizeof(number));
- end;
- procedure TPersonCollection.Add(Person: TPerson);
- var
- Len: Integer;
- begin
- Len := Length(FPersons);
- SetLength(FPersons, Len+1);
- FPersons[Len] := Person;
- end;
- procedure TPersonCollection.Delete(Index: Integer);
- var
- i: integer;
- begin
- for i:= Index+1 to Length(FPersons)-1 do
- FPersons[i-1]:= FPersons[i];
- SetLength(FPersons, Length(FPersons)-1);
- end;
- function TPersonCollection.GetPerson(Index: Integer): TPerson;
- begin
- Result:=FPersons[Index];
- end;
- function TPersonCollection.GetCount: Integer;
- begin
- Result:= Length(FPersons);
- end;
- procedure TPersonCollection.clear;
- var
- i:integer;
- begin
- for i:=0 to Length(Fpersons)-1 do
- Fpersons[i].free;
- setlength(Fpersons, 0);
- end;
- procedure Tform1.addtoview(Person:Tperson);
- var
- newitem: Tlistitem;
- begin
- newitem:= listview1.Items.add;
- newitem.caption:= person.fio;
- newitem.subitems.add(inttostr(person.number));
- if person is master then
- newitem.subitems.add(floattostr(master(person).f1));
- if person is buhg then
- newitem.subitems.add(inttostr(buhg(person).f2));
- if person is manager then
- newitem.subitems.add(manager(person).f3);
- end;
- procedure TPersonCollection.LoadFromFile(const filename: string);
- var
- AFile: Thandle;
- sig: integer;
- newperson: TPerson;
- begin
- clear;
- AFile:= FileOpen(filename, fmopenread);
- while FileRead(AFile, sig, sizeof(sig)) >0
- do
- begin
- case sig of
- 101: Newperson:= Master.Create;
- 102: Newperson:= Buhg.Create;
- 103: Newperson:= Manager.Create;
- end;
- Newperson.LoadFromFile(AFile);
- Add(NewPerson);
- end;
- fileclose(AFile);
- end;
- procedure TPersonCollection.SaveToFile(const filename: string);
- var
- AFile: Thandle;
- sig: integer;
- i: integer;
- begin
- AFile:= FileCreate(filename);
- for i:=0 to Length(Fpersons)-1 do
- begin
- if FPersons[i] is Master then
- sig:=101 else
- if Fpersons[i] is Buhg then
- sig:=102 else
- if FPersons[i] is Manager then
- sig:=103;
- filewrite(AFile, sig, sizeof(sig));
- FPersons[i].SaveToFile(AFile);
- end;
- fileclose(AFile);
- end;
- procedure Master.LoadFromFile(AFile: THandle);
- begin
- inherited;
- fileread(AFile, f1, sizeof(f1));
- end;
- procedure Master.SaveToFile(AFile: THandle);
- begin
- inherited;
- filewrite(AFile, f1, sizeof(f1));
- end;
- procedure Buhg.LoadFromFile(AFile: THandle);
- begin
- inherited;
- fileread(AFile, f2, sizeof(f2));
- end;
- procedure buhg.SaveToFile(AFile: THandle);
- begin
- inherited;
- filewrite(AFile, f2, sizeof(f2));
- end;
- procedure Manager.LoadFromFile(AFile: THandle);
- begin
- inherited;
- fileread(AFile, f3, sizeof(f3));
- end;
- procedure Manager.SaveToFile(AFile: THandle);
- begin
- inherited;
- filewrite(AFile, f3, sizeof(f3));
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement