Автор работы: Пользователь скрыл имя, 05 Июня 2013 в 17:36, курсовая работа
Необходимо спроектировать базу данных и реализовать приложение для работы с ней, имеющее необходимый для сотрудников стоматологии функционал, различающийся согласно их правам и возможностям через доступ только к определённым формам приложения. Также приложение должно предоставлять возможности по администрированию базы данных, доступное отдельному типу пользователей (администратор), такие, как добавление и удаление пользователей.
1. Постановка задачи 2
2. Нормализация 3
3. Описание таблиц 8
4. Реализация 11
4.1. Описание программного обеспечения 11
4.2. Хранимые процедуры 11
4.2.1. Процедура Cost1Serv 11
4.2.2. Процедура CostServAll 12
4.2.3. Процедура PacIns 12
4.2.4. Процедура PRas 13
4.2.5. Процедура PolusAdd 14
5. Руководство пользователя 15
5.1. Окно входа: 15
5.2. Администратор 15
5.3. Медицинский работник 16
5.4. Бухгалтер 18
Table 14. Структура таблицы Pacients
Personal (Персонал):
Имя поля |
Тип |
Описание |
PersonalID |
int |
Идентификатор записи, первичный ключ Ссылка на MaterialsPrices, связь «Один (Personal) ко многим (MaterialsPrices)» Ссылка на Visits, связь «Один (Personal) ко многим (Visits)» |
Family |
varchar(50) |
Фамилия сотрудника |
Name |
Varchar(50) |
Имя сотрудника |
Name2 |
Varchar(50) |
Отчество сотрудника |
Prava |
Varchar(50) |
Права сотрудника. “-1”-Администратор, “1” – Медицинский работник, “2”-Бухгалтер |
Password |
Varchar(50) |
Пароль сотрудника |
Speciality |
Varchar(50) |
Специальность сотрудника |
Uvolen |
Vrcahr(1) |
Активность учетной записи. “-”-активна, “+” - заблокирована |
Table 15. Структура таблицы Personal
Polus(Полюсы):
Имя поля |
Тип |
Описание |
PolusID |
int |
Идентификатор записи, первичный ключ |
PacientID |
int |
Ссылка на Pacients, связь «Один (Pacients) ко многим (Polus)» |
Number |
Varchar(50) |
Номер полюса (может начинаться с нуля) |
Company |
Varchar(50) |
Название страховой компании |
DTF |
date |
Дата с которой действителен |
DTT |
date |
Дата по которую действителен |
Table 16. Структура данных для Polus
Services (Оказанные услуги):
Имя поля |
Тип |
Описание |
ServicesID |
bigint |
Идентификатор записи, первичный ключ |
VisitID |
bigint |
Ссылка на Visits, связь «Один (Visits) ко многим (Services)» |
Zub |
int |
Номер обрабатываемого зуба |
MatManID |
int |
Ссылка на MaterialsManipulation, связь «Один (MaterialsManipulation) ко многим (Services)» |
Table 17. Структура таблицы Services
Visits (Приёмы):
Имя поля |
Тип |
Описание |
VisitID |
bignt |
Идентификатор записи, первичный ключ Ссылка на Services, связь «Один (Visits) ко многим (Services)» |
PacientID |
int |
Ссылка на Pacients, связь «Один (Pacients) ко многим (Visits)» |
PersonalID |
int |
Ссылка на Personal, связь «Один (Personal) ко многим (Visits)» |
DT |
datetime |
Дата и время приёма |
Comment |
Varchar(max) |
Комментарии к приёму |
Table 18. Структура таблицы Visits
Для реализации программного обеспечения использовался язык программирования C# в среде MS Visual Studio 2010, база данных проектировалась в среде SQL Server Management Studio 2012.
Table 19. Схема базы данных
(Возвращает стоимость выбранной услуги+материала с учетом наличия полюса медицинского страхования.)
ALTER Proc [dbo].[Cost1Serv]
@ManName varchar(50),
@MatName varchar(50),
@VisitsID bigint,
@Cost1 numeric(10,2) output
as
declare
@PersonID int,
@skidka int
begin
set @skidka=100
select @PersonID=v.PacientID from Visits v where v.VisitID=@VisitsID
if exists(select * from Polus p where p.PacientID=@PersonID and p.DTF<=GETDATE() and p.DTT>=GETDATE())
set @skidka=75
select @Cost1=mp.Cost from Manipulations m
inner join MaterialsManipulation mm on mm.ManID=m.ManID
inner join Materials mat on mm.MatID=mat.MatID
inner join MaterialsPrice mp on mp.MatID=mat.MatID
where m.Name=@ManName and mat.Name=@MatName and mp.DTF<=GETDATE() and mp.DTT>=GETDATE()
set @Cost1=@Cost1/100*@skidka
end
(Возвращает стоимость приёма с учетом полюса медицинского страхования.)
ALTER Proc [dbo].[CostServAll]
@VisitsID bigint,
@Cost1 numeric(10,2) output
as
declare
@PersonID int,
@skidka int
begin
set @Cost1=0
set @skidka=100
select @PersonID=v.PacientID from Visits v where v.VisitID=@VisitsID
if exists(select * from Polus p where p.PacientID=@PersonID and p.DTF<=GETDATE() and p.DTT>=GETDATE())
set @skidka=75
select @Cost1=Sum(mp.Cost) from Services s
inner join MaterialsManipulation mm on mm.MatManID=s.MatManID
inner join Manipulations m on mm.ManID=m.ManID
inner join Materials mat on mm.MatID=mat.MatID
inner join MaterialsPrice mp on mp.MatID=mat.MatID
where @VisitsID=s.VisitID and mp.DTF<=GETDATE() and mp.DTT>=GETDATE()
set @Cost1=@Cost1/100*@skidka
end
(Добавляет нового пациента в таблицу Pacients, проверяя вставляемые данные на корректность и уникальность)
ALTER Proc [dbo].[PacIns]
@Family varchar(50),
@Name varchar(50),
@Name2 varchar(50) ,
@DB date,
@Contra varchar(max)
as
declare
@tmp int
begin
set @tmp=-1
if exists(select * from Pacients p where p.Family=@Family and p.Name=@Name and @Name2=p.Name2 and p.Birthday=@DB)
set @tmp=0
if (@Family='' or @Name='' or @Name2='' or @DB>=GETDATE())
set @tmp=0
If (@tmp=-1)
begin
insert into Pacients
values(@Family,@Name,@Name2,@
end
end
(Производит расчет количества приемов и выручки на определенный период времени, как у определённого(одного выбранного сотрудника), так и у всей стоматологии в целом.)
ALTER Proc [dbo].[PRas]
@PersonalID int,
@DTF date,
@DTT date,
@CountV1 int output,
@CountVAll int output,
@Cost1 numeric(10,2) output,
@CostAll numeric(10,2) output
as
begin
set @CountV1=0
select @Cost1=Sum(mp.Cost) from Visits v
inner join Services s on s.VisitID=v.VisitID and (v.DT>=@DTF and v.DT<=@DTT)
inner join MaterialsManipulation mm on mm.MatManID=s.MatManID
inner join MaterialsPrice mp on mp.MatID=mm.MatID and mp.DTF<=v.DT and mp.DTT>=v.DT
where v.PersonalID=@PersonalID
if (@Cost1 is null)
set @Cost1=0
select @CostAll=Sum(mp.Cost) from Visits v
inner join Services s on s.VisitID=v.VisitID and (v.DT>=@DTF and v.DT<=@DTT)
inner join MaterialsManipulation mm on mm.MatManID=s.MatManID
inner join MaterialsPrice mp on mp.MatID=mm.MatID and mp.DTF<=v.DT and mp.DTT>=v.DT
select @CountV1=Count(v.VisitID) from Visits v
where v.PersonalID=@PersonalID and (v.DT>=@DTF and v.DT<=@DTT)
select @CountVAll=Count(v.VisitID) from Visits v
where (v.DT>=@DTF and v.DT<=@DTT)
end
(Добавление полюса в таблицу Polus, с проверкой корректности добавляемых значений.)
ALTER Proc [dbo].[PolusAdd]
@Company varchar(50),
@Number varchar(50),
@DTF date,
@DTT date,
@Family varchar(50),
@Name varchar(50),
@Name2 varchar(50)
as
declare
@tmp int,
@PacientID int
begin
set @tmp=-1
select @PacientID=p.PacientID from Pacients p where p.Name=@Name and p.Family=@Family and p.Name2=@Name2
if (@DTF>=@DTT or @Company='' or @Number='') set @tmp=0
if exists(select * from VPolus v where v.Name=@Name and v.Name2=@Name2 and v.Family=@Family and ((@DTF>=v.DTF and @DTF<=v.DTT) or (@DTT>=v.DTF and @DTT<=v.DTT) or (@DTF<=v.DTF and @DTT>=v.DTT)))
set @tmp=0
if @tmp=-1
begin
insert into Polus
values(@PacientID,@Company,@
end
end
20. Окно входа в систему
Пользователь вводит свою Фамилию и пароль, которые хранятся в базе данных. В зависимости от прав (администратор, бухгалтер, медицинский работник), пользователь получает доступ к разным формам приложения. Далее рассмотрена форма, доступная администратору.
21. Управление пользователями
Можно добавлять новых и редактировать старых пользователей, также с помощью фильтров и сортировок можно искать нужных пользователей. Для активации нужного фильтра или сортировки требуется поставить флажок и нажать кнопку «Применить». Также доступен поиск по фамилии, для начала поиска требуется нажать клавишу «Ввод».
Доступна информация о количестве пользователей (общее количество, активных, заблокированных).
Уровень доступа “-1” означает, что пользователь наделяется правами администратора. Уровень доступа “1” означает, что пользователь наделяется правами медицинского работника. Уровень доступа “2” означает, что пользователь наделяется правами бухгалтера.
Значение в колонке «Uvolen» равное “-” означает, что пользователь активен, а равное “+”, что пользователь заблокирован.
Для сохранения изменений, следует нажать кнопку «Сохранить изменения».
22. Врач-Новые приёмы.
Для появления списка пациентов, требуется ввести часть фамилии пациента в поле «Поиск по Фамилии» и нажать клавишу «Ввод».
Для добавления нового приёма, требуется выбрать нужного пациента из списка.
При добавлении оказываемой услуги, нужно указать номер зуба (если манипуляция проводится не с конкретным зубом, то указать “0”). При выборе пары Манипуляция-материал, автоматически считается её стоимость и выводится рядом. Для добавление услуги нажмите кнопку «Добавить услугу».
Добавленная услуга появится в списке.
Для добавления комментария к приёму,
заполните соответствующее
Полная стоимость приёма считается над кнопкой «Завершить приём».
При нажатии кнопки «Завершить приём», будет выведена форма с списком оказанных услуг, её можно экспортировать в Excel или распечатать по желанию пациента.
23. Врач-Пациенты.
Для появления списка пациентов, требуется ввести часть фамилии пациента в поле «Поиск по Фамилии» и нажать клавишу «Ввод».
Для добавления нового пациента требуется заполнить соответствующие поля и нажать кнопку «Добавить пациента».
Для работы с полюсами, требуется выбрать пациента из списка пациентов и нажать по надписи «Работа с полюсами».
Для добавление полюса, требуется заполнить соответствующие поля и нажать кнопку «Добавить полюс».
24. Врач-прошедшие приёмы.
Для появления списка приёмов с пациентами, требуется ввести часть фамилии пациента в поле «Поиск по Фамилии» и нажать клавишу «Ввод».
Для просмотра оказанных услуг на конкретном приёме, нажмите кнопку «Показать конкретный приём». Перед этим выбрав конкретного пациента.
Для просмотра оказанных услуг за все прошедшие приёмы, нажмите кнопку «Показать все услуги, оказанные выбранному человеку». Перед этим выбрав конкретного пациента.
25. Бухгалтерия-Материалы.
Доступно редактирование и добавление новых материалов/цен/периодов использования. Причем нельзя менять период использования, таким образом, чтобы менялась стоимость уже оказанной услуги, а так же дата действия нового материала, должна начинаться со следующего дня. Период действия цен с (включительно) по (не включительно).
При нажатии кнопки «Сохранить изменения», поле «Последние изменения» будет автоматически заполнено, фамилией текущего пользователя.
Доступны сортировки и фильтры. Также можно посмотреть Текущие/Прошлые/будущие расценки. Внимание: при использовании этой опции сортировки и фильтры не действуют.
При нажатии кнопки «Текущий прайс», будет выведен в отдельной форме активные расценки, которые можно экспортировать или распечатать.
26. Прейскурант
27. Бухгалтерия-Манипуляции
Можно добавить новую манипуляцию.
Добавить новую пару манипуляция-материал или удалить уже имеющуюся. Удаление не повлияет на уже оказанные услуги.
Для удобства присутствует система фильтров и сортировок, аналогичных, рассматриваемым ранее.
28. Бухгалтерия-Расчет выручки
Для появления списка врачей, требуется ввести часть фамилии врача в поле «Поиск по Фамилии Врача» и нажать клавишу «Ввод».
Флаг «Скрыть уволенных», убирает из списка уволенных(заблокированных) врачей.
Из полей с датами определяется период который нужно учитывать при расчете выручки.
При нажатии кнопки «Для выбранного врача», появится соответствующая надпись с выручкой и количеством приёмов, как выбранного врача, так и всей стоматологии в целом.
При нажатии кнопки «Отчет», будет открыта новая форма с отчётом по выручке у всех врачей за данный период.
Внимание, даты учитываются с (включительно) и по (не включительно).
29. Отчет. Выручка за период по врачам.