Курсовой на C# — работа с БД, отчетами, диаграммами

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

На неделе нужно было сделать два других варианта курсовых. Поэтому решил описать процесс создания программы, чтобы и следующие работы выполнить быстрее, и описать алгоритм и нюансы работы с базой MS Access на C#. Может быть этот материал будет полезен и Вам. Работы делал в MS Visual Studio 2010, т.к. в наших ВУЗах свежий актуальный софт редкость (да и у студентов тоже). Возможно некоторых проблем не возникнет в более новых версиях студии.

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

 

Задание

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

И конкретное задание первого варианта:

Структура данных 1.
Абитуриенты по факультетам и специальностям
Фамилия | Экзаменационные оценки (Математика | Физика | Сочинение) | Сумма баллов
Специальности
Код специальности | Наименование | Факультет
Примечание: выполнить сортировку по убыванию суммы баллов с группировкой по факультетам и специальностям, вычислить количество абитуриентов по факультетам, специальностям, по вузу.

Варианты выбора пользовательских функций: Кнопки
Вариант диаграммы: Столбиковая

Полное задание на курсовой со всеми вариантами заданий: PPP_KP_2013.

 

Выполнение

По началу я делал все последовательно — создавал проект в студии, накидывал интерфейс, делал таблицы в Access, реализовывал работу с ними в приложении, затем переходил к созданию запросов в Access и работе с ними в приложении, продумывал какие отчеты, какие диаграммы строить на основе имеющихся данных. Так было проще втянуться в процесс и вспомнить некоторые подзабытые моменты работы со средой и курсовым. Но конечно правильнее сначала проанализировать вариант задания, после чего создать и связать таблицы, продумать какие запросы, отчеты и диаграммы построить, заполнить таблицы данными. И только после этого приступать к написанию программы.

По ТЗ нужно не менее двух таблиц, так что у меня для сделанных вариантов получалось по три-четрые таблицы — в зависимости от того, какие сущности можно выделить на основе таблиц задания.

Не смотря на то, что в MS Access можно давать имена объектам с пробелом. Делать этого не стоит, т.к. когда я дошел до создания отчетов с помощью компонента ReportViewer, возникли проблемы с полями в названии которых был пробел — имя поля обрезалось до первого слова, и поэтому не смог их использовать в отчетах. Возможно, что проблема есть только в Visual Studio 2010, и в более свежих версиях исправлена — не проверял. Когда с ней столкнулся, решения не нашел, и переделывал все под имена с символом подчеркивания вместо пробела.

 

Таблицы и формы

Итак проанализировал задание, создал таблицы и связи, заполнил их данными, создал запросы в MS Access. Для первого варианта у меня вышла следующая схема:

Создал интерфейс главной формы в соответствии с вариантом задания (могут быть кнопки, метки, меню, переключатели, вкладки), и остальные 7 форм. Подробно описывать все шаги нет смысла, т.к. код отображения форм, можно взять из любого готового проекта. А вот некоторые действия в визуальном редакторе Visual Studio стоит запомнить.

После добавления первого компонента DataGridView на форму, можно добавить источник данных проекта. В окне ниже обычно отвечал «Да», хотя это не принципиально.

вопрос 1

Просто в этом случае нужно помнить, что файл базы с актуальными данными постоянно копируется в каталог с exe-файлом из каталога проекта.

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

Для расположения элемента TabControl во всю ширину/высоту родительского окна необходимо задать свойство Dock.

Согласно моей схеме базы данных между Факультетами и Специальностями связь один-ко-многим (не наоборот!) поэтому сначала выбрал отображение информации о факультетах:

Затем сделал связь факультета со специальностями:
Связь один-ко-многим между Специальностями и Абитуриентами реализовал в приложении:

Получившийся результат:

С помощью пункта «Правка столбцов» прячем ненужные столбцы, задаем ширину и меняем заголовки видимых столбцов, добавляем нужные столбцы, указываем формат вывода данных с помощью свойства DefaultCellStyle (денежный, числовой, даты).

В данном варианте на второй вкладке решил отображать данные об абитуриентах, поскольку они наиболее интересны. Но видимо из-за связи на первой вкладке Абитуриентов со Специальностями , поле Код таблицы Абитуриенты не получилось скрыть — оно просто не реагировало на задание свойства Visible в false. Поматерился на эту фичу и задал минимально возможную ширину в 2px для этого поля.

Далее мне понадобилось вычисляемое поле «Сумма баллов». Его добавил непосредственно в наборе данных DataSet. Для таблицы Абитуриенты добавил новый столбец и определил его свойство Expression: Математика + Физика + Сочинение

Чтобы отобразить в Абитуриентах вместо id значение поля из связанной таблицы Специальности нужно добавить «Непривязанный столбец» в интерфейсе правки столбцов элемента DataGridView, заодно выбрав его тип ComboBox:

Чтобы поле выглядело как обычное текстовое нужно поменять DisplayStyle на Nothing. В списке выбора для этого поля нужно отобразить все данные из таблицы Специальности, поэтому в DataSourse выбираем её непосредственно из набора данных DataSet.  Далее настраиваем связь данных: в DisplayMember выбираем поле с названиями для отображения (Специальности.Наименование), в ValueMember — поле с id (Специальности.Код), в DataPropertyName значение id соответствующее ValueMember (Абитуриенты.Специальность).

 

Сортировка и фильтрация полностью делаются с помощью кода и копируются из моих готовых проектов.

Чтобы связанные таблицы корректно работали на событие CellEndEdit для всех DataGridView нужно повесить код аналогичный этому:

На этом с таблицами все.

 

Запросы

С запросами вся сложность только в том, чтобы их придумать 🙂  И написать на T-SQL. Лучше сделать запросы в Access, т.к. в ПЗ их потом проще описать и сама работа с готовым запросом вVisual Studio аналогична работе с таблицей. Только запрос с параметром реализовывал в приложении по готовому примеру кода.

 

Отчеты

Далее очередное приключение в виде отчетов. Они делаются с помощью компонента ReportViewer (насколько помню, по умолчанию в среде его не было и пришлось гуглить как найти и подключить компонент).

Когда компонент подключен и размещен на форме, щелкаем «Создать новый отчет»

нам открывается мастер, в котором делаем главную часть работы:

  1. выбираем источник данных
  2. настраиваем группы строк, столбцов и значения
  3. В окне выбора макета убираю галочку «Развернуть или свернуть группы«, т.к. внешний вид отчета без этой опции мне больше нравиться.
  4. Далее выбираем внешний вид отчета и получаем, к примеру, такой дизайн:
      
  5. В дизайнере отчетов его можно облагородить так:
     

Работа в самом дизайнере отчетов довольно проста — жмем на нужной ячейке правой кнопкой мыши, и выбираем «Выражение» либо «Свойства текстового поля«, в открывшемся диалоговом окне делаем все, на что хватит фантазии.

Чтобы не ловить ошибку «System.CannotUnloadAppDomainException» (Ошибка при выгрузке домена приложения)  

в код формы с отчетом добавляется код:

 

Диаграммы

Для построения диаграмм используется компонент chart. В нем выбираем источник данных диаграммы (DataSource) и меняем коллекцию Series.

Вся работа с диаграммой ведется только в этом диалоговом окне: меняется вид и цвет графиков, задаются источники данных для осей X и Y, настраивается Легенда

дополнительного кода в форме писать не пришлось.

 

Завершение

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

Вам может также понравиться...