Разработка клиент-серверного приложения управления персоналом предприятия

Изучение истории достижений корпорации Oracle. Разработка клиент-серверного приложения на языке Delphi XE, реализующего возможность управления персоналом на предприятии. Основные структуры данных. Создание инструкции работы с приложением "Отдел кадров".

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 08.06.2013
Размер файла 974,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Список названий учебных заведений

ULICA

Список улиц

ZVANIE

Список званий, которые сотрудники получали по окончании срочной службы

Схему таблиц базы данных можно увидеть на рисунке 3.1

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

Рисунок 3.1 - Схема таблиц базы данных

Листинг 3.1 - Создание таблицы, первичного ключа, связей, индекса

CREATE TABLE LICO

ID NUMBER(6) NOT NULL,

FAMILIA VARCHAR2(100 BYTE) NOT NULL,

IMIA VARCHAR2(100 BYTE) NOT NULL,

OTCHESTVO VARCHAR2(100 BYTE) NOT NULL,

DATA_ROSHDENIA DATE NOT NULL,

ID_POL NUMBER(6) NOT NULL,

ID_MESTO_ROSHDENIA NUMBER(6) NOT NULL,

ID_SROCH_SLUSHBA NUMBER(6),

PHOTO BLOB)

ALTER TABLE LICO ADD (

CONSTRAINT LICO_PK

PRIMARY KEY

ALTER TABLE LICO ADD (

CONSTRAINT LICO_MESTO_ROSHDENIA_FK

FOREIGN KEY (ID_MESTO_ROSHDENIA)

REFERENCES NASELENI_PUNKT (ID),

CONSTRAINT LICO_POL_FK

FOREIGN KEY (ID_POL)

REFERENCES POL (ID),

CONSTRAINT LICO_SROCH_SLUSHBA_FK

FOREIGN KEY (ID_SROCH_SLUSHBA)

REFERENCES SROCHNAIA_SLUSHBA (ID));

CREATE UNIQUE INDEX LICO_PK ON LICO

(ID);

Так как в СУБД Oracle нет механизма для автоматической генерации уникальных значений первичных ключей, для этой цели, для каждой таблицы базы данных, были созданы последовательности. Пример создания последовательности для выше описанной таблицы можно увидеть на листинге 3.2

Листинг 3.2 - Создание последовательности

CREATE SEQUENCE SQ_LICO

START WITH 0

MAXVALUE

MINVALUE 0

NOCYCLE

NOCACHE

ORDER;

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

1. создать триггер, который будет выполняться вместо вставки новой записи;

2. создать хранимые процедуры для вставки новых записей в таблицы.

Мы пойдем вторым путем, т.к. наиболее наглядный для дальнейшего разработчика приложения, и ему нет необходимости знать SQL команды, он может просто вызвать хранимую процедуру и передать в нее соответствующие параметры. У этого метода есть еще один плюс, все эти команды будут выполнять на сервере приложения, что значительно ослабит нагрузку на сеть.

Хранимые процедуры были так же созданы для каждой таблицы, в зависимости от процедуры было описано разное количество параметров. Пример хранимой процедуры для добавления данных можно увидеть на листинге 3.3, пример приведен все для той же таблицы LICO. Все процедуры для добавления в новых данных в таблицы были объединены в один пакет INSERT_TO_TABLE, это было сделано для последующего удобства поиска процедур на добавление, ведь теперь они все в одном месте. Но это не главная причина для создания пакета, если вдруг были произведены какие-либо изменения в базе данных, не надо будет искать все процедуры и заново их компилировать на поиск возможных ошибок, достаточно просто перекомпилировать один пакет.

Листинг 3.3 - Создание процедуры для добавления записей в таблицу

PROCEDURE Insert_LICO (

FAMILIA IN VARCHAR2,

IMIA IN VARCHAR2,

OTCHESTVO IN VARCHAR2,

DATA_ROSHDENIA IN DATE,

ID_POL IN NUMBER,

ID_MESTO_ROSHDENIA IN NUMBER,

ID_SLUSHBA IN NUMBER,

P_PHOTO IN BLOB)

IS

BEGIN

INSERT INTO lico

VALUES (sq_lico.NEXTVAL,

familia,

imia,

otchestvo,

data_roshdenia,

id_pol,

id_mesto_roshdenia,

id_slushba,

P_PHOTO);

COMMIT;

END;

Теперь мы можем добавлять данные, но иногда их надо изменять. Для этого создадим еще один пакет, и теперь назовем его UPDATE_TO_TABLE, в этом пакете будут храниться все процедуры на изменения данных в таблицах.

Пример процедуры на изменения данных можно посмотреть на листинге 3.4. Как видно из листинга типы данных переменных не совсем обычные, это не совсем типы данных, это ссылки на типы данных, с которыми мы будем работать. Это сделано для предотвращения возможных ошибок, т.к. таблица может быть обновлена, и, на пример, размер текстового поля в таблице увеличен, и чтобы не редактировать процедуру, она сразу берет тип столбца.

Листинг 3.4 - Создание процедуры для обновления данных в таблице

PROCEDURE UPDATE_LICO (

p_id IN LICO.ID%TYPE,

p_fam IN lico.familia%TYPE,

p_imia IN lico.imia%TYPE,

p_otch IN LICO.OTCHESTVO%TYPE,

p_data_r IN LICO.DATA_ROSHDENIA%TYPE,

p_mesto_r IN LICO.ID_MESTO_ROSHDENIA%TYPE)

AS

BEGIN

UPDATE lico

SET LICO.FAMILIA = p_fam,

LICO.IMIA = p_imia,

LICO.OTCHESTVO = p_otch,

LICO.DATA_ROSHDENIA = p_data_r,

lico.id_mesto_roshdenia = p_mesto_r

WHERE LICO.ID = p_id;

COMMIT;

END UPDATE_LICO;

Для удаления записей в таблицах не было ничего сделано, т.к. СУБД Oracle сама все сделает за нас. Для этого достаточно написать пару слов при создании связей, а именно ON DELETE CASCADE. Пример использования этого оператора можно увидеть на листинге 3.5. Если будет удален сотрудник из базы данных, то вместе с ним удалиться вся информация о нем.

Листинг 3.5 - Создание связи с каскадным удалением данных

CONSTRAINT RABOTA_LICO_FK

FOREIGN KEY (ID_SOTR) REFERENCES LICO (ID)

ON DELETE CASCADE

На этом основная разработка базы данных окончена, осталось наполнить ее тестовой информацией.

В ходе разработки приложения, была выявлена необходимость в создании еще ряда дополнительных объектов базы данных, в частности представлений, т.к. часто необходимо было использовать данные из нескольких таблиц, и каждый раз писать большие запросы нецелесообразно. Всего было создано 13 представлений, список которых можно увидеть в таблице 3.2.

Таблица 3.2 - Список представлений базы данных

Название представления

Описание представления

VW_FULL_RABOTA

Полная информация о местах работы

VW_FULL_REPORT

Полная информация о сотруднике и текущем месте работы

VW_FULL_SOTRUDNIKI

Полная информация о сотрудниках

VW_INVALIDNOST

Список сотрудник с инвалидностью

VW_KONTAKTI_SOTR

Все контакты сотрудников

VW_MESTO_SHITELSTVA

Места жительства сотрудников

VW_OBRAZOVANIE

Список полученных и получаемых образований сотрудниками

VW_PASPORTA

Информация о паспортах сотрудников

VW_PENSIONERI

Список всех пенсионеров

VW_RABOTA

Краткая информация о текущем месте работы

VW_RABOTA_PENSIONERI

Последнее место работы пенсионеров

VW_SLUSHBA

Список мест службы сотрудников

VW_SOTRUDNIKI

Краткая информация о сотрудниках

Пример создания представления можно увидеть на листинге 3.6

Листинг 3.6 - Создание представления

CREATE OR REPLACE FORCE VIEW VW_FULL_RABOTA (

ID,PREF, ID_PREF, DOLSHNOST, ID_DOLSHNOST, SUF, ID_SUF,

MESTO_RAB, ID_MESTO_RABOTI, DATA_PRIEMA, DATA_OKONCHANIA,

ID_SOTR)

AS

SELECT A.ID, A.NAZVANIE AS PREF, A.ID_PREF,

DOLSHNOST.NAZVANIE AS DOLSHNOST,

DOLSHNOST.ID AS ID_DOLSHNOST,

A.NOMER AS SUF, A.ID_SUF,

MESTO_RABOTI.NAZVANIE AS mesto_rab,

MESTO_RABOTI.ID AS ID_MESTO_RABOTI,

RABOTA.DATA_PRIEMA, RABOTA.DATA_OKONCHANIA,

RABOTA.ID_SOTR

FROM (SELECT P.ID,

P.NAZVANIE,

P.ID_PREF,

S.NOMER,

S.ID_SUF

FROM (SELECT RABOTA.ID,

DOLSHNOST_PREFIX.NAZVANIE,

DOLSHNOST_PREFIX.ID AS ID_PREF

FROM rabota

LEFT JOIN

dolshnost_prefix

ON RABOTA.ID_DOLSH_PREF = DOLSHNOST_PREFIX.ID) P

INNER JOIN

(SELECT RABOTA.ID,

DOLSHOST_SUFIX.NOMER,

DOLSHOST_SUFIX.ID AS ID_SUF

FROM rabota

LEFT JOIN

dolshost_sufix

ON RABOTA.ID_DOLSH_SUF = DOLSHOST_SUFIX.ID) S

ON P.ID = S.ID) A,

rabota,

dolshnost,

mesto_raboti

WHERE A.ID = RABOTA.ID

AND RABOTA.ID_DOLSHNOSTI = DOLSHNOST.ID

AND RABOTA.ID_MESTO_RAB = MESTO_RABOTI.ID

ORDER BY RABOTA.DATA_PRIEMA DESC;

Так же было создано еще два пакета с процедурами, для добавления данных и редактирования, ADD_LICO и EDIT_LICO соответственно.

3.3 Разработка клиент-серверного приложения

Разработку клиент-серверного приложения начнем с создания нового проекта, с именем «OtdelKadrov.dproj», а главный модуль приложения назовем «Main.pas».

При окончании создания приложения, она состоит из 18 визуальных модулей, 2 оконных модулей и 2 не визуальных модулей, схему модулей приложения можно увидеть на рисунке 3.2.

Рисунок 3.2 - Схема приложения

Главный модуль приложения Main.pas является главным. Т.к. приложение организованно как MDI приложение, то мы для модуля Main установим свойство FormStyle равным fsMDIForm. Это означает что все формы, у которых свойство FormStyle будет установлено fsMDIChild будут отображаться внутри главной формы, т.е. они будут являться дочерними формами по отношению к главной форме.

Для соединения с базой данных были выбраны драйверы dbExpress, потому что они небольшие по объему и быстрые. Каждый драйвер выполнен в виде dll (на платформе Windows) или как so (shared library на Linux). Драйвер dbExpress предоставляет пять интерфейсов для выборки метаданных, выполнения операторов SQL и хранимых процедур, и возможность чтения записей из выборки в одном направлении (unidirectional cursor). При установке клиента от Oracle для работы с базой данных установлены необходимые dll - библиотеки, а именно dbxora.dll и oci.dll.

Для соединения с БД разработана процедура, пример которой можно увидеть на листинге 3.7

Листинг 3.7 - Соединение с базой данных

with SQLConnection1 do

begin

Close;

LoginPrompt := False;

DriverName := 'Oracle';

with Params do

begin

Clear;

Add('Database=' + DB);

Add('User_name=' + user);

Add('Password=' + pas);

Add('Create=false');

end;

try

Open;

SQLConnection1.ExecuteDirect('alter session set

nls_numeric_characters=' + QuotedStr('.,'));

В данной процедуре происходит соединения с БД, а также необходимая настройка клиента. Соединение происходит при помощи компонента TSQLConnection. Для работы с базой данных одного лишь соединения недостаточно, т.е. доступ к данным есть, но посмотреть их мы не можем. Для просмотра данных необходимо использовать соответствующие компоненты. В данном случае использовались TSQLQuery (выполнение запросов к БД), TSQLStoredProc (выполнение хранимых процедур) и TSimpleDataSet (выполнение процедур, запросов или отображение таблиц).

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

Листинг 3.8 - Сохранение данных для авторизации

ini := TInifile.Create(ExtractFileDir(Application.ExeName) +

'\Auth.ini');

try

ini.WriteString('Auth', 'DB', DB);

ini.WriteString('Auth', 'user', user);

ini.WriteString('Auth', 'pas', pas);

ini.WriteBool('Auth', 'Check', True);

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

Листинг 3.9 - Динамическое создание формы

try

Form7 := TForm7.Create(Form1);

Form7.ShowModal;

finally

FreeAndNil(Form7);

end;

Все команды управления приложением созданы в менеджере действий «ActionManager». Менеджер действий позволяет организовать логические группы действий, которые впоследствии могут быть повторно использованы в меню, навигационных панелях и панелях кнопок. Такие группы действий становятся доступными автоматически -- по мере их добавления к объекту.

Для приложения выбран тип интерфейса Ribbon. При использовании интерфейса Ribbon большинство функций распределяются по вкладкам новой панели. Некоторые функции перенесены в выпадающие меню, появляющиеся при нажатии на кнопку слева от вкладок (кнопка «Office» в Office 2007 или «Файл» в 2010-м), и дополнительную кнопку в заголовке (меню быстрого вызова). Кнопки функций, которые нужны постоянно (отменить, повторить, сохранить), вынесены в заголовок окна. Для связи интерфейса и менеджера действий в свойстве интерфейса Ribbon, ActionManager установлено значение нашего менеджера действий ActionManager1.

Для группировки сотрудников написана процедура, листинг 3.10, с ее помощью фамилии сотрудников заносятся в ту или иную ветку дерева, а если нет соответствующей ветки, она создается и в нее помещается соответствующий сотрудник. Дерево реализовано с помощью компонента TreeView.

Листинг 3.10 - Формирование дерева сотрудников

with TreeView1.Items do

begin

BeginUpdate;

with SimpleDataSet1 do

begin

First;

while not Eof do

begin

New(obj);

ferst := FieldByName('FAMILIA').AsString[1];

obj^ := FieldByName('ID').AsInteger;

Node := FindNode(ferst);

if Node = nil then

begin

TreeView1.Items.Add(nil, ferst);

Node := FindNode(ferst);

end;

TreeView1.Items.AddChildObject(Node,

FieldByName('FAMILIA').AsString + ' ' +

FieldByName('IMIA').AsString + FieldByName('OTCHESTVO').AsString, obj);

end;

Все узлы компонента TTreeView хранятся в свойстве Items класса TTreeNоdes и имеют тип TTreeNоde. У класса TTreeNоde нас интересуют два свойства Data - данное свойство принадлежит к типу Pоinter и является указателем для связанного с узлом объекта и Text - текст, который выводится в узле. Как видно из листинга 3.10, а именно из метода

AddChildObject(Nоde:TTreeNоde; cоnst S:string; Ptr:Pоinter)

Где Node - узел, в который добавляется запись, S - это наше свойства Text, и Ptr - свойство Data.

В свойство Data мы заносим ID сотрудника, а в Text фамилию имя и отчество. Сделано это, что бы однозначно определить, какой сотрудник сейчас выбран и, конечно, для удобства пользователя, ведь ему нет необходимости знать первичный ключ выбранного сотрудника. Что бы извлечь первичный ключ достаточно выполнить одну строчку

id := integer(Node.Data^);

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

Для реализации фильтрации сотрудников на форму был установлен компонент TEdit. Чтобы обновление найденных сотрудников происходило при каждом изменении значения данных в поле ввода, использовалось событие компонента OnChange. Пример обработчика можно увидеть на листинге 3.11. Фильтрация реализуется при помощи свойства Filter и Filtered компонента TSimpleDataSet. В свойстве Filter устанавливается значение фильтра, но фильтрация данных не происходит, для фильтрации и обновления набора данных, необходимо изменить значение свойства Filtered на True. Если же потребность в фильтрации пропадает, достаточно установить свойство Filtered в False.

Листинг 3.11 - Фильтрация данных

// настройка фильтра

case ComboBox1.ItemIndex of

0:

str := 'FAMILIA ';

1:

str := 'IMIA ';

2:

str := 'OTCHESTVO ';

end;

SimpleDataSet1.Filter := str + ' LIKE ' +

QuotedStr(Edit1.Text + '%');

SimpleDataSet1.Filtered := True;

// перестроение списка

if form2.Spisok = Alfavit then

showAlfavit(False, Asceding)

else

ShowMestoRaboti(False, Asceding);

Все отчеты приложения создаются в RaveReport. Для создания отчетов нам понадобятся TRvProject - основной компонент отчета, TRvSystem - для генерации отчетов и вывода их на принтер или в окно просмотра, а так же TRvDataSetConnection - для взаимодействия с источником данных, в нашем случае TSimpleDataSet. Соответственно, следует связать компонент TRvDataSetConnection с TSimpleDataSet, установив у него в свойстве DataSet значение SimpleDataSet1. Что касается компонента TRvProject, то его следует связать с компонентом RvSystem, для чего в свойстве Engine следует установить значение RvSystem1. Так же нас интересует свойство ProjectFile компонента TRvProject, сделано оно для выбора отчета, который будет в данный момент отображен. Для отчетов был создан отдельный каталог «Report», который находится в одном месте с приложением. Пример выполнения отчета можно увидеть на листинге 3.12

Листинг 3.12 - Выполнение отчета

RvProject1.Close;

if FileExists(ExtractFileDir(Application.ExeName) +

'\Report\Spisok.rav') then

begin

RvProject1.ProjectFile:=ExtractFileDir(Application.ExeName)

+ '\Report\Spisok.rav';

RvProject1.Execute;

end;

Как видно из листинга 3.12, что бы избежать ненужных ошибок, файлы отчетов ищутся в том же месте, где находится само приложение, если же файл отчета не будет найден, отчет просто не отобразиться.

3.4 Инструкция работы с приложением «Отдел кадров»

Все элементы управления приложением разбиты на три вкладки, рассмотрим их по порядку.

На первой вкладке, которую мы видим сразу при запуске приложения, находятся элементы управления соединения с базой данных, а так же элементы управления дочерними окнами, так как приложение разработано как MDI приложение.

По мере возможности выполнения того или иного действия, становятся доступными соответствующие элементы управления.

Для начала работы с базой данных, с ней необходимо соединиться. Для этого надо выбрать соответствующий пункт меню «Соединиться», после чего на экране появиться форма для соединения с базой данных.

При выборе тех или иных параметров соединения, процесс соединения может отличаться. К примеру, если отметить пункт «Больше не показывать это окно», то при последующем соединении с БД окно авторизации не отобразиться, и соединение будет произведено под сохраненными данными. Эти данные так же можно ввести вручную либо отменить сохранение данных, это можно сделать, вызвав настройки приложения.

Команда «Отсоединиться» наоборот, разрывает связь с базой данных. Остальные команды предназначены для управления дочерними формами, с помощь этих команд можно выполнить одно из действий:

· Расположить все дочерние окна каскадно;

· Расположить все дочерние окна по вертикали;

· Расположить все дочерние окна по горизонтали;

· Свернуть все дочерние окна;

· Закрыть все дочерние окна.

Вся работа с приложением сосредоточена на вкладке «Отдел кадров»

После соединения с базой данных появляется возможность просматривать, редактировать и удалять данные. Рассмотрим предоставленные возможности.

Чтобы просмотреть данные о сотрудниках предприятия, необходимо выбрать соответствующий пункт меню «Сотрудники». После чего на экране отобразиться окно приложения с одноименным названием «Сотрудники». Вместе с тем становятся доступными элементы управления списком сотрудников на панели инструментов приложения.

Для удобства пользования приложением отображение списка организованно не просто в виде списка, а автоматически происходит группировка по первой букве фамилии, как видно на рисунке 3.7. Но этого может оказаться мало, к примеру, мы знаем в каком цехе или отделении работает сотрудник, но не знаем его имени и фамилии, для этого можно организовать группировку по месту работу, выбрав «Список» - «По местам работы», либо нажав «CTRL+F2». Для перехода обратно к группировке по алфавиту придется нажать «CTRL+F1», либо же «Список» - «По алфавиту». Кроме этого, для облегчения поиска нужного сотрудника имеется возможность поиска сотрудника по одному из фильтров: фамилии, имени или отчеству.

Чтобы еще немного упростить работу пользователя, можно выбирать порядок вывода сотрудников в список: по возрастанию или убыванию. Так же можно одним нажатием развернуть либо свернуть все дерево в независимости от того, в каком виде отображается список сотрудников. Для этих команд также реализованы горячие клавиши. Как видно на рисунках 3.7 и 3.8, при выборе одного из сотрудников, справа появляется наиболее востребованная информация о нем, а именно:

· ФИО, пол, возраст, фото;

· Актуальные контактные данные;

· Текущее место работы.

Для более детальной информации о сотруднике придется открыть личную карточку сотрудника, сделать это можно несколькими способами:

· нажав на панели инструментов «Личная карточка»;

· двойным кликом левой клавиши мыши в дереве по его имени сотрудника;

· воспользоваться сочетанием клавиш «CTRL+L».

На экране появится окно с детальной информацией

Личная карточка открывается в модальном режиме, поэтому работу с приложением можно будет продолжить только после его закрытия.

Как видно из рисунка 3.9, вся информация разбита по категориям. Здесь можно найти всю имеющуюся информацию на сотрудника. Так же можно заметить, что у окна имеются свои элементы управления, сделаны они для редактирования имеющейся информации о сотруднике.

Для редактирования достаточно нажать на кнопку «Редактировать», которая представлена в виде пиктограммы карандаша, в зависимости от отображаемой категории данных откроются дополнительные элементы управления, либо данные будут помещены в редактируемые поля, как это продемонстрированно на рисунке 3.10.

Для сохранения или отмены редактирования информации организованны соответствующие элементы управления «Сохранить» и «Отменить», которые представлены в виде пиктограмм птички и крестика соответственно. Они становятся доступны только после открытия информации на редактирование.

Если же информацию нельзя сразу поместить в элементы редактирования, то для них организованны дополнительные элементы управления и вспомогательные окна.

На окнах присутствуют дополнительные элементы, а именно кнопки «Добавить», с пиктограммой «Плюс», добавлены они для оперативного добавления информации в базу данных, если такой еще не имеется

Теперь мы можем просматривать информацию и редактировать ее, теперь надо иметь возможность добавлять новых сотрудников в нашу базу данных. Для этих целей организован пошаговый мастер, для вызова необходимо выбрать «Мастер», либо воспользоваться сочетанием клавиш CTRL+M.

Идя по мастеру, необходимо обязательно заполнять поля помеченные «*», остальные же поля заполняются по желанию пользователя. Во избежание непонимания того или иного поля для заполнения, мастер оборудован интерактивными подсказками. Для их отображения достаточно подвести указатель к непонятному полю, и в нижней части окна, появиться текст, описывающий это поле. Поле, где отображаются подсказки, расположено в нижней части окна на каждом шаге мастера.

После выполнения всех шагов мастера, предлагается еще раз посмотреть всю введенную информацию о сотруднике

На данном шаге добавления пользователь еще раз проверяет всю информацию о новом сотруднике, если, вдруг, найдены ошибки или недочеты, пользователь может вернуться обратно к мастеру, выполнив щелчок по кнопке «Вернуться к мастеру», и исправить ошибку. После чего опять отобразить окно со всей имеющейся информацией. Если все верно, то по нажатию на кнопку «Создать» произойдет создание нового сотрудника, со всей введенной информацией. По окончанию создания сотрудника, в зависимости от исхода выполнения процедуры добавления, появиться окно подтверждающее создание нового сотрудника, либо же уведомление об ошибке.

Далее рассмотрим удаление сотрудников из базы данных. Для этого необходимо найти на панели управления приложением кнопку «Удалить», либо воспользоваться горячей клавишей «DEL». После чего пользователь увидит предупредительное окно с подтверждением удаления записи. Как уже говорилось выше, вместе с записью сотрудника будет удалена вся ему присущая информация.

В базе данных хранятся не только текущие работники завода, но так же и бывшие - пенсионеры. Для их отображения надо воспользоваться кнопкой «Пенсионеры». На экране приложения появится окно схожее с тем, в котором отображаются сотрудники, только с небольшим исключением, а именно, в окне с более востребованной информацией теперь выводиться не текущее место работы, а последнее и отображается дата выхода на пенсию.

Для того, что бы отправить сотрудника на пенсию, необходимо в личной карточке сотрудника, перейти на вкладку «Работа», открыть информацию для редактирования, после нажать на кнопку «Выход на пенсию», указать дату выхода на пенсию, и причину.

После сохранения данной информации, в нижней части личной карточки, появиться надпись с информацией о выходе на пенсию

После сохранения этих данных у сотрудника будет обновлена информация о последнем месте работы, а именно дата окончания будет указана предыдущая дню выхода н пенсию, а так же добавлена информация в таблицу пенсионеров.

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

На этом рассмотрение вкладки «Отдел кадров» почти завершено, осталась пару команда, одна из них «Печать». Команда предназначена для печати информации о сотрудниках. Она реализована в виде выпадающего списка

При выборе того или иного отчета на печать, пользователю предлагается на выбор список действий:

· Предварительный просмотр отчета;

· Вывод сразу на принтер, без предварительного просмотра;

· Сохранение в файл.

Это все то, что касалось одного сотрудника, теперь перейдем к последней команде «Отчеты» на вкладке «Отдел кадров». Здесь собраны все отчеты, которые касаются всех сотрудников предприятия. Команда также организованна как выпадающий список.

Рассмотрим самый интересный из всех этих отчетов «Сотрудники (с параметрами)». Перед выполнением отчета, на экран выводится окно с предварительной настройкой фильтра. Здесь пользователь может настроить фильтры по своему желанию, после чего нажать на кнопку «Ок», и на экран выведется отчет с его фильтрами. Если отчет пользователя не удовлетворит, или пользователь точно не знает, какие ему нужны параметры, он может снять галочку с пункта «Закрыть окно после выполнения отчета». Если она стоит, после закрытия отчета окна тоже закроется, и всю введенную информацию придется вводить заново. Что может быть не совсем удобно, если точно не определенны параметры отчета.

Создадим отчет со следующими параметрами:

· Место работы - АСУП

· Возраст - 18-30

После чего запустим его на выполнение, и на экране появиться отчет

На этом рассмотрение вкладки «Отдел кадров» закончено, можно переходить к последней вкладке «Справочники», которая носит больше справочную информацию, чем информативную, хотя вносить изменения в базу данных также имеется возможность.

На этой вкладке можно просматривать всю справочную информацию в базе данных, для этого есть пункт с одноименным название «Справочники».

Но не все справочники удобно просматривать в виде списка, к примеру, справочник «Место работы», на рисунке 3.28 (справа), имеет ссылку сам на себя, такой справочник удобнее просматривать в виде дерева, что в приложении и организовано. В таком же виде, в виде дерева, организован справочник «Населенные пункты», на рисунке 3.28 (слева). Как видно из рисунка 3.26, на вкладке «Справочники» присутствует группа элементов «Управление», она содержит следующие команды:

· Переход на первую строку справочника;

· Переход на предыдущую строку;

· Переход на следующую строку;

· Переход на последнюю строку;

· Обновить справочник;

· Добавить новую строку;

· Удалить строку;

· Редактировать строку;

· Сохранить изменения;

· Отменить сделанные изменения.

Организованны они для управления справочниками, которые отображаются в виде простого списка. Для справочников же, которые отображаются в виде дерева, имеются свои элементы управления, которые расположены в том же окне, что и деревья с информацией.

На этом рассмотрение всех вкладок приложения окончено. Если пользователю будет не понятно назначение той ли иной команды, можно просто подвести указатель к команде, и через некоторое время на экране появиться подсказка по данной команде

Окнами можно управлять и через эти вкладки, для этого необходимо вызвать контекстное меню вкладки, которое содержит следующие пункты:

· Свернуть;

· Развернуть;

· Восстановить;

· Закрыть.

серверный персонал клиент кадр

Заключение

В данной работе разработано клиент-серверное приложение "Отдел кадров". Для разработки приложение использовалась интегрированная среда разработки Delphi XE, и СУБД Oracle 11g r2. Главным преимуществом данной среды является быстрота разработки программного обеспечения, благодаря наличию визуальных средств проектирования приложения, таких, как формы и набор визуальных и не визуальных компонентов, обладающих богатым функционалом. СУБД Oracle была взята за основу за свою надежность, функциональность и гибкость.

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

Данное клиент-серверное приложение можно внедрять и использовать на любом предприятии, на котором есть желание автоматизировать работу отдела кадров.

Список использованных источников

1) Генник, Жд. Oracle SQL*Plus. Карманный справочник. 2-е издание. - СПб.: Питер. - 2004. - 189 с., ил.

2) Нанда, А., Фейерштейн, С. Oracle PL/SQL для администраторов баз данных. - Пер. с англ. - СПб: Символ-Плюс, 2008. - 496 с., ил.

3) Р. Гринвальд, Р. Стаковьяк, Жд. Стерн. Oracle 11g. Основы, 4-е издание. - Пер. с англ. - СПб.: Символ-Плюс, 2009. - 464 с., ил.

4) Наместников, А.М. Построение баз дынных в среде Oracle. Практический курс: Учеб. пособие для вузов. Ульяновск: УлГТУ, 2008. 118 с.

5) Культин, Н. Б. Основы программирования в Delphi XE. - СПб.: БХВ-Петербург, 2011. - 416 с.: ил. + CD-ROM - (самоучитель)

6) Осипов, Д.Л. Базы данных и Delphi. Теория и практика - СПб.: БХВ-Петербург, 2011. - 752 с.: ил. + DVD - (Профессиональное программирование)

7) Хомоненко, А.Д., Гофман, В.Э. Работа с базами данных в Delphi. - 3-е изд., перераб. и доп. - СПб.: БХВ-Петербург, 2005. - 640 с.: ил

8) Русскоязычный форум по программированию [Электронный ресурс] // Русскоязычный форум по программированию - 2000. - Режим доступа - http://www.sql.ru. - Дата доступа: 08.04.2013.

Приложения

Приложение А. Описание таблиц базы данных

Таблица A.1 - Таблица DOLSHNOST

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Varchar2

Название должности

Таблица A.2 - Таблица DOLSHNOST_PREFIX

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Varchar2

Название префикса должности

Таблица A.3 - Таблица DOLSHNOST_SUFIX

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NOMER

Number

Суффикс должности

Таблица A.4 - Таблица INVALIDNOST

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

ID_TIP_INVALIDNOSTI

Number

Id типа инвалидности сотрудника

ID_LICO

Number

Id сотрудника

DATA_POLUCHENIA

Date

Дата получения инвалидности

Таблица A.5 - Таблица KEM_VIDAN

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Varchar2

Название органа, который выдал паспорт

ID_OBLAST

Number

Id области, в которой выдали паспорт

Таблица A.6 - Таблица KONTAKTNIE_DANIE

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

ID_TIP_DANNIX

Number

Id типа контактных данных

DANNIE

Varchar2

Контактные данные

ID_LICO

Number

Id сотрудника

Таблица A.7 - Таблица MESTO_RABOTI

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Varchar2

Название места работы

ID_PODRAZDELENIE

Number

Id места работы

Таблица A.8 - Таблица LICO

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

FAMILIA

Varchar2

Фамилия сотрудника

IMIA

Varchar2

Имя сотрудника

OTCHESTVO

Varchar2

Отчество сотрудника

DATA_ROSHDENIA

Date

Дата рождения сотрудника

ID_POL

Number

Id пола сотрудника

ID_MESTO_ROSHDENIA

Number

Id места рождения сотрудника

ID_SROCH_SLUSHBA

Number

Id срочной служба

PHOTO

Blob

Фото сотрудника

Таблица A.9 - Таблица MESTO_SHITELSTVA

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

ID_NAS_PUNKTA

Number

Id населенного пункта

ID_ULICA

Number

Id улицы

DOM

Number

Номер дома

KVARTIRA

Number

Номер квартиры

KORPUS

Varchar2

Номер корпуса

DATE_ZASELENIA

Date

Дата заселения

DATE_VIPISKI

Date

Дата выписки

ID_TIP_MESTA_SH

Number

Id типа места жительства

ID_LICO

Number

Id сотрудника

Таблица A.10 - Таблица NASELENI_PUNKT

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Varchar2

Название населенного пункта

ID_TIP_NAS_PUNKTA

Number

Id типа населенного пункта

ID_RAEN

Number

Id района, в котором расположен населенный пункт

Таблица A.11 - Таблица OBLAST

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Название области

ID_STRANI

Number

Id страны, в которой расположена область

Таблица A.12 - Таблица POL

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Varchar2

Название пола

Таблица A.13 - Таблица OBRAZOVANIE

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

ID_LICO

Number

Id сотрудника

ID_UCH_ZAVEDENIA

Number

Id учебного заведения

DATA_OKONCHANIA

Date

Дата окончания

NOMER_DIPLOMA

Varchar2

Номер полученного диплома

ID_SPECIALNOST

Number

Id полученной специальности

DATA_POSTUPLENIA

Date

Дата поступления

Таблица A.14 - Таблица PASPORT

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

ID_LICO

Number

Id сотрудника

ID_TIP_PASPORTA

Number

Id типа паспорта

NOMER

Number

Номер паспорта

SERIA

Varchar2

Серия паспорта

ID_KEM_VIDAN

Number

Id кем выдан паспорт

DATA_VIDACHI

Date

Дата выдачи паспорта

DATA_OKONCHANIA

Date

Дата окончания действия паспорта

Таблица A.15 - Таблица PENSIONERI

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

ID_SOTR

Number

Id сотрудника

DATA_VIXODA

Date

Дата выхода на пенсию

ID_PRICHINA

Number

Id причина выхода на пенсию

Таблица A.16 - Таблица PRICHINA_VIXODA_NA_PENSIE

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Varchar2

Причина выхода на пенсию

Таблица A.17 - Таблица SROCHNAIA_SLUSHBA

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

ID_NAS_PUNKTA

Number

Id населенного пункта, где расположена часть

CHAST

Varchar2

Номер части

ID_ZVANIE

Number

Id звания по окончанию службы

DATA_NACHALA

Date

Дата начала служба

DATA_OKONCHANIA

Date

Дата окончания службы

Таблица A.18 - Таблица RABOTA

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

ID_DOLSHNOSTI

Number

Id должности

ID_DOLSH_PREF

Number

Id префикса должности

ID_DOLSH_SUF

Number

Id суффикса должности

ID_MESTO_RAB

Number

Id места работы

DATA_PRIEMA

Date

Дата приема на работу

DATA_OKONCHANIA

Date

Дата окончания работы

ID_SOTR

Number

Id сотрудника

Таблица A.19 - Таблица RAEN

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Varchar2

Название района

ID_OBL

Number

Id области, в которой находится район

Таблица A.20 - Таблица SPECIALNOST

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Varchar2

Название специальности по окончанию учебы

Таблица A.21 - Таблица STRANA

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Varchar2

Название страны

Таблица A.22 - Таблица TIP_INVALIDNOSTI

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Varchar2

Название типа инвалидности

Таблица A.23 - Таблица TIP_KONTAKT_DANNIX

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Varchar2

Название типа контактных данных

Таблица A.24 - Таблица TIP_MESTA_SHITELSTVA

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Varchar2

Название типа места жительства

Таблица A.25 - Таблица TIP_NAS_PUNKTA

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Varchar2

Название типа населенного пункта

Таблица A.26 - Таблица TIP_PASPORTA

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Varchar2

Название типа паспорта

Таблица A.27 - Таблица TIP_UCH_ZAVED

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Varchar2

Название типа учебного заведения

Таблица A.28 - Таблица UCHEBNOE_ZAVEDENIE

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Varchar2

Название учебного заведения

ID_NAS_PUNKT

Number

Id населенного пункта, где расположено учебное заведение

ID_TIP_ZAVEDENIA

Number

Id типа учебного заведения

Таблица A.29 - Таблица ULICA

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Varchar2

Название улицы

Таблица A.30 - Таблица ZVANIE

Название столбца

Тип столбца

Описание

ID

Number

Первичный ключ

NAZVANIE

Varchar2

Название звания по завершению срочной служба

Приложение Б. Модуль приложения Main.pas

unit Main;

interface

uses

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

Dialogs, Ribbon, ActnMenus, RibbonActnMenus, ImgList, ActnList, ActnMan,

ToolWin, ActnCtrls, RibbonLunaStyleActnCtrls, Tabs, Menus,

iniFiles, ScreenTips, StdActns, DBActns, DB, DBClient, SimpleDS, RpBase,

RpSystem, RpRave, RpDefine, RpCon, RpConDS, DBXOracle, SqlExpr,

RibbonSilverStyleActnCtrls, RibbonObsidianStyleActnCtrls, ComCtrls, FMTBcd;

type

TForm2 = class(TForm)

Ribbon1: TRibbon;

RibbonPage1: TRibbonPage;

ActionManager1: TActionManager;

ImageList_32_e: TImageList;

RibbonApplicationMenuBar1: TRibbonApplicationMenuBar;

RibbonQuickAccessToolbar1: TRibbonQuickAccessToolbar;

TabSet1: TTabSet;

AcConnect: TAction;

AcDisconnect: TAction;

AcSetting: TAction;

AcExit: TAction;

AcSotrudniki: TAction;

AcPol: TAction;

AcDolshnost: TAction;

RibbonGroup4: TRibbonGroup;

bla: TAction;

AcMasterAdd: TAction;

RibbonPage2: TRibbonPage;

RibbonGroup1: TRibbonGroup;

ImageList_16_e: TImageList;

ImageList_32_d: TImageList;

ImageList_16_d: TImageList;

RibbonGroup2: TRibbonGroup;

ScreenTipsManager1: TScreenTipsManager;

RibbonGroup3: TRibbonGroup;

WindowCascade1: TWindowCascade;

WindowTileHorizontal1: TWindowTileHorizontal;

WindowTileVertical1: TWindowTileVertical;

WindowMinimizeAll1: TWindowMinimizeAll;

WindowArrange1: TWindowArrange;

AcKartochka: TAction;

AcDelete: TAction;

RibbonGroup5: TRibbonGroup;

RibbonGroup6: TRibbonGroup;

AcPrint: TAction;

PopupMenu1: TPopupMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

AcVsiaRabota: TAction;

RibbonPage3: TRibbonPage;

acAlfavit: TAction;

acMestoRaboti: TAction;

acRefresh: TAction;

acSearch: TAction;

acFullExpand: TAction;

acFullCollapse: TAction;

acSortAsc: TAction;

acSortDesc: TAction;

acOProgramme: TAction;

RibbonGroup7: TRibbonGroup;

acPensioneri: TAction;

RibbonGroup8: TRibbonGroup;

DataSetFirst1: TDataSetFirst;

DataSetPrior1: TDataSetPrior;

DataSetNext1: TDataSetNext;

DataSetLast1: TDataSetLast;

DataSetInsert1: TDataSetInsert;

DataSetDelete1: TDataSetDelete;

DataSetEdit1: TDataSetEdit;

DataSetPost1: TDataSetPost;

DataSetCancel1: TDataSetCancel;

DataSetRefresh1: TDataSetRefresh;

acNaselPunkti: TAction;

acVseSotrudniki: TAction;

acReport: TAction;

acVseSotrudnikiParam: TAction;

acVsePensioneri: TAction;

acVozrastnoi: TAction;

SQLQuery1: TSQLQuery;

acDolshnostPref: TAction;

acDolshnostSuf: TAction;

acInvaidnost: TAction;

acKemVidan: TAction;

acPrichinaNaPensiu: TAction;

acSpecialnost: TAction;

acTipKontaktDanix: TAction;

acTipMestaShitelstva: TAction;

acTipNasPunkta: TAction;

acTipPasporta: TAction;

acTipUcZaved: TAction;

acUchZaved: TAction;

acUloca: TAction;

acZvanie: TAction;

acMestoRab: TAction;

procedure AcConnectExecute(Sender: TObject);

procedure AcDisconnectExecute(Sender: TObject);

procedure N1Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure PMTabSetPopup(Sender: TObject);

procedure TabSet1Change(Sender: TObject; NewTab: Integer; var AllowChange: Boolean);

procedure FormCreate(Sender: TObject);

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

procedure AcSettingExecute(Sender: TObject);

procedure AcExitExecute(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure AcSotrudnikiExecute(Sender: TObject);

procedure AcPolExecute(Sender: TObject);

procedure AcDolshnostExecute(Sender: TObject);

procedure AcGalleryButtonExecute(Sender: TObject);

procedure blaExecute(Sender: TObject);

procedure AcMasterAddExecute(Sender: TObject);

function FindForm(Caption: string): Boolean;

procedure AcDeleteExecute(Sender: TObject);

procedure AcKartochkaExecute(Sender: TObject);

procedure AcPrintExecute(Sender: TObject);

procedure AcVsiaRabotaExecute(Sender: TObject);

procedure ScreenTipsManager1ShowScreenTip(Manager: TObject; Action: TBasicAction;

var ShowScreenTip: Boolean);

procedure WindowArrange1Execute(Sender: TObject);

procedure acAlfavitExecute(Sender: TObject);

procedure acMestoRabotiExecute(Sender: TObject);

procedure Action1Execute(Sender: TObject);

procedure acRefreshExecute(Sender: TObject);

procedure acSearchExecute(Sender: TObject);

procedure acFullCollapseExecute(Sender: TObject);

procedure acFullExpandExecute(Sender: TObject);

procedure acSortAscExecute(Sender: TObject);

procedure acSortDescExecute(Sender: TObject);

procedure acOProgrammeExecute(Sender: TObject);

procedure acPensioneriExecute(Sender: TObject);

procedure acNaselPunktiExecute(Sender: TObject);

procedure acVseSotrudnikiExecute(Sender: TObject);

procedure acReportExecute(Sender: TObject);

procedure acVsePensioneriExecute(Sender: TObject);

procedure acVozrastnoiExecute(Sender: TObject);

procedure acVseSotrudnikiParamExecute(Sender: TObject);

procedure acDolshnostPrefExecute(Sender: TObject);

procedure acDolshnostSufExecute(Sender: TObject);

procedure acInvaidnostExecute(Sender: TObject);

procedure acKemVidanExecute(Sender: TObject);

procedure acPrichinaNaPensiuExecute(Sender: TObject);

procedure acSpecialnostExecute(Sender: TObject);

procedure acTipKontaktDanixExecute(Sender: TObject);

procedure acTipMestaShitelstvaExecute(Sender: TObject);

procedure acTipNasPunktaExecute(Sender: TObject);

procedure acTipPasportaExecute(Sender: TObject);

procedure acTipUcZavedExecute(Sender: TObject);

procedure acUchZavedExecute(Sender: TObject);

procedure acUlocaExecute(Sender: TObject);

procedure acZvanieExecute(Sender: TObject);

procedure acMestoRabExecute(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

var

CommandText: string;

Spisok: Integer;

ActiveForm: Integer;

end;

var

Form2: TForm2;

ini: TIniFile;

const

Alfavit = 0;

MestoRaboti = 1;

Asceding = 'asc';

Desceding = 'desc';

Sotrudnik = 0;

Pensioner = 1;

implementation

Uses Login, DataModule, Lico, Setting, Sotrudniki, Spravochnik, MasterAdd,

DataModuleReports, OProgramme, Pensioneri, SpravochnikNaselPunkt, Report,

SpravochnikMestoRaboti;

{$R *.dfm}

procedure TForm2.acAlfavitExecute(Sender: TObject);

begin

if form5.Panel3.Visible then

begin

form5.Panel3.Visible := False;

end;

if Spisok <> Alfavit then

form5.showAlfavit(True, Asceding);

end;

procedure TForm2.AcConnectExecute(Sender: TObject);

begin

// Соединение с БД

if Form4.RadioButton2.Checked then

begin

if FileExists(ExtractFileDir(Application.ExeName) + '\Auth.ini') then

begin

ini := TIniFile.Create(ExtractFileDir(Application.ExeName) + '\Auth.ini');

DataModule1.Connect(ini.ReadString('Auth', 'DB', ''), ini.ReadString('Auth', 'user', ''),

ini.ReadString('Auth', 'pas', ''));

Exit;

end

else

MessageBox(0, pWideChar('Файл не найден!'), 'Не норм', MB_ICONWARNING + MB_OK);

end;

try

Form1 := TForm1.Create(Application);

Form1.ShowModal;

finally

Form1.Free;

end;

end;

// удалить сотрудниками, со всеми ему подчиненными данными

procedure TForm2.AcDeleteExecute(Sender: TObject);

var

id: Integer;

begin

case ActiveForm of

Sotrudnik:

id := Sotrudniki.id;

Pensioner:

id := Pensioneri.id;

end;

if MessageBox(handle,

pWideChar(

'Вы действительно хотитет удалить сотрудника?'#10#13'Вместе с сотрудником будут удаленны всего его данные!'),

'Удаление записи', MB_ICONQUESTION + MB_OKCANCEL) = mrOk then

begin

with SQLQuery1 do

begin

SchemaName := DataModule1.Login;

Close;

SQL.Clear;

SQL.Add('delete from lico where id = :id');

ParamByName('id').AsInteger := id;

ExecSQL();

end;

if ActiveForm = Sotrudnik then

if Spisok = Alfavit then

form5.showAlfavit(True, Asceding)

else

form5.ShowMestoRaboti(True, Asceding)

else

form14.ShowPensioneri(True, Asceding);

end;

end;

procedure TForm2.AcDisconnectExecute(Sender: TObject);

begin

// Разрыв соединения с БД

DataModule1.Disconnect;

end;

function TForm2.FindForm(Caption: string): Boolean;

var

i: Integer;

begin

Result := False;

if TabSet1.Tabs.IndexOf(Caption) > -1 then

begin

for i := 0 to Form2.MDIChildCount - 1 do

if MDIChildren[i].Caption = Caption then

MDIChildren[i].Show;

Result := True;

end;

end;

procedure TForm2.AcDolshnostExecute(Sender: TObject);

begin

if not FindForm('Справочник - Должность') then

begin

CommandText := 'DOLSHNOST';

Form6 := TForm6.Create(Form2);

Form6.Caption := 'Справочник - Должность';

TabSet1.Tabs.AddObject(Form6.Caption, TObject(Form6));

TabSet1.TabIndex := TabSet1.Tabs.Count - 1;

end;

end;

procedure TForm2.acDolshnostPrefExecute(Sender: TObject);

begin

if not FindForm('Справочник - Должность преффикс') then

begin

CommandText := 'DOLSHNOST_PREFIX';

Form6 := TForm6.Create(Form2);

Form6.Caption := 'Справочник - Должность преффикс';

TabSet1.Tabs.AddObject(Form6.Caption, TObject(Form6));

TabSet1.TabIndex := TabSet1.Tabs.Count - 1;

end;

end;

procedure TForm2.acDolshnostSufExecute(Sender: TObject);

begin

if not FindForm('Справочник - Должность суффикс') then

begin

CommandText := 'DOLSHOST_SUFIX';

Form6 := TForm6.Create(Form2);

Form6.Caption := 'Справочник - Должность суффикс';

TabSet1.Tabs.AddObject(Form6.Caption, TObject(Form6));

TabSet1.TabIndex := TabSet1.Tabs.Count - 1;

end;

end;

procedure TForm2.AcExitExecute(Sender: TObject);

begin

Close;

end;

procedure TForm2.acFullCollapseExecute(Sender: TObject);

begin

case ActiveForm of

Sotrudnik:

form5.TreeView1.FullCollapse;

Pensioner:

form14.TreeView1.FullCollapse;

end;

end;

procedure TForm2.acFullExpandExecute(Sender: TObject);

begin

case ActiveForm of

Sotrudnik:

form5.TreeView1.FullExpand;

Pensioner:

form14.TreeView1.FullExpand;

end;

end;

procedure TForm2.AcGalleryButtonExecute(Sender: TObject);

begin

//

end;

procedure TForm2.acInvaidnostExecute(Sender: TObject);

begin

if not FindForm('Справочник - Тип инвалидности') then

begin

CommandText := 'TIP_INVALIDNOSTI';

Form6 := TForm6.Create(Form2);

Form6.Caption := 'Справочник - Тип инвалидности';

TabSet1.Tabs.AddObject(Form6.Caption, TObject(Form6));

TabSet1.TabIndex := TabSet1.Tabs.Count - 1;

end;

end;

procedure TForm2.AcKartochkaExecute(Sender: TObject);

begin

case ActiveForm of

Sotrudnik:

if form5.TreeView1.Selected.getFirstChild = nil then

try

Form3 := TForm3.Create(form5);

Form3.ShowModal;

finally

FreeAndNil(Form3);

end;

Pensioner:

if form14.TreeView1.Selected.getFirstChild = nil then

try

Form3 := TForm3.Create(form14);

Form3.ShowModal;

finally

FreeAndNil(Form3);

end;

end;

end;

procedure TForm2.acKemVidanExecute(Sender: TObject);

begin

if not FindForm('Справочник - Кем выдан паспорт') then

begin

CommandText := 'KEM_VIDAN';

Form6 := TForm6.Create(Form2);

Form6.Caption := 'Справочник - Кем выдан паспорт';

TabSet1.Tabs.AddObject(Form6.Caption, TObject(Form6));

TabSet1.TabIndex := TabSet1.Tabs.Count - 1;

end;

end;

procedure TForm2.AcMasterAddExecute(Sender: TObject);

begin

try

Form7 := TForm7.Create(nil);

Form7.ShowModal;

finally

FreeAndNil(Form7);

end;

end;

procedure TForm2.acMestoRabExecute(Sender: TObject);

begin

if form19 = nil then

begin

form19 := TForm19.Create(Application);

TabSet1.Tabs.AddObject(form19.Caption, TObject(form19));

TabSet1.TabIndex := TabSet1.Tabs.Count - 1;

end

else

form19.Show;

end;

procedure TForm2.acMestoRabotiExecute(Sender: TObject);

begin

if form5.Panel3.Visible then

begin

form5.Panel3.Visible := False;

end;

if Spisok <> MestoRaboti then

form5.ShowMestoRaboti(True, Asceding);

end;

procedure TForm2.acNaselPunktiExecute(Sender: TObject);

begin

if form17 = nil then

begin

form17 := TForm17.Create(Application);

TabSet1.Tabs.AddObject(form17.Caption, TObject(form17));

TabSet1.TabIndex := TabSet1.Tabs.Count - 1;

end

else

form17.Show;

end;

procedure TForm2.acOProgrammeExecute(Sender: TObject);

begin

try

Form12 := TForm12.Create(Form2);

Form12.ShowModal;

finally

FreeAndNil(Form12);

end;

end;

procedure TForm2.acPensioneriExecute(Sender: TObject);

begin

if form14 = nil then

begin

form14 := TForm14.Create(Application);

TabSet1.Tabs.AddObject(form14.Caption, TObject(form14));

TabSet1.TabIndex := TabSet1.Tabs.Count - 1;

end

else

form14.Show;

end;

procedure TForm2.AcPolExecute(Sender: TObject);

begin

if not FindForm('Справочник - Пол') then

begin

CommandText := 'POL';

Form6 := TForm6.Create(Form2);

Form6.Caption := 'Справочник - Пол';

TabSet1.Tabs.AddObject(Form6.Caption, TObject(Form6));

TabSet1.TabIndex := TabSet1.Tabs.Count - 1;

end;

end;

procedure TForm2.acPrichinaNaPensiuExecute(Sender: TObject);

begin

if not FindForm('Справочник - На пенсию') then

begin

CommandText := 'PRICHINA_VIXODA_NA_PENSIE';

Form6 := TForm6.Create(Form2);

Form6.Caption := 'Справочник - На пенсию';

TabSet1.Tabs.AddObject(Form6.Caption, TObject(Form6));

TabSet1.TabIndex := TabSet1.Tabs.Count - 1;

end;

end;

procedure TForm2.AcPrintExecute(Sender: TObject);

var

id: Integer;

begin

case ActiveForm of

Sotrudnik:

id := Sotrudniki.id;

Pensioner:

id := Pensioneri.id;

end;

with DataModule2 do

begin

SimpleDataSet_report.Close;

SimpleDataSet_report.DataSet.Close;

SimpleDataSet_report.Connection := DataModule1.SQLConnection1;

SimpleDataSet_report.DataSet.SchemaName := DataModule1.Login;

SimpleDataSet_report.DataSet.CommandText := 'select * from VW_REPORT where id = :id';

SimpleDataSet_report.DataSet.ParamByName('id').AsInteger := id;

SimpleDataSet_report.DataSet.Open;

SimpleDataSet_report.Open;

SimpleDataSet_report_2.Close;

SimpleDataSet_report_2.DataSet.Close;

SimpleDataSet_report_2.Connection := DataModule1.SQLConnection1;

SimpleDataSet_report_2.DataSet.SchemaName := DataModule1.Login;

SimpleDataSet_report_2.DataSet.CommandText :=

'select * from VW_KONTAKTI_SOTR where ID_LICO = :id';

SimpleDataSet_report_2.DataSet.ParamByName('id').AsInteger := id;

SimpleDataSet_report_2.DataSet.Open;

SimpleDataSet_report_2.Open;

SimpleDataSet_report_3.Close;

SimpleDataSet_report_3.DataSet.Close;

SimpleDataSet_report_3.Connection := DataModule1.SQLConnection1;

SimpleDataSet_report_3.DataSet.SchemaName := DataModule1.Login;

SimpleDataSet_report_3.DataSet.CommandText :=

'select ID_LICO, UCH_ZAVED, SPECIAL, DATA_POSTUPLENIA, DATA_OKONCHANIA, NOMER_DIPLOMA from VW_OBRAZOVANIE where id_lico = :id';

SimpleDataSet_report_3.DataSet.ParamByName('id').AsInteger := id;

SimpleDataSet_report_3.DataSet.Open;

SimpleDataSet_report_3.Open;

SimpleDataSet_report_4.Close;

SimpleDataSet_report_4.DataSet.Close;

SimpleDataSet_report_4.Connection := DataModule1.SQLConnection1;

SimpleDataSet_report_4.DataSet.SchemaName := DataModule1.Login;

SimpleDataSet_report_4.DataSet.CommandText :=

'select NAS_PUNKT, TIP_MESTA_SH, ULICA, KVARTIRA, KORPUS, DOM from VW_MESTO_SHITELSTVA where ID_LICO = :id and DATE_VIPISKI is null';

SimpleDataSet_report_4.DataSet.ParamByName('id').AsInteger := id;

SimpleDataSet_report_4.DataSet.Open;

SimpleDataSet_report_4.Open;

RvProject1.Close;

if FileExists(ExtractFileDir(Application.ExeName) + '\Report\Kartochka.rav') then

begin

RvProject1.ProjectFile := ExtractFileDir(Application.ExeName) + '\Report\Kartochka.rav';

RvProject1.Execute;

end

else

MessageBox(handle, pWideChar('Файл отчета не найден!'), 'Файл не найден',

MB_ICONWARNING + MB_OK);

end;

end;


Подобные документы

  • Разработка системы, базирующейся на протоколе LIMone, для обмена мгновенными сообщениями и пересылки файлов в процессе деловой переписки. Реализация системы в виде клиент-серверного приложения. Расчет экономических показателей программного продукта.

    дипломная работа [4,7 M], добавлен 22.08.2016

  • Сетевое программное обеспечение: общее понятие, содержание, функции. Этапы развития теории компьютерных сетей. Проектирование в среде программирования Borland Builder C++ клиент серверного приложения с использованием сокетов, листинг данной программы.

    курсовая работа [191,5 K], добавлен 07.01.2015

  • Многоуровневые архитектуры клиент–сервер. Диаграммы классов, реализующих уровни презентации, бизнес–логики и базы данных приложения. Словесное описание процесса выполнения транзакций. Создание, изменение и удаление хранимых процедур, их выполнение.

    курсовая работа [3,4 M], добавлен 23.03.2013

  • Разработка клиент-серверного приложения, позволяющего взаимодействовать друг с другом с использованием доступа к базам данных. Проектирование связи сервера с базой данных с помощью технологии ODBC. Разработка интерфейса программы, ее тестирование.

    курсовая работа [352,0 K], добавлен 24.08.2016

  • Разработка клиент-серверного приложения под управлением Windows на языке программирования Delphi, реализующего функции дистанционного обучения (тесты). Основная форма программы, которая состоит из меню, панели активации пользователя и панели чата.

    курсовая работа [4,3 M], добавлен 15.04.2019

  • Основные концепции разработки приложения в трёхуровневой архитектуре. Проектное решение, реализующее модель реляционной БД. Спецификация на разработку интерфейса. Описание выполнения транзакций прибытия и убытия судна. Инсталляционные файлы приложения.

    курсовая работа [4,0 M], добавлен 26.12.2011

  • Характеристика подходов к построению CRM-систем. Разработка клиент-серверного приложения, которое предоставляет возможность управления взаимоотношениями с клиентами на платформе ASP.NET Web Froms. Проработка некоторых аспектов безопасности CRM-систем.

    курсовая работа [686,2 K], добавлен 24.04.2015

  • Основные концепции разработки приложения в архитектуре MVVM. Проектирование базы данных, предназначенной для сбора информации о дорожно-транспортных происшествиях. Классификация и типы архитектуры "клиент–сервер", ее основные достоинства и недостатки.

    курсовая работа [4,1 M], добавлен 25.11.2015

  • Создание клиент-серверного приложения "Чат" с помощью среды визуальной разработки приложений Borland C++ Builder версии 6. Описание функциональности приложения: наличие клиент-серверной архитектуры, обмен короткими сообщениями, а также передача файлов.

    курсовая работа [302,0 K], добавлен 30.01.2012

  • Угрозы безопасности баз данных. Политика информационной безопасности предприятия в области использования сетевых ресурсов. Разработка и введение в эксплуатацию защищенного клиент-серверного приложения. Средства аутентификации объектов базы данных.

    дипломная работа [4,6 M], добавлен 21.02.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.