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