- •Содержание
- •Введение
- •1 Аналитическая часть
- •1.1. Характеристика предметной области
- •1.2. Исследование аналогов программного продукта
- •Вкладка "Старт":
- •1.3. Постановка задачи
- •1. Информационное обеспечение – бд «Травмпункт»
- •2. Системные требования
- •3. Функциональные системы
- •4. Иерархия модулей
- •2. Проектная часть
- •2.1. Моделирование бизнес-процессов предметной части
- •2.2. Информационное моделирование
- •2.3. Программные модули
- •3. Технология работы с программным продуктом
- •3.1. Работа пользователя с системой
- •3.2. Перспективы развития проекта
- •3.3. Экономическая эффективность внедрения программного продукта
- •Заключение
- •Список литературы
- •Приложение Приложение 1
- •Приложение 2
- •Приложение 3
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 = "Режим редактирования данных...";
}
}
}