Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Malchenko_ASOI-091_diplomny_proektЫЫЫЫЫЫЫЫЫЫЫЫЫ...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.12 Mб
Скачать

4 Управление процессом разработки программного обеспечения

Данный раздел дипломного проекта демонстрирует владение компетенциями руководителя проектов (ComputerandInformationSystemManager) (ПК8). Руководитель проекта разрабатывает документ «План разработки программного обеспечения».

Руководитель проекта – специалист высших квалификационных уровней, который осуществляет планирование, координацию и руководство разработкой проектов.

    1. План разработки программного обеспечения

Данный документ состоит из трёх разделов:

- трудозатраты разработки элементов ПО (Таблица 9),

- трудоёмкость разработки программного обеспечения (Таблица 10, 11, 12 ),

- календарный план график разработки (Таблица 13).

Трудозатраты на разработку каждого элемента программного обеспечения зависят от квалификации специалистов.

УТВЕРЖДАЮ

Заведующий филиалом

«Поликлиника №7 г.Могилева»

______________Ф.П.Зарубайко

«_____»______________2014г.

ПЛАН РАЗРАБОТКИ ПРОЕКТА АСОИ

«Расчет врачебной функции»

версия 1 от 10.04.2014

Трудозатраты разработки элементов программного обеспечения

Таблица 9 – Трудозатраты разработки элементов программного обеспечения

Элемент

Время разработки, час.

1

Диалоговый элемент на форме

0,5

2

Вычисляемая процедура

4

3

Страниц печатной формы

3

4

Запрос к БД

3

5

Таблица в БД (10 полей)

0,5

Трудоемкость разработки программного обеспечения

Таблица 10 – Трудоемкость разработки структуры базы данных и запросов

Компонент

Число всех полей БД

Число всех запросов к БД

Трудо­емкость разра­ботки, ч.

1

MainWindow

2

-

0,3

2

WaddNewTable

2

-

0,3

3

Wfunction

17

-

1,2

4

Wset

7

-

0,7

5

WsetEdit

7

-

0,7

6

WTable

20

-

1,5

7

WTableEdit

7

-

0,6

8

Wdoctors

4

-

0,5

9

WdoctorsEdit

2

-

0,4

10

Wpositions

4

-

0,5

11

WpositionsEdit

2

-

0,4

12

viewSet

7

-

0,6

13

viewTable

11

-

1,0

14

ToExcel

0

1

4

15

SettingApp

0

-

0,2

Итого

64

13,6

Таблица 11 – Трудоемкость разработки компонентов проекта

Компонент

Число диало­говых эл-­тов

Число вы­числяе­мых про­цедур

Число страниц печат­ной формы

Трудо­емкость разра­ботки, ч.

1

MainWindow

2

0

0

1

2

WaddNewTable

4

1

0

6

Продолжение таблицы 11

Компонент

Число диало­говых элемен­тов

Число вы­числяе­мых про­цедур

Число страниц печат­ной формы

Трудо­емкость разра­ботки, ч.

4

Wset

2

1

0

5

5

WsetEdit

8

1

0

16

6

WTable

16

0

1

11

7

WTableEdit

8

1

0

8

8

Wdoctors

6

1

1

10

9

WdoctorsEdit

3

1

0

6

10

Wpositions

6

1

1

10

11

WpositionsEdit

3

1

0

6

12

viewSet

0

1

0

4

13

viewTable

0

1

0

4

14

ToExcel

0

0

0

0,5

15

SettingApp

0

0

0

0,5

Итого

61

12

4

108

Таблица 12 – Полная трудоемкость разработки программного обеспечения

Документ

Трудо­емкость разра­ботки, ч.

1

Структура базы данных и запросы

13,6

2

Архитектура проекта

108

Итого

121,6

Таблица 13 – Календарный план-график разработки

№ п/п

Наименование компонента

Сроки выполнения

Отметка о выполнении

Начало

Окончание

1

MainWindow

15.03.2014

15.03.2014

выполнено

2

WaddNewTable

18.03.2014

18.03.2014

выполнено

3

Wfunction

19.03.2014

20.03.2014

выполнено

4

Wset

20.03.2014

20.03.2014

выполнено

5

WsetEdit

21.03.2014

21.03.2014

выполнено

6

WTable

21.03.2014

21.03.2014

выполнено

7

WTableEdit

21.03.2014

21.03.2014

выполнено

8

Wdoctors

26.03.2014

26.03.2014

выполнено

9

WdoctorsEdit

27.03.2014

10.04.2014

выполнено

10

Wpositions

11.04.2014

11.04.2014

выполнено

11

WpositionsEdit

11.04.2014

11.04.2014

выполнено

5 Разработка программных компонентов

Данный раздел дипломного проекта демонстрирует владение компетенциями программиста (ComputerProgrammer) (ПК3, ПК5, ПК9). Специалист осуществляет преобразование проектных спецификаций в детальное описание алгоритмов и объектов разрабатываемых программ с последующим кодированием, тестированием и документированием программ.

В данном разделе представлены документы:

  • отчёт по работе по проекту АСОИ «Расчет врачебной функции»;

  • руководство пользователя.

5.1 Документ «Отчёт о работе по проекту АСОИ бизнес-процесса управления врачебной функции в филиале «Поликлиника №7 г.Могилева»».

Таблица 14 - Отчёт о работе по проекту АСОИ бизнес-процесса управления врачебной функции в филиале «Поликлиника №7 г.Могилева»».

Дата

Компонент

Вид

Время разработки, ч

1

2

3

4

15.03

2014

WdoctorsEdit

public WdoctorsEdit(polic7Entities p7, spr_doctors upd, Wdoctors wdoctors){

InitializeComponent();

this.p7 = p7;

this.upd = upd;

this.wdoctors = wdoctors;

label1.Content = "Код: " + upd.id_doctor.ToString();

tb.Text = upd.fio;

}

private void Button_Click_1(object sender, RoutedEventArgs e)

{

5

Продолжение таблицы 14

1

2

3

4

upd.fio = tb.Text;

p7.SaveChanges();

wdoctors.updateDataGrid();

MessageBox.Show("Данные обновлены успешно", "Успех");

this.Close();

}

18.03

2014

WaddNewTable

public WaddNewTable()

{

InitializeComponent();

cb1.ItemsSource = SettingsApp.month;

cb1.SelectedIndex = 0;

}

private void Button_Click_1(object sender, RoutedEventArgs e)

{

this.Close();

}

private void Button_Click_2(object sender, RoutedEventArgs e)

{

string id = tb1.Text.Substring(2) + (cb1.SelectedIndex+10).ToString();

WTable wt = new WTable(id);

wt.Show(); }

16

Продолжение таблицы 14

1

2

3

4

19.03

2014

Wfunction

public Wfunction(string id)

{

InitializeComponent();

this.id = Convert.ToInt32(id);

this.ids = id.Substring(0, 2);

this.m = SettingsApp.month[Convert.ToInt32(id.Substring(2)) - 10];

updateDataGrid();

//wnd.Height = 455;

}

public void updateDataGrid()

{

p7 = new polic7Entities();

//datagrid

IEnumerable<spr_positions_doctors> spd = from s in p7.spr_positions_doctors

where s.id_date == this.id

select s;

ObservableCollection<spr_positions_doctors> obs = new ObservableCollection<spr_positions_doctors>(spd);

dg_func.ItemsSource = obs;

}

private void

11

Продолжение таблицы 14

1

2

3

4

dg_func_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)

{

}

private void dg_func_SelectionChanged(object sender, SelectionChangedEventArgs e)

{

wnd.Height = 585;

var dg = (DataGrid)sender;

int pos = 0;

if (dg.SelectedIndex >= 0)

{

IEnumerable<spr_positions_doctors> spd = from s in p7.spr_positions_doctors

where s.id_date == this.id

select s;

spr_positions_doctors doctor = spd.ElementAt<spr_positions_doctors>(dg.SelectedIndex);

pos = doctor.id_position;

spr_set sets = (from s in p7.spr_set

where s.id_position == pos

select s).First();

tf1.Text = sets.speopl.Replace('.', ',');

tf2.Text = sets.shour.Replace('.', ',');

Продолжение таблицы 14

1

2

3

4

tf3.Text = doctor.days.ToString().Replace('.', ',');

double f = ((double)(ds(tf1.Text) * ds(tf2.Text) * ds(tf3.Text)));

tf4.Text = f.ToString().Replace('.', ',');

tpk1.Text = sets.Np.Replace('.', ',');

tpk2.Text = sets.No.Replace('.', ',');

tpk3.Text = sets.Nd.Replace('.', ',');

tpk4.Text = sets.Nop.Replace('.', ',');

tp1.Text = doctor.perv.ToString().Replace('.', ',');

tp2.Text = doctor.povtor.ToString().Replace('.', ',');

tp3.Text = doctor.profosm.ToString().Replace('.', ',');

tp4.Text = doctor.dom.ToString().Replace('.', ',');

tp5.Text = doctor.operac.ToString().Replace('.', ',');

double p = (double)(doctor.perv + doctor.povtor * ds(tpk1.Text) + doctor.profosm * ds(tpk2.Text) + doctor.dom * ds(tpk3.Text) + doctor.operac * ds(tpk4.Text));

tp6.Text = p.ToString().Replace('.', ',');

double d = p / f;

Продолжение таблицы 14

1

2

3

4

string sd = String.Format("Д = {0,-10} / {1,-10} = {2,-10:F}",p,f,d);

l3.Content = sd;

doctor.function = p.ToString("F");

p7.SaveChanges();

updateDataGrid();

}

}

double ds(string s)

{

s = s.Replace(',', '.');

return Convert.ToDouble(s);

}

private void Button_Click_1(object sender, RoutedEventArgs e)

{

}

private void Button_Click_2(object sender, RoutedEventArgs e)

{

ToExcel te = new ToExcel(this.ids, this.m);

Продолжение таблицы 14

1

2

3

4

int k =0;

IEnumerable<spr_positions> _pos = from s in p7.spr_positions

select s;

foreach (spr_positions sp in _pos)

{

if (isHaveEl(sp))

{

te.entityToExcel(k += 7, getSets(sp.id_position), getSumPositions(sp.id_position), "ИТОГО ПО: " + sp.position);

IEnumerable<spr_positions_doctors> _spd = getSPD(sp.id_position);

foreach (spr_positions_doctors spd in _spd)

te.entityToExcel(k+=5, getSets(sp.id_position), spd, spd.spr_doctors.fio);

}

}

}

//проверка есть ли элементы в списке

private bool isHaveEl(spr_positions s)

{

int count = (from x in p7.spr_positions_doctors

where x.id_position == s.id_position && x.id_date == this.id

select x).Count<spr_positions_doctors>();

if (count > 0) return true; else return false;

}

Продолжение таблицы 14

1

2

3

4

//функция для подсчета итогов по должностям

private spr_positions_doctors getSumPositions(int pos)

{

spr_positions_doctors result = new spr_positions_doctors();

result.function ="0";

result.perv = 0;

result.povtor = 0;

result.operac = 0;

result.profosm = 0;

result.days = 0;

result.dom = 0;

IEnumerable<spr_positions_doctors> _spd = from x in p7.spr_positions_doctors

where x.id_position == pos && x.id_date == this.id

select x;

foreach (spr_positions_doctors s in _spd)

{

result.function = (Convert.ToDouble(result.function) + Convert.ToDouble(s.function)).ToString();

result.perv += s.perv;

result.povtor += s.povtor;

result.operac += s.operac;

result.profosm += s.profosm;

result.days =s.days;

Продолжение таблицы 14

1

2

3

4

result.dom +=s.dom;

}

return result;

}

//функция получения набора коэффициентов

private spr_set getSets(int pos)

{

spr_set s = (from ss in p7.spr_set

where ss.id_position == pos

select ss).First();

return s;

}

//функция получения докторов по ид должности

private IEnumerable<spr_positions_doctors> getSPD(int pos)

{

IEnumerable<spr_positions_doctors> spd = from s in p7.spr_positions_doctors

where s.id_date == this.id && s.id_position == pos

select s;

return spd;

}

20.03

2014

Wset

private void dgset_MouseDoubleClick(object sender, MouseButtonEventArgs e)

{

8

Продолжение таблицы 14

1

2

3

4

var dg = (DataGrid)sender;

spr_set sets = null;

// MessageBox.Show(dg.SelectedIndex.ToString());

if (dg.SelectedIndex >= 0 && dg.SelectedIndex < dg.Items.Count)

{

IEnumerable<spr_set> spd = from s in p7.spr_set select s;

spr_set sid = spd.ElementAt(dg.SelectedIndex);

sets = (from s in p7.spr_set

where s.id_position == sid.id_position

select s).Single();

WsetEdit wte = new WsetEdit(sets, this);

wte.Show();

}

}

21.03

2014

WsetEdit

public WsetEdit(spr_set sets, Wset wset)

{

InitializeComponent();

this.sets = sets;

this.wset = wset;

text1.Content = sets.spr_positions.position;

t1.Text = sets.speopl;

t2.Text = sets.shour;

t3.Text = sets.Np;

t4.Text = sets.No;

10

Продолжение таблицы 14

1

2

3

4

t5.Text = sets.Nd;

t6.Text = sets.Nop;

p7 = new polic7Entities();

}

private void Button_Click_1(object sender, RoutedEventArgs e)

{

spr_set setsN = (from s in p7.spr_set

where sets.id_set == s.id_set

select s).Single<spr_set>();

setsN.speopl = t1.Text;

setsN.shour = t2.Text;

setsN.Np = t3.Text;

setsN.No = t4.Text;

setsN.Nd = t5.Text;

setsN.Nop = t6.Text;

p7.SaveChanges();

MessageBox.Show("Данные обновлены!", "Успех");

wset.updateDataGrid();

this.Close();

}

21.03

2014

toExcel

public void entityToExcel(int k, spr_set s, spr_positions_doctors d,string title)

{

ec = sheet.get_Range("A" + k, "T" + (k + 3));

ec.HorizontalAlignment =

10

Продолжение таблицы 14

1

2

3

4

Excel.Constants.xlCenter;

ec.VerticalAlignment = Excel.Constants.xlCenter;

//граница таблицы

Excel.XlBordersIndex BorderIndex;

BorderIndex = Excel.XlBordersIndex.xlEdgeLeft;

ec.Borders[BorderIndex].Weight = Excel.XlBorderWeight.xlThick;

ec.Borders[BorderIndex].LineStyle = Excel.XlLineStyle.xlContinuous;

ec.Borders[BorderIndex].ColorIndex = 0;

BorderIndex = Excel.XlBordersIndex.xlEdgeTop;

ec.Borders[BorderIndex].Weight = Excel.XlBorderWeight.xlThick;

ec.Borders[BorderIndex].LineStyle = Excel.XlLineStyle.xlContinuous;

ec.Borders[BorderIndex].ColorIndex = 0;

BorderIndex = Excel.XlBordersIndex.xlEdgeBottom;

ec.Borders[BorderIndex].Weight = Excel.XlBorderWeight.xlThick;

ec.Borders[BorderIndex].LineStyle = Excel.XlLineStyle.xlContinuous;

ec.Borders[BorderIndex].ColorIndex = 0;

BorderIndex = Excel.XlBordersIndex.xlEdgeRight;

ec.Borders[BorderIndex].Weight = Excel.XlBorderWeight.xlThick;

Продолжение таблицы 14

1

2

3

4

//заголовок таблтцы

ec = sheet.get_Range("A" + k, "T" + k);

ec.Merge();

ec.Value2 = title;

BorderIndex = Excel.XlBordersIndex.xlEdgeBottom;

ec.Borders[BorderIndex].Weight = Excel.XlBorderWeight.xlThin;

ec.Borders[BorderIndex].LineStyle = Excel.XlLineStyle.xlContinuous;

ec.Borders[BorderIndex].ColorIndex = 0;

//разметка ячеек

ec = sheet.get_Range("B" + (k + 2), "B" + (k + 2));

ec.Borders.Weight = Excel.XlBorderWeight.xlThin;

ec.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;

ec.Borders.ColorIndex = 0;

ec = sheet.get_Range("D" + (k + 2), "D" + (k + 2));

ec.Borders.Weight = Excel.XlBorderWeight.xlThin;

ec.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;

ec.Borders.ColorIndex = 0;

ec = sheet.get_Range("H" + (k + 2), "H" + (k + 2)); ec.Borders.Weight = Excel.XlBorderWeight.xlThin;

Продолжение таблицы 14

1

2

3

4

ec.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;

ec.Borders.ColorIndex = 0;

ec = sheet.get_Range("L" +( k + 2), "L" + (k + 2));

ec.Borders.Weight = Excel.XlBorderWeight.xlThin;

ec.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;

ec.Borders.ColorIndex = 0;

ec = sheet.get_Range("P" + (k + 2), "P" + (k + 2));

ec.Borders.Weight = Excel.XlBorderWeight.xlThin;

ec.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;

ec.Borders.ColorIndex = 0;

ec = sheet.get_Range("F" + (k + 1), "F" + (k + 1));

ec.Borders.Weight = Excel.XlBorderWeight.xlThin;

ec.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;

ec.Borders.ColorIndex = 0;

ec = sheet.get_Range("T" + (k + 2), "T" + (k + 2));

ec.Borders.Weight = Excel.XlBorderWeight.xlThick;

ec.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;

Продолжение таблицы 14

1

2

3

4

ec.Borders.ColorIndex = 0;

ec = sheet.get_Range("H" + (k + 1), "H" + (k + 1));

ec.Borders.Weight = Excel.XlBorderWeight.xlThick;

ec.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;

ec.Borders.ColorIndex = 0;

ec = sheet.get_Range("F" + (k + 3), "F" + (k + 3));

ec.Borders.Weight = Excel.XlBorderWeight.xlThick;

ec.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;

ec.Borders.ColorIndex = 0;

//вставка шаблона

int kor = 1;

ec = sheet.get_Range("A" + (k + kor), "A" + (k + kor));

ec.Value2 = "Ф =";

ec = sheet.get_Range("C" + (k + kor), "C" + (k + kor));

ec.Value2 = "*";

ec = sheet.get_Range("E" + (k + kor), "E" + (k + kor));

ec.Value2 = "*";

ec = sheet.get_Range("G" + (k + kor), "G" + (k+ kor));

Продолжение таблицы 14

1

2

3

4

11.04

2014

Wpositions

private void Button_Click_2(object sender, RoutedEventArgs e)

{ int id = 0;

try

id = Convert.ToInt32(tb2.Text);

spr_positions upd = (from s in p7.spr_positions where s.id_position == id

select s).First(); WpositionsEdit wed = new WpositionsEdit(p7, upd, this);

wed.Show();

}

catch (Exception exc)

{

MessageBox.Show("Некорректные данные или должности с таким кодом не существует", "Ошибка");

}

}

4

11.04

2014

WpositionsEdit

public WpositionsEdit(polic7Entities p7, spr_positions upd, Wpositions wpositions)

{

// TODO: Complete member initialization

InitializeComponent();

this.p7 = p7;

this.upd = upd;

this.wpositions = wpositions;

label1.Content = "Код: " + upd.id_position;

tb.Text = upd.position;

}

4

5.2 Документ «Руководство пользователя»

В данном документе описывается процедура работы с разработанным программным продуктом.

  1. Выполнить вход в систему: ввести логин и пароль на форме «Логин».

Рисунок 3 – Форма «Логин»

Если логин или пароль введены неверно, система выдаст предупреждение.

  1. На открывшейся форме «Выбор отчетного периода» выбрать отчетный период и нажать кнопку далее.

Рисунок 4 – Форма «Выбор отчетного периода»

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

  • отчеты, для формирования отчетов о количестве посещений по врачам, а так же по различным справочникам;

  • справочники, для ввода, редактирования, удаления данных из справочников;

  • расчет вр.функции, для расчета врачебный функции за определенный отчетный период.

Рисунок 5 – Меню формы «Учет количества посещений»

Рисунок 6 – Форма «Учет количества посещений»

На данной форме пользователь может добавить новую запись в базу, редактировать имеющуюся информацию, удалить данные из базы о количестве посещений.

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

Рисунок 7 –Форма «Учет количества посещений». Добавление записи

  1. Для того чтобы изменить запись в базе необходимо щелкнуть двойным кликом левой кнопкой мыши по соответствующей строке, и в появившемся окне внести соответствующие изменения и нажать кнопку «Добавить»

Рисунок 8 – Форма «Редактирование количества посещений»

  1. Для того чтобы удалить запись из базы необходимо выделить нужную запись и нажать на кнопку Del на клавиатуре.

  2. Для редактирование справочника, необходимо зайти через меню в соответствующий справочник, и при необходимости введя код, записи, произвести необходимые действия. Все справочники редактируются аналогично.

Рисунок 9 – Формы «Редактирование коэффициентов перевода» и «Коэффициенты перевода»

  1. Для расчета врачебной функции необходимо на форме «Учет количества посещений» нажать кнопку «Расчет вр.функции», после чего откроеться форма «Расчет врачебной функции»

Рисунок 10 – Форма «Расчет врачебной функции»

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

Рисунок 11 – Форма «Расчет врачебной функции»

  1. Для формирования документа необходимо нажать кнопку «в Excel»

Рисунок 12 – Форма «Расчет врачебной функции». Формирование документа

Рисунок 13 – Документ «Расчет врачебной функции»

  1. Работа с другими отчетами аналогична работе с документом «Расчет врачебной функции.

6 Развёртывание программного обеспечения

Данный раздел дипломного проекта демонстрирует владение компетенциями системного администратора (ПК10, ПК11). Системный администратор (ComputerSystemAdministrator) обеспечивает техническую поддержку пользователей цифровых устройств, выполняет работы по развёртыванию, конфигурированию программных комплексов.

Системный администратор разрабатывает диаграммы компонентов и размещения.

На диаграмме компонентов указываются компоненты программы, которые должны быть включены в программный модуль для нормальной работы АСОИ.

Диаграмма размещения отражает физические взаимосвязи между программными и аппаратными компонентами системы.

Диаграмма компонентов представлена в графическом материале «Диаграмма компонентов», лист 1.

Диаграмма размещения представлена в графическом материале «Диаграмма размещения», лист 1.

7 Организационно-экономическая часть

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]