Смекни!
smekni.com

Кадровий облік (стр. 3 из 5)


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

Висновок

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

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

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; // Сортування за стажем