Проектирование баз данных для конкретных предметных областей

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 03.01.2022
Размер файла 945,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» (ФГБОУ ВО «ВГТУ»)

Факультет информационных технологий и компьютерной безопасности

Кафедра Систем автоматизированного проектирования и информационных систем

КУРСОВОЙ ПРОЕКТ

по дисциплине Базы данных

тема Проектирование баз данных для конкретных предметных областей

Разработала студентка Д.С. Бардаков

Руководитель Д.В. Иванов

2021

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ

РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

(ФГБОУ ВО «ВГТУ»)

Кафедра Систем автоматизированного проектирования и информационных систем

ЗАДАНИЕ

на курсовой проект

по дисциплине Базы данных

Тема работы Проектирование баз данных для конкретных предметных областей

Студент группы ИСТ-191 Бардаков Денис Сергеевич

Вариант 2. Разработать информационную систему «Спортивные соревнования»

Технические условия процессор Intel Core i5 2,30 ГГц, операционная система Windows 10, ОЗУ 8 ГБ

Содержание и объем проекта (графические работы, расчеты и прочее): анализ и описание предметной области (5 страниц); проектирование базы данных (5 страниц); разработка и реализация клиентского приложения (7 страниц); 15 рисунков, 14 таблиц, 1 приложение.

Сроки выполнения этапов анализ и описание предметной области (08.02 - 13.03); проектирование базы данных (15.03 - 17.04); разработка клиентского приложения и реализация программы (19.04 - 22.05); оформление расчетно-пояснительной записки (24.05 - 29.05)

Срок защиты курсового проекта 02.06.2021

Руководитель Д.В. Иванов

Задание принял студент 02.02.2021 Д.С. Бардаков

Содержание

Введение

1. Анализ и описание предметной области

1.1 Особенности предметной области

1.2 Бизнес-процессы

1.3 Постановка задачи

2. Проектирование базы данных

2.1 Концептуальная модель данных

2.2 Логическая и физическая модели данных

3. Реализация и разработка клиентского приложения

3.1 Выбор средств программной реализации

3.2 Диаграмма классов

3.3 Диалог с пользователем и функциональные возможности

Заключение

Список литературы

Приложение А

Введение

приложение база данные проектирование

Реляционные СУБД являются в настоящий момент самыми распространенными. Их реализации существуют на всех пригодных для этого платформах, для всех операционных систем и для всех применений от простейших продуктов, предназначенных для ведения картотек индивидуального пользования, до сложнейших распределенных многопользовательских систем.

СУБД в общем случае это собственно база данных, которая предполагает какой-либо метод сохранения информации на диске и возможности доступа и манипуляции с нею, и набор программных продуктов, представляющий пользователю все допустимые в базе средства работы с данными. Набор программных средств манипуляции данными СУБД удовлетворяет свойствам полноты (консистентности).

СУБД позволяет структурировать, систематизировать и организовать данные для их компьютерного хранения и обработки. Сегодня невозможно представить себе деятельность любого современного предприятия или организации без использования профессиональных СУБД. Несомненно, они составляют фундамент информационной деятельности во всех сферах - начиная с производства и заканчивая финансами и телекоммуникациями

Целью данного курсового проекта является проектирование базы данных «Спортивные соревнования» для автоматизации процесса контроля спортивных соревнований, используя СУБД MySQL.

1. Анализ и описание предметной области

1.1 Особенности предметной области

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

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

В Российской Федерации устанавливаются следующие спортивные звания:

1. мастер спорта России международного класса;

2. мастер спорта России;

3. гроссмейстер России [4].

В Российской Федерации устанавливаются следующие спортивные разряды:

1. кандидат в мастера спорта;

2. первый спортивный разряд;

3. второй спортивный разряд;

4. третий спортивный разряд;

5. первый юношеский спортивный разряд;

6. второй юношеский спортивный разряд;

7. третий юношеский спортивный разряд [5].

Виды спорта делятся на спортивные дисциплины. Дисциплина - это составляющая вида спорта. Например, лёгкая атлетика включает множество спортивных дисциплин, объединённых в несколько групп (рисунок 1).

Рисунок 1 Дисциплины в легкой атлетике

1.2 Бизнес-процессы

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

В данной модели система представляется как совокупность взаимодействующих работ или функций. Такая чисто функциональная ориентация является принципиальной - функции системы анализируются независимо от объектов, которыми они оперируют. Основу методологии IDEF0 составляет графический язык описания бизнес-процессов. Модель в нотации IDEF0 представляет собой совокупность иерархически упорядоченных и взаимосвязанных диаграмм. Каждая диаграмма является единицей описания системы и располагается на отдельном листе [6].

Типы стрелок В IDEF0:

1. Вход - материал или информация, которые используются или преобразуются работой

2. Управление - правила, стратегии, процедуры или стандарты, которыми руководствуется работа.

3. Выход - материал или информация, которые производятся работой.

4. Механизм - ресурсы, которые выполняют работу.

Контекстная диаграмма является вершиной древовидной структуры диаграмм и представляет собой самое общее описание системы и ее взаимодействия с внешней средой (рисунок 2).

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

Рисунок 2 Контекстная диаграмма

После описания системы в целом проводится разбиение ее на крупные фрагменты. Этот процесс называется функциональной декомпозицией (рисунок 3). Функциональными блоками данной модели являются: сбор поступившей информации, обработка этой информации и формирование из нее отчетов.

Рисунок 3 Диаграмма декомпозиции

Разработанная программа будет иметь следующие функции:

· Определять какое количество участников зарегистрировано в мероприятии

· Определять результаты участников в соревновании

· Определять в какие дни будут проходить соревнования

· Определять участников определенного года рождения

1.3 Постановка задачи

Основной целью курсового проекта является проектирование базы данных, используя СУБД SQL, является создание информационной системы для регистрации соревнований и результатов людей, принимающих в них участие.

Задачи системы:

· Добавление информации об участнике

· Удаление информации об участнике

· Изменение информации об участнике

· Добавление информации о мероприятии

· Предоставление информации о результатах участников

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

· Поиск участников по году рождения

· Поиск дней, в которые будут проходить соревнования

2. Проектирование базы данных

2.1 Концептуальная модель данных

На основе анализа предметной области “Спортивные соревнования”, были выделены следующие информационные объекты, которые необходимо хранить в базе данных:

· Вид спорта

· Дисциплина

· Соревнование

· Разряд

· Участник

· Результат

Для соотношения вида спорта и дисциплины должна использоваться связь многие-ко-многим, для того чтобы ее реализовать, создадим таблицу «ВС_connect_Дисциплина». Остальные таблицы имеют связь один-ко-многим.

Рассмотрим концептуальную модель данных (рисунок 4).

Рисунок 4 Концептуальная модель данных

2.2 Логическая и физическая модели данных

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

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

Представим таблицу первой нормальной формы. В такой таблице все атрибуты имеют атомарное значение.

Атрибуты 1НФ: ID, результат, фамилия, имя, дата рождения, разряд, вид спорта, дисциплина, название мероприятия, место проведения, дата мероприятия.

Расформируем на таблицы, где каждый неключевой атрибут полностью зависит от первичного ключа (2НФ) (таблицы 1-7).

Таблица 1

«Участник»

ID_У

Фамилия

Имя

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

Таблица 2

«Соревнование»

ID_С

Название

Место

Дата

Таблица 3

«Разряд»

ID_Р

Разряд

Таблица 4

«Вид спорта»

ID_ВС

Вид спорта

Таблица 5

«Дисциплина»

ID_Д

Дисциплина

Таблица 6

«ВС_connect_Д»

ID_connect

Таблица 7

«Результат»

ID_Рез

Результат

Из таблиц второй нормальной формы, сформируем таблицы третьей нормальной формы, где никакой неключевой атрибут не зависит от другого неключевого атрибута (рисунки 8-14).

Таблица 8

«Разряд»

ID_Р

Разряд

Таблица 9

«Вид спорта»

ID_ВС

Вид спорта

Таблица 10

«Дисциплина»

ID_Д

Дисциплина

Таблица 11

«ВС_connect_Д»

ID_connect

ID_ВС

ID_Д

Таблица 12

«Участник»

ID_У

Фамилия

Имя

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

ID_Р

Таблица 13

«Соревнование»

ID_С

Название

Место

Дата

ID_ВС

Таблица 14

«Результат»

ID_Рез

Результат

ID_У

ID_С

ID_Р

ID_ВС

ID_Д

Используя таблицы 3НФ, создадим логическую модель данных (рисунок 5). Затем, преобразуем ее в физическую модель (рисунок 6).

Рисунок 5 Логическая модель данных

Рисунок 6 Физическая модель данных

3. Реализация и разработка клиентского приложения

3.1 Выбор средств программной реализации

При разработке ИС «Спортивные соревнования» будут использованы следующие средства реализации:

· Microsoft SQL Server Management Studio 18

· Средство разработки Microsoft Visual Studio 2019

· Язык программирования С# на платформе.NET Framework

Microsoft SQL Server - система управления реляционными базами данных, разработанная корпорацией Microsoft. Основной используемый язык запросов -- Transact-SQL. Используется для работы с базами данных размером от персональных до крупных баз данных масштаба предприятия. Конкурирует с другими СУБД в этом сегменте рынка.

Преимущества данной системы:

· Поддержка постоянной памяти

· Высокая производительность

· Интеллектуальная обработка запросов

· Безопасность и соответствие требованиям

· Отличается гибкостью в отношении выбора платформы и языка программирования

· Интеллектуальный анализ данных

Microsoft Visual Studio -- линейка продуктов компании Microsoft, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. Одна из функций данного продукта - разработка консольных приложений с графическим интерфейсом, с поддержкой технологии Windows Forms [7].

Основные достоинства среды разработки Visual Studio:

· Поддержка нескольких языков. Основной платформой является общеязыковая среда исполнения Common Language Runtime (CLR), благодаря чему платформа.NET поддерживает несколько языков (C#, VB.NET, C++, F++). При компиляции код на любой из этих языков компилируется в сборку на общем языке Common Intermediate Language (CLR).

· Кроссплатформенность.NET является переносимой платформой (с некоторыми ограничениями).

· Мощная библиотека классов.NET предоставляет единую для всех поддерживаемых языков библиотеку классов Framework Class Library (FCL).

· Разнообразие технологий CIL и FCL является основой для целого стека технологий.

.NET Framework -- программная платформа, выпущенная компанией Microsoft в 2002 году [8].

Преимущества.NET Framework

· Безопасные типы и общее повышение безопасности приложения.

· Единая модель обработки ошибок.

· Межязыковое взаимодействие.

· Единая среда разработки, позволяющая проводить межязыковую отладку.

· Расширенные возможности повторного использования кода.

· Цельная объектно-ориентированная модель программирования, упрощающая разработку программ.

· Единая модель обработки ошибок.

· Автоматическое управление ресурсами [9].

3.2 Диаграмма классов

В информационной системе будет реализовано три класса.

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

Второй - «Modification». В нем реализованы следующие функции:

· Регистрация мероприятия (соревнования)

· Добавление данных об участнике

· Изменение данных об участнике

· Удаление данных об участнике

Третий класс - «Export» - содержит функции для экспорта данных с таблицы в Word и Excel.

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

Рисунок 7 Диаграмма классов

3.3 Диалог с пользователем и функциональные возможности

При запуске программы открывается форма с тремя вкладками: «Регистрация мероприятия», «Внесение участников», «Отчеты». На первой вкладке пользователь может внести в базу данных новое мероприятие. Для этого следует ввести в соответствующие поля название мероприятия, место и дату его проведения, а также вид спорта, после чего нажать кнопку «Зарегистрировать». Данная вкладка представлена на рисунке 8.

Рисунок 8 Вкладка «Регистрация мероприятия»

На вкладке «Внесение участников» пользователь может добавить участника, участвовшего в соревновании, зарегистрированного в БД. Для этого надо ввести требуемую информацию об участнике, дату проведения мероприятия, и из предложенных вариантов выбрать нужное место проведения и название соревнований, нужную дисциплину и результат соревнований участника, затем нажать кнопку «Добавить». Также возможно изменение уже внесенных данных. Для этого надо выбрать нужный номер ID участника, указанного в таблице и внести новые данные, а затем нажать кнопку «Изменить». Для удаления информации об участнике достаточно ввести в поле ID участника и кликнуть по кнопке «Удалить». Вкладка представлена на рисунке 9.

Рисунок 9 Вкладка «Внесение участников»

На вкладке «Отчеты» пользователь может запросить из БД следующую информацию:

· Результаты участников соревнований

· Количество участников в соревнованиях

· Дни проведения соревнований

· Узнать участников определенного года рождения

Для этого нужно нажать кнопку «Вывести» под нужной строкой.

Также любую из выведенной информации можно экспортировать в Excel или Word, нажав на соответствующие кнопки «Экспорт в Word» и «Экспорт в «Excel». Вкладка представлена на рисунке 10.

Экспорт данных в Word и Excel представлены на рисунках 11 и 12, соответственно.

Рисунок 10 Вкладка «Отчеты»

Рисунок 11 Экспорт данных в Word

Рисунок 12 Экспорт данных в Excel

Рассмотрим реализацию функции вывода участников определенного года рождения (рисунок 13). В данном запросе SQL представлены следующие команды:

· Команда SELECT - используется для вывода нужной выборки.

· Оператор WHERE - задает условие поиска участников по введенному году рождения.

Рассмотрим еще одну функцию, которая выводит дни проведения соревнований (рисунок 14). Помимо команды SELECT, здесь также используются еще две команды. Для вычисления дней проведения соревнований больше нулевого значения используется команда HAVING BY, которая позволяет фильтровать результат группировки, созданной при помощи команды GROUP BY.

Еще одной командой SQL-запросов, является команда JOIN. Она использовалась в методе для вывода информации о внесенных в БД участниках. В данном методе выводятся данные из нескольких таблиц, для того, чтобы их объединить в запросе и используется оператор JOIN (рисунок 15).

Рисунок 13 Реализация функции определения участников определенного года рождения

Рисунок 14 Реализация функции определения дней соревнований

Рисунок 15 Реализация функции вывода информации о внесенных в БД участниках

Заключение

В процессе работы над курсовым проектом были проведены следующие этапы разработки:

· Сформулирована цель курсового проекта.

· Произведен анализ предметной области.

· Проведено моделирование предметной области с использованием CASE-средства BPWin.

· Разработана база данных в SQL Server Management Studio.

· Реализовано приложение на языке объектно-ориентированного программирования «C Sharp» с использованием среды разработки «Microsoft Visual Studio 2019» на платформе «.NET Framework».

В итоге была получена информационная система «Спортивные соревнования» для формирования отчетов с информацией о соревниваниях и их участниках, а также экспорта полученных данных в «Microsoft Office Word» и «Microsoft Office Excel».

Список литературы

1. Герберт Шилдт C# 4.0: Полное руководство: Научно-популярное издание / Герберт Шилдт. М.: ООО "И.Д. Вильямс", 2011. 056 с.

2. Нормативы. Электрон. дан. Режим доступа: https://probeg.org/docs/normativy.pdf.

3. Соревнования. Электрон. дан. Режим доступа: https://rusathletics.info/calendar.

4. Единая спортивная классификация Электрон. дан. Режим доступа: https://miit.ru/content/.

5. Спортивные разряды. Электрон. дан. Режим доступа: http://www.consultant.ru/.

6. IDEF0. Электрон. дан. Режим доступа: https://old.education.cchgeu.ru/pluginfile.php/525344/mod_resource/content.

7. Microsoft Visual Studio. Электрон. дан. Режим доступа: https://docs.microsoft.com/ru-ru/visualstudio/get-started/visual-studio-ide?view=vs-2019.

8. .NET Framework. Электрон. дан. Режим доступа: https://docs.microsoft.com/ru-ru/dotnet/framework/get-started/overview.

9. Платформа.NET. Электрон. дан. Режим доступа: http://www.konspektov.net/question/4056.

Приложение А

(обязательное)

Листинг программы на C#

/*Программа разработана студентом ВГТУ группы бИСТ-191 Бардаковым Денисом Сергеевичем.

Программа реализует информационную систему «Спортивные соревнования».

Ниже приведен текст основной программы*/

//---------------------------------------------------------------------------------------------------------

//Form1.cs

using System;

using System.Windows.Forms;

using System.Configuration;

using System.Data.SqlClient;

using System.Data;

namespace Спортивные_соревнования

{

public partial class Вход: Form

{

public SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);

public SqlDataAdapter adapter;

public SqlCommand cmd;

private Export export = new Export();

private modification Modification = new modification();

public Вход()

{

InitializeComponent();

filled_box1(comboBox1);

filled_box2(comboBox4);

Modification.Display(dataGridView1);

Modification.Display2(dataGridView3);

}

public void filled_box1(ComboBox comboBox) //заполнение кнопки с разрядами

{

connection.Open();

using (SqlCommand com = new SqlCommand("SELECT Звание FROM Разряд", connection))

{

using (SqlDataReader reader = com.ExecuteReader())

{

comboBox.Items.Clear();

while (reader.Read())

{

comboBox.Items.Add((string)reader["Звание"]);

}

}

}

connection.Close();

}

public void filled_box2(ComboBox comboBox)//заполнение кнопки с видами спорта

{

connection.Open();

using (SqlCommand com = new SqlCommand("SELECT Вид_Спорта FROM Вид_спорта", connection))

{

using (SqlDataReader reader = com.ExecuteReader())

{

comboBox.Items.Clear();

while (reader.Read())

{

comboBox.Items.Add((string)reader["Вид_Спорта"]);

}

}

}

connection.Close();

}

private void dateTimePicker2_ValueChanged_1(object sender, EventArgs e)//заполнение кнопки с местами по дате

{

connection.Open();

using (SqlCommand com = new SqlCommand("SELECT Место FROM Соревнование WHERE Дата = '" + dateTimePicker2.Text + "' ", connection))

{

using (SqlDataReader reader = com.ExecuteReader())

{

comboBox3.Items.Clear();

while (reader.Read())

{

comboBox3.Items.Add((string)reader["Место"]);

}

}

}

connection.Close();

}

private void comboBox3_SelectedIndexChanged_1(object sender, EventArgs e)//заполнение кнопки с местами по дате

{

connection.Open();

using (SqlCommand com = new SqlCommand("SELECT Название FROM Соревнование WHERE Дата = '" + dateTimePicker2.Text + "' AND Место = '" + comboBox3.Text + "'", connection))

{

using (SqlDataReader reader = com.ExecuteReader())

{

comboBox5.Items.Clear();

while (reader.Read())

{

comboBox5.Items.Add((string)reader["Название"]);

}

}

}

connection.Close();

}

private void comboBox5_SelectedIndexChanged_1(object sender, EventArgs e)//заполнение кнопки виды дисциплин в соответствии с видом спорта

{

cmd = new SqlCommand("SELECT ID_видспорта FROM Соревнование WHERE Дата = '" + dateTimePicker2.Text + "' AND Место = '" + comboBox3.Text + "' AND Название = '" + comboBox5.Text + "'", connection);

connection.Open();

int ID_typesport = (int)cmd.ExecuteScalar();

connection.Close();

connection.Open();

using (SqlCommand com = new SqlCommand("SELECT Тип_соревнований FROM Вид_connect_Тип" +

" JOIN Тип_соревнований on Тип_соревнований.ID_типсорев = Вид_connect_Тип.ID_типсорев" +

" WHERE ID_видспорта = '" + ID_typesport + "'", connection))

{

using (SqlDataReader reader = com.ExecuteReader())

{

comboBox6.Items.Clear();

while (reader.Read())

{

comboBox6.Items.Add((string)reader["Тип_соревнований"]);

}

}

}

connection.Close();

}

private void Result_button10_Click(object sender, EventArgs e) => Modification.Display(dataGridView2);

private void CountMembers_button7_Click(object sender, EventArgs e)//количество участников

{

connection.Open();

DataTable dt = new DataTable();

adapter = new SqlDataAdapter("SELECT Соревнование.Название, Соревнование.Место, Соревнование.Дата," +

"( SELECT COUNT(*) FROM Результат WHERE Результат.ID_соревнование = Соревнование.ID_соревнование)" +

" AS[Количество участников] FROM Соревнование", connection);

adapter.Fill(dt);

dataGridView2.DataSource = dt;

connection.Close();

}

private void DateEvent_button8_Click(object sender, EventArgs e)// даты соревнований

{

connection.Open();

DataTable dt = new DataTable();

adapter = new SqlDataAdapter("SELECT Дата AS 'Дни проведения соревнований' FROM Соревнование GROUP BY Дата HAVING COUNT(ID_соревнование) > 0", connection);

adapter.Fill(dt);

dataGridView2.DataSource = dt;

connection.Close();

}

private void MembForDateBth_button9_Click(object sender, EventArgs e) //участники определенного года рождения

{

if(textBox5.Text != "")

{

int year = Int32.Parse(textBox5.Text);

connection.Open();

DataTable dt = new DataTable();

adapter = new SqlDataAdapter("SELECT Фамилия, Имя FROM Участник WHERE Дата_рождения BETWEEN '" + year + "-01-01' AND '" + year + "-12-31'", connection);

adapter.Fill(dt);

dataGridView2.DataSource = dt;

connection.Close();

}

else

{

MessageBox.Show("Укажите год рождения");

}

}

private void RegistrEvent_button6_Click(object sender, EventArgs e) => Modification.registrtaion_event(textBox11.Text, dateTimePicker3.Text, textBox10.Text, comboBox4.Text, dataGridView3);

private void Add_button1_Click(object sender, EventArgs e) => Modification.Add(textBox1.Text, textBox2.Text, dateTimePicker1.Text, textBox9.Text, comboBox1.Text, comboBox5.Text, dateTimePicker2.Text, comboBox3.Text, comboBox6.Text, dataGridView1);

private void Update_button2_Click(object sender, EventArgs e) => Modification.Update(textBox4.Text, textBox1.Text, textBox2.Text, dateTimePicker1.Text, textBox9.Text, comboBox1.Text, comboBox5.Text, dateTimePicker2.Text, comboBox3.Text, comboBox6.Text, dataGridView1);

private void Delete_button3_Click(object sender, EventArgs e) => Modification.Delete(textBox4.Text, dataGridView1);

private void Word_button5_Click(object sender, EventArgs e) => export.ExportWord(dataGridView2);

private void Excel_button4_Click(object sender, EventArgs e) => export.ExportExcel(dataGridView2);

}

}

//Modification.cs

using System.Windows.Forms;

using System.Configuration;

using System.Data.SqlClient;

using System.Data;

namespace Спортивные_соревнования

{

class modification

{

public SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);

public SqlDataAdapter adapter;

public SqlCommand cmd;

public void Display(DataGridView dataGrid) //Вывод на таблицу

{

connection.Open();

DataTable dt = new DataTable();

adapter = new SqlDataAdapter(" SELECT Участник.ID_участник AS ID, Фамилия, Дата_Рождения AS [Дата рождения], Вид_спорта AS [Вид спорта]," +

" Тип_соревнований AS Дисциплина, Звание AS Разряд, Результат FROM Результат" +

" JOIN Участник ON Участник.ID_участник = Результат.ID_участник" +

" JOIN Вид_спорта ON Вид_спорта.ID_видспорта = Результат.ID_видспорта" +

" JOIN Тип_соревнований ON Тип_соревнований.ID_типсорев = Результат.ID_типсорев" +

" JOIN Разряд ON Разряд.ID_спортразряд = Результат.ID_спортразряд", connection);

adapter.Fill(dt);

dataGrid.DataSource = dt;

connection.Close();

}

public void Display2(DataGridView dataGrid) //Вывод на таблицу

{

connection.Open();

DataTable dt = new DataTable();

adapter = new SqlDataAdapter("select Дата, Место, Название from Соревнование", connection);

adapter.Fill(dt);

dataGrid.DataSource = dt;

connection.Close();

}

public void registrtaion_event(string name_event, string date_event, string place, string typesport, DataGridView dataGrid) //регистрация мероприятий

{

if (name_event != "" && place != "")

{

cmd = new SqlCommand("SELECT ID_видспорта FROM Вид_спорта WHERE Вид_Спорта = '" + typesport + "'", connection);

connection.Open();

int ID_typesport = (int)cmd.ExecuteScalar();

connection.Close();

cmd = new SqlCommand("INSERT INTO Соревнование (Название, Дата, Место, ID_видспорта) VALUES (@name_event, @date_event, @place, @ID_typesport)", connection);

connection.Open();

cmd.Parameters.AddWithValue("@name_event", name_event);

cmd.Parameters.AddWithValue("@date_event", date_event);

cmd.Parameters.AddWithValue("@place", place);

cmd.Parameters.AddWithValue("@ID_typesport", ID_typesport);

cmd.ExecuteNonQuery();

connection.Close();

Display2(dataGrid);

MessageBox.Show("Мероприятие зарегистрированно");

}

else

{

MessageBox.Show("Введите данные");

}

}

public void Add(string lastname, string firstname, string datebth, string res, string category, string name_event, string date_event, string place, string discipline, DataGridView dataGrid) // добавление участника

{

if (lastname != "" && firstname != "" && res != "")

{

cmd = new SqlCommand("SELECT ID_спортразряд FROM Разряд WHERE Звание = '" + category + "'", connection);

connection.Open();

int ID_sportcateg = (int)cmd.ExecuteScalar();

connection.Close();

cmd = new SqlCommand("INSERT INTO Участник (Фамилия, Имя, Дата_рождения, ID_спортразряд) VALUES (@lastname, @firstname, @datebth, @ID_sportcateg)", connection);

connection.Open();

cmd.Parameters.AddWithValue("@lastname", lastname);

cmd.Parameters.AddWithValue("@firstname", firstname);

cmd.Parameters.AddWithValue("@datebth", datebth);

cmd.Parameters.AddWithValue("@ID_sportcateg", ID_sportcateg);

cmd.ExecuteNonQuery();

connection.Close();

cmd = new SqlCommand("SELECT ID_соревнование FROM Соревнование WHERE Дата = '" + date_event + "' AND Место = '" + place + "' AND Название = '" + name_event + "'", connection);

connection.Open();

int ID_event = (int)cmd.ExecuteScalar();

connection.Close();

cmd = new SqlCommand("SELECT ID_типсорев FROM Тип_соревнований WHERE Тип_соревнований = '" + discipline + "'", connection);

connection.Open();

int ID_discipline = (int)cmd.ExecuteScalar();

connection.Close();

cmd = new SqlCommand("SELECT ID_видспорта FROM Вид_connect_Тип WHERE ID_типсорев = '" + ID_discipline + "'", connection);

connection.Open();

int ID_typesport = (int)cmd.ExecuteScalar();

connection.Close();

cmd = new SqlCommand("SELECT ID_Участник FROM Участник WHERE ID_Участник = ( SELECT max(ID_Участник) from Участник)", connection);

connection.Open();

int ID_member = (int)cmd.ExecuteScalar();

connection.Close();

cmd = new SqlCommand("SELECT ID_connect FROM Вид_connect_Тип WHERE ID_типсорев = '" + ID_discipline + "' AND ID_видспорта = '" + ID_typesport + "'", connection);

connection.Open();

int ID_connect = (int)cmd.ExecuteScalar();

connection.Close();

cmd = new SqlCommand("INSERT INTO Результат (Результат, ID_connect, ID_типсорев, ID_видспорта, ID_спортразряд, ID_соревнование, ID_участник) VALUES (@res, @ID_connect, @ID_discipline, @ID_typesport, @ID_sportcateg, @ID_event, @ID_member)", connection);

connection.Open();

cmd.Parameters.AddWithValue("@res", res);

cmd.Parameters.AddWithValue("@ID_connect", ID_connect);

cmd.Parameters.AddWithValue("@ID_discipline", ID_discipline);

cmd.Parameters.AddWithValue("@ID_typesport", ID_typesport);

cmd.Parameters.AddWithValue("@ID_sportcateg", ID_sportcateg);

cmd.Parameters.AddWithValue("@ID_event", ID_event);

cmd.Parameters.AddWithValue("@ID_member", ID_member);

cmd.ExecuteNonQuery();

connection.Close();

Display(dataGrid);

MessageBox.Show("Результат сохранен");

}

else

{

MessageBox.Show("Введите данные");

}

}

public void Update(string ID_memb, string lastname, string firstname, string datebth, string res, string category, string name_event, string date_event, string place, string discipline, DataGridView dataGrid)//изменение данных

{

if (lastname != "" && firstname != "" && res != "")

{

cmd = new SqlCommand("SELECT ID_спортразряд FROM Разряд WHERE Звание = '" + category + "'", connection);

connection.Open();

int ID_sportcateg = (int)cmd.ExecuteScalar();

connection.Close();

cmd = new SqlCommand("UPDATE Участник set Фамилия = @lastname, Имя = @firstname, Дата_рождения = @datebth, ID_спортразряд = @ID_sportcateg WHERE ID_Участник = " + ID_memb, connection);

connection.Open();

cmd.Parameters.AddWithValue("@lastname", lastname);

cmd.Parameters.AddWithValue("@firstname", firstname);

cmd.Parameters.AddWithValue("@datebth", datebth);

cmd.Parameters.AddWithValue("@ID_sportcateg", ID_sportcateg);

cmd.ExecuteNonQuery();

connection.Close();

cmd = new SqlCommand("SELECT ID_соревнование FROM Соревнование WHERE Дата = '" + date_event + "' AND Место = '" + place + "' AND Название = '" + name_event + "'", connection);

connection.Open();

int ID_event = (int)cmd.ExecuteScalar();

connection.Close();

cmd = new SqlCommand("SELECT ID_типсорев FROM Тип_соревнований WHERE Тип_соревнований = '" + discipline + "'", connection);

connection.Open();

int ID_discipline = (int)cmd.ExecuteScalar();

connection.Close();

cmd = new SqlCommand("SELECT ID_видспорта FROM Вид_connect_Тип WHERE ID_типсорев = '" + ID_discipline + "'", connection);

connection.Open();

int ID_typesport = (int)cmd.ExecuteScalar();

connection.Close();

cmd = new SqlCommand("SELECT ID_connect FROM Вид_connect_Тип WHERE ID_типсорев = '" + ID_discipline + "' AND ID_видспорта = '" + ID_typesport + "'", connection);

connection.Open();

int ID_connect = (int)cmd.ExecuteScalar();

connection.Close();

cmd = new SqlCommand("UPDATE Результат set Результат = @res, ID_connect = @ID_connect, ID_типсорев = @ID_discipline, ID_видспорта = @ID_typesport, ID_спортразряд = @ID_sportcateg, ID_соревнование = @ID_event WHERE ID_Участник = " + ID_memb, connection);

connection.Open();

cmd.Parameters.AddWithValue("@res", res);

cmd.Parameters.AddWithValue("@ID_connect", ID_connect);

cmd.Parameters.AddWithValue("@ID_discipline", ID_discipline);

cmd.Parameters.AddWithValue("@ID_typesport", ID_typesport);

cmd.Parameters.AddWithValue("@ID_sportcateg", ID_sportcateg);

cmd.Parameters.AddWithValue("@ID_event", ID_event);

cmd.ExecuteNonQuery();

connection.Close();

Display(dataGrid);

MessageBox.Show("Данные обновлены");

}

else

{

MessageBox.Show("Пожалуйста, введите данные");

}

}

public void Delete(string ID_memb, DataGridView dataGrid) //удаление данных

{

if (ID_memb != "")

{

cmd = new SqlCommand("DELETE FROM Результат WHERE ID_участник = @ID_memb", connection);

connection.Open();

cmd.Parameters.AddWithValue("@ID_memb", int.Parse(ID_memb));

cmd.ExecuteNonQuery();

connection.Close();

cmd = new SqlCommand("DELETE FROM Участник WHERE ID_участник = @ID_memb", connection);

connection.Open();

cmd.Parameters.AddWithValue("@ID_memb", int.Parse(ID_memb));

cmd.ExecuteNonQuery();

connection.Close();

Display(dataGrid);

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

}

else

{

MessageBox.Show("Введите ID участника");

}

}

}

}

//Export.cs

using System;

using System.Windows.Forms;

using System.Configuration;

using System.Data.SqlClient;

namespace Спортивные_соревнования

{

class Export

{

public SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);

public void ExportExcel(DataGridView dataGrid)

{

Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();

// создаем новый WorkBook

Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);

// новый Excelsheet в workbook

Microsoft.Office.Interop.Excel._Worksheet worksheet = null;

app.Visible = true;

worksheet = workbook.Sheets["Лист1"];

worksheet = workbook.ActiveSheet;

// задаем имя для worksheet

worksheet.Name = "Exported from gridview";

for (int i = 1; i < dataGrid.Columns.Count + 1; i++)

{

worksheet.Cells[1, i] = dataGrid.Columns[i - 1].HeaderText;

}

for (int i = 0; i < dataGrid.Rows.Count - 1; i++)

{

for (int j = 0; j < dataGrid.Columns.Count; j++)

{

worksheet.Cells[i + 2, j + 1] =

dataGrid.Rows[i].Cells[j].Value.ToString();

}

}

// закрываем подключение к excel

app.Quit();

}

public void ExportWord(DataGridView DGV)

{

if (DGV.Rows.Count != 0)

{

int RowCount = DGV.Rows.Count;

int ColumnCount = DGV.Columns.Count;

Object[,] DataArray = new object[RowCount + 1, ColumnCount + 1];

//добавим поля и колонки

int r = 0;

for (int c = 0; c <= ColumnCount - 1; c++)

{

for (r = 0; r <= RowCount - 1; r++)

{

DataArray[r, c] = DGV.Rows[r].Cells[c].Value;

}

}

Microsoft.Office.Interop.Word.Document oDoc = new

Microsoft.Office.Interop.Word.Document();

oDoc.Application.Visible = true;

//страницы

oDoc.PageSetup.Orientation =

Microsoft.Office.Interop.Word.WdOrientation.wdOrientLandscape;

dynamic oRange = oDoc.Content.Application.Selection.Range;

string oTemp = "";

for (r = 0; r <= RowCount - 1; r++)

{

for (int c = 0; c <= ColumnCount - 1; c++)

{

oTemp = oTemp + DataArray[r, c] + "\t";

}

}

//формат таблиц

oRange.Text = oTemp;

object Separator =

Microsoft.Office.Interop.Word.WdTableFieldSeparator.wdSeparateByTabs;

object ApplyBorders = true;

object AutoFit = true;

object AutoFitBehavior =

Microsoft.Office.Interop.Word.WdAutoFitBehavior.wdAutoFitContent;

oRange.ConvertToTable(ref Separator, ref RowCount, ref ColumnCount,

Type.Missing, Type.Missing, ref ApplyBorders,

Type.Missing, Type.Missing, Type.Missing,

Type.Missing, Type.Missing, Type.Missing,

Type.Missing, ref AutoFit, ref AutoFitBehavior,

Type.Missing);

oRange.Select();

oDoc.Application.Selection.Tables[1].Select();

oDoc.Application.Selection.Tables[1].Rows.AllowBreakAcrossPages = 0;

oDoc.Application.Selection.Tables[1].Rows.Alignment = 0;

oDoc.Application.Selection.Tables[1].Rows[1].Select();

oDoc.Application.Selection.InsertRowsAbove(1);

oDoc.Application.Selection.Tables[1].Rows[1].Select();

//Стили заголовков

oDoc.Application.Selection.Tables[1].Rows[1].Range.Bold = 1;

oDoc.Application.Selection.Tables[1].Rows[1].Range.Font.Name = "Tahoma";

oDoc.Application.Selection.Tables[1].Rows[1].Range.Font.Size = 14;

for (int c = 0; c <= ColumnCount - 1; c++)

{

oDoc.Application.Selection.Tables[1].Cell(1, c + 1).Range.Text = DGV.Columns[c].HeaderText;

}

//Текст заголовка

foreach (Microsoft.Office.Interop.Word.Section section in

oDoc.Application.ActiveDocument.Sections)

{

Microsoft.Office.Interop.Word.Range headerRange =

section.Headers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;

headerRange.Fields.Add(headerRange,

Microsoft.Office.Interop.Word.WdFieldType.wdFieldPage);

headerRange.Text = "Отчет";

headerRange.Font.Size = 16;

headerRange.ParagraphFormat.Alignment =

Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;

}

}

}

}

}

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.