РефератыИнформатикаКаКадровий облік

Кадровий облік

Зміст


Вступ. 2


1. Аналітичний розділ. 3


2. Побудова інформаційно-математичної моделі задачі3


3. Алгоритм задачі4


4. Визначення структури даних. 8


5. Розробка інтерфейсу програми. 10


6. Складання коду програми. 13


7. Реалізація проекту у візуальному середовищі15


8. Аналіз програми. 16


9. Тестування програми. 17


10. Інструкції з експлуатації програми. 19


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


Висновок. 23


Додатки. 24


Вступ

Сучасне життя важко зараз уявити без основи наукового прогресу, тобто комп’ютера. Комп’ютер стрімко увірвався в наше життя, швидкими темпами витісняючи раніше винайдені досягнення людства, причому такими ж самими швидкими темпами весь час змінюючись і удосконалюючись. Але комп’ютер це просто машина, яка не може працювати сама, для роботи комп’ютера використовують програми.


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


Delphi - це одна з мов програмування. Через її простоту та функціональність вона є дуже популярною, до того ж в неї дуже зручний інтерфейс, що спрощує процес програмування. В Delphi є дуже багато стандартних компонентів за допомогою яких можна створювати програми для різних сфер життя. Від бухгалтерських програм до ігор. Ігри можуть бути любої складності і напрямку. До того ж Delphi дає змогу створювати компоненти самостійно потрібно тільки вміти. Середовище програмування Delphi дає змогу без великих зусиль писати великі та складні програми тому що це мова програмування високого рівня. Delphi є кількох версій: 2.0 це найстаріша версія, найновішою версією є Delphi 2007 випущена в цьому році. До речі WindowsCommander який був перейменований на TotalCommander був написаний на Delphi 2.0.


1. Аналітичний розділ

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


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


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


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




2. Побудова інформаційно-математичної моделі задачі

1) Постановка задачі:


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


Для функціонування програми буде створено новий тип даних, який буде вміщати в себе всю інформацію про робітника (табельний номер, ПІБ, дата народження, дата прийняття на роботу, стаж, і т.д.). Стаж роботи визначається різницею між поточною датою і датою прийняття на роботу, якщо працівник звільнений то стаж визначається як різниця між датою звільнення і датою прийняття на роботу. Має бути передбачена фільтрація натиснених клавіш для деяких полів вводу, н. д.: Дата народження, табельний номер.


Програма повинна зберігати дані в поточний файл якщо він вже існує, натисканням кнопки збереження в головному меню, або зберігати дані в довільний файл, який вибере користувач натисканням кнопки "Зберегти як", також користувач зможе завантажити раніше збережений файл для перегляду або зміни його вмісту.


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


Сортування персоналу можна буде здійснювати за багатьма критеріями. Сортувати можна буде як по зростанню так і по спаданню.


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




3. Алгоритм задачі

Алгоритм розв'язання задачі графічно відображає логіку програми і наводиться у вигляді спрощеної схеми алгоритму та блок-схем етапів.



Блок-схема 1 - Процедура переведення рядка в дату.



Блок-схема 2 - Процедура сортування за табельним номером.



Блок-схема 3 - Процедура пошуку працівника за ім’ям.



Блок-схема 4 - Процедура додавання нового робітника.


4. Визначення структури даних

В програмі були використані змінні типів наведених в Таблиці 1


Таблиця 1. Типи змінних та їх призначення.


























Тип Опис типу
Byte Цілочисельний тип діапазоном від 0 до 255
Integer Цілочисельний тип діапазоном від - 32768 до 32767
Data Власний тип для збереження дати (день, місяць, рік)
Kadr Власний тип для збереження інформації про робітника
Fileof Kadr Використовується типизований файл
Boolean Логічний тип, який має два значення: true або false
String Рядок символів діапазоном від1 до 255 символів

Деякі змінні, що використовуються в програмі, їх тип та призначення вказані в Таблиці 2.


Таблиця 2. Деякі змінні, їх типи та призначення у програмі.






























Змінна Тип Пояснення їх дії у програмі
F Типизований файл, типу Kadr Для збереження інформації про робітників в файл
Worker Динамічний масив робітників Зберігає всю інформацію про робітників
Rezerv Динамічний масив робітників Резервний масив для тимчасового збереження інформації про робітників (використовується при фільтрації працівників)
WorkersCount Зміна типу Integer Зберігає кількість робітників
RezervCount Зміна типу Integer Зберігає кількість працівників в резервному масиві
CurWorker Зміна типу Integer В цій змінній знаходиться номер робітника над яким проводяться операції

5. Розробка інтерфейсу програми

Основна форма програминазивається Form1 і служить для відображення списку працівників.



Рисунок 1. Головна форма проекту.


На формі містяться такі компоненти як:


TStringGrid, TButton, TGroupBox, TComboBox, TCheckBox, TMainMenu, TOpenDialog, TSaveDialog, TXPManifest.


Компонент StringGrid представляє собою таблицю і служить для відображення списку всіх, або шуканих робітників.


У нього були зміненні такі опції:


Align = alClient


Options [goColSizing] = True


Компонент Button представляє собою кнопку і при натисканні служить для виконання тої чи іншої операції.


Компонент GroupBox служить для об’єднання об’єктів в групи. В GroupBox1 були зміненні такі параметри як:


Align = alBottom


Caption = Редагування


Компонент ComboBoxпредставляє собою випадаючий список, використовується для збереження списку рядків.


Компонент CheckBox - прапорець стану, має два стани: встановлений і не встановлений, свій стан зберігає в змінній Checked.


Компонент MainMenu це головне меню програми.


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


Компонент SaveDialog - для вибору файлу в який буде збережена інформація про робітників, цей елемент аналогічний попередньому тільки він призначений для збереження.


Компонент XPManifest призначений для підстроювання графічного інтерфейсу програми під стиль встановлений в операційній системі.


Друга форма програми називається Form2 і призначена для редагування інформації про робітника.



Рисунок 2. Форма редагування.


На даній формі розміщені поля типу TEdit в них можна ввести один рядок текстової інформації.


Також на цій формі є компоненти типу TCheckBox. CheckBox1 з заголовком "Звільнений" призначений для завдання статусу робітника (звільнений чи ні). Якщо він буде знаходитись в стані звільнений то компоненти ComboBox1 (Підрозділ), ComboBox2 (Відділ), ComboBox3 (Посада) будуть не активні, щоб не можна було міняти посаду робітнику, а також поле "Дата звільнення" буде активним щоб можна було ввести дату звільнення.


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


Якщо поля "Підрозділ", "Відділ" чи "Посада" пусті то при натисканні на них відкриється вікно де їх можна створити.


Форма редагування категорій.



Рисунок 3. Форма редагування категорій посад, відділів, підрозділів.


Ця форма служить для створення нових, редагування чи видалення існуючих "посад", "відділів", "підрозділів".


На формі присутні 3 поля:


Назва посади: для додавання нової назви посади


Назва відділу: для додавання нової назви відділу


Назва підрозділу: для додавання нової назви підрозділу


Також на формі є три компоненти TListBox вони служать для збереження і відображення існуючих і доданих назв "посад", "відділів" чи "підрозділів".


Для видалення потрібної посади, відділу чи підрозділу потрібно вибрати її в списку і натиснути клавішу Del.


Додані назви автоматично зберігаються, тому після редагування потрібно просто закрити вікно. Змінені назви автоматично додадуться в список в вікні редагування інформації про працівника.


6. Складання коду програми

В коді програми містяться наступні процедури:


Модуль головної форми:


Функція GetData - вона має один параметр типу рядок, а її результатом буде дата, вона переводить рядок в дату;


Процедура SaveToFile - зберігає інформацію з масиву в файл;


Процедура AddToCombo - додає назви посад, відділів і підрозділів з масиву в список;


Процедура LoadFromFile - завантажує інформацію з вибраного файлу в програму (в масив);


Функція DataToStr - переводить дату в рядок;


Процедура RecToRow - заповнює заданий рядок таблиці, записом з заданим номером з масиву;


Процедура RefreshList - оновлює таблицю, заповнює її наново записами з масиву;


Процедура Button1Click - додавання нового робітника, відкриває вікно для заповнення полів інформацією про робітника;


Процедура StringGrid1SelectCell - встановлює номер поточного (вибраного) робітника;


Процедура Button2Click - відкриває вікно редагування інформації про працівника для її зміни;


Процедура N2Click - відкриває діалогове вікно для вибору файлу який потрібно завантажити в програму;


Процедура N4Click - відкриває діалогове вікно для вибору файлу в який буде збережена інформація про працівників;


Процедура Button5Click - інвертує послідовність працівників;


Процедура SortByTabN - сортування за табельним номером;


Функція DataToInt - переводить дату в кількість днів;


Процедура ComboBox1Change - сортує робітників по вибраному критерію;


Процедура FindByTabN - пошук по табельному номеру;


Процедура Button6Click - шукає робітника по вибраному критерію;


Модуль редагування інформації про робітника:


Функція STI - альтернатива StrToInt тільки при помилці переведення повертає 0;


Функція SUB_Data - віднімання двох дат;


Процедура ClearField - очищення всіх полів на формі;


Процедура FormToRec - переносить значення всіх полів форми в відповідні змінні масиву;


Функція ItemIndex - шукає рядок в списку і повертає його позицію;


Процедура RecToForm - заносить дані з масиву в відповідні поля на формі;


Процедура ClearWorker - очищення інформації про заданого робітника;


Процедура DelWorker - видаляє вибраного робітника;


Функція Verification - перевіряє чи заповнені всі поля, якщо ні то надсилає повідомлення;


Модуль редагування категорій:


Процедура Edit1KeyDown - додає нову назву посади;


Процедура Edit2KeyDown - додає нову назву відділу;


Процедура Edit3KeyDown - додає нову назву підрозділу;


Процедура ListBox1KeyDown - видаляє вибрану посаду;


Процедура ListBox2KeyDown - видаляє вибраний відділ;


Процедура ListBox3KeyDown - видаляє вибраний підрозділ;


Код програми наведений у додатку А.


7. Реалізація проекту у візуальному середовищі

Реалізація проекту у візуальному середовищі передбачає наступні етапи:


Запустити на виконання Delphi 7 для створення нового проекту.


На створеній формі розмістити компоненти як вказано на малюнку 1.


В формі властивість WindowState поставити "wsMaximized";


Створити ще 2 додаткових форм (File->New->Form).


В інших формах властивість Position поставити рівною "poMainFormCenter".


Властивість компонента StringGrid1 Align поставити рівною "alClient", а в GroupBox1 рівною "alBottom".


На форму помістити елементи, що показані на Рисунках 1,2,3 та змінюємо їх відповідні параметри, як вказано в поясненнях.


Ввести програмний код, який наведений у додатку А, у відповідні Unit.


Компілювати проект.


Зберегти проект.


8. Аналіз програми

В основі програми лежить робота з типізованими файлами, масивами, масивами записів.


Проект складається з трьох форм. Всі форми зображені на рисунках.


При запуску програми перед користувачем з’явиться головна форма де він може виконати наступні дії:


Почати створювати нові записи про робітників.


Завантажити збережений раніше файл з записами про робітників.


Додавати, змінювати, або редагувати записи про робітників.


Сортувати за потрібними йому критеріями.


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


Зберегти записи в поточний, або в будь-який інший файл.


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


В програмі є такі плюси як:


Сортування за 12 критеріями в одному, або іншому напрямку.


Покроковий пошук (фільтрація) за 17 критеріями, такий пошук дає змогу шукати серед знайденого по іншому критерію.


Також в програмі є недоліки:


Мала функціональність відносно відомих аналогів.


9. Тестування програми

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



Рисунок 4. Програма при завантажені файлу.


При відкриті чи завантажені файлів обліку, не було знайдено ні однієї помилки за весь час.



Рисунок 5. Програма з завантаженим файлом.



Рисунок 6. Редагування інформації про робітника.


Було додано кнопку оновити, для оновлення стажу роботи відносно поточної дати.



Рисунок 7. Програма при програмно згенерованій грі.


Було додано можливість видалення існуючих категорій.


Зараз в програмі всі недоліки виправлені, програма працює нормально і без помилок.


10. Інструкції з експлуатації програми

Для нормальної роботи гри до комп’ютера висуваються такі мінімальні вимоги:


Pentium100 MHz;


1 Mb оперативної пам’яті;


Операційну систему Windows95/98/2000/XP / Vista;


600 Кб вільного місця на жорсткому диску;


Відеокарта на 8MB;


Мишка, клавіатура.


Щоб програма працювала потрібно скопіювати файл “Kadrovuy_Oblik. exe” на комп’ютер. Запуск програми здійснюється за допомогою файлу “Kadrovuy_Oblik. exe”. Для додавання нового робітника потрібно натиснути кнопку "Додати", на панелі редагування внизу вікна. Для редагування інформації про робітника, потрібно натиснути кнопку "Змінити" на панелі редагування, або 2 рази клацнути на потрібному робітнику. Також потрібного робітника можна видалити із списку, для цього потрібно вибрати працівника із списку, клавішами чи натисканням лівої кнопки мишки і натиснути кнопку "Видалити". В програмі можна додавати нові посади, відділи чи підрозділи, для цього потрібно натиснути кнопку "Редагування категорій" на панелі внизу і в новому вікні вписати нову посаду, відділ чи підрозділ. Також існуючі категорії (посади, відділи, підрозділи) можна видаляти для цього потрібно натиснути кнопку "Редагування категорій" і вибрати в списку непотрібну категорію і натиснути клавішу Del. Також робітників можна сортувати за багатьма критеріями, а для сортування в іншому напрямку потрібно натиснути кнопку "Інвертувати" на панелі "Сортування". В програмі присутній пошук робітників за всіма критеріями, які є в робітників. Пошук виконаний в вигляді фільтру, що спрощує пошук робітників. За об’ємом програма невелика тому легко влізе на дискету чи інший носій інформації.


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

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



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


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





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


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





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


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


Висново
к

Для розробки даного проекту потрібно було спочатку проаналізувати реалізацію програми визначити структури даних, функціональні можливості програми. Для створення програми використовувалось середовище програмування 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; // Сортування за стажем


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.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Кадровий облік

Слов:8103
Символов:76905
Размер:150.21 Кб.