Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

УТС 7 семестр / ЛР1 Информационная подсистема КОНТРОЛЬ ИСПОЛНЕНИЯ ПОРУЧЕНИЙ для некоторой организации

.docx
Скачиваний:
4
Добавлен:
11.06.2023
Размер:
464.54 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра АПУ

отчет

по лабораторной работе №1

по дисциплине «Технология программирования»

Тема: Информационная подсистема КОНТРОЛЬ ИСПОЛНЕНИЯ ПОРУЧЕНИЙ для некоторой организации

Вариант № 2

Студент гр. 8391

Гоглев А.А.

Студент гр. 8391

Шушков Д.А.

Студент гр. 8391

Маликов А.А.

Преподаватель

Литвинов В.Л.

Санкт-Петербург

2021

Задание на разработку информационной системы

Информационная система предназначена для:

  1. Руководителей организации

  2. Руководителей подразделений

  3. Оператор

Функционал информационной системы:

  1. Ввод данных о поручениях

  2. Редактирование данных о поручениях

  3. Просмотр поручений по заданной дате

  4. Ежедневный вывод поручений при старте

Информационная система автоматизирует:

  1. Хранение данных о поручениях

  2. Контроль соответствия поручений

  3. Назначение поручений

  4. Редактирование данных

  5. Мониторинг изменения данных

Информационная система обеспечивает:

  1. Связь данных у руководителя организации, руководителя подразделения и оператора

  2. Навигацию по данным

Преимущества, которые получит заказчик при внедрении ИС:

  1. Повышение качества исполнения поручений

  2. Упрощение работы сотрудников организации

  3. Отказ от излишних коммуникаций между подразделениями

  4. Ускорение обращения информации

При разработке используем методологию RAD:

  1. Планирование — совокупность требований, полученных при системном планировании и анализе процедуры разработки жизненного цикла (SDLC). На этом этапе пользователи, менеджеры и IT-специалисты обсуждают задачи проекта, его объём, системные требования, а также сложности, которые могут возникнуть при разработке. Фаза завершается согласованием ключевых моментов с RAD-группой и получением от руководителей проекта разрешения на продолжение.

  2. Пользовательское проектирование — на протяжении данного этапа пользователи, взаимодействуя с системными аналитиками, разрабатывают модели и прототипы, которые включают в себя все необходимые системные функции. Для перевода пользовательских прототипов в рабочие модели RAD-группа обычно использует технику объединенной разработки приложений (JAD) и CASE-инструменты. Пользовательское проектирование оказывается длительным интерактивным процессом, который позволяет пользователям понять, изменить и в конечном счёте выбрать рабочую модель, отвечающую их требованиям.

  3. Конструирование — этап, в котором основная задача заключается в разработке программ и приложений. Аналогична стадии «реализация» в SDLC. В RAD, однако, пользователи продолжают принимать участие и по-прежнему могут предлагать изменения или улучшения в виде разработанных ими докладов. В их задачи входит программирование и разработка приложений, написание кода, интеграция модулей и системное тестирование.

  4. Переключение — включает в себя операции по конверсии данных, тестирование, переход на новую систему и тренировку пользователей. По своим задачам напоминает финальную стадию SDLC. Сравнивая с традиционными методами разработки ПО, весь процесс оказывается сжатым по времени. Как результат, новая система оказывается быстрее построенной, доставленной до заказчика и установленной на рабочих местах.

Функциональная модель и диаграммы использования

Общая функциональная модель информационной системы представлена на рисунке 1.

Рисунок 1-Общая функциональная модель

На рисунке 2 представлена детализация варианта использования «Ввод, просмотр, редактирование, удаление»

Рисунок 2-Детализация «Ввод, просмотр, редактирование, удаление»

На рисунке 3 представлена детализация варианта использования «Ввод, просмотр, редактирование»

Рисунок 3-Детализация «Ввод, просмотр и редактирование»

На рисунке 4 представлена детализация варианта использования «Просмотр, редактирование»

Рисунок 4-Детализация «Ввод, просмотр и редактирование»

Комментарии к «информация о поручениях»:

  • Название поручения

  • Дата назначения поручения

  • ФИО сотрудника, назначившего поручение

  • ФИО сотрудника, получившего поручение

  • ID-номер поручения

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

  • Дата фактического исполнения

  • Содержание поручения

Комментарии к «информация о сотрудниках»:

  • ФИО

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

  • Должность

  • Образование

  • ID-номер поручения

Для более быстрой навигации при редактировании предполагается поиск идентификационному номеру.

Идентификационный номер поручения/сотрудника (ID-номер) не может быть изменен.

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

Логическая структура базы данных

Структура базы данных была разработана в программном обеспечении MS Access и представлена на рисунке 5. Данная структура может изменяться при разработке приложения.

Рисунок 5 - Структура БД

Разработка приложения

Для реализации проекта были выбраны следующие технологии:

С#, Windows Forms, Microsoft Access, .NET. Такой выбор обуславливается простотой использования и умение работать с данными технологиями.

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

public static string dbConnectString = "Provider = Microsoft.JET.OLEDB.4.0; Data Source = DB.mdb";

public OleDbConnection DBConnection;

public loginForm()

{

InitializeComponent();

DBConnection = new OleDbConnection(dbConnectString);

DBConnection.Open();

}

А тут фрагмент непосредственно авторизации:

String login = textBox1.Text;

String password = textBox2.Text;

DataTable table = new DataTable();

OleDbDataAdapter adapter = new OleDbDataAdapter();

String query = "Select * FROM Пользователи WHERE Пользователи.Логин = \"" + login + "\" AND Пользователи.Пароль = \"" + password + "\"";

OleDbCommand command = new OleDbCommand(query, DBConnection);

adapter.SelectCommand = command;

adapter.Fill(table);

if (table.Rows.Count > 0)

{

Hide();

String type = table.Rows[0][3].ToString();

String id = table.Rows[0][2].ToString();

if (type == "руководитель")

{

mainFormRukovod mainFormRukovod = new mainFormRukovod(id);

Hide();

mainFormRukovod.Show();

}

if (type == "оператор")

{

mainFormOper mainFormOper = new mainFormOper(id);

mainFormOper.Show();

}

if (type == "исполнитель")

{

mainFormRab mainForm = new mainFormRab(id);

mainForm.Show();

}

}

else

{

MessageBox.Show("Неверный логин и/или пароль");

}

На рисунке 6 представлено окно авторизации и сообщение об ошибке при неправильных данных.

Рисунок 6 – Окно авторизации.

При входе в аккаунт выбирает одно из трех окон для каждого типа пользователя, рассмотрим функционал руководителя. Окно представлено на рисунке 7. Он имеет доступ ко всем таблицам

Рисунок 7 – Окно руководителя

На рисунке 8 представлена таблица пользователей

Рисунок 8 – Таблица пользователей

На рисунке 9 таблица сотрудников, а на рисунке 10 таблица поручений.

Рисунок 9 – Таблица сотрудников

Рисунок 10 – Таблица всех поручений

Программный код реализации вывода таблиц на экран представлен далее:

if (flag == 1)

{

dataGridView1.Rows.Clear();

dataGridView1.Columns.Clear();

String query="";

if (taken == false && expired == false)

query = "SELECT * FROM Поручения WHERE ВзятоВИсполнение = False AND Просрочено = False";

if (taken == true && expired == false)

query = "SELECT * FROM Поручения WHERE ВзятоВИсполнение = True AND Просрочено = False";

if (expired == true && taken == false)

query = "SELECT * FROM Поручения WHERE ВзятоВИсполнение = False AND Просрочено = True";

if (taken == true && expired == true)

query = "SELECT * FROM Поручения";

OleDbCommand command = new OleDbCommand(query, DBConnection);

OleDbDataReader reader = command.ExecuteReader();

dataGridView1.ColumnCount = reader.FieldCount;

dataGridView1.Columns[0].Name = "номерПоручения";

dataGridView1.Columns[1].Name = "названиеПоручения";

dataGridView1.Columns[2].Name = "отделДляПоручения";

dataGridView1.Columns[3].Name = "ДатаВыдачи";

dataGridView1.Columns[4].Name = "ДатаОкончания";

dataGridView1.Columns[5].Name = "ВзятоВИсполнение";

dataGridView1.Columns[6].Name = "Просрочено";

dataGridView1.Columns[7].Name = "КемВыдано";

while (reader.Read())

{

dataGridView1.Rows.Add(reader["номерПоручения"], reader["названиеПоручения"], reader["отделДляПоручения"], reader["ДатаВыдачи"], reader["ДатаОкончания"], reader["ВзятоВИсполнение"], reader["Просрочено"], reader["КемВыдано"]);

}

}

if (flag == 2)

{

dataGridView1.Rows.Clear();

dataGridView1.Columns.Clear();

String query = "SELECT * FROM Сотрудники";

OleDbCommand command = new OleDbCommand(query, DBConnection);

OleDbDataReader reader = command.ExecuteReader();

dataGridView1.ColumnCount = reader.FieldCount;

dataGridView1.Columns[0].Name = "idСотрудника";

dataGridView1.Columns[1].Name = "ФИО";

dataGridView1.Columns[2].Name = "Стаж";

dataGridView1.Columns[3].Name = "Отдел";

dataGridView1.Columns[4].Name = "idДолжности";

while (reader.Read())

{

dataGridView1.Rows.Add(reader["idСотрудника"], reader["ФИО"], reader["Стаж"], reader["Отдел"], reader["idДолжности"]);

}

}

if (flag == 3)

{

dataGridView1.Rows.Clear();

dataGridView1.Columns.Clear();

String query = "SELECT * FROM Пользователи";

OleDbCommand command = new OleDbCommand(query, DBConnection);

OleDbDataReader reader = command.ExecuteReader();

dataGridView1.ColumnCount = reader.FieldCount;

dataGridView1.Columns[0].Name = "Логин";

dataGridView1.Columns[1].Name = "Пароль";

dataGridView1.Columns[2].Name = "idСотрудника";

dataGridView1.Columns[3].Name = "ТипПользователя";

while (reader.Read())

{

dataGridView1.Rows.Add(reader["Логин"], reader["Пароль"], reader["idСотрудника"], reader["ТипПользователя"]);

}

}

if (flag == 4)

{

dataGridView1.Rows.Clear();

dataGridView1.Columns.Clear();

String query = "SELECT * FROM ВзятыеПоручения";

OleDbCommand command = new OleDbCommand(query, DBConnection);

OleDbDataReader reader = command.ExecuteReader();

dataGridView1.ColumnCount = reader.FieldCount;

dataGridView1.Columns[0].Name = "номерПоручения";

dataGridView1.Columns[1].Name = "idИсполнителя";

dataGridView1.Columns[2].Name = "датаВзятия";

dataGridView1.Columns[3].Name = "Исполнено";

dataGridView1.Columns[4].Name = "Дата фактического исполнения";

while (reader.Read())

{

dataGridView1.Rows.Add(reader["номерПоручения"], reader["idИсполнителя"], reader["датаВзятия"], reader["Исполнено"], reader["Дата фактического исполнения"]);

}

}

Функционал кнопок – это возможность создать, удалить, а также редактировать поручения, сотрудников и пользователей. Программный код представлен далее, редактирование осуществляется путем последовательного удаления и добавления строки:

void add()

{

if (flag == 1)

{

if (dataGridView1.SelectedRows.Count != 1 || dataGridView1.SelectedCells[7] == null)

{

MessageBox.Show("Выберите строку для добавления");

return;

}

int index = dataGridView1.SelectedRows[0].Index;

int flag1 = 0;

for (int i = 0; i < dataGridView1.ColumnCount; i++)

{

if (dataGridView1.Rows[index].Cells[i].Value == null)

flag1++;

}

if (flag1 != 0)

{

MessageBox.Show("Не все данный введены", "Ошибка");

return;

}

string num = dataGridView1.Rows[index].Cells[0].Value.ToString();

string name = dataGridView1.Rows[index].Cells[1].Value.ToString();

string otdel = dataGridView1.Rows[index].Cells[2].Value.ToString();

string gDate = dataGridView1.Rows[index].Cells[3].Value.ToString();

string oDate = dataGridView1.Rows[index].Cells[4].Value.ToString();

string query = "INSERT INTO Поручения VALUES(" + Convert.ToInt32(num) + ",'" + name + "', '" + otdel + "', '" + gDate + "', '" + oDate + "',False,False," + ID + ")";

OleDbCommand dbCommand = new OleDbCommand(query, DBConnection);

if (dbCommand.ExecuteNonQuery() != 1)

MessageBox.Show("Данные введены не верно!", "Ошибка!");

else

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

}

if (flag == 2)

{

if (dataGridView1.SelectedRows.Count != 1 || dataGridView1.SelectedCells[3] == null)

{

MessageBox.Show("Выберите строку для добавления");

return;

}

int index = dataGridView1.SelectedRows[0].Index;

int flag1 = 0;

for (int i = 0; i < dataGridView1.ColumnCount; i++)

{

if (dataGridView1.Rows[index].Cells[i].Value == null)

flag1++;

}

if (flag1 != 0)

{

MessageBox.Show("Не все данный введены", "Ошибка");

return;

}

string sotr = dataGridView1.Rows[index].Cells[0].Value.ToString();

string name = dataGridView1.Rows[index].Cells[1].Value.ToString();

string old = dataGridView1.Rows[index].Cells[2].Value.ToString();

string otdel = dataGridView1.Rows[index].Cells[3].Value.ToString();

string dolj = dataGridView1.Rows[index].Cells[4].Value.ToString();

string query = "INSERT INTO Сотрудники VALUES(" + Convert.ToInt32(sotr) + ",'" + name + "', '" + old + "', '" + otdel + "', " + Convert.ToInt32(dolj) + ")";

OleDbCommand dbCommand = new OleDbCommand(query, DBConnection);

if (dbCommand.ExecuteNonQuery() != 1)

MessageBox.Show("Данные введены не верно!", "Ошибка!");

else

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

}

if (flag == 3)

{

if (dataGridView1.SelectedRows.Count != 1 || dataGridView1.SelectedCells[3] == null)

{

MessageBox.Show("Выберите строку для добавления");

return;

}

int index = dataGridView1.SelectedRows[0].Index;

int flag1 = 0;

for (int i = 0; i < dataGridView1.ColumnCount; i++)

{

if (dataGridView1.Rows[index].Cells[i].Value == null)

flag1++;

}

if (flag1 != 0)

{

MessageBox.Show("Не все данный введены", "Ошибка");

return;

}

string log = dataGridView1.Rows[index].Cells[0].Value.ToString();

string pass = dataGridView1.Rows[index].Cells[1].Value.ToString();

string sotr = dataGridView1.Rows[index].Cells[2].Value.ToString();

string type = dataGridView1.Rows[index].Cells[3].Value.ToString();

string query = "INSERT INTO Пользователи VALUES('" + log + "','" + pass + "', " + Convert.ToInt32(sotr) + ", '" + type + "')";

OleDbCommand dbCommand = new OleDbCommand(query, DBConnection);

if (dbCommand.ExecuteNonQuery() != 1)

MessageBox.Show("Данные введены не верно!", "Ошибка!");

else

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

}

}

void delete()

{

if (flag == 1)

{

if (dataGridView1.SelectedRows.Count != 1 || dataGridView1.SelectedCells[7] == null)

{

MessageBox.Show("Выберите строку для удаления");

return;

}

string num = dataGridView1.SelectedCells[0].Value.ToString();

string query = "DELETE * FROM Поручения WHERE номерПоручения = " + Convert.ToInt32(num);

OleDbCommand dbCommand = new OleDbCommand(query, DBConnection);

dbCommand.ExecuteNonQuery();

}

if (flag == 2)

{

if (dataGridView1.SelectedRows.Count != 1 || dataGridView1.SelectedCells[3] == null)

{

MessageBox.Show("Выберите строку для удаления");

return;

}

string sotr = dataGridView1.SelectedCells[0].Value.ToString();

string query = "DELETE * FROM Сотрудники WHERE idСотрудника = " + Convert.ToInt32(sotr);

OleDbCommand dbCommand = new OleDbCommand(query, DBConnection);

dbCommand.ExecuteNonQuery();

}

if (flag == 3)

{

if (dataGridView1.SelectedRows.Count != 1 || dataGridView1.SelectedCells[3] == null)

{

MessageBox.Show("Выберите строку для удаления");

return;

}

string log = dataGridView1.SelectedCells[0].Value.ToString();

string query = "DELETE * FROM Пользователи WHERE Логин = '" + log + "'";

OleDbCommand dbCommand = new OleDbCommand(query, DBConnection);

dbCommand.ExecuteNonQuery();

}

}

В дальнейшем фрагменты кода не будут приводиться, с целью сохранить читабельность отчета. Весь код можно будет посмотреть в приложенном проекте.

Далее рассмотрим окно оператора, у него уже нет доступа таблице пользователей. При выборе всех поручения появляется возможность назначить исполнителей. Окно представлено на рисунке 11.

Рисунок 11 – Окно всех поручений

При выборе взятых поручений кнопка меняется так, что можно снять исполнителя. Окно представлено на рисунке 12.

Рисунок 12 – Окно взятых поручений

На рисунке 13 представлено окно сотрудников оно имеет функционал только для просмотра.

Рисунок 13 – Окно сотрудников

Все кнопки выполняют поставленные задачи.

Рассмотрим окно для исполнителей. Тут доступна только одна таблица Взятых Поручений, которая показывает поручения только для данного пользователя. Присутствует только одна кнопка “Сдать задачу”. Окно представлено на рисунке 14.

Рисунок 14 – Окно исполнителя.

После сдачи задачи окно представлено на рисунке 15.

Рисунок 15 – Окно исполнителя после сдачи поручения.

Вывод

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