Разработка enterprise-приложения "Больница"

 

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«САМАРСКИЙ ГОСУДАРСТВЕННЫЙ АЭРОКОСМИЧЕСКИЙ

УНИВЕРСИТЕТ имени академика С.П. КОРОЛЕВА

(национальный исследовательский университет)»

Факультет информатики

Кафедра технической кибернетики





Пояснительная записка к курсовому проекту

по дисциплине «Технологии сетевого программирования»

Тема: «Разработка enterprise-приложения Больница»




Разработчики: Арискин И. А.

Ярычевская И.П.

Проверил:Белоусов А.А.

трехуровневая архитектура база данный

Задание


Разработать трехзвенную информационную систему на основе JavaEE-технологий.

Система должна предоставлять возможность просмотра и редактирования данных из базы данных, а также выполнять и показывать результаты запросов (виды запросов определяются на этапе создания системы). Всю работу пользователь системы производит через Web-интерфейс. Web-интерфейс осуществляет взаимодействие с SessionBeans, выполняющими запросы к объектам, работающим с базой данных.

Выбраны следующие аспекты выполнения проекта:

Реализация платформы JavaEE и СУБД - Glassfish_v.3.1 и Oracle 10g;

Предметная область - больница;технологии:

На Web-слое выбрана технология JSF, Servlets, PrimeFaces;

На бизнес-слое выбрана технология SessionBeans (EJB 3), Entity Persistence;

На слое данных выбрана технология JDBC.


Реферат


Курсовой проект: 52 c., 12 рисунков, 4 источник.


БАЗА ДАННЫХ, СЕССИОННЫЙ БИН, ДИАГРАММА КЛАССОВ, ENTERPRISE-ПРИЛОЖЕНИЕ, ORACLE, JSP, JDBC.

Работа посвящена разработке информационной системы на основе
JavaEE-технологий.
В результате работы реализована база данных описывающая предметную область и web-интерфейс для работы с этой базой данных.


Введение


С развитием компьютерных технологий человечество все в больших объемах использует компьютер для решения некоторых повседневных задач. Естественное удешевление компьютеров как таковых, а также компьютерных услуг, таких как интернет, повлекло за собой необходимость в разработке web приложений, удовлетворяющих нужды социума. Взрывное развитие enterprise технологий обеспечило жесткую конкуренцию на рынке программного обеспечения. Ведется множество споров по поводу пригодности некоторых языков программирования для тех или иных задач. В этом смысле хорошо показывает себя платформа Java EE, позволяя делать крупномасштабные, расширяемые enterprise приложения, соответствующие всем современным стандартам объектно-ориентированной архитектуры.

Цель данной работы продемонстрировать в работе некоторый стек технологий, который будет использоваться в создании трехслойного приложения. Трехслойное приложение будет разработано с использованием Java EE технологий. Также будут продемонстрирована одна из возможных архитектур enterprise-приложения при помощи UML-диаграмм ее частей. В качестве предметной области взята система управления больницей.


1. Структура базы данных


.1 Описание предметной области


На данном этапе нашей работе мы моделируем БД больницы. Кратко опишем данную предметную область.

Медицинское учреждение имеет несколько отделений, которые возглавляют ведущие специалисты больницы (заведующие). Каждый сотрудник прикреплен за каким-то одним отделением. Личные дела всех сотрудников ведет отдел кадров. Заработная плата служащего зависит от занимаемой должности (врачи разных специализаций получают одинаковую зарплату). На каждого впервые обратившегося за услугами в больницу гражданина заводится амбулаторная карта, которая выдается в регистратуре вместе с талоном на прием к специалисту. Амбулаторная карта во время посещения больницы находится у пациента. Когда пациент покидает больницу, он сдает её обратно в регистратуру. Талон выдается пациенту даже в случае поступления больного на «скорой помощи». В случае необходимости стационарного лечения с пациентом заключается договор. Договор это бумажная книжка, в которой фиксируются все события связанные с лечением больного. После выздоровления пациента, договор прикрепляется к амбулаторной карте. В данной больнице также имеется пункт сдачи донорской крови, который жестко следит за базой больных СПИДом. Каждое медицинское оборудование закреплено за каким-либо кабинетом или хранится на складе.


.2 Таблицы и атрибуты


Структура базы данных больницы представлена на рисунке 1.1.

Рисунок 1.1 - Структура базы данных


В таблице 1 представлено описание сущностей и атрибутов.


Таблица 1.1 - Описание сущностей и атрибутов

Таблица (краткое описание)АтрибутыОписание Отделение (Department) - содержит в себе сведения об отделениях больницыID_DepartИдентификационный номер отделенияNameНаименование Персонал (Workers) - содержит в себе ID каждого сотрудника больницы и ID отделения, к которому сотрудник относитсяID_workerИдентификационный номер работникаID_DepartИдентификационный номер отделенияЛичные данные (Pers_Data) - содержит в себе личные данные о каждом работникиFIO ФИО работникаBday Дата рожденияAdress Домашний адресPhone Контактный телефонID_worker Идентификационный номер работникаСлужебные данные (Work_Data) - содержит в себе все необходимые служебные данные работника. Рабочая должность может быть выражена как: врач, медсестра, заведующий отделения, санитар и т.д.ID_worker Идентификационный номер работникаPost Рабочая должностьSpecial Специализация врачаRoomNum - номер кабинета сотрудникаНомер кабинета сотрудникаЗарплата (Money) - содержит в себе данные о зарплате. В нашей больнице зарплата сотрудника зависит от его должности, т.е., например, все врачи получают одинаковую зарплатуPost Рабочая должностьMoney Размер зарплатыКлиенты (Clients) - содержит в себе данные о всех клиентах, хоть раз приходивших в больницуInsurNum № страхового полисаFIO ФИО клиентаBday Дата рожденияAdress Домашний адресPhone Контактный телефонТалоны (Talons) - таблица регистратурыID_talon - Идентификационный номер талонаInsurNum № страхового полисаID_worker Идентификационный номер врачаDate _T Дата приемаTime_ T Время приемаАнализы (Analysis) - таблица, хранящая результаты анализов клиентовInsurNum № страхового полисаID_An Идентификационный номер анализаDate_An Дата сдачи анализаResult Результат анализаТип анализа (TypeAn) - содержит в себе описания анализовID_An Идентификационный номер анализаName Наименование анализаExpDate Срок годности анализаДоноры (Donors) - содержит в себе клиентов, которые хоть раз приходили сдавать донорскую кровь в нашу больницу.InsurNum № страхового полисаBloodGr Группа крови клиентаLastDate Дата последней сдачи кровиCount Количество сдачьБольные СПИДом (AIDS_patients) - содержит данные о клиентах, больных СПИДомInsurNum № страхового полисаStage Стадия заболеванияСтационар (Hospital) - содержит данные о стационарных больныхContractNum Номер договора, заключенного пациентом с больницейInsurNum № страхового полисаID_worker Идентификационный номер лечащего врачаDiagnosis Диагноз клиентаDataSt Дата поступленияDataFin Дата выпискиHouseNum Номер палаты, где лежит клиентПалаты (Houses) - учет всех палат для стационарных больныхHouseNum Номер палатыID_Depart Идентификационный номер отделения, к которому относится данная палатаCountPlaceЧисло мест в палатеКабинеты (Rooms) - учет всех рабочих кабинетов, находящихся в больницеRoomNum Номер кабинетаID_Depart Идентификационный номер отделения, к которому относится кабинетМед. Оборудования (Med_Dev) - содержит в себе сведения обо всем медицинском оборудовании, хранящемся в больницеSerNum Производственный серийный номер медицинского оборудованияNameНаименование оборудованияCurRep Текущий ремонт оборудованияRoomNum Номер кабинета, где находится оборудование

1.3 Структура enterprise - приложения


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


Рисунок 2.1 - Диаграмма компонентов


Структура слоя данных

Структура слоя данных показана на рисунке 2.2. Здесь определены сущности и показаны взаимодействия между ними. Entity-классы реализуют доменный слой приложения, т.е. представление сущностей базы данных в виде классов ООП. Они отвечают за представление таблиц в виде классов, реализуют методы доступа к полям - ячейкам таблицы. Здесь определены классы, которые отвечают представлению таблиц внутри enterprise-приложения, реализуют методы доступа к полям - элементам кортежей, т.е. в каждом классе реализованы методы get() и set() для всех полей. Так же в каждом классе переопределены методы equals(), hashCode() и toString().

Рисунок 2.2 - Структура слоя данных


Таблица 2.1 - Описание классов слоя данных

КлассСущностьПоле классаАтрибут сущностиПримечаниеAidsPatientsAIDS_patients StageStage insurnumInsurNum clients Ссылка на объект типа Clients, необходима для получения данных о клиентеserialVersionUIDAnalysisPKAnalysis Вспомогательный класс для описания составного первичного ключаdateAnDate_AnidAnID_AninsurnumInsurNumAnalysisAnalysis analysisPK составной первичный ключ, объект типа AnalysisPK resultResult typeAnType_An clientsInsurNumВместо поля InsurNum в классе используется ссылка на объект типа Clients, который соответствует данному объекту Analysis. При этом смысл поля класса и атрибута сущности совпадает.serialVersionUIDTypeAnType_An idAnID_An nameName expdateExpDate analysisCollection Коллекция объектов класса Analysis, используется для реализации связи один ко многим между записями таблиц Type_An и Analysis. serialVersionUIDClientsClients fio FIO insurnumInsurNum bdayBDay adressAdress phonePhone hospitalCollection Коллекция объектов класса Hospital, используется для реализации связи один ко многим между записями таблиц Clients и Hospital. analysisCollectionАналогично полю hospitalCollection; в классе тип поля Collection<Analysys>.aidsPatients Ссылка на объект типа AidsPatients, необходима для получения данных о клиентеtalonsCollectionАналогично полю hospitalCollection; в классе тип поля Collection<Talons>.donorsСсылка на объект типа Donors, необходима для получения данных о клиентеserialVersionUIDDepartmentDepartment idDepartID_Depart nameName roomsCollection Коллекция объектов класса Rooms, используется для реализации связи один ко многим между записями таблиц Department и Rooms. housesCollection Аналогично полю hospitalCollection; в классе тип поля Collection<Houses>. workersCollection Аналогично полю hospitalCollection; в классе тип поля Collection<Workers>.serialVersionUIDHousesHouses housenumHouseNum countplace CountPlace hospitalCollection Коллекция объектов класса Hospital, используется для реализации связи один ко многим между записями таблиц Houses и Hospital. idDepart ID_DepartВместо поля ID_Depart в классе используется ссылка на объект типа Houses, который соответствует данному объекту Department. При этом смысл поля класса и атрибута сущности совпадает. serialVersionUID MoneyMoney postPost moneyMoney workDataCollection Коллекция объектов класса WorkData, используется для реализации связи один ко многим между записями таблиц Money и WorkData. serialVersionUID DonorsDonors bloodgrBloodGr lastdateLastDate countCount insurnumInsurNum clients Ссылка на объект типа Clients, необходима для получения данных о клиенте serialVersionUID HospitalHospital contractnum ContractNum diagnosis Diagnosis idWorkerID_Worker datestDateSt datefinDateFin housenumHouseNumВместо поля HouseNum в классе используется ссылка на объект типа Houses, который соответствует данному объекту Hospital. При этом смысл поля класса и атрибута сущности совпадает. insurnumInsurNum Вместо поля InsurNum в классе используется ссылка на объект типа Clients, который соответствует данному объекту Hospital. При этом смысл поля класса и атрибута сущности совпадает. serialVersionUID TalonsWorker_accounting idTalonID_Talon dateTDate_T timeTTime_T idWorkerID_Worker Вместо поля ID_worker в классе используется ссылка на объект типа Workers, который соответствует данному объекту Talons. При этом смысл поля класса и атрибута сущности совпадает. insurnumInsurNum Вместо поля InsurNum в классе используется ссылка на объект типа Clients, который соответствует данному объекту Talons. При этом смысл поля класса и атрибута сущности совпадает. serialVersionUID PersDataPers_Data fio FIO idWorkerID_Worker bdayBDay adressAdress workersСсылка на объект типа Workers, необходима для получения данных о клиентеserialVersionUIDMedDevMed_Dev sernumSerNum nameName serialVersionUIDcurrepCurReproomnumRoomNumВместо поля RoomNum в классе используется ссылка на объект типа Rooms, который соответствует данному объекту MedDev. При этом смысл поля класса и атрибута сущности совпадает.WorkersWorkers idWorkerID_Worker serialVersionUID hospitalCollectionWorker_id_worker Коллекция объектов класса Hospital, используется для реализации связи один ко многим между записями таблиц Workers и Hospital. persData Ссылка на объект типа PersData, необходима для получения данных о клиентеtalonsCollectionАналогично полю hospitalCollection; в классе тип поля Collection<Talons>.workDataСсылка на объект типа WorkData, необходима для получения данных о клиентеidDepartID_DepartВместо поля ID_Depart в классе используется ссылка на объект типа Department, который соответствует данному объекту Workers. При этом смысл поля класса и атрибута сущности совпадает.WorkDataWork_Data specialSpecial workersСсылка на объект типа Workers, необходима для получения данных о клиенте idWorkerID_Worker roomnumRoomNumВместо поля RoomNum в классе используется ссылка на объект типа Rooms, который соответствует данному объекту WorkData. При этом смысл поля класса и атрибута сущности совпадает.postPostВместо поля Post в классе используется ссылка на объект типа Money, который соответствует данному объекту WorkData. При этом смысл поля класса и атрибута сущности совпадает.serialVersionUIDRoomsRooms roomnumRoomNummedDevCollectionКоллекция объектов класса MedDev, используется для реализации связи один ко многим между записями таблиц Rooms и MedDev.idDepart ID_DepartВместо поля ID_Depart в классе используется ссылка на объект типа Rooms, который соответствует данному объекту Department. При этом смысл поля класса и атрибута сущности совпадает.workDataCollectionАналогично полю medDevCollection; в классе тип поля Collection<WorkData>.serialVersionUID

Структура бизнес - слоя

Основные бизнес-функции для сущностей предметной области инкапсулируют в себе сессионные бины, диаграммы которых представлены на рисунке 2.3.

На данном слое между классами установлено отношение агрегирования. Агрегируемый класс бин отвечает за соединение с базой данных и хранит в своем поле это соединение. В нем реализована функция доступа к данному полю.

Реализовано несколько классов бинов, реализующих Remote-интерфейсы и отвечают за работу необходимых операций с данными, а именно: добавление, удаление, редактирование записей (EditBean), проверка на наличие информации (ECheckingBean), получение данных(EGetObjectBean, ERepository), а так же обеспечивают возможность некоторых специализированных запросов (EQueryReportBean). интерфейсы выбраны для возможности разнести отдельные элементы по разным компьютерам для распределения нагрузки. Далее будет приведено описание классов и использующихся методов.


Рисунок 2.3 - Диаграмма классов бизнес слоя


Ниже будут более подробно рассмотрены основные методы компонентов на примере класса EditBean. Этот класс предназначен для редактирования таблиц базы данных посредствам EntityManager, который используется в следующих методах:(Object ob) - добавление строки в таблицу базы данных;(Object ob) - редактирование строки в таблице базы данных;

deleteTalon(Integer idTalon)(String insurnum)(String t)(String insurnum)(String insurnum) - удаление строки из таблиц(AnalysisPK analysisPK)(String post)(Integer contractnum)(Integer sernum)

Структура web - слоя

Web-слой можно условно разделить на три основных страницы:

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

Страница профиля - на ней пользователь может выбрать пункт меня основного функционала системы, доступного для данного профиля;

Страница использования функционала системы - здесь имеется ввиду не одна страница, а совокупность нескольких страниц, соединенных между собой, которые открываются посредствам непосредственно работать с системой;

Весь web-слой сделан с использованием технологии JSF. Все страницы взаимодействуют с нужными им Session Beans. На страницах ввода информации предусмотрен контроль ввода с удобными и понятными сообщениями об ошибках, а так же с выделением полей, в которых обнаружены некорректные данные.


2. Интерфейс пользователя


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

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

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

Все записи в таблицах можно редактировать, нажав на значок (рисунок 3.7 - красный круг), или удалить, нажав на соответствующую кнопку.

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

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

Заключение


В результате работы было спроектировано и реализовано трехслойное enterprise-приложение, работающее с базой данных больницы. Визуализация архитектуры была реализована с помощью UML схем, позволяющих наглядно продемонстрировать основные структурные особенности трехслойных приложений.

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


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


Логанова Л.В. - Лекции по курсу «Базы данных и экспертные системы»

Дэвид Гери, Кей Хорстман - JavaServer Faces. Библиотека профессионала, 3-е изд.: Пер.с англ. - М.: ООО «И.Д. Вильямс», 2011. - 544 с.

Кевин Луни, Боб Брила и эксперты TUSC - Oracle Datadase 10g. Настольная книга администратора баз данных, изд. «Лори», 2008. - 377с.

Т. Коннолли, К.Бегг - Базы данных. Проектирование, реализация и сопровождение. Теория и практика, 3-е изд.: Пер.с англ. - М.: ООО «И.Д. Вильямс», 2003. - 1440с.


Приложение А . SQL - скрипты создания таблиц


CREATE TABLE AIDS_patients (Stage VARCHAR2(10) ,InsurNum VARCHAR2(12) NOT NULL) TABLE AIDS_patients CONSTRAINT "PK_AIDS_patients" PRIMARY KEY ( InsurNum );TABLE Analysis

(Result VARCHAR2 (15), _An DATE NOT NULL , _An VARCHAR2(15) NOT NULL , VARCHAR2(12) NOT NULL );TABLE Analysis CONSTRAINT "Analysis_PK" PRIMARY KEY ( Date_An, ID_An, InsurNum ) ;TABLE Clients

(FIO VARCHAR2 (60), VARCHAR2(12) NOT NULL , DATE , VARCHAR2 (50), VARCHAR2(14));TABLE Clients CONSTRAINT "Clients_PK" PRIMARY KEY ( InsurNum ) ;TABLE Department

(ID_Depart NUMBER(6) NOT NULL , VARCHAR2 (50));TABLE Department CONSTRAINT "Department_PK" PRIMARY KEY ( ID_Depart ) ;TABLE Donors

(BloodGr VARCHAR2(15) , DATE , NUMBER (3), VARCHAR2(12) NOT NULL);TABLE Donors CONSTRAINT PK_Donors PRIMARY KEY ( InsurNum ) ;TABLE Hospital

( ContractNum NUMBER (6) NOT NULL , VARCHAR2(60) , DATE , DATE , NUMBER (3) NOT NULL , _worker NUMBER (6) NOT NULL , VARCHAR2 (12) NOT NULL);TABLE Hospital CONSTRAINT "Hospital_PK" PRIMARY KEY ( ContractNum ) ;TABLE Houses

(HouseNum NUMBER (3) NOT NULL , NUMBER (2), _Depart NUMBER (6) NOT NULL);TABLE Houses CONSTRAINT "Houses_PK" PRIMARY KEY ( HouseNum ) ;TABLE Med_Dev

(SerNum NUMBER (6) NOT NULL , VARCHAR2 (30), DATE , NUMBER (3) NOT NULL);TABLE Med_Dev CONSTRAINT "Med_Dev_PK" PRIMARY KEY ( SerNum ) ;TABLE Money

(Post VARCHAR2(35) NOT NULL , NUMBER (5));TABLE Money CONSTRAINT "Money_PK" PRIMARY KEY ( Post ) ;TABLE Pers_Data

(FIO VARCHAR2 (60), DATE , VARCHAR2 (50), VARCHAR2(14), _worker NUMBER (6) NOT NULL);TABLE Pers_Data CONSTRAINT "Pers_Data_PK" PRIMARY KEY ( ID_worker ) ;TABLE Rooms

(RoomNum NUMBER (3) NOT NULL , _Depart NUMBER (6) NOT NULL);TABLE Rooms CONSTRAINT "Rooms_PK" PRIMARY KEY ( RoomNum ) ;TABLE Talons

(ID_talon NUMBER(6) NOT NULL , _T DATE , _T VARCHAR(6), _worker NUMBER (6) NOT NULL , VARCHAR2 (12) NULL);TABLE Talons CONSTRAINT "Talons_PK" PRIMARY KEY ( ID_talon ) ;TABLE Type_An

(ID_An VARCHAR2 (15) NOT NULL , VARCHAR2 (60), VARCHAR2 (30));TABLE Type_An CONSTRAINT "Type_An_PK" PRIMARY KEY ( ID_An ) ;TABLE Work_Data

(ID_Manager NUMBER (6), VARCHAR2 (20), _worker NUMBER (6) NOT NULL , VARCHAR2 (35) NOT NULL , NUMBER (3) NOT NULL);TABLE Work_Data CONSTRAINT "Work_Data_PK" PRIMARY KEY ( ID_worker ) ;TABLE Workers

(ID_worker NUMBER (6) NOT NULL , _Depart NUMBER (6) NOT NULL, varchar2 (15) not null);TABLE Workers CONSTRAINT "Workers_PK" PRIMARY KEY ( ID_worker ) ;TABLE Work_Data CONSTRAINT Relation_10 FOREIGN KEY

(RoomNum ) REFERENCES Rooms ( RoomNum );TABLE Talons CONSTRAINT Relation_13 FOREIGN KEY

( InsurNum ) REFERENCES Clients ( InsurNum ) ON DELETE set null ;TABLE Houses CONSTRAINT Relation_15 FOREIGN KEY

( ID_Depart ) REFERENCES Department ( ID_Depart ) ON DELETE CASCADE;TABLE Hospital CONSTRAINT Relation_16 FOREIGN KEY

( HouseNum ) REFERENCES Houses ( HouseNum) ;TABLE Hospital CONSTRAINT Relation_17 FOREIGN KEY

( InsurNum ) REFERENCES Clients ( InsurNum ) ON DELETE CASCADE;TABLE Med_Dev CONSTRAINT Relation_18 FOREIGN KEY

( RoomNum ) REFERENCES Rooms ( RoomNum ) ;TABLE Talons CONSTRAINT Relation_1 FOREIGN KEY

( ID_worker ) REFERENCES Workers ( ID_worker ) ;TABLE Hospital CONSTRAINT Relation_19 FOREIGN KEY

( ID_worker ) REFERENCES Workers ( ID_worker ) ;TABLE Donors CONSTRAINT Relation_21 FOREIGN KEY

( InsurNum ) REFERENCES Clients ( InsurNum ) ON DELETE CASCADE ;TABLE AIDS_patients CONSTRAINT Relation_32 FOREIGN KEY

( InsurNum ) REFERENCES Clients ( InsurNum ) ON DELETE CASCADE ;TABLE Analysis CONSTRAINT Relation_33 FOREIGN KEY

( InsurNum ) REFERENCES Clients ( InsurNum ) ON DELETE CASCADE ;TABLE Analysis CONSTRAINT Relation_34 FOREIGN KEY

( ID_An ) REFERENCES Type_An ( ID_An ) ON DELETE CASCADE;TABLE Workers CONSTRAINT Relation_4 FOREIGN KEY

( ID_Depart ) REFERENCES Department ( ID_Depart ) ON DELETE CASCADE ;TABLE Work_Data CONSTRAINT Relation_5 FOREIGN KEY

( ID_worker) REFERENCES Workers ( ID_worker ) ON DELETE CASCADE ;TABLE Pers_Data CONSTRAINT Relation_7 FOREIGN KEY

( ID_worker ) REFERENCES Workers ( ID_worker ) ON DELETE CASCADE ;TABLE Work_Data CONSTRAINT Relation_8 FOREIGN KEY

( Post ) REFERENCES Money ( Post ) ;TABLE Rooms CONSTRAINT Relation_9 FOREIGN KEY

( ID_Depart ) REFERENCES Department ( ID_Depart ) ON DELETE CASCADE ;

Приложение Б. SQL - скрипты пользовательских запросов


. Определить доноров, сдававших кровь более одного раза в текущем году.

SELECT fioclients,talons,donors clients.insurnum=talons.insurnum donors.insurnum=talons.insurnum talons.date_t IN(date_time talons TRUNC(talons.date_t,'year')= TRUNC(sysdate,'Year'))BY fioCOUNT(*)>1

2. Определить местонахождение больного (отделение, палата).

SELECT hospital.housenum,department.nameclients,houses,department,hospital

WHERE clients.fio='Радо Анастасия Александровна'

AND hospital.insurnum =clients.insurnumhospital.housenum=houses.housenum houses.id_depart=department.id_depart

3. Самый результативный врач за некоторую дату

SELECT pers_data.fiopers_data,talons talons.date_t='2.04.12'pers_data.id_worker=talons.id_workerBY fioCOUNT(*) = (MAX(COUNT(fio))

FROM pers_data,talons

WHERE talons.date_t='2.04.12'

AND pers_data.id_worker=talons.id_worker

GROUP BY fio)

. Определить свободные палаты в некотором отделении.

SELECT distinct houses.housenumhouses, department,hospital, (housenum,COUNT(housenum) count hospital BY housenum) s(houses.housenum NOT IN(housenum hospital) (houses.countplace>s.count and s.housenum=houses.housenum))houses.id_depart= department.id_depart

AND department.name='Кардиологическое'

. Определить местонахождение некоторого оборудования.

SELECT Med_dev.roomnum,department.namerooms,med_dev,department med_dev.name='Кардиовизор'med_dev.roomnum =rooms.roomnumrooms.id_depart=department.id_depart

6. Определить количество мест по отделениям.

SELECT department.name, SUM(houses.countplace)department,houses houses.id_depart=department.id_depart

GROUP BY department.name

. Определить количество больных по отделениям за прошедший год.

SELECT department.name, COUNT(hospital.insurnum)department,hospital,clients,houseshospital.housenum=houses.housenumhouses.id_depart=department.id_departTRUNC(hospital.datest,'year')= TRUNC(sysdate,'Year')hospital.insurnum = clients.insurnumBY department.name

8. Количество медоборудования по отделениям.department.name, COUNT(med_dev.sernum)

FROM department,med_dev,roomsmed_dev.roomnum=rooms.roomnumrooms.id_depart=department.id_depart

GROUP BY department.name

. Вывести перечень сотрудников некоторого отделения.

SELECT pers_data.fio, pers_data.id_workerdepartment,pers_data,workersdepartment.name = 'Донорское'workers.id_depart=department.id_departpers_data.id_worker=workers.id_worker

10. Расписание лечения больных некоторого отделения.

SELECT talons.time_t,clients.fio as fio_client, pers_data.fio as fio_workerdepartment, workers, talons, clients, pers_datadepartment.name='Кардиологическое'department.id_depart = workers.id_departworkers.id_worker=talons.id_workertalons.date_t = Trunc(sysdate)talons.insurnum = clients.insurnumpers_data.id_worker=talons.id_worker

11. Список больных с указанием палаты, которым сегодня надо сдавать кровь.

SELECT clients.fio, hospital.housenumanalysis, hospital, clientshospital.insurnum = analysis.insurnumclients.insurnum = hospital.insurnumhospital.datefin >=TRUNC(sysdate)analysis.date_an = TRUNC(sysdate)(id_an='K1' OR id_an='K2' OR id_an='K3' OR id_an='K4')

12. Определить фонд з/п по отделениям.

SELECT department.name, SUM(money.money) department, work_data,workers, money department.id_depart=workers.id_depart workers.id_worker=work_data.id_workermoney.post=work_data.post

GROUP BY department.name



Приложение В. Исходный код некоторых модулей


// Класс MedDeviceBeanmanagerbean.headnurse;entityclass.MedDev;interfacebean.IEditBean;interfacebean.IRepository;java.io.Serializable;java.util.List;javax.ejb.EJB;javax.ejb.EJBException;javax.faces.application.FacesMessage;javax.faces.bean.ManagedBean;javax.faces.bean.SessionScoped;javax.faces.context.FacesContext;org.primefaces.event.RowEditEvent;

@ManagedBean(name = "medDevice")

@SessionScopedclass MedDeviceBean implements Serializable {

@EJBIRepository reposit;

@EJBIEditBean edit;MedDev medDev = new MedDev();List<MedDev> medDevs;MedDev selectDevice;void delete() {{.deleteMedDev(selectDevice.getSernum());();

} catch (EJBException ex) {.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Рействия РЅРµ корректны!", "РџРѕ этому РЅРµ РјРѕРіСѓС‚ быть выполнены.")); } }void onEditRow(RowEditEvent event) {{obj = event.getObject();(obj instanceof MedDev) {w = (MedDev) obj;.edit(w);(); }

} catch (EJBException ex) {.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Рействия РЅРµ корректны!", "РџРѕ этому РЅРµ РјРѕРіСѓС‚ быть выполнены.")); } }MedDev getSelectDevice() {selectDevice; }void setSelectDevice(MedDev selectDevice) {.selectDevice = selectDevice; }void add() {{.add(medDev);= new MedDev();();

} catch (EJBException ex) {.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Рействия РЅРµ корректны!", "РџРѕ этому РЅРµ РјРѕРіСѓС‚ быть выполнены.")); } }MedDev getMedDev() {medDev; }List<MedDev> getMedDevs() {(medDevs == null) {(); }medDevs; }void setMedDevs(List<MedDev> medDevs) {.medDevs = medDevs; }void update() {{= reposit.giveAllMedDevs();

} catch (EJBException ex) {.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Рействия РЅРµ корректны!", "РџРѕ этому РЅРµ РјРѕРіСѓС‚ быть выполнены.")); } }}

// Класс HospitalBeanmanagerbean.headnurse;entityclass.Hospital;interfacebean.IEditBean;interfacebean.IRepository;java.io.Serializable;java.util.Calendar;java.util.GregorianCalendar;java.util.List;javax.ejb.EJB;javax.ejb.EJBException;javax.faces.application.FacesMessage;javax.faces.bean.ManagedBean;javax.faces.bean.SessionScoped;javax.faces.context.FacesContext;org.primefaces.event.RowEditEvent;

@ManagedBean(name = "hospitalBean")

@SessionScopedclass HospitalBean implements Serializable {

@EJBIRepository reposit;

@EJBIEditBean edit;Hospital hospital = new Hospital();Hospital selectHos;List<Hospital> hospitals;void onEditRow(RowEditEvent event) {{obj = event.getObject();(obj instanceof Hospital) {w = (Hospital) obj;(w.getDatefin() != null) {.setHousenum(null); }.edit(w);(); }

} catch (EJBException ex) {.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Рействия РЅРµ корректны!", "РџРѕ этому РЅРµ РјРѕРіСѓС‚ быть выполнены.")); } }void delete() {{.deleteHospital(selectHos.getContractnum());();

} catch (EJBException ex) {.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Рействия РЅРµ корректны!", "РџРѕ этому РЅРµ РјРѕРіСѓС‚ быть выполнены.")); } }void add() {{cal = new GregorianCalendar();.setDatest(cal.getTime());.add(hospital);= new Hospital();();

} catch (EJBException ex) {.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Рействия РЅРµ корректны!", "РџРѕ этому РЅРµ РјРѕРіСѓС‚ быть выполнены.")); } }void update() {{= reposit.giveAllHospitals();

} catch (EJBException ex) {.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Рействия РЅРµ корректны!", "РџРѕ этому РЅРµ РјРѕРіСѓС‚ быть выполнены.")); } }Hospital getHospital() {hospital; }List<Hospital> getHospitals() {(hospitals == null) {(); }hospitals; }void setHospital(Hospital hospital) {.hospital = hospital; }Hospital getSelectHos() {selectHos; }void setSelectHos(Hospital selectHos) {.selectHos = selectHos; }}

//Страница hospitaladd

<?xml version='1.0' encoding='UTF-8' ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<#"justify">1.


Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «САМАРСКИЙ ГОСУДАРСТВЕННЫЙ АЭРОКОСМИЧЕСКИЙ

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ