Аналіз отриманих результатів

 

Для даного курсового проекту було розроблено програму яка дозволяє вести облік робітників на підприємстві. В програмі є можливість додавання робітників, редагування інформації про них, і їх видалення. Є можливість збереження і завантаження даних про робітників. Присутнє сортування і пошук робітників за декількома критеріями. Створення нових посад, відділів чи підрозділів.

 

Рисунок 8. Завантажений файл


Рисунок 9. Дані сортовано за табельним номером

 

Рисунок 10. Ввімкнено режим пошуку

 

В режимі пошуку кнопки "Додати" і "Видалити" не доступні.

 

 

Рисунок 11. Був проведений пошук по назві відділу

 


Програма відповідає поставленій задачі. Всі функції та процедури працюють правильно і без помилок. Сортування даних виконується правильно без будь-яких помилок. Пошук проходить правильно, а також пошук серед вже знайдених робітників теж правильний і не містить помилок.

 







Висновок

 

Для розробки даного проекту потрібно було спочатку проаналізувати реалізацію програми визначити структури даних, функціональні можливості програми. Для створення програми використовувалось середовище програмування Borland Delphi7. Дані про робітників зберігаються в типізований файл, а при завантажені файлу в програму дані записуються в масив записів, а вже програма працює з цим масивом.

В програмі є такі функції як:

1. Завантаження

2. Збереження

3. Додавання нових робітників

4. Зміна інформації про вже існуючих робітників

5. Видалення робітників

6. Сортування робітників за багатьма критеріями

7. Пошук працівників за багатьма критеріями, який виконано в вигляді фільтру.

В кожного працівника є багато полів з інформацією про нього, що спрощує облік робітників і пошук серед інших робітників.

В ході розробки було оптимізовано роботу програми та максимально спрощено інтерфейс програми.

Було досягнуто досить непоганої функціональності програми відносно аналогів.



Додатки

 

Додаток А

unit KadrUnit;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, StdCtrls, Menus, XPMan;

type

Data=record

D: Byte;

M: Byte;

Y: Integer;

end;

TForm1 = class(TForm)

StringGrid1: TStringGrid;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

GroupBox1: TGroupBox;

GroupBox2: TGroupBox;

Button1: TButton;

Button2: TButton;

Button3: TButton;

OpenDialog: TOpenDialog;

SaveDialog: TSaveDialog;

Button4: TButton;

GroupBox3: TGroupBox;

ComboBox1: TComboBox;

Button5: TButton;

GroupBox4: TGroupBox;

CheckBox1: TCheckBox;

Button6: TButton;

Button7: TButton;

ComboBox2: TComboBox;

ComboBox3: TComboBox;

XPManifest1: TXPManifest;

function GetData(S: String): Data;

procedure SaveToFile(FileName: String);

procedure LoadFromFile(FileName: String);

function DataToStr(D: Data): String;

procedure FormCreate(Sender: TObject);

procedure RecToRow(Index,Row: Integer);

procedure RefreshList;

procedure Button1Click(Sender: TObject);

procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure StringGrid1DblClick(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure ComboBox1Change(Sender: TObject);

procedure CheckBox1Click(Sender: TObject);

procedure Button7Click(Sender: TObject);

procedure ComboBox3KeyPress(Sender: TObject; var Key: Char);

procedure ComboBox3Change(Sender: TObject);

procedure ComboBox2Change(Sender: TObject);

procedure ComboBox2KeyPress(Sender: TObject; var Key: Char);

function FindInRec(Index: Integer): Integer;

procedure Button6Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

type

Kadr=record

TabN: Integer; // Табельний номер

LastName: String [255]; // Прізвище

Name: String [255]; // Ім’я

Patronymic: String [255]; // По Батькові

BirthData: Data; // Дата народження

BirthPlace: String [255]; // Місце народження

Stat: Boolean; // Стать

IndCode: String [10]; // Ідентифікаційний код

ReceptionData: Data; // Дата прийому на роботу

Experience: Integer; // Стаж

Exempt: Boolean; // Звільнений

LiberationData: Data; // Дата звільнення

PositionName: String [255]; // Назва посади

DepartmentName: String [255]; // Назва відділу

DepartmentLeader: Boolean; // Керівник відділу

SubsectionName: String [255]; // Назва підрозділу

SubsectionLeader: Boolean; // Керівник підрозділу

end;

var

Form1: TForm1;

F: File of Kadr;

Worker,Rezerv: array of Kadr;

CurFileName: String='';

WorkersCount: Integer=0;

RezervCount: Integer=0;

CurWorker: Integer=0;

ADD: Boolean;

implementation

uses WorkerUnit, RegUnit;

{$R *. dfm}

function TForm1. GetData(S: String): Data;

var i,j,P: Integer;

begin

Result. D: =0;

Result. M: =0;

Result. Y: =0;

P: =0; j: =1;

for i: =1 to Length(S) do

if S [i] ='. ' then begin

if P=1 then begin

Result. M: =Form2. STI(Copy(S,j, i-j));

j: =i+1;

if Copy(S,j,Length(S) - i-1) <>'' then

Result. Y: =Form2. STI(Copy(S,j,Length(S) - i));

end;

if P=0 then begin

Result. D: =Form2. STI(Copy(S,j, i-1));

INC(P); j: =i+1;

end;

end;

end;

procedure TForm1. SaveToFile(FileName: String);

var i: Integer;

begin

CurFileName: =FileName;

Caption: ='Кадровий облік - '+ExtractFileName(FileName);

AssignFile(F,FileName); ReWrite(F);

for i: =0 to WorkersCount-1 do

Write(F,Worker [i]);

CloseFile(F);

end;

procedure AddToCombo(S: Kadr);

var i: Integer;

A: Boolean;

begin

A: =True;

for i: =0 to Form2. ComboBox2. Items. Count-1 do

if S. SubsectionName=Form2. ComboBox2. Items. Strings [i] then begin

A: =False; Break;

end;

if A then Form2. ComboBox2. Items. Add(S. SubsectionName);

A: =True;

for i: =0 to Form2. ComboBox3. Items. Count-1 do

if S. DepartmentName=Form2. ComboBox3. Items. Strings [i] then begin

A: =False; Break;

end;

if A then Form2. ComboBox3. Items. Add(S. DepartmentName);

A: =True;

for i: =0 to Form2. ComboBox4. Items. Count-1 do

if S. PositionName=Form2. ComboBox4. Items. Strings [i] then begin

A: =False; Break;

end;

if A then Form2. ComboBox4. Items. Add(S. PositionName);

end;

procedure TForm1. LoadFromFile(FileName: String);

begin

WorkersCount: =0;

CurWorker: =WorkersCount-1;

SetLength(Worker,WorkersCount);

Form2. ComboBox2. Clear; Form2. ComboBox3. Clear; Form2. ComboBox4. Clear;

Form3. ListBox1. Clear; Form3. ListBox2. Clear; Form3. ListBox3. Clear;

CurFileName: =FileName;

Caption: ='Кадровий облік - '+ExtractFileName(FileName);

AssignFile(F,FileName); Reset(F);

while not EOF(F) do begin

INC(WorkersCount);

SetLength(Worker,WorkersCount);

Form2. ClearWorker(WorkersCount-1);

Read(F,Worker [WorkersCount-1]);

AddToCombo(Worker [WorkersCount-1]);

end;

Form3. ListBox1. Items: =Form2. ComboBox4. Items;

Form3. ListBox2. Items: =Form2. ComboBox3. Items;

Form3. ListBox3. Items: =Form2. ComboBox2. Items;

if WorkersCount>0 then

CurWorker: =0;

RefreshList;

CloseFile(F);

end;

function TForm1. DataToStr(D: Data): String;

begin

Result: =IntToStr(D. D) +'. '+IntToStr(D. M) +'. '+IntToStr(D. Y);

end;

procedure TForm1. FormCreate(Sender: TObject);

begin

StringGrid1. Cells [0,0]: ='№';

StringGrid1. Cells [1,0]: ='Таб. №';

StringGrid1. Cells [2,0]: ='Прізвище';

StringGrid1. Cells [3,0]: ='Ім’я';

StringGrid1. Cells [4,0]: ='По Батькові';

StringGrid1. Cells [5,0]: ='Ідн. код';

StringGrid1. Cells [6,0]: ='Дата прийому на роботу';

StringGrid1. Cells [7,0]: ='Стаж роботи';

StringGrid1. Cells [8,0]: ='Дата звільнення';

StringGrid1. Cells [9,0]: ='Назва посади';

StringGrid1. Cells [10,0]: ='Назва відділу';

StringGrid1. Cells [11,0]: ='Назва підрозділу';

end;

procedure TForm1. RecToRow(Index,Row: Integer);

begin

if Row<1 then Exit;

StringGrid1. Rows [Row]. Clear;

StringGrid1. Cells [0,Row]: =IntToStr(Row);

StringGrid1. Cells [1,Row]: =IntToStr(Worker [Index]. TabN);

StringGrid1. Cells [2,Row]: =Worker [Index]. LastName;

StringGrid1. Cells [3,Row]: =Worker [Index]. Name;

StringGrid1. Cells [4,Row]: =Worker [Index]. Patronymic;

StringGrid1. Cells [5,Row]: =Worker [Index]. IndCode;

StringGrid1. Cells [6,Row]: =DataToStr(Worker [Index]. ReceptionData);

StringGrid1. Cells [7,Row]: =IntToStr(Worker [Index]. Experience);

if Worker [Index]. Exempt then

StringGrid1. Cells [8,Row]: =DataToStr(Worker [Index]. LiberationData);

StringGrid1. Cells [9,Row]: =Worker [Index]. PositionName;

StringGrid1. Cells [10,Row]: =Worker [Index]. DepartmentName;

StringGrid1. Cells [11,Row]: =Worker [Index]. SubsectionName;

end;

procedure TForm1. RefreshList;

var i: Integer;

begin

if WorkersCount=0 then begin

StringGrid1. RowCount: =WorkersCount+2;

StringGrid1. Rows [1]. Clear;

Button2. Enabled: =False;

Button3. Enabled: =False;

Exit;

end;

Button2. Enabled: =True;

if not CheckBox1. Checked then

Button3. Enabled: =True;

StringGrid1. RowCount: =WorkersCount+1;

for i: =0 to WorkersCount-1 do begin

StringGrid1. Rows [i+1]. Clear;

StringGrid1. Cells [0, i+1]: =IntToStr(i+1);

StringGrid1. Cells [1, i+1]: =IntToStr(Worker [i]. TabN);

StringGrid1. Cells [2, i+1]: =Worker [i]. LastName;

StringGrid1. Cells [3, i+1]: =Worker [i]. Name;

StringGrid1. Cells [4, i+1]: =Worker [i]. Patronymic;

StringGrid1. Cells [5, i+1]: =Worker [i]. IndCode;

StringGrid1. Cells [6, i+1]: =DataToStr(Worker [i]. ReceptionData);

StringGrid1. Cells [7, i+1]: =IntToStr(Worker [i]. Experience);

if Worker [i]. Exempt then

StringGrid1. Cells [8, i+1]: =DataToStr(Worker [i]. LiberationData);

StringGrid1. Cells [9, i+1]: =Worker [i]. PositionName;

StringGrid1. Cells [10, i+1]: =Worker [i]. DepartmentName;

StringGrid1. Cells [11, i+1]: =Worker [i]. SubsectionName;

end;

end;

procedure TForm1. Button1Click(Sender: TObject);

begin

INC(WorkersCount);

SetLength(Worker,WorkersCount);

CurWorker: =WorkersCount-1;

Form2. ClearWorker(CurWorker);

if WorkersCount>=StringGrid1. RowCount then begin

StringGrid1. RowCount: =WorkersCount+1;

StringGrid1. Rows [WorkersCount]. Clear;

end;

ADD: =True;

Form2. ClearField;

Form2. Show;

end;

procedure TForm1. StringGrid1SelectCell(Sender: TObject; ACol,

ARow: Integer; var CanSelect: Boolean);

begin

CurWorker: =ARow-1;

end;

procedure TForm1. Button2Click(Sender: TObject);

begin

ADD: =False;

Form2. RecToForm(CurWorker);

Form2. Show;

end;

procedure TForm1. Button3Click(Sender: TObject);

begin

Form2. DelWorker(CurWorker);

end;

procedure TForm1. N2Click(Sender: TObject);

begin

if OpenDialog. Execute then

LoadFromFile(OpenDialog. FileName);

end;

procedure TForm1. N4Click(Sender: TObject);

begin

if SaveDialog. Execute then

SaveToFile(SaveDialog. FileName);

end;

procedure TForm1. Button4Click(Sender: TObject);

begin

Form3. Show;

end;

procedure TForm1. StringGrid1DblClick(Sender: TObject);

begin

if Button2. Enabled then

Button2. OnClick(Button2);

end;

procedure TForm1. N3Click(Sender: TObject);

begin

if CurFileName<>'' then

SaveToFile(CurFileName)

else N4. OnClick(N4);

end;

procedure TForm1. N5Click(Sender: TObject);

begin

Close;

end;

procedure TForm1. Button5Click(Sender: TObject);

var i,L: Integer;

A: Kadr;

begin

if WorkersCount<=1 then Exit;

L: =Trunc((WorkersCount-1) / 2);

for i: =0 to L do begin

A: =Worker [i];

Worker [i]: =Worker [WorkersCount-1-i];

Worker [WorkersCount-1-i]: =A;

end;

RefreshList;

end;

procedure SortByTabN; // Сортування за табельним номером

var i,j: Integer;

A: Kadr;

begin

for i: =0 to WorkersCount-2 do

for j: =i+1 to WorkersCount-1 do

if Worker [i]. TabN>Worker [j]. TabN then begin

A: =Worker [i];

Worker [i]: =Worker [j];

Worker [j]: =A;

end;

Form1. RefreshList;

end;

procedure SortByLastName; // Сортування за прізвищем

var i,j: Integer;

A: Kadr;

begin

for i: =0 to WorkersCount-2 do

for j: =i+1 to WorkersCount-1 do

if Worker [i]. LastName>Worker [j]. LastName then begin

A: =Worker [i];

Worker [i]: =Worker [j];

Worker [j]: =A;

end;

Form1. RefreshList;

end;

procedure SortByName; // Сортування за ім’ям

var i,j: Integer;

A: Kadr;

begin

for i: =0 to WorkersCount-2 do

for j: =i+1 to WorkersCount-1 do

if Worker [i]. Name>Worker [j]. Name then begin

A: =Worker [i];

Worker [i]: =Worker [j];

Worker [j]: =A;

end;

Form1. RefreshList;

end;

procedure SortByPatronymic; // Сортування по Батькові

var i,j: Integer;

A: Kadr;

begin

for i: =0 to WorkersCount-2 do

for j: =i+1 to WorkersCount-1 do

if Worker [i]. Patronymic>Worker [j]. Patronymic then begin

A: =Worker [i];

Worker [i]: =Worker [j];

Worker [j]: =A;

end;

Form1. RefreshList;

end;

function DataToInt(A: Data): Integer; // Переведення дати в дні

begin

Result: =A. Y*365+A. M*31+A. D;

end;

procedure SortByBirdthDay; // Сортування за датою народження

var i,j: Integer;

A: Kadr;

begin

for i: =0 to WorkersCount-2 do

for j: =i+1 to WorkersCount-1 do

if DataToInt(Worker [i]. BirthData) >DataToInt(Worker [j]. BirthData) then begin

A: =Worker [i];

Worker [i]: =Worker [j];

Worker [j]: =A;

end;

Form1. RefreshList;

end;

procedure SortByIndCode; // Сортування за ідентифікаційним кодом

var i,j: Integer;

A: Kadr;

begin

for i: =0 to WorkersCount-2 do

for j: =i+1 to WorkersCount-1 do

if Worker [i]. IndCode>Worker [j]. IndCode then begin

A: =Worker [i];

Worker [i]: =Worker [j];

Worker [j]: =A;

end;

Form1. RefreshList;

end;

procedure SortByReceptionData; // Сортування за датою прийому на роботу

var i,j: Integer;

A: Kadr; begin

for i: =0 to WorkersCount-2 do

for j: =i+1 to WorkersCount-1 do

if DataToInt(Worker [i]. ReceptionData) >DataToInt(Worker [j]. ReceptionData) then begin

A: =Worker [i];

Worker [i]: =Worker [j];

Worker [j]: =A;

end;

Form1. RefreshList;

end;

procedure SortByExperience; // Сортування за стажем

var i,j: Integer;

A: Kadr;

begin

for i: =0 to WorkersCount-2 do

for j: =i+1 to WorkersCount-1 do

if Worker [i]. Experience>Worker [j]. Experience then begin

A: =Worker [i];

Worker [i]: =Worker [j];

Worker [j]: =A;

end;

Form1. RefreshList;

end;

procedure SortByLiberationData; // Сортування за датою звільнення

var i,j: Integer;

A: Kadr;

begin

for i: =0 to WorkersCount-2 do

for j: =i+1 to WorkersCount-1 do

if DataToInt(Worker [i]. LiberationData) >DataToInt(Worker [j]. LiberationData) then begin

A: =Worker [i];

Worker [i]: =Worker [j];

Worker [j]: =A;

end;

Form1. RefreshList;

end;

procedure SortByPositionName; // Сортування за назвою посади

var i,j: Integer;

A: Kadr;

begin

for i: =0 to WorkersCount-2 do

for j: =i+1 to WorkersCount-1 do

if Worker [i]. PositionName>Worker [j]. PositionName then begin

A: =Worker [i];

Worker [i]: =Worker [j];

Worker [j]: =A;

end;

Form1. RefreshList;

end;

procedure SortByDepartmentName; // Сортування за назвою відділу

var i,j: Integer;

A: Kadr;

begin

for i: =0 to WorkersCount-2 do

for j: =i+1 to WorkersCount-1 do

if Worker [i]. DepartmentName>Worker [j]. DepartmentName then begin

A: =Worker [i];

Worker [i]: =Worker [j];

Worker [j]: =A;

end;

Form1. RefreshList;

end;

procedure SortBySubsectionName; // Сортування за назвою підрозділу

var i,j: Integer;

A: Kadr;

begin

for i: =0 to WorkersCount-2 do

for j: =i+1 to WorkersCount-1 do

if Worker [i]. SubsectionName>Worker [j]. SubsectionName then begin

A: =Worker [i];

Worker [i]: =Worker [j];

Worker [j]: =A;

end;

Form1. RefreshList;

end;

procedure TForm1. ComboBox1Change(Sender: TObject);

begin

case ComboBox1. ItemIndex of

0: SortByTabN;

1: SortByLastName;

2: SortByName;

3: SortByPatronymic;

4: SortByBirdthDay;

5: SortByIndCode;

6: SortByReceptionData;

7: SortByExperience;

8: SortByLiberationData;

9: SortByPositionName;

10: SortByDepartmentName;

11: SortBySubsectionName;

end;

end;

procedure TForm1. CheckBox1Click(Sender: TObject);

var i: Integer;

begin

GroupBox4. Enabled: =CheckBox1. Checked;

Button1. Enabled: =not CheckBox1. Checked;

Button3. Enabled: =not CheckBox1. Checked;

if CheckBox1. Checked then begin

RezervCount: =WorkersCount;

SetLength(Rezerv,RezervCount);

for i: =0 to RezervCount-1 do

Rezerv [i]: =Worker [i];

end else begin

WorkersCount: =RezervCount;

SetLength(Worker,WorkersCount);

for i: =0 to WorkersCount-1 do

Worker [i]: =Rezerv [i];

RefreshList;

end;

end;

procedure TForm1. Button7Click(Sender: TObject);

var i: Integer;

begin

WorkersCount: =RezervCount;

SetLength(Worker,WorkersCount);

for i: =0 to WorkersCount-1 do

Worker [i]: =Rezerv [i];

RefreshList;

end;

procedure TForm1. ComboBox3KeyPress(Sender: TObject; var Key: Char);

begin

case ComboBox2. ItemIndex of

0,4,7,8,9,11: if not (Key in ['0'. '9',#8]) then Key: =#0;

6,10,12,13,14,15,16: Key: =#0;

end;

end;

procedure TForm1. ComboBox3Change(Sender: TObject);

begin

if ComboBox2. ItemIndex in [4,8,11] then

if Length(ComboBox3. Text) in [2,5] then begin

ComboBox3. Text: =ComboBox3. Text+'. ';

ComboBox3. SelStart: =Length(ComboBox3. Text);

end;

end;

procedure TForm1. ComboBox2Change(Sender: TObject);

begin

ComboBox3. Clear;

ComboBox3. MaxLength: =0;

case ComboBox2. ItemIndex of

0: ComboBox3. MaxLength: =5;

4,7,8,11: ComboBox3. MaxLength: =10;

9: ComboBox3. MaxLength: =2;

6: ComboBox3. Items: =Form2. ComboBox1. Items;

12: ComboBox3. Items: =Form2. ComboBox4. Items;

13: ComboBox3. Items: =Form2. ComboBox3. Items;

14: ComboBox3. Items: =Form2. ComboBox2. Items;

10,15,16: begin

ComboBox3. Items. Add('Ні');

ComboBox3. Items. Add('Так');

end;

end;

end;

procedure TForm1. ComboBox2KeyPress(Sender: TObject; var Key: Char);

begin

Key: =#0;

end;

function TForm1. FindInRec(Index: Integer): Integer;

var i: Integer;

begin

Result: =-1;

for i: =0 to RezervCount-1 do

if Worker [Index]. TabN=Rezerv [i]. TabN then begin

Result: =i;

Exit;

end;

end;

procedure FindByTabN;

var i: Integer;

begin

i: =0;

while i<=WorkersCount-1 do begin

if Worker [i]. TabN<>Form2. STI(Form1. ComboBox3. Text) then begin

Form2. DelWorker(i);

DEC(i);

end;

INC(i);

end;

Form1. RefreshList;

end;

procedure FindByLastName;

var i: Integer;

begin

i: =0;

while i<=WorkersCount-1 do begin

if Worker [i]. LastName<>Form1. ComboBox3. Text then begin

Form2. DelWorker(i);

DEC(i);

end;

INC(i);

end;

Form1. RefreshList;

end;

procedure FindByName;

var i: Integer;

begin

i: =0;

while i<=WorkersCount-1 do begin

if Worker [i]. Name<>Form1. ComboBox3. Text then begin

Form2. DelWorker(i);

DEC(i);

end;

INC(i);

end;

Form1. RefreshList;

end;

procedure FindByPatronymic;

var i: Integer;

begin

i: =0;

while i<=WorkersCount-1 do begin

if Worker [i]. Patronymic<>Form1. ComboBox3. Text then begin

Form2. DelWorker(i);

DEC(i);

end;

INC(i);

end;

Form1. RefreshList;

end;

procedure FindByBirthDay;

var i: Integer;

begin

i: =0;

while i<=WorkersCount-1 do begin

if DataToInt(Worker [i]. BirthData) <>

DataToInt(Form1. GetData(Form1. ComboBox3. Text)) then begin

Form2. DelWorker(i);

DEC(i);

end;

INC(i);

end;

Form1. RefreshList;

end;

procedure FindByBirthPlace;

var i: Integer;

begin

i: =0;

while i<=WorkersCount-1 do begin

if Worker [i]. BirthPlace<>Form1. ComboBox3. Text then begin

Form2. DelWorker(i);

DEC(i);

end;

INC(i);

end;

Form1. RefreshList;

end;

procedure FindByStat;

var i: Integer;

begin

i: =0;

while i<=WorkersCount-1 do begin

if ORD(Worker [i]. Stat) <>Form1. ComboBox3. ItemIndex then begin

Form2. DelWorker(i);

DEC(i);

end;

INC(i);

end;

Form1. RefreshList;

end;

procedure FindByIndCode;

var i: Integer;

begin

i: =0;

while i<=WorkersCount-1 do begin

if Worker [i]. IndCode<>Form1. ComboBox3. Text then begin

Form2. DelWorker(i);

DEC(i);

end;

INC(i);

end;

Form1. RefreshList;

end;

procedure FindByReceptionData;

var i: Integer;

begin

i: =0;

while i<=WorkersCount-1 do begin

if DataToInt(Worker [i]. ReceptionData) <>

DataToInt(Form1. GetData(Form1. ComboBox3. Text)) then begin

Form2. DelWorker(i);

DEC(i);

end;

INC(i);

end;

Form1. RefreshList;

end;

procedure FindByExperience;

var i: Integer;

begin

i: =0;

while i<=WorkersCount-1 do begin

if Worker [i]. Experience<>Form2. STI(Form1. ComboBox3. Text) then begin

Form2. DelWorker(i);

DEC(i);

end;

INC(i);

end;

Form1. RefreshList;

end;

procedure FindByExempt;

var i: Integer;

begin

i: =0;

while i<=WorkersCount-1 do begin

if ORD(Worker [i]. Exempt) <>Form1. ComboBox3. ItemIndex then begin

Form2. DelWorker(i);

DEC(i);

end;

INC(i);

end;

Form1. RefreshList;

end;

procedure FindByLiberationData;

var i: Integer;

begin

i: =0;

while i<=WorkersCount-1 do begin

if DataToInt(Worker [i]. LiberationData) <>

DataToInt(Form1. GetData(Form1. ComboBox3. Text)) then begin

Form2. DelWorker(i);

DEC(i);

end;

INC(i);

end;

Form1. RefreshList;

end;

procedure FindByPositionName;

var i,j: Integer;

begin

i: =0;

j: =Form1. ComboBox3. ItemIndex;

if j<0 then Exit;

while i<=WorkersCount-1 do begin

if Worker [i]. PositionName<>Form1. ComboBox3. Items. Strings [j] then begin

Form2. DelWorker(i);

DEC(i);

end;

INC(i);

end;

Form1. RefreshList;

end;

procedure FindByDepartmentName;

var i,j: Integer;

begin

i: =0;

j: =Form1. ComboBox3. ItemIndex;

if j<0 then Exit;

while i<=WorkersCount-1 do begin

if Worker [i]. DepartmentName<>Form1. ComboBox3. Items. Strings [j] then begin

Form2. DelWorker(i);

DEC(i);

end;

INC(i);

end;

Form1. RefreshList;

end;

procedure FindBySubsectionName;

var i,j: Integer;

begin

i: =0;

j: =Form1. ComboBox3. ItemIndex;

if j<0 then Exit;

while i<=WorkersCount-1 do begin

if Worker [i]. SubsectionName<>Form1. ComboBox3. Items. Strings [j] then begin

Form2. DelWorker(i);

DEC(i);

end;

INC(i);

end;

Form1. RefreshList;

end;

procedure FindByDepartmentLeader;

var i: Integer;

begin

i: =0;

while i<=WorkersCount-1 do begin

if ORD(Worker [i]. DepartmentLeader) <>Form1. ComboBox3. ItemIndex then begin

Form2. DelWorker(i);

DEC(i);

end;

INC(i);

end;

Form1. RefreshList;

end;

procedure FindBySubsectionLeader;

var i: Integer;

begin

i: =0;

while i<=WorkersCount-1 do begin

if ORD(Worker [i]. SubsectionLeader) <>Form1. ComboBox3. ItemIndex then begin

Form2. DelWorker(i);

DEC(i);

end;

INC(i);

end;

Form1. RefreshList;

end;

procedure TForm1. Button6Click(Sender: TObject);

begin

case ComboBox2. ItemIndex of

0: FindByTabN;

1: FindByLastName;

2: FindByName;

3: FindByPatronymic;

4: FindByBirthDay;

5: FindByBirthPlace;

6: FindByStat;

7: FindByIndCode;

8: FindByReceptionData;

9: FindByExperience;

10: FindByExempt;

11: FindByLiberationData;

12: FindByPositionName;

13: FindByDepartmentName;

14: FindBySubsectionName;

15: FindByDepartmentLeader;

16: FindBySubsectionLeader;

end;

end;

end.

unit WorkerUnit;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Mask, ExtCtrls;

type

TForm2 = class(TForm)

Button1: TButton;

Button2: TButton;

Label12: TLabel;

CheckBox3: TCheckBox;

Edit8: TEdit;

Panel1: TPanel;

Label9: TLabel;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Label10: TLabel;

Label11: TLabel;

Label13: TLabel;

Label14: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

ComboBox1: TComboBox;

Edit6: TEdit;

ComboBox2: TComboBox;

CheckBox1: TCheckBox;

ComboBox3: TComboBox;

CheckBox2: TCheckBox;

ComboBox4: TComboBox;

Edit7: TEdit;

Edit9: TEdit;

Edit10: TEdit;

Button3: TButton;

function STI(S: String): Integer;

procedure ClearField;

procedure FormToRec(Index: Integer);

procedure ClearWorker(Index: Integer);

procedure DelWorker(Index: Integer);

procedure Edit7KeyPress(Sender: TObject; var Key: Char);

procedure FormShow(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure ComboBox2KeyPress(Sender: TObject; var Key: Char);

procedure RecToForm(Index: Integer);

function Verification: Boolean;

procedure Button1Click(Sender: TObject);

procedure CheckBox3Click(Sender: TObject);

procedure Edit7Change(Sender: TObject);

procedure Edit8Change(Sender: TObject);

procedure Edit10Change(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Button3Click(Sender: TObject);

procedure ComboBox2DropDown(Sender: TObject);

procedure ComboBox3DropDown(Sender: TObject);

procedure ComboBox4DropDown(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

OK: Boolean=False;

implementation

uses KadrUnit, RegUnit;

{$R *. dfm}

function TForm2. STI(S: String): Integer;

var E: Integer;

begin

/ / Ця функція альтернативна StrToInt, тільки при помилці результат = 0

Val(S,Result,E);

if E<>0 then Result: =0;

end;

function SUB_Data(A,B: Data): Integer;

var A1,B1: Integer;

begin

A1: =A. Y*365+A. M*31+A. D;

B1: =B. Y*365+B. M*31+B. D;

Result: =Trunc((A1-B1) / 365);

end;

procedure TForm2. ClearField;

begin

Edit1. Text: =''; Edit2. Text: ='';

Edit3. Text: =''; Edit4. Text: ='';

Edit5. Text: =''; Edit6. Text: ='';

Edit7. Text: =''; Edit8. Text: ='';

Edit9. Text: =''; Edit10. Text: ='';

CheckBox1. Checked: =False;

CheckBox2. Checked: =False;

CheckBox3. Checked: =False;

ComboBox1. ItemIndex: =-1; ComboBox2. ItemIndex: =-1;

ComboBox3. ItemIndex: =-1; ComboBox4. ItemIndex: =-1;

end;

procedure TForm2. FormToRec(Index: Integer);

begin

if ((Index>=WorkersCount) or(Index<0)) then Exit;

Worker [Index]. TabN: =STI(Edit1. Text);

Worker [Index]. LastName: =Edit3. Text;

Worker [Index]. Name: =Edit4. Text;

Worker [Index]. Patronymic: =Edit5. Text;

Worker [Index]. BirthData: =Form1. GetData(Edit7. Text);

Worker [Index]. BirthPlace: =Edit6. Text;

if ComboBox1. ItemIndex>=0 then

Worker [Index]. Stat: =Boolean(ComboBox1. ItemIndex);

Worker [Index]. IndCode: =Edit2. Text;

Worker [Index]. ReceptionData: =Form1. GetData(Edit10. Text);

Worker [Index]. Experience: =STI(Edit9. Text);

Worker [Index]. Exempt: =CheckBox3. Checked;

if CheckBox3. Checked then

Worker [Index]. LiberationData: =Form1. GetData(Edit8. Text);

if ComboBox4. ItemIndex>=0 then

Worker [Index]. PositionName: =ComboBox4. Items. Strings [ComboBox4. ItemIndex];

if ComboBox3. ItemIndex>=0 then

Worker [Index]. DepartmentName: =ComboBox3. Items. Strings [ComboBox3. ItemIndex];

Worker [Index]. DepartmentLeader: =CheckBox2. Checked;

if ComboBox2. ItemIndex>=0 then

Worker [Index]. SubsectionName: =ComboBox2. Items. Strings [ComboBox2. ItemIndex];

Worker [Index]. SubsectionLeader: =CheckBox1. Checked;

end;

function ItemIndex(S: String; ST: TStrings): Integer;

var i: Integer;

begin

Result: =-1;

for i: =0 to ST. Count-1 do

if ST. Strings [i] =S then begin

Result: =i;

Exit;

end;

end;

procedure TForm2. RecToForm(Index: Integer);

begin

if ((Index>=WorkersCount) or(Index<0)) then Exit;

Edit1. Text: =IntToStr(Worker [Index]. TabN);

Edit3. Text: =Worker [Index]. LastName;

Edit4. Text: =Worker [Index]. Name;

Edit5. Text: =Worker [Index]. Patronymic;

Edit7. Text: =Form1. DataToStr(Worker [Index]. BirthData);

Edit6. Text: =Worker [Index]. BirthPlace;

ComboBox1. ItemIndex: =Ord(Worker [Index]. Stat);

Edit2. Text: =Worker [Index]. IndCode;

Edit10. Text: =Form1. DataToStr(Worker [Index]. ReceptionData);

Edit9. Text: =IntToStr(Worker [Index]. Experience);

CheckBox3. Checked: =Worker [Index]. Exempt;

Edit8. Enabled: =CheckBox3. Checked;

if CheckBox3. Checked then

Edit8. Text: =Form1. DataToStr(Worker [Index]. LiberationData);

ComboBox4. ItemIndex: =ItemIndex(Worker [Index]. PositionName,ComboBox4. Items);

ComboBox3. ItemIndex: =ItemIndex(Worker [Index]. DepartmentName,ComboBox3. Items);

CheckBox2. Checked: =Worker [Index]. DepartmentLeader;

ComboBox2. ItemIndex: =ItemIndex(Worker [Index]. SubsectionName,ComboBox2. Items);

CheckBox1. Checked: =Worker [Index]. SubsectionLeader;

end;

procedure TForm2. ClearWorker(Index: Integer);

begin

if ((Index>=WorkersCount) or(Index<0)) then Exit;

Worker [Index]. TabN: =0;

Worker [Index]. LastName: ='';

Worker [Index]. Name: ='';

Worker [Index]. Patronymic: ='';

Worker [Index]. BirthData: =Form1. GetData('');

Worker [Index]. BirthPlace: ='';

Worker [Index]. Stat: =False;

Worker [Index]. IndCode: ='';

Worker [Index]. ReceptionData: =Form1. GetData('');

Worker [Index]. Experience: =0;

Worker [Index]. Exempt: =False;

Worker [Index]. LiberationData: =Form1. GetData('');

Worker [Index]. PositionName: ='';

Worker [Index]. DepartmentName: ='';

Worker [Index]. DepartmentLeader: =False;

Worker [Index]. SubsectionName: ='';

Worker [Index]. SubsectionLeader: =False;

end;

procedure TForm2. DelWorker(Index: Integer);

var i: Integer;

A: Kadr;

begin

if ((Index>=WorkersCount) or(Index<0)) then Exit;

ClearWorker(Index);

for i: =Index to WorkersCount-2 do

Worker [i]: =Worker [i+1];

ClearWorker(WorkersCount-1);

DEC(WorkersCount);

SetLength(Worker,WorkersCount);

if CurWorker>=WorkersCount then

CurWorker: =WorkersCount-1;

Form1. RefreshList;

end;

procedure TForm2. Edit7KeyPress(Sender: TObject; var Key: Char);

begin

if not (Key in ['0'. '9',#8]) then Key: =#0;

end;

procedure TForm2. FormShow(Sender: TObject);

begin

ComboBox4. Items: =Form3. ListBox1. Items;

ComboBox3. Items: =Form3. ListBox2. Items;

ComboBox2. Items: =Form3. ListBox3. Items;

Form1. Enabled: =False;

OK: =False;

end;

procedure TForm2. FormClose(Sender: TObject; var Action: TCloseAction);

begin

if not OK then

if ADD then begin

if WorkersCount>0 then

DEC(WorkersCount);

if CurWorker>=WorkersCount then CurWorker: =WorkersCount-1;

if WorkersCount=0 then begin

Form1. StringGrid1. RowCount: =WorkersCount+2;

Form1. StringGrid1. Rows [1]. Clear;

end else

Form1. StringGrid1. RowCount: =WorkersCount+1;

end;

Form1. Enabled: =True;

if WorkersCount>0 then begin

Form1. Button2. Enabled: =True;

if not Form1. CheckBox1. Checked then

Form1. Button3. Enabled: =True;

end else begin

Form1. Button2. Enabled: =False;

Form1. Button3. Enabled: =False;

end;

end;

procedure TForm2. ComboBox2KeyPress(Sender: TObject; var Key: Char);

begin

Key: =#0;

end;

function TForm2. Verification: Boolean;

begin

Result: =True;

ComboBox2. ItemIndex: =ItemIndex(ComboBox2. Text,ComboBox2. Items);

ComboBox3. ItemIndex: =ItemIndex(ComboBox3. Text,ComboBox3. Items);

ComboBox4. ItemIndex: =ItemIndex(ComboBox4. Text,ComboBox4. Items);

if ((Edit8. Text='') and(CheckBox3. Checked)) then begin

ShowMessage('Введіть дату звільнення'); Edit8. SetFocus;

Result: =False; Exit;

end;

if Edit1. Text='' then begin

ShowMessage('Введіть табельний номер'); Edit1. SetFocus;

Result: =False; Exit;

end;

if Edit2. Text='' then begin

ShowMessage('Введіть ідентифікаційний код'); Edit2. SetFocus;

Result: =False; Exit;

end;

if Edit3. Text='' then begin

ShowMessage('Введіть прізвище'); Edit3. SetFocus;

Result: =False; Exit;

end;

if Edit4. Text='' then begin

ShowMessage('Введіть ім’я'); Edit4. SetFocus;

Result: =False; Exit;

end;

if Edit5. Text='' then begin

ShowMessage('Введіть по Батькові'); Edit5. SetFocus;

Result: =False; Exit;

end;

if ComboBox1. ItemIndex<0 then begin

ShowMessage('Виберіть стать'); ComboBox1. SetFocus;

Result: =False; Exit;

end;

if Edit7. Text='' then begin

ShowMessage('Введіть дату народження'); Edit7. SetFocus;

Result: =False; Exit;

end;

if Edit6. Text='' then begin

ShowMessage('Введіть місце народження'); Edit6. SetFocus;

Result: =False; Exit;

end;

if ((ComboBox2. ItemIndex<0) and(not CheckBox3. Checked)) then begin

ShowMessage('Виберіть Підрозділ'); ComboBox2. SetFocus;

Result: =False; Exit;

end;

if ((ComboBox3. ItemIndex<0) and(not CheckBox3. Checked)) then begin

ShowMessage('Виберіть Відділ'); ComboBox3. SetFocus;

Result: =False; Exit;

end;

if ((ComboBox4. ItemIndex<0) and(not CheckBox3. Checked)) then begin

ShowMessage('Виберіть посаду'); ComboBox4. SetFocus;

Result: =False; Exit;

end;

if Edit10. Text='' then begin

ShowMessage('Введіть дату прийому на роботу'); Edit10. SetFocus;

Result: =False; Exit;

end;

end;

procedure TForm2. Button1Click(Sender: TObject);

var i: Integer;

begin

if not Verification then Exit;

i: =Form1. FindInRec(CurWorker);

FormToRec(CurWorker);

if i>=0 then

Rezerv [i]: =Worker [CurWorker];

Form1. RecToRow(CurWorker,CurWorker+1);

OK: =True;

Close;

end;

procedure TForm2. CheckBox3Click(Sender: TObject);

begin

Edit8. Enabled: =CheckBox3. Checked;

ComboBox2. Enabled: =not CheckBox3. Checked;

ComboBox3. Enabled: =not CheckBox3. Checked;

ComboBox4. Enabled: =not CheckBox3. Checked;

CheckBox1. Enabled: =not CheckBox3. Checked;

CheckBox2. Enabled: =not CheckBox3. Checked;

Button3. Enabled: =not CheckBox3. Checked;

if CheckBox3. Checked then Edit8. SetFocus;

end;

procedure TForm2. Edit7Change(Sender: TObject);

begin

if Length(Edit7. Text) in [2,5] then begin

Edit7. Text: =Edit7. Text+'. ';

Edit7. SelStart: =Length(Edit7. Text);

end;

end;

procedure TForm2. Edit8Change(Sender: TObject);

begin

if Length(Edit8. Text) in [2,5] then begin

Edit8. Text: =Edit8. Text+'. ';

Edit8. SelStart: =Length(Edit8. Text);

end;

if Length(Edit8. Text) =10 then

Edit9. Text: =IntToStr(SUB_Data(Form1. GetData(Edit8. Text),Form1. GetData(Edit10. Text)));

end;

procedure TForm2. Edit10Change(Sender: TObject);

begin

if Length(Edit10. Text) in [2,5] then begin

Edit10. Text: =Edit10. Text+'. ';

Edit10. SelStart: =Length(Edit10. Text);

end;

Button3. OnClick(Button3);

end;

procedure TForm2. Button2Click(Sender: TObject);

begin

OK: =False;

Close;

end;

procedure TForm2. Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if not (Key in ['0'. '9',#8]) then Key: =#0;

end;

procedure TForm2. Button3Click(Sender: TObject);

var TIME: SystemTime;

CurData: Data;

begin

GetLocalTime(TIME);

CurData. D: =Time. wDay;

CurData. M: =Time. wMonth;

CurData. Y: =Time. wYear;

if Length(Edit10. Text) =10 then

Edit9. Text: =IntToStr(SUB_Data(CurData,Form1. GetData(Edit10. Text)));

end;

procedure TForm2. ComboBox2DropDown(Sender: TObject);

begin

if ComboBox2. Items. Count<1 then begin

Form3. Show;

Form3. Edit3. SetFocus;

end;

end;

procedure TForm2. ComboBox3DropDown(Sender: TObject);

begin

if ComboBox3. Items. Count<1 then begin

Form3. Show;

Form3. Edit2. SetFocus;

end;

end;

procedure TForm2. ComboBox4DropDown(Sender: TObject);

begin

if ComboBox4. Items. Count<1 then begin

Form3. Show;

Form3. Edit1. SetFocus;

end;

end;

end.

unit RegUnit;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm3 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

ListBox1: TListBox;

ListBox2: TListBox;

ListBox3: TListBox;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

procedure Edit1KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure Edit2KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure Edit3KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure FormShow(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure ListBox1KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure ListBox2KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure ListBox3KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure ListBox1Click(Sender: TObject);

procedure ListBox2Click(Sender: TObject);

procedure ListBox3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form3: TForm3;

implementation

uses KadrUnit, WorkerUnit;

{$R *. dfm}

procedure TForm3. Edit1KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

var i: Integer;

A: Boolean;

begin

if Key=27 then Close;

if Key=13 then begin

A: =True;

for i: =0 to ListBox1. Items. Count-1 do

if Edit1. Text=ListBox1. Items. Strings [i] then begin

A: =False;

Break;

end;

if A then

ListBox1. Items. Add(Edit1. Text);

Edit1. Clear;

end;

end;

procedure TForm3. Edit2KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

var i: Integer;

A: Boolean;

begin

if Key=27 then Close;

if Key=13 then begin

A: =True;

for i: =0 to ListBox2. Items. Count-1 do

if Edit2. Text=ListBox2. Items. Strings [i] then begin

A: =False;

Break;

end;

if A then

ListBox2. Items. Add(Edit2. Text);

Edit2. Clear;

end;

end;

procedure TForm3. Edit3KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

var i: Integer;

A: Boolean;

begin

if Key=27 then Close;

if Key=13 then begin

A: =True;

for i: =0 to ListBox3. Items. Count-1 do

if Edit3. Text=ListBox3. Items. Strings [i] then begin

A: =False;

Break;

end;

if A then

ListBox3. Items. Add(Edit3. Text);

Edit3. Clear;

end;

end;

procedure TForm3. FormShow(Sender: TObject);

begin

Form1. Enabled: =False;

Form2. Enabled: =False;

end;

procedure TForm3. FormClose(Sender: TObject; var Action: TCloseAction);

begin

Form2. ComboBox2. Items: =ListBox3. Items;

Form2. ComboBox3. Items: =ListBox2. Items;

Form2. ComboBox4. Items: =ListBox1. Items;

Form1. Enabled: =True;

Form2. Enabled: =True;

end;

procedure TForm3. ListBox1KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if ListBox1. ItemIndex>=0 then

if Key=46 then ListBox1. Items. Delete(ListBox1. ItemIndex);

if Key=27 then Close;

end;

procedure TForm3. ListBox2KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if ListBox2. ItemIndex>=0 then

if Key=46 then ListBox2. Items. Delete(ListBox2. ItemIndex);

if Key=27 then Close;

end;

procedure TForm3. ListBox3KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if ListBox3. ItemIndex>=0 then

if Key=46 then ListBox3. Items. Delete(ListBox3. ItemIndex);

if Key=27 then Close;

end;

procedure TForm3. ListBox1Click(Sender: TObject);

var i: Integer;

begin

i: =ListBox1. ItemIndex;

if i<0 then Exit;

if ListBox1. Items. Strings [i] <>'' then

Edit1. Text: =ListBox1. Items. Strings [i];

end;

procedure TForm3. ListBox2Click(Sender: TObject);

var i: Integer;

begin

i: =ListBox2. ItemIndex;

if i<0 then Exit;

if ListBox2. Items. Strings [i] <>'' then

Edit2. Text: =ListBox2. Items. Strings [i];

end;

procedure TForm3. ListBox3Click(Sender: TObject);

var i: Integer;

begin

i: =ListBox3. ItemIndex;

if i<0 then Exit;

if ListBox3. Items. Strings [i] <>'' then

Edit3. Text: =ListBox3. Items. Strings [i];

end;

end.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: