Курсовая 5 класс. Мой курсовой БД. 1 Анализ предметной области. 5 Постановка задачи 11
Скачать 2.77 Mb.
|
3.3. T-SQL-определения хранимых процедур1.Хранимая процедура выводит список больных геморроем. ALTER PROCEDURE Bolniye_Gemoroyem AS SELECT Сведения_о_заболевании.Выписанные_препараты, Сведения_о_заболевании.Номер_Пациента FROM /*указываем имена таблиц, из которых выбираются записи*/ Сведения_о_заболевании WHERE (Сведения_о_заболевании.Заболевание ='Геморой') 2. Хранимая процедура выводит список больных -ветеранов ЧАС ALTER PROCEDURE Chernobylci AS SELECT История_болезни_пациента.ФИО, История_болезни_пациента.Дата_Рождения FROM /*указываем имена таблиц, из которых выбираются записи*/ История_болезни_пациента WHERE (История_болезни_пациента.Номер_Пациента ='Ветеран Чернобыля') 3. Хранимая процедура, добавление нового анализа ALTER PROCEDURE Dobavlenie_analisi @Nomer_pacienta int, /*Объявляем необходимые переменные*/ @srock_zdachi datetime, @analys varchar(20) as IF EXISTS (SELECT * FROM История_болезни_пациента /*Проверяем, нет ли уже в таблице */ WHERE Номер_Пациента = @Nomer_pacienta) /*записи с таким же значением первичного ключа*/ RETURN 0 /*если есть, завершается процедура*/ IF EXISTS (SELECT * FROM Сведения_о_зболевании /*проверяем наличие соответствующей записи в*/ WHERE Номер_Пациента = @Nomer_pacienta) /*таблице «Сведения о заболевании»*/ INSERT /*если условия выполняются, добавляем*/ INTO Сведения_об_анализах /*в таблицу новые значения*/ VALUES ( @analys,@srock_zdachi,@Nomer_pacienta) 4. Хранимая процедура, добавление сведений о новом санатории ALTER PROCEDURE Dobavlenie_sanatriy @Nomer_pacienta int, /*Объявляем необходимые переменные*/ @data_postuplenia datetime, @data_vipiski datetime, @stoyimost_lecheniya int, @sanatoriy varchar(20) as IF EXISTS (SELECT * FROM История_болезни_пациента /*Проверяем, нет ли уже в таблице */ WHERE Номер_Пациента = @Nomer_pacienta) /*записи с таким же значением первичного ключа*/ RETURN 0 /*если есть, завершается процедура*/ IF EXISTS (SELECT * FROM Сведения_о_зболевании /*проверяем наличие соответствующей записи в*/ WHERE Номер_Пациента = @Nomer_pacienta) /*таблице «Сведения о заболевании»*/ INSERT /*если условия выполняются, добавляем*/ INTO Сведения_о_санаторном_лечении /*в таблицу новые значения*/ VALUES ( @sanatoriy,@data_postuplenia,@data_vipiski,@stoyimost_lecheniya,@Nomer_pacienta) 5. Хранимая процедура, добавление нового анализа в таблицу «Сведения об анализах» ALTER PROCEDURE Dobavleniye_analisy @Nomer_pacienta int, /*Объявляем необходимые переменные*/ @sroc_zdachi datetime, @sanalys varchar(20) as IF EXISTS (SELECT * FROM История_болезни_пациента /*Проверяем, нет ли уже в таблице */ WHERE Номер_Пациента = @Nomer_pacienta) /*записи с таким же значением первичного ключа*/ RETURN 0 /*если есть, завершается процедура*/ IF EXISTS (SELECT * FROM Сведения_о_зболевании /*проверяем наличие соответствующей записи в*/ WHERE Номер_Пациента = @Nomer_pacienta) /*таблице «Сведения о заболевании»*/ INSERT /*если условия выполняются, добавляем*/ INTO Сведения_об_анализах /*в таблицу новые значения*/ VALUES ( @sanalys,@sroc_zdachi,@Nomer_pacienta) 6. Хранимая процедура, выводит количество поставщиков препарата ALTER PROCEDURE Kolichestvo_Postavschikov AS SELECT COUNT (DISTINCT Сведения_о_поставщиках_препаратов.Поставщик) FROM Сведения_о_поставщиках_препаратов /*COUNT (DISTINCT <поле>) подсчитывает количество разноименных значений какого-либо поля в таблице*/ 7. Хранимая процедура, выводит количество препарата в аптеке ALTER PROCEDURE Kolichestvo_preparata @Preparat varchar(20) /*Объявляем необходимые переменные*/ AS SELECT Сведения_о_препаратах_аптеки.Количество_препарата FROM /*указываем имена таблиц, из которых выбираются записи*/ Сведения_о_препаратах_аптеки WHERE (Сведения_о_препаратах_аптеки.Вырисанные_препараты = @Preparat) 8. Хранимая процедура, выводит количество пациентов поликлиники ALTER PROCEDURE Kolvo_Pacientov AS SELECT COUNT (DISTINCT История_болезни_пациента.ФИО) FROM История_болезни_пациента /*COUNT (DISTINCT <поле>) подсчитывает количество разноименных значений какого-либо поля в таблице*/ 9. Хранимая процедура, выводит количество специальностей врачей ALTER PROCEDURE Kolvo_specialnostey_vrachey AS SELECT COUNT (DISTINCT Персонал_Поликлиники.Специализация) FROM Персонал_Поликлиники /*COUNT (DISTINCT <поле>) подсчитывает количество разноименных значений какого-либо поля в таблице*/ 10. Хранимая процедура, выводит сведения о заданном препарате. ALTER PROCEDURE Preparat @Preparat varchar(20) /*Объявляем необходимые переменные*/ AS SELECT Сведения_о_препаратах_аптеки.Поставщик, Сведения_о_препаратах_аптеки.Количество_Препарата FROM /*указываем имена таблиц, из которых выбираются записи*/ Сведения_о_препаратах_аптеки WHERE (Сведения_о_препаратах_аптеки.Вырисанные_препараты = @Preparat) 11. Хранимая процедура, выводит список врачей принимающих пациентов сегодня. ALTER PROCEDURE Priom_Vracha AS SELECT /*Перечисляем поля, которые будут выведены в результате запроса */ Расписание_приёма_врачей_поликлиники.Специализация, COUNT(Расписание_приёма_врачей_поликлиники.Время_приёма) FROM /*указываем имя таблицы из которых выбираются записи*/ Расписание_приёма_врачей_поликлиники WHERE /*задаем условие отбора*/ Расписание_приёма_врачей_поликлиники.Время_приёма=(SELECT GETDATE()) GROUP BY /*производится группировка по указанному полю*/ Специализация 12. Хранимая процедура, удаление записей о пациентах поликлиники ALTER PROCEDURE udalenie_pacienty @Chit_nom int /*Объявляем необходимые переменные*/ AS /*Проверяем, если ссылающиеся записи, если записей нет, разрешается удаление.*/ IF not EXISTS (SELECT * FROM Сведения_о_заболевании WHERE Номер_Пациента=@Chit_nom) DELETE /*Оператор удаления*/ FROM История_болезни_пациента /*Имя таблицы, откуда нужно удалить*/ WHERE /*Условие удаления – удаляем строку, для которой значение поля Номер_Пациента совпадает с нужным*/ Номер_Пациента=@Chit_nom 13. Хранимая процедура, удаление записей о санатории. ALTER PROCEDURE Udalenie_Sanatoriy @Nom_pac int /*Объявляем необходимые переменные*/ AS IF not EXISTS (SELECT * FROM История_болезни_пациента WHERE Номер_Пациента=@Nom_pac) DELETE /*Оператор удаления*/ FROM Сведения_о_санаторном_лечении /*Имя таблицы, откуда нужно удалить*/ WHERE /*Условие удаления – удаляем строку, для которой значение поля Номер_Пациента совпадает с нужным*/ Номер_Пациента=@Nom_pac 14. Хранимая процедура, удаление записей о врачах поликлиники ALTER PROCEDURE Udalenie_Vrachi @Tab_nom int /*Объявляем необходимые переменные*/ AS /*Проверяем, если ссылающиеся записи, если записей нет, разрешается удаление.*/ IF not EXISTS (SELECT * FROM Персонал_поликлиники WHERE Табельный_номер=@Tab_nom) DELETE /*Оператор удаления*/ FROM Расписание_приёма_врачей_поликлиники /*Имя таблицы, откуда нужно удалить*/ WHERE /*Условие удаления – удаляем строку, для которой значение поля Номер_Пациента совпадает с нужным*/ Табельный_номер=@Tab_nom 15. Хранимая процедура, изменение записей о пациентах поликлиники. ALTER PROCEDURE update_pacient @Tab_nom int, /*Объявляем необходимые переменные*/ @Fam varchar(20) AS IF EXISTS (SELECT * FROM История_болезни_пациента /*Проверяем, существуют ли врачи*/ WHERE Номер_Пациента = @Tab_nom) /*Табельный номер которых равен искомому*/ UPDATE История_болезни_пациента /*Если такие есть обновляем «Персонал_Поликлиники»*/ SET ФИО=@Fam /*полю фамилия присваиваем новое значение*/ WHERE Номер_Пациента = @Tab_nom /*если табельный номер записи равен искомому*/ 16. Хранимая процедура, изменение записей о поставщиках препаратов. ALTER PROCEDURE update_postavschik @Postavschik varchar(20) /*Объявляем необходимые переменные*/ AS IF EXISTS (SELECT * FROM Сведения_о_поставщиках_препаратов /*Проверяем, существуют ли врачи*/ WHERE Поставщик = @Postavschik) /*Табельный номер которых равен искомому*/ UPDATE Сведения_о_поставщиках_препаратов /*Если такие есть обновляем «Персонал_Поликлиники»*/ SET Поставщик = @Postavschik /*полю фамилия присваиваем новое значение*/ WHERE Поставщик = @Postavschik /*если табельный номер записи равен искомому*/ 17. Хранимая процедура, изменение записей о врачах поликлиники. ALTER PROCEDURE update_vrach @Tab_nom int, /*Объявляем необходимые переменные*/ @Fam varchar(20) AS IF EXISTS (SELECT * FROM Персонал_Поликлиники /*Проверяем, существуют ли врачи*/ WHERE Табельный_номер = @Tab_nom) /*Табельный номер которых равен искомому*/ UPDATE Персонал_Поликлиники /*Если такие есть обновляем «Персонал_Поликлиники»*/ SET Фамилия=@Fam /*полю фамилия присваиваем новое значение*/ WHERE Табельный_номер = @Tab_nom /*если табельный номер записи равен искомому*/ 18. Хранимая процедура, вставка сведений о новых льготах. ALTER PROCEDURE Vstavka_Lgoti @Tip varchar(20), /*Объявляем необходимые переменные*/ @Plata varchar(20), @Neobhodimost varchar(20) AS /*Проверяем, есть ли запись в таблице «История_болезни_пациента» с такими же значениями ключевых полей, как у новой записи*/ IF NOT EXISTS (SELECT * FROM История_болезни_пациента WHERE Тип_льгот = @Tip) RETURN 0 /*Если есть, завершаем выполнение процедуры*/ INSERT INTO Сведения_льготах /*Указываем таблицу, куда вставляем запись*/ VALUES ( @Tip,@Plata,@Neobhodimost) /*Указываем какие значения*/ 19. Хранимая процедура, встака сведений о заболевании. ALTER PROCEDURE Vstavka_Zabolevanie @Nomer_Pacienta int, /*Объявляем необходимые переменные*/ @Zabolevanie varchar(20), @Vipisanniye_preparati varchar(20) AS /*Проверяем, есть ли запись в таблице «История_болезни_пациента» с такими же значениями ключевых полей, как у новой записи*/ IF EXISTS (SELECT * FROM История_болезни_пациента WHERE Номер_Пациента = @Nomer_Pacienta) RETURN 0 /*Если есть, завершаем выполнение процедуры*/ INSERT INTO Сведения_о_заболевании /*Указываем таблицу, куда вставляем запись*/ VALUES ( @Nomer_Pacienta,@Zabolevanie,@Vipisanniye_preparati) /*Указываем какие значения*/ 20. Хранимая процедура, вывод сведений, о введённом пользователем заболевании. ALTER PROCEDURE Zabolevanie @Nomer_pacienta int /*Объявляем необходимые переменные*/ AS SELECT Сведения_о_заболевании.Заболевание, Сведения_о_заболевании.Выписанные_препараты FROM /*указываем имена таблиц, из которых выбираются записи*/ Сведения_о_заболевании WHERE (Сведения_о_заболевании.Номер_Пациента = @Nomer_Pacienta) 3.4. T-SQL-определения курсоров. 1. Курсор для просмотра информации о пациентах и выдача информации об их количестве. DECLARE curs1 CURSOR GLOBAL /*Создается глобальный курсор, который будет существовать до закрытия данного соединения*/ SCROLL /*Создает прокручиваемый курсор*/ KEYSET /*Будет создан ключевой курсор*/ TYPE_WARNING FOR SELECT /*Какие поля будут показаны в курсоре*/ История_болезни_пациента.ФИО, История_болезни_пациента.Домашний_адрес, История_болезни_пациента.Дата_Рождения, История_болезни_пациента.Тип_льгот FROM История_болезни_пациента /*Из какой таблицы выбираются данные*/ FOR READ ONLY /*Только для чтения*/ open global curs1 /*открываем глобальный курсор*/ DECLARE /*объявляем переменную*/ @@Counter int SET @@Counter =@@CURSOR_ROWS /*присваиваем ей число рядов курсора*/ Select @@Counter /*выводим результат на экран*/ CLOSE curs1 /*закрываем курсор*/ DEALLOCATE curs1 /*освобождаем курсор*/ 2. Курсор для просмотра информации о препаратах аптеки и выдача информации об их количестве. DECLARE curs2 CURSOR GLOBAL /*Создается глобальный курсор, который будет существовать до закрытия данного соединения*/ SCROLL /*Создает прокручиваемый курсор*/ KEYSET /*Будет создан ключевой курсор*/ TYPE_WARNING FOR SELECT /*Какие поля будут показаны в курсоре*/ Сведения_о_препаратах_аптеки.Вырисанные_препараты, Сведения_о_препаратах_аптеки.Цена, Сведения_о_препаратах_аптеки.Имеется_в_наличии,Сведения_о_препаратах_аптеки.Количество_препарата FROM Сведения_о_препаратах_аптеки /*Из какой таблицы выбираются данные*/ FOR READ ONLY /*Только для чтения*/ open global curs2 /*открываем глобальный курсор*/ DECLARE /*объявляем переменную*/ @@Counter int SET @@Counter =@@CURSOR_ROWS /*присваиваем ей число рядов курсора*/ Select @@Counter /*выводим результат на экран*/ CLOSE curs2 /*закрываем курсор*/ DEALLOCATE curs2 /*освобождаем курсор*/ 3.5. Описание клиентских приложений При разработке клиентского приложения были созданы следующие формы. При запуске приложения появляется форма «Ввод_пароля» (рис.13). на форме присутствует кнопки «Вход», нажатие на которую открывает другие формы. Код кнопки: Private Sub Кнопка9_Click() Me.Visible = False Call ModalForm End Sub Public Sub ModalForm() Dim strFrm As String, blnOk As Boolean Dim k As Integer strFrm = "Ввод пароля" k = 0 'Открытие диалогового окна DoCmd.OpenForm strFrm, , , , , acDialog If CurrentProject.AllForms(strFrm).IsLoaded Then 'Проверка имени и пароля, например: If Forms(strFrm).txtName = "Главный врач" And _ Forms(strFrm).txtPassword = "123" Then 'Имя и пароль введены верно, 'закрываем диалоговое окно flag = True DoCmd.Close acForm, strFrm blnOk = True k = 1 ElseIf Forms(strFrm).txtName = "Врач" And _ Forms(strFrm).txtPassword = "123" Then 'Имя и пароль введены верно, 'закрываем диалоговое окно flag = True DoCmd.Close acForm, strFrm blnOk = True k = 2 ElseIf Forms(strFrm).txtName = "Пациент" Then 'Имя и пароль введены верно, 'закрываем диалоговое окно flag = True DoCmd.Close acForm, strFrm blnOk = True k = 3 End If If k = 1 Then DoCmd.OpenForm "Меню_ГлавВрача" Forms("Меню_ГлавВрача").SetFocus End If If k = 2 Then DoCmd.OpenForm "Меню_Врача" Forms("Меню_Врача").SetFocus End If If k = 3 Then DoCmd.OpenForm "Меню_пациента" Forms("Меню_пациента").SetFocus End If If k <> 1 And k <> 2 And k <> 3 Then MsgBox "Неправильный пароль.Повторите ввод" End If End If End Sub Рисунок 13 – Форма «Ввод пароля». Для пользователя «Главный врач», открывается форма меню_главврача – рисунок 14. На ней присутствуют следующие кнопки: «Работа с поликлиникой», «Работа с аптекой», «Получение информации». Рисунок 14 – Форма «меню_главврача». После нажатия на кнопку «Работа с поликлиникой» появится форма «Работа с поликлиникой» – рисунок 15. На форме присуетсвуют кнопки «Работа с расписанием приёма врачей», «Работа со штатным расписанием». Рисунок 15 – Форма «Работа с поликлиникой». После нажатия на кнопку «Работа срасписанием приёма врачей» появится форма «Работа с расписанием приёма» – рисунок 16. На форме присуетсвуют кнопки «Изменить время приёма врача», «Изменить кабинет врача». После нажатия на кнопку «Работа со штатным расписанием » появится форма «Работа со штатным расписанием» – рисунок 17. На форме присуетсвуют кнопки «Нанять врача», «Уволить врача», «изменить» Рисунок 16 – Форма «Работа срасписанием приёма». Рисунок 17 – Форма «Работа со штатным расписанием». Рассмотрим форму «работа с расписанием приёма». При нажатии кнопки «Изменить время приёма врача» откроется форма «Изменить время приёма» - рисунок 18. Принажатии кнопки «Изменить кабинет врача» откроется форма «Изменить кабинет врача» - рисунок 19. |