Разработка клиент-серверного приложения управления персоналом предприятия
Изучение истории достижений корпорации 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