Добавил:
Developer Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой Проект.docx
Скачиваний:
1
Добавлен:
30.12.2023
Размер:
2.12 Mб
Скачать

4.2 Разработка оконных форм для взаимодействия системы и пользователя

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

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

Рисунок 15 - Окно авторизации

После авторизации пользователь получает доступ к системе и данным, доступным ему, согласно должности.

Но в доступе может быть и отказано, если данные введены неверно; в примере на рисунке 16 изображён подобный сценарий.

Рисунок 16 - Ошибка авторизации

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

Рисунок 17 - Верхняя панель интерфейса программы

На рисунке 18 представлен пример интерфейса для ознакомления со списком сотрудников для пользователя «Бобров Дмитрий Ефимович». Данные берутся из базы данных и выводятся в графический интерфейс программы.

Рисунок 18 - Вывод списка сотрудников

На рисунке 19 изображён вывод таблицы «Объекты», содержащей информацию о строительных объектах: их название и адрес.

Рисунок 19 - Вывод списка объектов

Таким образом, выше был представлен ознакомительный графический интерфейс для работы с разрабатываемой АСУ строительными работами для строительной компании «Энком Ксм».

4.3 Листинги алгоритмов

Полные листинги SQL-кодов приведены в приложениях 6-10.

Далее рассмотрим лишь по несколько примеров каждого вида.

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

CREATE TABLE EMPLOYEE(

ID_Employee int not null,

Name_Employee varchar(50) not null,

birth_date date not null,

ID_Position int not null);

ALTER TABLE EMPLOYEE

ADD CONSTRAINT Employee_PK PRIMARY KEY (ID_Employee);

ALTER TABLE EMPLOYEE

ADD CONSTRAINT Position_FK FOREIGN KEY(ID_Position) REFERENCES POSITION;

CREATE Sequence EmplID increment by 1 start with 1;

Для добавления данных в каждую из таблиц были созданы процедуры. Созданные процедуры реализуют функции некоторых АРМов, заключающиеся в вводе данных в базу данных. Ниже пример процедуры для добавления нового сотрудника. Как можно заметить, процедура отслеживает, существует ли подобный сотрудник уже в системе, что защищает базу данных от дублирования данных. Бесконтрольное дублирование данных может привести через время к сбоям в работе системы, из-за чего данную проблему следует решать заранее.

CREATE OR REPLACE PROCEDURE NewEmployee

(

NEWNAME IN CHAR,

NEWBIRTHDATE IN DATE,

NEWPOS IN CHAR

)

AS

ROWCOUNT INTEGER;

NEWPOSID INTEGER;

CURSOR POSCURSOR IS

SELECT * FROM POSITION

WHERE Name_Position = NEWPOS;

BEGIN

SELECT COUNT(*) INTO ROWCOUNT

FROM EMPLOYEE

WHERE Name_Employee = NEWNAME AND

birth_date = NEWBIRTHDATE;

IF ROWCOUNT > 0 THEN

BEGIN

DBMS_OUTPUT.PUT_LINE ('The Employee is already in the database - no action taken');

RETURN;

END;

END IF;

FOR POSS IN POSCURSOR

LOOP

NEWPOSID := POSS.ID_Position;

END LOOP;

INSERT INTO EMPLOYEE

(ID_Employee, Name_Employee, birth_date, ID_Position)

VALUES

(EmplID.NEXTVAL, NEWNAME, TO_DATE(NEWBIRTHDATE, 'DD-MM-YYYY'), NEWPOSID);

DBMS_OUTPUT.PUT_LINE ('New Employee was added');

END;

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

exec NewEmployee ('Натхин Владимир Петрович', '18-03-1982', 'Инженер')

Помимо этого, также были созданы «представления», которые также являются реализациями функций АРМов, связанных с выводом информации или формированием отчётов. Код создания представления вывода данных о сотрудниках представлен ниже.

create view Employees as

select  

name_employee "ФИО сотрудника" ,

birth_date as "Дата рождения" ,

Name_Position as "Должность"

from

EMPLOYEE, POSITION

where POSITION.ID_Position = EMPLOYEE.ID_Position;

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

Примером вызова представления отображения сотрудников является рисунок 20.

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

Таким образом, в данном разделе были показаны лишь примеры листингов, полные коды помещены в приложения 6-10 соответственно порядку листингов данного раздела.