Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой Проект по ТРПО Разилов.doc
Скачиваний:
5
Добавлен:
28.09.2019
Размер:
7.53 Mб
Скачать

2.2. Информационное моделирование

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

Моделирование происходило с использованием СУБД «Microsoft Access 2003».

При работе с базой данных были созданы следующие таблицы:

Таблица «Архив приёмов»:

Рис. 7 – «Архив приёмов»

Данная таблица состоит из отношения ПРИЁМЫ и содержит основную информацию об оказанной медицинской помощи. Ключевым атрибутом является код приёма.

Таблица «Архив приёма» связана со следующими таблицами:

Таблица «Врачи»:

Рис. 8 – «Врачи»

Данная таблица состоит из отношения ВРАЧИ и содержит основную информацию о врачах. Ключевым атрибутом является код врача.

Таблица «Медицинская карта»:

Рис. 9 – «Медицинская карта»

Данная таблица состоит из отношения ПАЦИЕНТЫ и содержит основную информацию о пациентах. Ключевым атрибутом является код карты.

Таблица «Медицинская карта» связана со следующими таблицами:

Таблица «Полис»:

Рис. 12 – «Полис»

Данная таблица состоит из отношения ПОЛИС и содержит основную информацию о страховой компании. Ключевым атрибутом является код полиса.

Таблица «Анализы»:

Рис. 13 – «Анализы»

Данная таблица состоит из отношения АНАЛИЗ и содержит основную информацию об необходимых анализах. Ключевым атрибутом является код анализа.

Таблица «Диагнозы»:

Рис. 14 – «Диагнозы»

Данная таблица состоит из отношения ДИАГНОЗ и содержит основную информацию о возможных диагнозах. Ключевым атрибутом является код диагноза.

Таблица «Диагнозы» связана со следующими таблицами:

Таблица «Классификации»:

Рис. 15 – «Классификации»

Данная таблица состоит из отношения ДИАГНОЗ и содержит основную информацию о возможной классификации диагнозов. Ключевым атрибутом является код классификации.

Таблица «Лечение»:

Рис. 16 – «Лечение»

Данная таблица(связана с таблицей «Медицинская карта») состоит из отношения ЛЕЧЕНИЕ и содержит основную информацию о возможных вариантах лечения. Ключевым атрибутом является код лечения.

Таблица «Лечение» связана со следующими таблицами:

Таблица «Процедуры»:

Рис. 17 – «Процедуры»

Данная таблица состоит из отношения ПРОЦЕДУРА и содержит основную информацию о возможных лечебных или восстанавливающих процедурах. Ключевым атрибутом является код процедуры.

Рис. 18 – Детальное представление БД

2.3. Программные модули

Функции программных модулей

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

Описание модулей

Для модуля «Врачи» входными данными являются следующие поля:

  • Код врача, т.е. его индивидуальный номер в базе данных

  • Фамилия

  • Имя

  • Отчество

  • Пол

  • Дата рождения

  • Телефон

  • Звание

  • Область

  • Район

  • Тип населённого пункта

  • Населённый пункт

  • Тип улицы

  • Улица

  • Дом

  • Корпус

  • Строение

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

  • Кабинет

  • Стаж

  • Должность

  • Выходные дни

  • Приём с

  • Приём до

  • Фотография

  • Описание

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

Для модуля «Медицинская карта» входными данными являются следующие поля:

  • Код карты, т.е. её индивидуальный номер в базе данных

  • Фамилия

  • Имя

  • Отчество

  • Пол

  • Дата рождения

  • Телефон

  • Инвалидность

  • Область

  • Район

  • Тип населённого пункта

  • Населённый пункт

  • Тип улицы

  • Улица

  • Дом

  • Корпус

  • Строение

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

  • Место работы

  • Профессия

  • Код полиса

  • Код диагноза

  • Код лечения

  • Код анализа

  • Дополнительная информация

  • Описание

  • Фотография

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

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

Схема взаимодействия модулей и базы данных

Связь модулей с базой данных осуществляется по средствам объектно-ориентированного языка C#, поэтому каждый модуль представляет собой объект какого-либо класса.

Схема взаимодействия модулей и базы данных следующая:

  • запущена программа Visual Studio. NET;

  • создан пустой проект;

  • определён интерфейс;

  • созданы формы соответствующие пунктам меню;

  • подключены библиотеки:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Травмпункт

{

public partial class FormPriemi : Form

{

public FormPriemi()

{

InitializeComponent();

bmPriem = this.BindingContext[травмпунктDataSet, "Архив приёмов"];

}

  • далее были объявлены необходимые переменные и объекты используемых классов:

int pos = -1;

BindingManagerBase bmPriem;

Functionalcs func = new Functionalcs();

Functionalcs funcOtm = new Functionalcs();

Functionalcs funcSoz = new Functionalcs();

Functionalcs funcRed = new Functionalcs();

Functionalcs funcSochr = new Functionalcs();

Functionalcs funcUdal = new Functionalcs();

Functionalcs funcOtch = new Functionalcs();

Functionalcs funcOtchetPoVsem = new Functionalcs();

Functionalcs funcStatPoDatam = new Functionalcs();

  • следующие две процедуры созданы для определения состояния для чтения:

public void DisplayReadOnly(bool ReadOnly)

{

this.textBox1.ReadOnly = ReadOnly;

this.textBox2.ReadOnly = ReadOnly;

this.comboBox1.Enabled = !(ReadOnly);

this.comboBox2.Enabled = !(ReadOnly);

this.dateTimePicker1.Enabled = !(ReadOnly);

this.dateTimePicker2.Enabled = !(ReadOnly);

dataGridView1.ReadOnly = !(ReadOnly);

}

private void DisplayForm(bool mode)

{

DisplayReadOnly(mode);

func.MenuItemEnabled(редактироватьToolStripMenuItem, удалитьToolStripMenuItem, создатьToolStripMenuItem, отменитьToolStripMenuItem, сохранитьToolStripMenuItem, mode);

func.MenuItemContextEnabled(редактироватьToolStripMenuItem1, удалитьToolStripMenuItem1, создатьToolStripMenuItem1, отменитьToolStripMenuItem1, сохранитьToolStripMenuItem1, mode);

func.StripButtonEnabled(удалитьToolStripButton, отменаToolStripButton, сохранитьToolStripButton, редактироватьToolStripButton, bindingNavigatorAddNewItem,

bindingNavigatorMoveFirstItem, bindingNavigatorMoveLastItem, bindingNavigatorMoveNextItem, bindingNavigatorMovePreviousItem, mode);

}

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

private void FormPriemi_Load(object sender, EventArgs e)

{

// TODO: данная строка кода позволяет загрузить данные в таблицу "травмпунктDataSet.Медицинская_карта". При необходимости она может быть перемещена или удалена.

this.медицинская_картаTableAdapter.Fill(this.травмпунктDataSet.Медицинская_карта);

// TODO: данная строка кода позволяет загрузить данные в таблицу "травмпунктDataSet.Врачи". При необходимости она может быть перемещена или удалена.

this.врачиTableAdapter.Fill(this.травмпунктDataSet.Врачи);

// TODO: данная строка кода позволяет загрузить данные в таблицу "травмпунктDataSet.Архив_приёмов". При необходимости она может быть перемещена или удалена.

this.архив_приёмовTableAdapter.Fill(this.травмпунктDataSet.Архив_приёмов);

func.StatusLabel(действиеToolStripMenuItem, действиеToolStripMenuItem.Text, "Действие по работе с данными", toolStripStatusLabel1);

funcOtm.StatusLabel(отменитьToolStripMenuItem, отменитьToolStripMenuItem.Text, "Отменить действие", toolStripStatusLabel1);

funcSoz.StatusLabel(создатьToolStripMenuItem, создатьToolStripMenuItem.Text, "Создать запись", toolStripStatusLabel1);

funcRed.StatusLabel(редактироватьToolStripMenuItem, редактироватьToolStripMenuItem.Text, "Редактировать запись", toolStripStatusLabel1);

funcSochr.StatusLabel(сохранитьToolStripMenuItem, сохранитьToolStripMenuItem.Text, "Сохранить запись", toolStripStatusLabel1);

funcUdal.StatusLabel(удалитьToolStripMenuItem, удалитьToolStripMenuItem.Text, "Удалить запись", toolStripStatusLabel1);

funcOtch.StatusLabel(отчётToolStripMenuItem, отчётToolStripMenuItem.Text, "Создание печатного варианта записи", toolStripStatusLabel1);

funcOtchetPoVsem.StatusLabel(выводЛетописиToolStripMenuItem, выводЛетописиToolStripMenuItem.Text, "Вывести информацию о всех процедурах", toolStripStatusLabel1);

funcStatPoDatam.StatusLabel(выводСтатистикиПоДатамПосещенияToolStripMenuItem, выводСтатистикиПоДатамПосещенияToolStripMenuItem.Text, "Вывод статистики по датам посещения", toolStripStatusLabel1);

func.ButtonsFuncs(удалитьToolStripButton, отменаToolStripButton, сохранитьToolStripButton, редактироватьToolStripButton, bindingNavigatorAddNewItem,

редактироватьToolStripMenuItem1, удалитьToolStripMenuItem1, создатьToolStripMenuItem1, отменитьToolStripMenuItem1, сохранитьToolStripMenuItem1,

редактироватьToolStripMenuItem, удалитьToolStripMenuItem, создатьToolStripMenuItem, отменитьToolStripMenuItem, сохранитьToolStripMenuItem);

DisplayForm(true);

}

  • далее были объявлены следующие два события для присваивания выбранного значения из программного элемента «ComboBox»:

private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)

{

pos = bmPriem.Position;

травмпунктDataSet.Архив_приёмов[pos].Код_врача = (int)((DataRowView)comboBox1.Items[comboBox1.SelectedIndex])["Код врача"];

}

private void comboBox2_SelectionChangeCommitted(object sender, EventArgs e)

{

pos = bmPriem.Position;

травмпунктDataSet.Архив_приёмов[pos].Код_карты = (int)((DataRowView)comboBox2.Items[comboBox2.SelectedIndex])["Код карты"];

}

  • далее были объявлены события для создания отчётов и статистик:

private void выводЛетописиToolStripMenuItem_Click(object sender, EventArgs e)

{

FormOtchetArxivP form = new FormOtchetArxivP();

funcOtchetPoVsem.FormOpen(form);

}

private void выводСтатистикиПоДатамПосещенияToolStripMenuItem_Click(object sender, EventArgs e)

{

FormOtchetPoDatamPos form = new FormOtchetPoDatamPos();

funcStatPoDatam.FormOpen(form);

}

  • далее были объявлены события создания, удаления, отмены, сохранения редактирования данных:

private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e)

{

dateTimePicker1.Text = "12:00:00";

dateTimePicker2.Text = "12:30:00";

DisplayForm(false);

textBox1.Focus();

toolStripStatusLabel1.Text = "Режим добавления данных...";

}

private void удалитьToolStripButton_Click(object sender, EventArgs e)

{

pos = архивПриёмовBindingSource.Position;

string mes = comboBox2.Text.ToString().Trim() + " от " + dateTimePicker3.Text.ToString().Trim();

toolStripStatusLabel1.Text = "Режим удаления данных...";

DialogResult result = MessageBox.Show(" Удалить данные \n по приёму пациента \n" + mes + "?", "Предупреждение", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);

switch (result)

{

case DialogResult.Yes:

{

this.травмпунктDataSet.Архив_приёмов.Rows[pos].Delete();

if (this.травмпунктDataSet.Архив_приёмов.GetChanges(DataRowState.Deleted) != null)

{

try

{

this.архив_приёмовTableAdapter.Update(травмпунктDataSet.Архив_приёмов);

this.травмпунктDataSet.Архив_приёмов.AcceptChanges();

}

catch (Exception x)

{

string er = x.Message.ToString();

MessageBox.Show("Ошибка удаления записи в базе данных Травмпункт " + er, "Предупреждение");

this.травмпунктDataSet.Архив_приёмов.RejectChanges();

}

}

MessageBox.Show("Удаление данных");

break;

}

case DialogResult.No:

{

this.травмпунктDataSet.Архив_приёмов.RejectChanges();

MessageBox.Show("Отмена удаления данных");

break;

}

}

toolStripStatusLabel1.Text = "";

}

private void отменаToolStripButton_Click(object sender, EventArgs e)

{

bmPriem.EndCurrentEdit();

травмпунктDataSet.Архив_приёмов.RejectChanges();

архивПриёмовBindingSource.CancelEdit();

toolStripStatusLabel1.Text = "";

DisplayForm(true);

textBox1.Focus();

}

private void сохранитьToolStripButton_Click(object sender, EventArgs e)

{

try

{

архивПриёмовBindingSource.EndEdit();

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

архивПриёмовBindingSource.CancelEdit();

}

if (this.травмпунктDataSet.Архив_приёмов.GetChanges(DataRowState.Added) != null)

{

toolStripStatusLabel1.Text = "Режим сохранения данных...";

try

{

this.архив_приёмовTableAdapter.Update(травмпунктDataSet.Архив_приёмов);

this.травмпунктDataSet.Архив_приёмов.AcceptChanges();

bindingNavigator1.Update();

MessageBox.Show("Сохранение добавлений", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

catch (Exception x)

{

string mess = x.Message;

MessageBox.Show("Ошибка вставки записи в базу данных Сотрудник " + mess, "Предупреждение");

this.травмпунктDataSet.Архив_приёмов.RejectChanges();

}

}

if (this.травмпунктDataSet.Архив_приёмов.GetChanges(DataRowState.Modified) != null)

{

try

{

this.архив_приёмовTableAdapter.Update(травмпунктDataSet.Архив_приёмов);

this.травмпунктDataSet.Архив_приёмов.AcceptChanges();

bindingNavigator1.Update();

MessageBox.Show("Сохранение изменений", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

catch (Exception x)

{

string mess = x.Message;

MessageBox.Show("Ошибка обновления базы данных Сотрудник " + mess, "Предупреждение");

this.травмпунктDataSet.Архив_приёмов.RejectChanges();

}

}

DisplayForm(true);

textBox1.Focus();

}

private void редактироватьToolStripButton_Click(object sender, EventArgs e)

{

DisplayForm(false);

textBox1.Focus();

toolStripStatusLabel1.Text = "Режим редактирования данных...";

}

}

}