- •«Разработка информационной системы
- •Техническое задание Концепция проекта
- •Требования к информационной системе
- •Состав запросов к бд
- •Исходные отношения Информационные объекты бд
- •Связи и отношения между информационными объектами
- •Требования к целостности системы
- •Даталогическое проектирование Система управления базой данных
- •Таблицы в составе бд
- •Клиентский интерфейс
- •Способ подключения к базе данных
- •Функциональность приложения
- •Состав и реализация форм
- •Диаграмма связи форм в клиентском приложении
- •Алгоритмы работы и архитектура информационной системы
- •Механизмы взаимодействия «клиент-сервер»
- •Логика на стороне сервера
- •Организационное проектирование
- •Источники информации
Функциональность приложения
Вывод информации осуществляется в таблицы DataGridView, ввод информации осуществляется через текстовые поля TextBox, выпадающие списки ComboBox, элементы ввода числовых значений numericUpDown, элементы выбора CheckBox, элементы выбора даты и времени DataTimePiker.
Для экспорта таблицы в формате xlsx используется сервер автоматизации Excel. А именно .Net сборка взаимодействия с приложениями Microsoft Office. Применяется объект Microsoft.Office.Interop.Excel.
Состав и реализация форм
Форма авторизации (enter) позволяет ограничить доступ к работе с приложением.
После запуска клиента происходит соединение с базой данных. В форму авторизации добавлены объекты DataSet, BindingSource и TableAdapter для таблицы пользователей. При загрузке формы вызывается метод чтения записей из указанной таблицы:
userTableAdapter.Fill(projects5thBaseDataSet.user);
При этом автоматически происходит вызов стандартного метода доступа к данным DataSet через BindingSource. После заполнения таблицы пользователей можно обращаться к значениям её полей через коллекцию таблиц DataSet:
projects5thBaseDataSet.user.Rows[i]["name"]
Для идентификации пользователя осуществляется перебор имен и соответствующих им паролей с целью поиска соответствия введённым данным. В случае успеха определяется тип пользователя, задающий уровень доступа к системе.
В соответствии с выявленным уровнем доступа вызываются публичные методы основной формы с целью скрытия элементов, не соответствующих текущему уровню.
После прохождения авторизации вызывается основная клиентская форма.
Основная (main) форма позволяет осуществлять наблюдение за состоянием проектов, а также вызывать формы, реализующие другие функции.
Рабочая область формы содержит таблицу, привязанную к хранимой процедуре на выборку «горящих» проектов. Из этой таблицы осуществляется экспорт в файл xlsx.
В режиме полного доступа на форме расположены три кнопки, вызывающие формы проектов, клиентов и пользователей соответственно. Приложение имеет многооконный интерфейс, таким образом, единовременно может быть открыто до четырёх окон.
Форма управления проектами (projects) позволяет просматривать данные о проектах, вызывать формы добавления или изменения записи о проекте или составляющей (под-)задаче, а также удалять (под-)задачи и закрывать проекты.
Рассмотрим механизмы работы с данными на примере этой формы (для форм клиентов и сотрудников, а также для задач используются аналогичные механизмы).
Основная рабочая область формы содержит таблицу DataGridView, формируемую «вручную», в итерационной работе с записями таблицы задач в коллекции таблиц DataSet. Цикл осуществляет заполнение соответствующего столбца в зависимости от типа задачи (задача/подзадача). Кроме того во вложенном цикле производится замена идентификатора сотрудника-руководителя на его имя (используется таблица пользователей в коллекции таблиц DataSet).
Выпадающих список связан с полем имени проекта в DataSet. При изменении значения происходит обновление таблицы (под-)задач DataGridView. Таблица формируется «вручную», в итерационной работе с записями таблицы задач в коллекции таблиц DataSet. Путём выборки значений по идентификатору проекта из коллекции таблиц:
projects5thBaseDataSet.Tables["task"].Rows[i]["idProject"]
Цикл осуществляет заполнение соответствующего столбца в зависимости от типа задачи (задача/подзадача). Кроме того во вложенном цикле производится замена идентификатора сотрудника-руководителя на его имя (используется таблица пользователей в коллекции таблиц DataSet).
Сформированные строки добавляются в DataGridView методом add(row).
Справа от ComboBox расположены три кнопки: создание, изменение и удаление (знаки +, -, * соответвственно). Этот интерфейс используется также для работы с записями о клиентах, сотрудниках и задачах.
При нажатии кнопки создания вызывается форма проекта, на которой в текстовом поле и выпадающих списках, связанных с соответствующими столбцами в БД, задаются значения полей нового объекта (а именно наименование, клиент, руководитель и крайний срок). При подтверждении ввода формируется новая строка и добавляется в соответствующую таблицу, путём вызова стандартного метода:
projects5thBaseDataSet.Tables["project"].Rows.Add(row);
this.projectTableAdapter.Update(projects5thBaseDataSet.project);
При нажатии кнопки изменения также вызывается форма проекта. Но предварительно осуществляется её заполнение текущими значениями для изменяемого объекта. Через свойство формы передаётся идентификатор изменяемого объекта (текущий объект в выпадающем списке):
FormProject fp = new FormProject();
fp.preLoad();
fp.modId = Convert.ToInt32(comboBoxProjects.SelectedValue.ToString());
Предварительно осуществляется инициализация таблиц путём вызова методов TableAdapter.Fill(DataSet.Table) для таблиц проектов, таблиц и клиентов (все эти таблицы участвуют в представлении данных на форме проекта).
При подтверждении сделанных изменений вызывается хранимая процедура обновления записи:
Projects5thBaseDataSetTableAdapters.QueriesTableAdapter qTA = new Projects5thBaseDataSetTableAdapters.QueriesTableAdapter();
DateTime tS = Convert.ToDateTime (projects5thBaseDataSet.project.Rows[mN]["timeStart"]);
DateTime tF = Convert.ToDateTime (projects5thBaseDataSet.project.Rows[mN]["timeFin"]);
qTA.project_mod(mId, textBoxName.Text, (int)comboBoxUser.SelectedValue, (int)comboBoxClient.SelectedValue, tS, tF, dateTimePickerDeadline.Value);
Следует заметить, что значения времени начала и окончания выполнения проекта не доступны для редактирования, поскольку их формирование должно происходить на основании входящих в их состав подзадач.
Удаление также осуществляется путём вызова хранимой процедуры удаления записи:
Projects5thBaseDataSetTableAdapters.QueriesTableAdapter qTA = new Projects5thBaseDataSetTableAdapters.QueriesTableAdapter();
qTA.project_del(Convert.ToInt32(comboBoxProjects.SelectedValue.ToString()));
Форма (под-)задачи (task) позволяет создавать запись о новой (под-)задаче и изменять свойства существующих (под-)задач.
Работа с таблицей задач аналогична работе с таблицей проектов (панель кнопок +, -, *). Различие лишь в управляющем элементе, из которого извлекается идентификатор изменяемой/удаляемой записи. Для задач – это таблица задач, где значение получается по текущей выделенной строке, тогда как для проектов – это значение выпадающего списка.
Форма заказчиков (clients) позволяет просматривать данные о заказчиках, вызывать форму добавления или изменения записи о заказчике, а также удалять записи о заказчиках. В отличие от формы проектов заполнение таблицы осуществляется автоматически (поскольку не требуется дополнительной обработки данных перед выводом).
Форма заказчика (client) служит для создания записи о новом заказчике и изменения свойств существующих заказчиков.
Форма сотрудников (users) позволяет просматривать данные о сотрудниках, вызывать форму добавления или изменения записи о сотруднике, а также удалять записи о сотрудниках. При формировании таблицы идентификатор специализации сотрудника заменяется её названием (аналогично таблице задач на форме проектов).
Форма сотрудника (user) служит для создания записи о новом сотруднике и изменения свойств существующих сотрудников.