Федеральное агентство по образованию Государственное образовательное учреждение высшего профессионального образования Нижегородский государственный архитектурностроительный университет (ННГАСУ) Факультет инженерно-экологических систем и сооружений Кафедра информационных систем и технологий КУРСОВАЯ РАБОТА по дисциплине: «Управление данными» На тему: «Разработка базы данных и графического интерфейса для информационных систем» Выполнил студент 2 курса гр.ИС-28: Макшаев А. А. Проверил: канд. техн. наук., доцент: Кислицын Д. И. Нижний Новгород 2020 Оглавление Введение ...................................................................................................................................................................... 3 Техническое задание ............................................................................................................................................... 3 Требования к программному обеспечению .......................................................................................................... 3 Описание проектирования схемы данных ................................................................................................................ 4 Концептуальная схема базы данных...................................................................................................................... 4 Логическая схема базы данных .............................................................................................................................. 5 Физическая схема базы данных ............................................................................................................................. 6 Структура атрибутов таблиц в базе данных .......................................................................................................... 7 Описание пользовательского интерфейса приложения .......................................................................................... 9 Формы....................................................................................................................................................................... 9 Описание алгоритмов ............................................................................................................................................. 177 Диаграмма вариантов использования ............................................................................................................... 177 Диаграмма деятельности ...................................................................................................................................... 17 Запросы к базе данных........................................................................................................................................ 200 Руководство пользователя ...................................................................................................................................... 233 Отчеты, формируемые приложением ................................................................................................................... 255 Приложение ............................................................................................................................................................... 27 2 Введение Техническое задание Университет. Институт является структурой университета. К институту прикреплено несколько кафедр. На каждой кафедре работают преподаватели. В институте обучаются несколько групп студентов. Требуется составлять расписание занятий и отслеживать оценки за зачеты и экзамены. Требования к программному обеспечению Для реализации необходимо установить на компьютер с ОС Windows: MS SQL Server Express 2017 или выше, MS .NET Framework (не позднее 4.5) и MS Visual Studio (версия 18.6 или выше). 3 Описание проектирования схемы данных Концептуальная схема базы данных Данная база данных состоит из 12 таблиц: facultet, kafedra, teacher, group, student, mark, discipline, discipline_academic, office, para, day, raspisanie. Концептуальная схема представлена на рис. 1 Рис. 1 – Концептуальная схема 4 Логическая схема базы данных Логическая схема базы данных представлена на рис. 2 Рис. 2 – Логическая схема 5 Физическая схема базы данных Физическая схема представлена на рис. 3 Рис. 3 – Физическая схема 6 Структура атрибутов таблиц в базе данных facultet Таблица содержит данные о факультетах: код факультета (id_facultet), название факультета (name), декан кафедры (decan), телефон деканата (phone). kafedra Таблица содержит данные о кафедрах: код кафедры(id_kafedra), название кафедры (name), факультет к которому прикреплена данная кафедра (id_facultet), заведующий кафедры (headKafedra). teacher Данная таблица содержит данные об учителях: Серия и номер паспорта (id_teacher), кафедра на которой работает преподаватель (id_kafedra), имя (name), фамилия (surname), отчество (lastname), должность (post). group Данная таблица содержит данные о группах: код группа (id_group), факультет к которому прикреплена группа (id_facultet), курс обучения (kurs). student Данная таблица содержит данные об учениках: код ученика (id_student), группа студента (id_group), имя (name), фамилия (surname), отчество (lastname). Discipline Таблица содержит информацию о всех существующих дисциплинах в университете: код дисциплины (id_discipline), название дисциплины (name). discipline_academic Таблица содержит информацию о принадлежности дисциплины конкретной группе: код дисциплины группы (id_discipline_academic), дисциплина (id_discipline), группа которая имеет эту дисциплину (id_group), учитель, который ведет эту дисциплину (id_teacher), способ сдачи аттестации (type_certification), дата сдачи экзамена или зачёта (date_certification). mark Данная таблица содержит оценки за зачеты и экзамены: код оценки(id_mark), дисциплина по которой выставляется оценка [id_discipline_academic], студент, которому выставляется оценка [id_student], оценка [mark]. office Таблица содержит информацию об аудиториях: код аудитории (id_office), номер кабинета (number), корпус университета (korpus), учитель, количество мест в аудитории(number_place). para Таблица содержит информацию о времени начала и окончания пар: номер пары (id_para), время начала пары (start_time), время окончания пары (end_time). day Таблица содержит информацию о днях недели: номер дня недели (id_day), название дня недели (name). raspisanie Таблица содержит информацию о занятиях в университете и полностью состоит из внешних ключей: код занятия(id_raspisanie), время занятия (id_para), аудитория в 7 которой проводится занятие(id_office), день недели занятия (id_day), дисциплина по которой проводится занятие (id_discipline_academic). 8 Описание пользовательского интерфейса приложения Формы 1. Форма выбора сервера для подключения показана на рис. 4. Код класса autorizationForm представлен в приложении 1.1. Рис. 4 – Вид формы авторизации Стартовая форма программы, на которой расположены кнопки проверки соединения к серверу и подключение к нему. Форма позволяет подключиться к имеющимся серверам или добавить новый сервер. 2. Стартовая форма показана на рис. 5. Код класса startForm представлен в приложении 1.2 Рис. 5 – Вид формы «Университет» Открывается после подключение к серверу с базой данных. Позволяет выбрать один из 2 вариантов. Либо перейти к форме, для составления расписания или открыть форму для выставления оценок. 3. Форма «Расписание» показана на рис. 6. Код класса raspisanieForm представлен в приложении 1.3 9 Рис. 6 – Вид формы «Расписание» Открывается при нажатии на кнопку «Составить расписание» на стартовой форме. Позволяет посмотреть список имеющих записей в таблице «raspisanie», а также добавить\изменить\удалить записи. Также с этой формы можно посмотреть справочник, в котором расположены кнопки для просмотра записей в различных таблицах. В меню управления имеется кнопка «Отчёт», открывающая форму для составления отчёта. 4. Форма «Факультет» показана на рис. 7. Код класса facultetForm представлен в приложении 1.4 Рис. 7 – Вид формы «Факультет» Открывается при нажатии на кнопку «Факультет» в меню управления на форме «Расписание». Позволяет посмотреть список имеющих записей в таблице «facultet», а также добавить\удалить записи. 5. Форма «Факультет» показана на рис. 8. Код класса kafedraForm представлен в приложении 1.5 10 Рис. 8 – Вид формы «Кафедра» Открывается при нажатии на кнопку «Кафедра» в меню управления на форме «Расписание». Позволяет посмотреть список имеющих записей в таблице «kafedra», а также добавить\удалить записи. 6. Форма «Преподаватели» показана на рис. 9. Код класса teacherForm представлен в приложении 1.6 Рис. 9 – Вид формы «Преподаватели» Открывается при нажатии на кнопку «Преподаватели» в меню управления на форме «Расписание». Позволяет посмотреть список имеющих записей в таблице «teacher», а также добавить\удалить записи. 11 7. Форма «Группы» показана на рис. 10. Код класса groupForm представлен в приложении 1.7 Рис. 10 – Вид формы «Группы» Открывается при нажатии на кнопку «Группа» в меню управления на форме «Расписание». Позволяет посмотреть список имеющих записей в таблице «group», а также добавить\удалить записи. 8. Форма «Студенты» показана на рис. 11. Код класса studentForm представлен в приложении 1.8 Рис. 11 – Вид формы «Студенты» 12 Открывается при нажатии на кнопку «Студенты» в меню управления на форме «Расписание». Позволяет посмотреть список имеющих записей в таблице «student», а также добавить\удалить записи. 9. Форма «Дисциплины» показана на рис. 12. Код класса disciplineForm представлен в приложении 1.9 Рис. 12 – Вид формы «Дисциплины» Открывается при нажатии на кнопку «Дисциплины» в меню управления на форме «Расписание». Позволяет посмотреть список имеющих записей в таблице «discipline», а также добавить\удалить записи. 10. Форма «Дисциплины группы» показана на рис. 13. Код класса dsp_academicForm представлен в приложении 1.10 13 Рис. 13 – Вид формы «Дисциплины группы» Открывается при нажатии на кнопку «Дисциплины группы» в меню управления на форме «Расписание». Позволяет посмотреть список имеющих записей в таблице «discipline_academic», а также добавить\удалить записи. 11. Форма «Аудитории» показана на рис. 14. Код класса officeForm представлен в приложении 1.11 Рис. 14 – Вид формы «Аудитории» Открывается при нажатии на кнопку «Аудитории» в меню управления на форме «Расписание». Позволяет посмотреть список имеющих записей в таблице «office», а также добавить\удалить записи. 14 12. Форма «Отчёт по занятиям» показана на рис. 15. Код класса timeTableReroptForm представлен в приложении 1.12 Рис. 15 – Вид формы «Отчёт по занятиям» Открывается при нажатии на кнопку «Отчёт по занятиям» в меню управления на форме «Расписание» во вкладке Отчёт. Позволяет вывести список занятий определенной группы по дням недели. 13. Форма «Оценки» показана на рис. 16. Код класса markForm представлен в приложении 1.13 Рис. 16 – Вид формы «Оценки» Открывается при нажатии на кнопку «Выставить оценки по дисциплинам» на стартовой форме. Позволяет посмотреть список имеющих записей в таблице «mark», а также добавить\изменить\удалить записи. Также с этой формы можно перейти на форму отчётов. В меню управления имеется кнопка «Отчёт», открывающая форму для составления отчёта. 14. Форма «Отчёт по оценкам» показана на рис. 17 и 18. Код класса markStudentReportForm представлен в приложении 1.14 15 Рис. 17 – Вид формы «Отчёт по оценкам» Рис. 18 – Вид формы «Отчёт по оценкам» Открывается при нажатии на кнопку «Отчёт по оценкам» в меню управления на форме «Оценки». На форме есть кнопки, позволяющие вывести список всех оценок определенного студента и список всех оценок группы по конкретной дисциплине. 16 Описание алгоритмов Диаграмма вариантов использования Диаграмма use-case показана на рис. 19 Рис. 19 – Диаграмма вариантов использования (use-case) Диаграмма деятельности 1. ActivityDiagram для формы «Расписание» показана на рис. 20. 17 Рис. 20 – Диаграмма деятельности (activity diagram) 2. ActivityDiagram для формы «Оценки» показана на рис. 21. 18 Рис. 21 – Диаграмма деятельности (activity diagram) 19 Запросы к базе данных • Запрос на получение списка занятий из таблицы «raspisanie» и вывод нормальных наименований, вместо id. SELECT id_raspisanie as [Код расписания] ,concat('Корпуc:', [office].korpus, ' Аудитория:',[office].number) as Аудитория ,concat(Format([para].start_time, 'hh\\:mm'),'-',Format([para].end_time,'hh\\:mm')) as Время ,[day].name as День,[group].name as Группа,[discipline].name as Дисциплина ,concat(teacher.surname,' ',teacher.name,' ',teacher.lastname) as Преподаватель FROM [raspisanie] join [office] on [raspisanie].id_office =[office].id_office join [para] on [raspisanie].id_para =[para].id_para join [discipline_academic] on [raspisanie].id_discipline_academic = [discipline_academic].id_discipline_academic join[discipline] on[discipline_academic].id_discipline =[discipline].id_discipline join [teacher] on [discipline_academic].id_teacher =[teacher].id_teacher join [group] on [discipline_academic].[id_group] =[group].id_group join [day] on [raspisanie].[id_day] =[day].id_day • Запрос для получения в виде отчёта данных из таблицы «raspisanie», который показывает расписание занятий у выбранной группы в выбранный промежуток недели. Также выводятся нормальные наименование групп, учителей, дисциплин, времени пар и тд вместо id. "SELECT concat('Корпуc:', [office].korpus, ' Аудитория:',[office].number) as Аудитория ,concat(Format([para].start_time, 'hh\\:mm'), '-', Format([para].end_time, 'hh\\:mm')) as Время ,[day].name as День,[group].name as Группа,[discipline].name as Дисциплина ,concat(teacher.surname,' ',teacher.name,' ',teacher.lastname) as Преподаватель FROM [raspisanie] join [office] on [raspisanie].id_office =[office].id_office join [para] on [raspisanie].id_para =[para].id_para join [discipline_academic] on [raspisanie].id_discipline_academic = [discipline_academic].id_discipline_academic join[discipline] on[discipline_academic].id_discipline =[discipline].id_discipline join [teacher] on[discipline_academic].id_teacher =[teacher].id_teacher join [group] on [discipline_academic].[id_group] =[group].id_group join [day] on [raspisanie].[id_day] =[day].id_day where ([raspisanie].id_day between '" + cmbStart.SelectedValue.ToString() + "' and '" + cmbEnd.SelectedValue.ToString() + "') and [discipline_academic].id_group = '" + cmbGroup.SelectedValue.ToString() + "' order by [raspisanie].id_day,[raspisanie].id_para" • Запрос для получения в виде отчёта данных из таблицы «mark», который показывает все оценки за зачёты и экзамены у выбранного студента. Также выводятся нормальные наименование студента, группы и дисциплины вместо id. "SELECT [group].name as Группа, concat([student].surname,' ',[student].name) as Студент ,[discipline].name as Дисциплина ,[discipline_academic].type_certification as [Тип аттестации,[mark] as Оценка,[date_certification] as Дата FROM [mark] join [student] on [mark].id_student =[student].id_student join [group] on [student].id_group =[group].id_group join [discipline_academic] on [mark].id_discipline_academic =[discipline_academic].id_discipline_academic join[discipline] on[discipline_academic].id_discipline =[discipline].id_discipline where[mark].id_student = '" + cmbStudent.SelectedValue.ToString() + "'" 20 • Запрос для получения в виде отчёта данных из таблицы «mark», который показывает все оценки за экзамены у выбранного студента. Также выводятся нормальные наименование студента, группы и дисциплины вместо id. "SELECT [group].name as Группа, concat([student].surname,' ',[student].name) as Студент ,[discipline].name as Дисциплина ,[discipline_academic].type_certification as [Тип аттестации,[mark] as Оценка,[date_certification] as Дата FROM [mark] join [student] on [mark].id_student =[student].id_student join [group] on [student].id_group =[group].id_group join [discipline_academic] on [mark].id_discipline_academic =[discipline_academic].id_discipline_academic join[discipline] on[discipline_academic].id_discipline =[discipline].id_discipline where[mark].id_student = '" + cmbStudent.SelectedValue.ToString() + "' and [discipline_academic].type_certification = 'Экзамен'" • Запрос для получения в виде отчёта данных из таблицы «mark», который показывает оценки каждого студента группы по выбранной дисциплине. Также выводятся нормальные наименование студента, группы и дисциплины вместо id. "SELECT concat([student].surname,' ',[student].name) as Студент ,[discipline].name as Дисциплина ,[discipline_academic].type_certification as [Тип аттестации] ,[mark] as Оценка,[date_certification] as Дата FROM [mark] join [student] on [mark].id_student = [student].id_student join [group] on [student].id_group = [group].id_group join [discipline_academic] on [mark].id_discipline_academic =[discipline_academic].id_discipline_academic join[discipline] on[discipline_academic].id_discipline =[discipline].id_discipline where [mark].id_discipline_academic = '" + cmbDiscipline2.SelectedValue.ToString() + "'" • Запрос для заполнения ComboBox парами из таблицы «para». SELECT id_para, concat(Format(start_time, 'hh\\:mm'), '-', Format(end_time, 'hh\\:mm')) as TIME FROM [para] • Запрос для заполнения ComboBox аудиториями из таблицы «office». SELECT id_office, concat('Корпуc:', korpus, ' Аудитория:',[number]) as AUDIT FROM [office] • Запрос для заполнения ComboBox днями недели из таблицы «day» SELECT [id_day],[name] FROM [day] • Запрос для заполнения ComboBox группами из таблицы «group» в зависимости от выбранного факультета. "SELECT [id_group], [name] FROM [group] where [id_facultet] = '" + cmbFacultet.SelectedValue.ToString() + "'" • Запрос для заполнения ComboBox дисциплинами из таблицы «discipline_academic» в зависимости от выбранной группы. "SELECT id_discipline_academic,[discipline].name as Imena FROM[discipline_academic] join [discipline] on [discipline_academic].id_discipline =[discipline].id_discipline join[group] on [discipline_academic].id_group = [group].id_group where [discipline_academic].id_group = '" + cmbGroup.SelectedValue.ToString() + "'" • Запрос для заполнения ComboBox студентами, которые имеют схожие буквы в своих фамилиях, из таблицы «student». 21 "SELECT id_student,concat([student].surname,' ',[student].name,' ',[student].lastname,' ',[group].name) as Студент FROM[student] join [group] on [student].id_group=[group].id_group where ([student].surname LIKE '" + textBox1.Text + "%') • Запрос на изменение оценки студента в таблице «mark». "UPDATE [mark] SET[mark] = @Mark WHERE[id_mark] = @id" • Запрос на удаление оценки студента из таблицы «mark». "DELETE FROM [mark] WHERE [id_mark] = @id" 22 Руководство пользователя Информационная система «Институт» предназначена для хранения, добавления, удаления информации о таких структурных единицах института как: факультеты, кафедры, преподаватели, группы, студенты, дисциплины, аудитории и время занятий. Также это информационная система служит для формирования расписания занятий, выставления оценок студентам и формирования соответствующих им отчётов. Данная система предназначена для работника университета, формирующего расписания занятий для групп в университете и фиксирующего оценки студентов после экзаменации. Пользователи должны обладать базовыми умениями работать с ОС Windows. При запуске программы пользователь видит форму для подключения к серверу с базой данных. Пользователь может выбрать подключение к уже имеющимся в списке серверам либо добавить новый сервер и подключиться к нему. Чтобы подключиться к серверу сперва необходимо проверить соединение. Это можно сделать, нажав на соответствующую кнопку. После подключение к серверу появиться стартовая форма с 2 кнопками. Пользователь может выбрать нужное ему действие. При нажатии на кнопку «Составить расписание» загрузится соответствующая форма для составления занятий. Чтобы просмотреть список уже добавленных занятий и добавить новые записи необходимо нажать на кнопку «Загрузить список занятий». После этого появиться возможность удалять, добавлять и изменять записи в таблице. Чтобы удалить запись необходимо выбрать строку в элементе управления и затем нажать кнопку удаления. Для изменения записи необходимо также выбрать строку, которую вы хотите изменить, в элементе управления и заполнить все обязательные параметры и нажать на кнопку изменить. На форме «Расписание» имеется раздел Справочник, в котором расположены 8 кнопок меню: «Факультет», «Кафедра», «Преподаватели», «Группа», «Студенты», «Дисциплины», «Аудитории», «Дисциплины группы». При нажатии на любую из них открывается окно другой формы, на котором расположены таблица с записями из базы данных университета и 2 кнопки «Добавить» и «Удалить» при нажатии на которые можно совершить характерные названиям кнопок действия с записями данной таблицы в базе данных. 23 При нажатии на стартовой форме кнопки «Выставить оценки по дисциплинам» открывается окно другой формы, на котором расположена таблица с записями об оценках студентов из базы данных университета и вкладки «Добавить», «Изменить», «Удалить» при переходе в которые можно совершить характерные названиями данным вкладкам действия с записями данной таблицы в базе данных. Также на формах «Расписание» и «Оценки» имеется кнопка «Отчёт», при нажатии на которую открывается окно, в котором пользователь может настроить параметры для формирования отчета. 24 Отчеты, формируемые приложением Отчет «Отчет расписание» с выбранными параметрами: «Группа: ИС28», «День недели: от Понедельника до Среды» представлен на рисунке 22. Рис. 22 – Отчет, формируемый приложением Отчет «Оценки студента» с выбранными параметрами «Группа: ИС28», «Студент: Андрей Федин», «Тип сдачи: Все» представлен на рис.23. Рис. 23 – Отчет, формируемый приложением Отчет «Оценки группы по предмету» с выбранными параметрами «Группа: ИС28», «Дисциплина: Python» представлен на рис.24. 25 Рис. 24 – Отчет, формируемый приложением 26 Приложение [Приложение 1.1] public partial class authorizationForm : Form { string ConnectionSql = "Server=myServerAddress;Database=Kursov;Integrated Security=True;"; string ConnectionString; string status="0"; // определяю какая выбрана функция. 0-выбор старого сервера, 1-добавление нового bool ConnectionStatus = false; // нормально ли прошла проверка соединения. falseнеудачно, true-подключение успешно. DataSet dataSet1 = new DataSet(); Form startForm; public authorizationForm() { InitializeComponent(); status = "0"; label1.Visible = true; cmbServer.Visible = true; ConnectionStatus = false; label2.Visible = false; tbServer.Visible = false; checkBox1.Visible = false; loadXml(); } private void подключениеКНовомуСерверуToolStripMenuItem_Click(object sender, EventArgs e) { status = "1"; label1.Visible = false; cmbServer.Visible = false; ConnectionStatus = false; label2.Visible = true; tbServer.Visible = true; checkBox1.Visible = true; } private void подключениеКСтаромуСерверуToolStripMenuItem_Click(object sender, EventArgs e) { status = "0"; label1.Visible = true; cmbServer.Visible = true; ConnectionStatus = false; label2.Visible = false; tbServer.Visible = false; checkBox1.Visible = false; } void loadXml() { cmbServer.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; dataSet1.ReadXml("Servers.xml"); cmbServer.DataSource = dataSet1.Tables[0]; cmbServer.DisplayMember = "name"; 27 cmbServer.ValueMember = "ConnectionString"; } void TestingNewConnectionStr() { ConnectionString = SelectionConnectionStr(); SqlConnection connection = new SqlConnection(ConnectionString); try { connection.Open(); MessageBox.Show("Соединение успешно установлена. Строка подключения работает"); ConnectionStatus = true; } catch (Exception error) { MessageBox.Show("Error: " + error.Message); } finally { connection.Close(); } } void TestingOldConnectionStr() { ConnectionString = cmbServer.SelectedValue.ToString(); SqlConnection connection = new SqlConnection(ConnectionString); try { connection.Open(); MessageBox.Show("Соединение успешно установлена. Строка подключения работает"); ConnectionStatus = true; } catch (Exception error) { MessageBox.Show("Error: " + error.Message); } finally { connection.Close(); } } string SelectionConnectionStr() { string connection = ConnectionSql.Replace("myServerAddress", tbServer.Text.Trim()); return connection; } void loadStrForm () { if (startForm == null || startForm.IsDisposed) { startForm = new startForm(ConnectionString); this.Hide(); } startForm.Show(); this.Hide(); } private void btnCheckCN_Click(object sender, EventArgs e) { if (status == "1") 28 { if (String.IsNullOrWhiteSpace(tbServer.Text)) { MessageBox.Show("Не введенны необходимые данные для создания строки подключения."); } else { TestingNewConnectionStr(); } } else { if (cmbServer.SelectedValue == null) { MessageBox.Show("Не введенны необходимые данные для проверки строки подключения."); } else { TestingOldConnectionStr(); } } } private void btnConnect_Click(object sender, EventArgs e) { if (ConnectionStatus==true && status=="1") // пройдена проверка на корректность строки { if (checkBox1.Checked == true) // пользователь поставил галочку, чтобы сохранить адрес сервера { bool ServerExist = false; XDocument xdoc = XDocument.Load("Servers.xml"); XElement root = xdoc.Element("servers"); foreach (XElement xe in root.Elements("server").ToList()) { if (xe.Attribute("name").Value == tbServer.Text.Trim()) // проверка есть ли такой сервер уже в базе { loadStrForm(); ServerExist = true; break; } } if (ServerExist == false) { root.Add(new XElement("server", new XAttribute("name", tbServer.Text.Trim()), new XElement("ConnectionString", ConnectionString))); xdoc.Save("Servers.xml"); loadStrForm(); } } else { loadStrForm(); } } else if (ConnectionStatus == true && status == "0") { loadStrForm(); } else 29 { MessageBox.Show("Перед подключением необходимо сперва проверить строку подключения на корректность.Это можно сделать кнопкой справа."); } } } [Приложение 1.2] public partial class startForm : Form { public startForm(string connect) { InitializeComponent(); connectionString = connect; } Form raspisanieForm; Form markForm; string connectionString; private void btnRaspisanie_Click(object sender, EventArgs e) { if (raspisanieForm == null || raspisanieForm.IsDisposed) { raspisanieForm = new raspisanieForm(this, connectionString); } raspisanieForm.Show(); } private void btnMark_Click(object sender, EventArgs e) { if (markForm == null || markForm.IsDisposed) { markForm = new markForm(this, connectionString); } markForm.Show(); } private void startForm_FormClosing(object sender, FormClosingEventArgs e) { //при попытке закрытия программы пользователем if (e.CloseReason == CloseReason.UserClosing) { //устанавливает флаг отмены события в истину e.Cancel = true; //спрашивает стоит ли завершится if (MessageBox.Show("Вы уверены что хотите закрыть программу?", "Выйти?", MessageBoxButtons.YesNo) == DialogResult.Yes) { //и после этого только завершается работа приложения Application.Exit(); } } } } [Приложение 1.3] public partial class raspisanieForm : Form { Form facultetForm; Form kafedraForm; Form groupForm; Form studentForm; Form teacherForm; 30 Form disciplineForm; Form dsp_academicForm; Form officeForm; Form timeTableReroptForm; List<int> IdToChange = new List<int>(); string connectionString; public raspisanieForm(Form f1, string connect) { InitializeComponent(); connectionString = connect; btnAdd.Visible = false; btnChange.Visible = false; btnDelete.Visible = false; btnLoad.Visible = true; LoadComboBox(); } void UpdateDGV() { using (SqlConnection connection = new SqlConnection(connectionString)) { SqlDataAdapter adapterSql = new SqlDataAdapter("SELECT id_raspisanie as [Код расписания],concat('Корпуc:', [office].korpus, ' Аудитория:',[office].number) as Аудитория,concat(Format([para].start_time, 'hh\\:mm'), '-', Format([para].end_time, 'hh\\:mm')) as Время,[day].name as День,[group].name as Группа,[discipline].name as Дисциплина,concat(teacher.surname,' ',teacher.name,' ',teacher.lastname) as Преподаватель FROM[raspisanie] join[office] on[raspisanie].id_office =[office].id_office join[para] on[raspisanie].id_para =[para].id_para join[discipline_academic] on[raspisanie].id_discipline_academic = [discipline_academic].id_discipline_academic join[discipline] on[discipline_academic].id_discipline =[discipline].id_discipline join[teacher] on[discipline_academic].id_teacher =[teacher].id_teacher join[group] on[discipline_academic].[id_group] =[group].id_group join[day] on[raspisanie].[id_day] =[day].id_day", connection); DataSet ds = new DataSet(); adapterSql.Fill(ds); DataTable dt = ds.Tables[0]; dataGridView1.DataSource = dt; dt.Dispose(); ds.Dispose(); } } int findFreeID() { DataContext db = new DataContext(connectionString); for (int number = 1; number < 100000; number++) { bool flag = true; foreach (var student in db.GetTable<Raspisanie>()) { int valueCell = student.Id; if (valueCell == number) { flag = false; break; } } if (flag) { return number; } } return 0; } void LoadComboBox() 31 { DataContext db = new DataContext(connectionString); cmbDiscipline.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; // запрет на ручной ввод cmbOffice.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbPara.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbDay.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbFacultet.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbFacultet.DataSource = db.GetTable<Facultet>(); cmbFacultet.DisplayMember = "Name"; cmbFacultet.ValueMember = "Id"; SqlDataAdapter SelectPara = new SqlDataAdapter("SELECT [id_para], concat(Format(start_time, 'hh\\:mm'), '-', Format(end_time, 'hh\\:mm')) as TIME FROM[para]", connectionString); DataTable tbPara = new DataTable(); SelectPara.Fill(tbPara); cmbPara.DataSource = tbPara; cmbPara.DisplayMember = "TIME"; cmbPara.ValueMember = "id_para"; SqlDataAdapter SelectOffice = new SqlDataAdapter("SELECT [id_office], concat('Корпуc:', korpus, ' Аудитория:',[number]) as AUDIT FROM[office]", connectionString); DataTable tbOffice = new DataTable(); SelectOffice.Fill(tbOffice); cmbOffice.DataSource = tbOffice. cmbOffice.DisplayMember = "AUDIT"; cmbOffice.ValueMember = "id_office"; SqlDataAdapter SelectDay = new SqlDataAdapter("SELECT [id_day] ,[name] FROM[day]", connectionString); DataTable tbDay = new DataTable(); SelectDay.Fill(tbDay); cmbDay.DataSource = tbDay; cmbDay.DisplayMember = "name"; cmbDay.ValueMember = "id_day"; } bool OfficeIsFree() { DataContext db = new DataContext(connectionString); Table<Raspisanie> raspisanie = db.GetTable<Raspisanie>(); Table<Student> students = db.GetTable<Student>(); Table<Office> offices = db.GetTable<Office>(); var count = raspisanie.Count(gr => gr.IdPara == Convert.ToInt32(cmbPara.SelectedValue) && gr.DayWeek == Convert.ToInt32(cmbDay.SelectedValue) && gr.IdOffice == Convert.ToInt32(cmbOffice.SelectedValue));// проверка свободна ли аудитория в это время int countStudent = students.Where(st => st.IdGroup == Convert.ToInt32(cmbGroup.SelectedValue)).Count(); int countPlace = (from office in offices where office.Id == Convert.ToInt32(cmbOffice.SelectedValue) select office.Countplace).FirstOrDefault(); if (count == 0) { if (countPlace >= countStudent) { return true; } 32 else { MessageBox.Show("В этой аудитории слишком мало места для этой группы. В аудитории "+ countPlace + " мест, а нужно " +countStudent +" мест."); return false; } } else { MessageBox.Show("Эта аудитория занята"); return false; } } bool TeacherIsFree() { DataContext db = new DataContext(connectionString); Table<Raspisanie> raspisanie = db.GetTable<Raspisanie>(); Table<Discipline_academic> discipline = db.GetTable<Discipline_academic>(); var teacher = (from dsp in discipline where dsp.Id == Convert.ToInt32(cmbDiscipline.SelectedValue) select dsp.IdTeacher).ToList(); // получаю Id учителя этой дисциплины ; Test inpData = new Test(); // объект с информацией о том, что мы хотим добавить в БД, чтобы сравнить с имеющимися данными в БД. inpData.IdTeacher = teacher[0]; inpData.IdPara = Convert.ToInt32(cmbPara.SelectedValue); inpData.IdDay = Convert.ToInt32(cmbDay.SelectedValue); if ((from rasp in raspisanie join dsp in discipline on rasp.IdDiscipline equals dsp.Id where dsp.IdTeacher == inpData.IdTeacher && rasp.IdPara == inpData.IdPara && rasp.DayWeek == inpData.IdDay select rasp).FirstOrDefault() != null) { MessageBox.Show("Преподаватель уже ведет занятие в это время."); return false; } else { return true; } } bool GroupIsFree() { DataContext db = new DataContext(connectionString); Table<Raspisanie> raspisanie = db.GetTable<Raspisanie>(); Table<Discipline_academic> discipline = db.GetTable<Discipline_academic>(); Test inpData = new Test(); inpData.IdGroup = Convert.ToInt32(cmbGroup.SelectedValue); inpData.IdPara = Convert.ToInt32(cmbPara.SelectedValue); inpData.IdDay = Convert.ToInt32(cmbDay.SelectedValue); if ((from rasp in raspisanie join dsp in discipline on rasp.IdDiscipline equals dsp.Id where dsp.IdGroup == inpData.IdGroup && rasp.IdPara == inpData.IdPara && rasp.DayWeek == inpData.IdDay select rasp).FirstOrDefault() != null) { MessageBox.Show("Группа уже имеет занятие в это время."); return false; 33 } else { return true; } } private void факультетToolStripMenuItem_Click(object sender, EventArgs e) { if (facultetForm == null || facultetForm.IsDisposed) { facultetForm = new facultetForm(this, connectionString); } facultetForm.Show(); } private void кафедраToolStripMenuItem_Click(object sender, EventArgs e) { if (kafedraForm == null || kafedraForm.IsDisposed) { kafedraForm = new kafedraForm(this, connectionString); } kafedraForm.Show(); } private void группаToolStripMenuItem_Click(object sender, EventArgs e) { if (groupForm == null || groupForm.IsDisposed) { groupForm = new groupForm(this, connectionString); } groupForm.Show(); } private void студентыToolStripMenuItem_Click(object sender, EventArgs e) { if (studentForm == null || studentForm.IsDisposed) { studentForm = new studentForm(this, connectionString); } studentForm.Show(); } private void преподавателиToolStripMenuItem_Click(object sender, EventArgs e) { if (teacherForm == null || teacherForm.IsDisposed) { teacherForm = new teacherForm(this, connectionString); } teacherForm.Show(); } private void дисциплиныToolStripMenuItem_Click(object sender, EventArgs e) { if (disciplineForm == null || disciplineForm.IsDisposed) { disciplineForm = new disciplineForm(this, connectionString); } disciplineForm.Show(); } private void дисциплиныУчебногоПланаToolStripMenuItem_Click(object sender, EventArgs e) { if (dsp_academicForm == null || dsp_academicForm.IsDisposed) { dsp_academicForm = new dsp_academicForm(this, connectionString); } dsp_academicForm.Show(); } private void аудиторииToolStripMenuItem_Click(object sender, EventArgs e) 34 { if (officeForm == null || officeForm.IsDisposed) { officeForm = new officeForm(this, connectionString); } officeForm.Show(); } private void отчётРасписаниеToolStripMenuItem_Click(object sender, EventArgs e) { if (timeTableReroptForm == null || timeTableReroptForm.IsDisposed) { timeTableReroptForm = new timeTableReroptForm(this, connectionString); } timeTableReroptForm.Show(); } private void cmbGroup_SelectionChangeCommitted(object sender, EventArgs e) { SqlDataAdapter SelectNameDiscipline = new SqlDataAdapter("SELECT id_discipline_academic,[discipline].name as Imena FROM[discipline_academic] join [discipline] on [discipline_academic].id_discipline =[discipline].id_discipline join[group] on [discipline_academic].id_group = [group].id_group where[discipline_academic].id_group = '" + cmbGroup.SelectedValue.ToString() + "'", connectionString); //вывод имени вместо ID DataTable tbDiscipline = new DataTable(); SelectNameDiscipline.Fill(tbDiscipline); cmbDiscipline.DataSource = tbDiscipline; cmbDiscipline.DisplayMember = "Imena"; cmbDiscipline.ValueMember = "id_discipline_academic"; DataContext db = new DataContext(connectionString); Table<Discipline_academic> discipline = db.GetTable<Discipline_academic>(); Table<Teacher> teacher = db.GetTable<Teacher>(); var teach = (from dsp in discipline join tch in teacher on dsp.IdTeacher equals tch.Id where dsp.Id == Convert.ToInt32(cmbDiscipline.SelectedValue) select tch.Surname + " " + tch.Name + " " + tch.Lastname ).ToList(); tbTeacher.Text = teach.FirstOrDefault(); } private void btnAdd_Click(object sender, EventArgs e) { int number = findFreeID(); DataContext db = new DataContext(connectionString); if (cmbDiscipline.SelectedValue != null && cmbPara.SelectedValue != null && cmbOffice.SelectedValue != null) { if (OfficeIsFree() && TeacherIsFree() && GroupIsFree()) { Raspisanie raspisanie1 = new Raspisanie { Id = number, IdDiscipline = Convert.ToInt32(cmbDiscipline.SelectedValue), IdOffice = Convert.ToInt32(cmbOffice.SelectedValue), IdPara = Convert.ToInt32(cmbPara.SelectedValue), DayWeek = Convert.ToInt32(cmbDay.SelectedValue) }; // объект для добавления в БД db.GetTable<Raspisanie>().InsertOnSubmit(raspisanie1); db.SubmitChanges(); UpdateDGV(); } } else { MessageBox.Show("Вы не выбрали все необходимые поля для добавления."); } } private void btnDelete_Click(object sender, EventArgs e) 35 { try { DataContext db = new DataContext(connectionString); var k = dataGridView1.SelectedRows.Cast<DataGridViewRow>().Select(z => z.Index).ToList(); // нахожу список индексов выделенных строк в DataGrid foreach (var number in k) // определяю ID, которые нужно будет удалить { IdToChange.Add(Convert.ToInt32(dataGridView1[0, number].Value)); } foreach (var id in IdToChange) // определяю ID, которые нужно будет удалить { Raspisanie dltRaspisanies = (from c in db.GetTable<Raspisanie>() where c.Id == id select c).SingleOrDefault<Raspisanie>(); db.GetTable<Raspisanie>().DeleteOnSubmit(dltRaspisanies); db.SubmitChanges(); UpdateDGV(); } IdToChange.Clear(); // очищаю список удаленных ID } catch (System.Data.SqlClient.SqlException) { MessageBox.Show("Ошибка удаления. Необходимо предварительно удалить все записи из других таблиц, которые связаны с этой строкой."); IdToChange.Clear(); // очистка ID которые нельзя удалить } } private void btnChange_Click(object sender, EventArgs e) { DataContext db = new DataContext(connectionString); var k = dataGridView1.SelectedRows.Cast<DataGridViewRow>().Select(z => z.Index).ToList(); // нахожу список индексов выделенных строк в DataGrid foreach (var number in k) // определяю ID, которые нужно изменить { IdToChange.Add(Convert.ToInt32(dataGridView1[0, number].Value)); } if (cmbGroup.SelectedValue != null && cmbDiscipline.SelectedValue != null && cmbPara.SelectedValue != null && cmbOffice.SelectedValue != null && cmbDay.Text.Length > 0) { Raspisanie cnhRaspisanies = (from c in db.GetTable<Raspisanie>() where c.Id == IdToChange[0] select c).SingleOrDefault<Raspisanie>(); if (cnhRaspisanies.IdPara == Convert.ToInt32(cmbPara.SelectedValue) && cnhRaspisanies.DayWeek == Convert.ToInt32(cmbDay.SelectedValue) && cnhRaspisanies.IdOffice == Convert.ToInt32(cmbOffice.SelectedValue)) { if (TeacherIsFree() && GroupIsFree()) { cnhRaspisanies.IdDiscipline = Convert.ToInt32(cmbDiscipline.SelectedValue); db.SubmitChanges(); IdToChange.Clear(); UpdateDGV(); } else IdToChange.Clear(); } else if (OfficeIsFree() && TeacherIsFree() && GroupIsFree()) { cnhRaspisanies.IdPara = Convert.ToInt32(cmbPara.SelectedValue); 36 cnhRaspisanies.IdOffice = Convert.ToInt32(cmbOffice.SelectedValue); cnhRaspisanies.IdDiscipline = Convert.ToInt32(cmbDiscipline.SelectedValue); cnhRaspisanies.DayWeek = Convert.ToInt32(cmbDay.SelectedValue); db.SubmitChanges(); UpdateDGV(); IdToChange.Clear(); } else { IdToChange.Clear(); } } else { MessageBox.Show("Вы не выбрали все необходимые поля для изменения строки."); } } private void btnLoad_Click(object sender, EventArgs e) { if (MessageBox.Show("Вы действительно хотите начать составлять расписание занятий?", "Подтверждение", MessageBoxButtons.OKCancel) == DialogResult.OK) { btnAdd.Visible = true; btnChange.Visible = true; btnDelete.Visible = true; btnLoad.Visible = false; UpdateDGV(); } } private void cmbFacultet_SelectionChangeCommitted(object sender, EventArgs e) { SqlDataAdapter SelectGroup = new SqlDataAdapter("SELECT [id_group],[name] FROM [group] where [id_facultet] = '" + cmbFacultet.SelectedValue.ToString() + "'", connectionString); DataTable tbGroup = new DataTable(); SelectGroup.Fill(tbGroup); cmbGroup.DataSource = tbGroup; cmbGroup.DisplayMember = "name"; cmbGroup.ValueMember = "id_group"; cmbDiscipline.DataSource = null; tbTeacher.Text = ""; if (cmbGroup.SelectedValue == null) { MessageBox.Show("Для данного факультета нет доступных групп."); cmbGroup.DataSource = null; cmbDiscipline.DataSource = null; } } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { } private void cmbDiscipline_SelectionChangeCommitted(object sender, EventArgs e) { DataContext db = new DataContext(connectionString); Table<Discipline_academic> discipline = db.GetTable<Discipline_academic>(); Table<Teacher> teacher = db.GetTable<Teacher>(); var teach = (from dsp in discipline join tch in teacher on dsp.IdTeacher equals tch.Id where dsp.Id == Convert.ToInt32(cmbDiscipline.SelectedValue) select tch.Surname + " " + tch.Name + " " + tch.Lastname ).ToList(); 37 tbTeacher.Text = teach.FirstOrDefault(); } private void cmbFacultet_DropDown(object sender, EventArgs e) { DataContext db = new DataContext(connectionString); cmbFacultet.DataSource = db.GetTable<Facultet>(); cmbFacultet.DisplayMember = "Name";// столбец для отображения cmbFacultet.ValueMember = "Id";//столбец с id } } [Приложение 1.4] public partial class facultetForm : Form { public facultetForm(Form f1, string connect) { InitializeComponent(); MainForm = f1; connectionString = connect; UpdateData(); } Form MainForm; string connectionString; List <int> IdToDelete=new List<int>(); string[] columnsDGV = { "Id", "Name", "Decan", "Phone" }; string[] nameColumnsDGV = { "Номер факультета", "Название", "Декан", "Телефон" }; void UpdateData () { DataContext db = new DataContext(connectionString); dataGridView1.DataSource = (from dta in db.GetTable<Facultet>() select dta); ChangeNameDGV(); } void ChangeNameDGV() { for (int i = 0; i < dataGridView1.Columns.Count; i++) { dataGridView1.Columns[columnsDGV[i]].HeaderText = nameColumnsDGV[i]; } } bool CheckInpData () { if(tbName.Text.Length>0 && tbDecan.Text.Length-4>0) // -4, так как декан имеет маску размеров 4 символа. { return true; } else { MessageBox.Show("Убедитесь, что вы ввели все обязательные поля."); return false; } } bool NotExistInTable() { DataContext db = new DataContext(connectionString); Table<Facultet> facultets = db.GetTable<Facultet>(); var count1 = facultets.Count(gr => gr.Name.ToUpper().Replace(" ", string.Empty) == tbName.Text.ToUpper().Replace(" ", string.Empty)); var count2 = facultets.Count(gr => gr.Decan.ToUpper().Replace(" ", string.Empty) == tbDecan.Text.ToUpper().Replace(" ", string.Empty)); if (count1 == 0 && count2 == 0) // если нету таких, то можно так назвать группу { 38 return true; } else { if (count1 != 0) { MessageBox.Show("Факультет с таким именем уже существует."); return false; } else if (count2 != 0) { MessageBox.Show("Один человек не может быть деканом у 2-х факультетов."); return false; } else { MessageBox.Show("Один человек не может быть деканом у 2-х факультетов или факультет с таким именем уже существует."); return false; } } } private void btnAddData_Click(object sender, EventArgs e) { if (CheckInpData()) { if (NotExistInTable()) { int number = findFreeID(); DataContext db = new DataContext(connectionString); Facultet facultet1 = new Facultet { Id = number, Name = tbName.Text.Replace(" ", string.Empty), Decan = tbDecan.Text.Replace(" ", string.Empty), Phone = tbPhone.Text }; db.GetTable<Facultet>().InsertOnSubmit(facultet1); db.SubmitChanges(); UpdateData(); } } } int findFreeID() { DataContext db = new DataContext(connectionString); for (int number = 1; number < 100000; number++) { bool flag = true; foreach(var facult in db.GetTable<Facultet>()) { int valueCell = facult.Id; if (valueCell == number) { flag = false; break; } } if (flag) { return number; } } return 0; } private void btnDeleteData_Click(object sender, EventArgs e) { try { 39 DataContext db = new DataContext(connectionString); var k = dataGridView1.SelectedRows.Cast<DataGridViewRow>().Select(z => z.Index).ToList(); // нахожу список индексов выделенных строк в DataGrid foreach (var number in k) { IdToDelete.Add(Convert.ToInt32(dataGridView1[0, number].Value)); } foreach (var number in IdToDelete) { Facultet dltFacultets = (from c in db.GetTable<Facultet>() where c.Id == number select c).SingleOrDefault<Facultet>(); db.GetTable<Facultet>().DeleteOnSubmit(dltFacultets); db.SubmitChanges(); UpdateData(); } IdToDelete.Clear() } catch (System.Data.SqlClient.SqlException) { MessageBox.Show("Ошибка удаления. Необходимо предварительно удалить все записи из других таблиц, которые связаны с этой строкой."); IdToDelete.Clear(); } } } [Приложение 1.5] public partial class kafedraForm : Form { public kafedraForm(Form f1, string connect) { InitializeComponent(); MainForm = f1; connectionString = connect; LoadComboBox(); UpdateData(); } Form MainForm; List<int> IdToDelete = new List<int>(); string connectionString; void LoadComboBox() { cmbFacultet.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; DataContext db = new DataContext(connectionString); cmbFacultet.DataSource = db.GetTable<Facultet>(); cmbFacultet.DisplayMember = "Name"; cmbFacultet.ValueMember = "Id"; } bool CheckInpData() { if (tbName.Text.Length > 0 && tbHeadmaster.Text.Length - 4 > 0) // -4, так как декан имеет маску размеров 4 символа. { return true; } else { MessageBox.Show("Убедитесь, что вы ввели все обязательные поля."); return false; } } bool NotExistInTable() 40 { DataContext db = new DataContext(connectionString); Table<Kafedra> kafedras = db.GetTable<Kafedra>(); var count1 = kafedras.Count(gr => gr.Name.ToUpper().Replace(" ", string.Empty) == tbName.Text.ToUpper().Replace(" ", string.Empty)); var count2 = kafedras.Count(gr => gr.Headmaster.ToUpper().Replace(" ", string.Empty) == tbHeadmaster.Text.ToUpper().Replace(" ", string.Empty)); if (count1 == 0 && count2 == 0) // если нету таких, то можно так назвать { return true; } else { if (count1 != 0) { MessageBox.Show("Кафедра с таким именем уже существует."); return false; } else if (count2 != 0) { MessageBox.Show("Один человек не может быть заведующим у 2-х кафедр."); return false; } else { MessageBox.Show("Один человек не может быть заведующим у 2-х кафедр или кафедра с таким именем уже существует."); return false; } } } int findFreeID() { DataContext db = new DataContext(connectionString); for (int number = 1; number < 100000; number++) { bool flag = true; foreach (var facult in db.GetTable<Kafedra>()) { int valueCell = facult.Id; if (valueCell == number) { flag = false; break; } } if (flag) { return number; } } return 0; } void UpdateData() { using (SqlConnection connection = new SqlConnection(connectionString)) { SqlDataAdapter adapterSql = new SqlDataAdapter("SELECT [kafedra].[id_kafedra] as [Код кафедры],[facultet].[name] as [Факультет],[kafedra].[name] as [Кафедра],[headKafedra] as [Заведующий кафедры] FROM[kafedra] join[facultet] on[kafedra].id_facultet = [facultet].id_facultet", connection); DataSet ds = new DataSet(); adapterSql.Fill(ds); 41 DataTable dt = ds.Tables[0]; dataGridView1.DataSource = dt; dt.Dispose(); ds.Dispose(); } } private void btnAddData_Click(object sender, EventArgs e) { if (CheckInpData() && NotExistInTable()) { int number = findFreeID(); DataContext db = new DataContext(connectionString); int idFacultet = Convert.ToInt32(cmbFacultet.SelectedValue.ToString()); Kafedra kafedra1 = new Kafedra { Id = number, Name = tbName.Text.Replace(" ", string.Empty), Headmaster = tbHeadmaster.Text.Replace(" ", string.Empty), IdFacultet = idFacultet }; db.GetTable<Kafedra>().InsertOnSubmit(kafedra1); db.SubmitChanges(); UpdateData(); } } private void btnDeleteData_Click(object sender, EventArgs e) { try { DataContext db = new DataContext(connectionString); var k = dataGridView1.SelectedRows.Cast<DataGridViewRow>().Select(z => z.Index).ToList(); // нахожу список индексов выделенных строк в DataGrid foreach (var number in k) { IdToDelete.Add(Convert.ToInt32(dataGridView1[0, number].Value)); } foreach (var id in IdToDelete) { Kafedra dltKafedras = (from c in db.GetTable<Kafedra>() where c.Id == id select c).SingleOrDefault<Kafedra>(); db.GetTable<Kafedra>().DeleteOnSubmit(dltKafedras); db.SubmitChanges(); UpdateData(); } IdToDelete.Clear(); } catch (System.Data.SqlClient.SqlException) { MessageBox.Show("Ошибка удаления. Необходимо предварительно удалить все записи из других таблиц, которые связаны с этой строкой."); IdToDelete.Clear(); } } } [Приложение 1.6] public partial class teacherForm : Form { public teacherForm(Form f1, string connect) { InitializeComponent(); MainForm = f1; connectionString = connect; LoadComboBox(); UpdateData(); } 42 Form MainForm; List<string> IdToDelete = new List<string>(); string connectionString; string[] columnsDGV = {"id_teacher", "name", "surname", "name1", "lastname", "post"}; string[] nameColumnsDGV = {"Код преподавателя", "Название кафедры", "Фамилия", "Имя", "Отчество", "Должность"}; void ChangeNameDGV() { for (int i = 0; i < dataGridView1.Columns.Count; i++) { dataGridView1.Columns[columnsDGV[i]].HeaderText = nameColumnsDGV[i]; } } void LoadComboBox() { cmbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; DataContext db = new DataContext(connectionString); cmbGroup.DataSource = db.GetTable<Kafedra>(); cmbGroup.DisplayMember = "Name"; cmbGroup.ValueMember = "Id"; } bool CorrectInpData() { if (tbName.Text.Length > 0 && tbSurname.Text.Length > 0 && tbId.Text.Length>4) { return true; } else { MessageBox.Show("Убедитесь, что вы ввели все обязательные поля."); return false; } } bool NotExistInTable() { DataContext db = new DataContext(connectionString); Table<Teacher> kafedras = db.GetTable<Teacher>(); var count1 = kafedras.Count(gr => gr.Id.ToUpper().Replace(" ", string.Empty) == tbId.Text.ToUpper().Replace(" ", string.Empty)); if (count1 == 0) // если нету таких, то можно так назвать { return true; } else { MessageBox.Show("Человек с такими паспортными данными уже есть в таблице."); return false; } } void UpdateData() { using (SqlConnection connection = new SqlConnection(connectionString)) { SqlDataAdapter adapterSql = new SqlDataAdapter("SELECT [id_teacher],[kafedra].[name],[surname],[teacher].[name],[lastname],post FROM[teacher] join[kafedra] on[teacher].id_kafedra = [kafedra].id_kafedra", connection); DataSet ds = new DataSet(); adapterSql.Fill(ds); DataTable dt = ds.Tables[0]; dataGridView1.DataSource = dt; dt.Dispose(); 43 ds.Dispose(); ChangeNameDGV(); } } private void btnAddData_Click(object sender, EventArgs e) { DataContext db = new DataContext(connectionString); if (cmbGroup.SelectedValue != null && CorrectInpData() && NotExistInTable()) { string id = tbId.Text.Replace(" ", string.Empty);//очищаю пробелы в строке int kafedra = Convert.ToInt32(cmbGroup.SelectedValue.ToString()); // Teacher teacher1 = new Teacher { Id = id, IdKafedra = kafedra, Name = tbName.Text.Trim(), Surname = tbSurname.Text.Trim(), Lastname = tbLastname.Text.Trim(), Post=tbPost.Text.Trim() }; db.GetTable<Teacher>().InsertOnSubmit(teacher1); db.SubmitChanges(); UpdateData(); } } private void btnDeleteData_Click(object sender, EventArgs e) { try { DataContext db = new DataContext(connectionString); var k = dataGridView1.SelectedRows.Cast<DataGridViewRow>().Select(z => z.Index).ToList(); foreach (var number in k) { IdToDelete.Add(dataGridView1[0, number].Value.ToString()); } foreach (var id in IdToDelete) { Teacher dltTeachers = (from c in db.GetTable<Teacher>() where c.Id == id select c).SingleOrDefault<Teacher>(); db.GetTable<Teacher>().DeleteOnSubmit(dltTeachers); db.SubmitChanges(); UpdateData(); } IdToDelete.Clear(); } catch (System.Data.SqlClient.SqlException) { MessageBox.Show("Ошибка удаления. Необходимо предварительно удалить все записи из других таблиц, которые связаны с этой строкой."); IdToDelete.Clear(); } } } [Приложение 1.7] public partial class groupForm : Form { public groupForm(Form f1, string connect) { InitializeComponent(); MainForm = f1; connectionString = connect; LoadComboBox(); UpdateData(); } Form MainForm; List<int> IdToDelete = new List<int>(); string connectionString; 44 string[] columnsDGV = { "id_group", "name", "name1", "kurs" }; string[] nameColumnsDGV = { "Номер группы", "Название группы", "Факультет", "Курс" }; void ChangeNameDGV() { for (int i = 0; i < dataGridView1.Columns.Count; i++) { dataGridView1.Columns[columnsDGV[i]].HeaderText = nameColumnsDGV[i]; } } void LoadComboBox() { cmbFacultet.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; // запрет на ручной ввод DataContext db = new DataContext(connectionString); cmbFacultet.DataSource = db.GetTable<Facultet>(); cmbFacultet.DisplayMember = "Name"; cmbFacultet.ValueMember = "Id"; } int findFreeID() { DataContext db = new DataContext(connectionString); for (int number = 1; number < 100000; number++) { bool flag = true; foreach (var group in db.GetTable<Group>()) { int valueCell = group.Id; if (valueCell == number) { flag = false; break; } } if (flag) { return number; } } return 0; } bool NotExistInTable () { DataContext db = new DataContext(connectionString); Table<Group> groups = db.GetTable<Group>(); var count = groups.Count(gr=> gr.Name.ToUpper() == tbName.Text.ToUpper()); if (count == 0) // если нету таких, то можно так назвать группу { return true; } else { MessageBox.Show("Есть такое имя"); return false; } } void UpdateData() { using (SqlConnection connection = new SqlConnection(connectionString)) { SqlDataAdapter adapterSql = new SqlDataAdapter("SELECT [group].[id_group],[group].[name],[facultet].[name],[kurs] FROM[group] join[facultet] on[group].id_facultet = [facultet].id_facultet", connection); 45 DataSet ds = new DataSet(); adapterSql.Fill(ds); DataTable dt = ds.Tables[0]; dataGridView1.DataSource = dt; dt.Dispose(); ds.Dispose(); ChangeNameDGV(); } } private void btnAddData_Click(object sender, EventArgs e) { int number = findFreeID(); DataContext db = new DataContext(connectionString); if (cmbFacultet.SelectedValue != null && tbKurs.Text != "" && tbName.Text != "") { int idFacultet = Convert.ToInt32(cmbFacultet.SelectedValue.ToString()); if (Convert.ToInt32(tbKurs.Text)>0 && NotExistInTable()) { Group group1 = new Group { Id = number, Name = tbName.Text, IdFacultet = idFacultet, Kurs = Convert.ToInt32(tbKurs.Text) }; db.GetTable<Group>().InsertOnSubmit(group1); db.SubmitChanges(); UpdateData(); } else MessageBox.Show("Курс не может быть равен 0 и имя группы не может повторяться"); } else MessageBox.Show("Проверьте правильность введенных данных"); } private void btnDeleteData_Click(object sender, EventArgs e) { try { DataContext db = new DataContext(connectionString); var k = dataGridView1.SelectedRows.Cast<DataGridViewRow>().Select(z => z.Index).ToList(); foreach (var number in k) { IdToDelete.Add(Convert.ToInt32(dataGridView1[0, number].Value)); } foreach (var id in IdToDelete) { Group dltGroups = (from c in db.GetTable<Group>() where c.Id == id select c).SingleOrDefault<Group>(); db.GetTable<Group>().DeleteOnSubmit(dltGroups); db.SubmitChanges(); UpdateData(); } IdToDelete.Clear(); } catch (System.Data.SqlClient.SqlException) { MessageBox.Show("Ошибка удаления. Необходимо предварительно удалить все записи из других таблиц, которые связаны с этой строкой."); IdToDelete.Clear(); } } } 46 [Приложение 1.8] public partial class studentForm : Form { public studentForm(Form f1, string connect) { InitializeComponent(); MainForm = f1; connectionString = connect; LoadComboBox(); UpdateData(); } Form MainForm; List<int> IdToDelete = new List<int>(); string connectionString; void LoadComboBox() { cmbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbFacultet.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; DataContext db = new DataContext(connectionString); cmbFacultet.DataSource = db.GetTable<Facultet>(); cmbFacultet.DisplayMember = "Name"; cmbFacultet.ValueMember = "Id"; SqlDataAdapter SelectGroup = new SqlDataAdapter("SELECT [id_group],[name] FROM [group] where [id_facultet] = '" + cmbFacultet.SelectedValue.ToString() + "'", connectionString); DataTable tbGroup = new DataTable(); SelectGroup.Fill(tbGroup); cmbGroup.DataSource = tbGroup; cmbGroup.DisplayMember = "name"; cmbGroup.ValueMember = "id_group"; } int findFreeID() { DataContext db = new DataContext(connectionString); for (int number = 1; number < 100000; number++) { bool flag = true; foreach (var student in db.GetTable<Student>()) { int valueCell = student.Id; if (valueCell == number) { flag = false; break; } } if (flag) { return number; } } return 0; } bool CorrectInpData() { if (tbName.Text.Length > 0 && tbSurname.Text.Length > 0) { return true; } else { 47 MessageBox.Show("Убедитесь, что вы ввели все обязательные поля."); return false; } } void UpdateData() { using (SqlConnection connection = new SqlConnection(connectionString)) { SqlDataAdapter adapterSql = new SqlDataAdapter("SELECT [id_student] as [Код студента],[group].[name] as [Группа],[surname] as Фамилия,[student].[name] as [Имя],[lastname] as [Отчество],[group].kurs as [Курс] FROM[student] join[group] on[student].id_group = [group].id_group", connection); DataSet ds = new DataSet(); adapterSql.Fill(ds); DataTable dt = ds.Tables[0]; dataGridView1.DataSource = dt; dt.Dispose(); ds.Dispose(); } } private void btnAddData_Click(object sender, EventArgs e) { int number = findFreeID(); DataContext db = new DataContext(connectionString); if (cmbGroup.SelectedValue != null && cmbFacultet.SelectedValue != null && CorrectInpData()) { int group = Convert.ToInt32(cmbGroup.SelectedValue.ToString()); Student student1 = new Student { Id = number,IdGroup=group ,Name = tbName.Text, Surname = tbSurname.Text, Lastname = tbLastname.Text }; db.GetTable<Student>().InsertOnSubmit(student1); db.SubmitChanges(); UpdateData(); } else { MessageBox.Show("Не все обязательные поля были заполнены."); } } private void btnDeleteData_Click(object sender, EventArgs e) { try { DataContext db = new DataContext(connectionString); var k = dataGridView1.SelectedRows.Cast<DataGridViewRow>().Select(z => z.Index).ToList(); // нахожу список индексов выделенных строк в DataGrid foreach (var number in k) { IdToDelete.Add(Convert.ToInt32(dataGridView1[0, number].Value)); } foreach (var id in IdToDelete) { Student dltStudents = (from c in db.GetTable<Student>() where c.Id == id select c).SingleOrDefault<Student>(); db.GetTable<Student>().DeleteOnSubmit(dltStudents); db.SubmitChanges(); UpdateData(); } IdToDelete.Clear(); } catch (System.Data.SqlClient.SqlException) { 48 MessageBox.Show("Ошибка удаления. Необходимо предварительно удалить все записи из других таблиц, которые связаны с этой строкой."); IdToDelete.Clear(); } } private void cmbFacultet_SelectionChangeCommitted(object sender, EventArgs e) { SqlDataAdapter SelectGroup = new SqlDataAdapter("SELECT [id_group],[name] FROM [group] where [id_facultet] = '" + cmbFacultet.SelectedValue.ToString() + "'", connectionString); DataTable tbGroup = new DataTable(); SelectGroup.Fill(tbGroup); cmbGroup.DataSource = tbGroup; cmbGroup.DisplayMember = "name"; cmbGroup.ValueMember = "id_group"; } } [Приложение 1.9] public partial class disciplineForm : Form { public disciplineForm(Form f1, string connect) { InitializeComponent(); MainForm = f1; connectionString = connect; UpdateData(); } Form MainForm; string connectionString; List<int> IdToDelete = new List<int>(); string[] columnsDGV = { "Id", "Name" }; string[] nameColumnsDGV = { "Номер дисциплины", "Название дисциплины" }; void UpdateData() { DataContext db = new DataContext(connectionString); dataGridView1.DataSource = (from dta in db.GetTable<Discipline>() select dta); ChangeNameDGV(); } void ChangeNameDGV() { for (int i = 0; i < dataGridView1.Columns.Count; i++) { dataGridView1.Columns[columnsDGV[i]].HeaderText = nameColumnsDGV[i]; } } int findFreeID() { DataContext db = new DataContext(connectionString); for (int number = 1; number < 100000; number++) { bool flag = true; foreach (var facult in db.GetTable<Discipline>()) { int valueCell = facult.Id; if (valueCell == number) { flag = false; break; } } if (flag) 49 { return number; } } return 0; } private void btnAddData_Click(object sender, EventArgs e) { if (tbName.Text.Length > 0) { int number = findFreeID(); DataContext db = new DataContext(connectionString); Discipline discipline1 = new Discipline { Id = number, Name = tbName.Text.Trim() }; db.GetTable<Discipline>().InsertOnSubmit(discipline1); db.SubmitChanges(); UpdateData(); } } private void btnDeleteData_Click(object sender, EventArgs e) { try { DataContext db = new DataContext(connectionString); var k = dataGridView1.SelectedRows.Cast<DataGridViewRow>().Select(z => z.Index).ToList(); foreach (var number in k) { IdToDelete.Add(Convert.ToInt32(dataGridView1[0, number].Value)); } foreach (var number in IdToDelete) { Discipline dltDisciplines = (from c in db.GetTable<Discipline>() where c.Id == number select c).SingleOrDefault<Discipline>(); db.GetTable<Discipline>().DeleteOnSubmit(dltDisciplines); db.SubmitChanges(); UpdateData(); } IdToDelete.Clear(); } catch (System.Data.SqlClient.SqlException) { MessageBox.Show("Ошибка удаления. Необходимо предварительно удалить все записи из других таблиц, которые связаны с этой строкой."); IdToDelete.Clear(); } } } [Приложение 1.10] public dsp_academicForm(Form f1, string connect) { InitializeComponent(); MainForm = f1; connectionString = connect; LoadComboBox(); UpdateData(); } Form MainForm; List<int> IdToDelete = new List<int>(); string connectionString; string[] ExamOrTest = { "Экзамен", "Зачёт" }; 50 void LoadComboBox() { cmbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbTeacher.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbDiscipline.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbFacultet.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; DataContext db = new DataContext(connectionString); cmbFacultet.DataSource = db.GetTable<Facultet>(); cmbFacultet.DisplayMember = "Name"; cmbFacultet.ValueMember = "Id"; SqlDataAdapter SelectFIOA = new SqlDataAdapter("Select id_teacher, concat(surname,' ',name,' ',lastname) as FIO FROM teacher", connectionString); DataTable table = new DataTable(); SelectFIOA.Fill(table); cmbTeacher.DataSource = table; cmbTeacher.DisplayMember = "FIO"; cmbTeacher.ValueMember = "id_teacher"; cmbDiscipline.DataSource = db.GetTable<Discipline>(); cmbDiscipline.DisplayMember = "Name"; cmbDiscipline.ValueMember = "Id"; cmbType.Items.AddRange(ExamOrTest); cmbType.SelectedIndex = 1; } void UpdateData() { using (SqlConnection connection = new SqlConnection(connectionString)) { SqlDataAdapter adapterSql = new SqlDataAdapter("SELECT [id_discipline_academic] as [Код дисциплины],[group].[name] as [Группа], concat(surname,' ',[teacher].name,' ',lastname) as [Преподаватель],[discipline].[name] as [Дисциплина],[type_certification] as [Тип сдачи],[date_certification] as [Дата сдачи] FROM[discipline_academic join[group] on[discipline_academic].id_group =[group].id_group join[discipline] on[discipline_academic].id_discipline =[discipline].id_discipline join[teacher] on[discipline_academic].id_teacher =[teacher].id_teacher", connection); DataSet ds = new DataSet(); adapterSql.Fill(ds); DataTable dt = ds.Tables[0]; dataGridView1.DataSource = dt; dt.Dispose(); ds.Dispose(); } } int findFreeID() { DataContext db = new DataContext(connectionString); for (int number = 1; number < 100000; number++) { bool flag = true; foreach (var group in db.GetTable<Discipline_academic>()) { int valueCell = group.Id; if (valueCell == number) { flag = false; break; 51 } } if (flag) { return number; } } return 0; } bool NotExistInTable(int group,int discipline) { DataContext db = new DataContext(connectionString); Table<Discipline_academic> groups = db.GetTable<Discipline_academic>(); var count1 = groups.Count(gr => gr.IdGroup ==group && gr.IdDiscipline == discipline); if (count1 != 0 ) { MessageBox.Show("Данная дисциплина уже имеется у этой группы."); return false; } else { return true; } } bool DayIsFree() { CultureInfo culture = CultureInfo.CreateSpecificCulture("ru-RU"); DateTimeStyles styles = DateTimeStyles.None; DateTime res; DataContext db = new DataContext(connectionString); Table<Discipline_academic> groups = db.GetTable<Discipline_academic>(); var count1 = groups.Count(gr => gr.IdGroup == Convert.ToInt32(cmbGroup.SelectedValue) && gr.Date== tbDate.Text); if (count1 == 0) // В этот день у группы нет экзамена { if (DateTime.TryParse(tbDate.Text, culture, styles, out res)) { DateTime dtnow = DateTime.Now; DateTime dtleft = DateTime.Now.AddYears(5); if (res >= dtnow && res<=dtleft) { return true; } else { MessageBox.Show("Неправильная дата.Повторите ввод."); return false; } } else { MessageBox.Show("Неккоректный формат даты.Повторите ввод."); return false; } } else { MessageBox.Show("В этот день группа уже сдает экзамен.Выберите другую дату пожалуйста."); return false; } } private void btnAddData_Click(object sender, EventArgs e) 52 { int number = findFreeID(); DataContext db = new DataContext(connectionString); if (cmbGroup.SelectedValue != null && cmbTeacher.SelectedValue != null && cmbDiscipline.SelectedValue != null && cmbDiscipline.Text.Length>0) { int idGroup = Convert.ToInt32(cmbGroup.SelectedValue); string idTeacher = cmbTeacher.SelectedValue.ToString(); int idDiscipline = Convert.ToInt32(cmbDiscipline.SelectedValue.ToString()); string type = cmbType.Text; if (NotExistInTable(idGroup, idDiscipline)) { if (DayIsFree()) { Discipline_academic discipline1 = new Discipline_academic { Id = number, IdGroup = idGroup, IdTeacher = idTeacher, IdDiscipline = idDiscipline, Type = type,Date = tbDate.Text }; db.GetTable<Discipline_academic>().InsertOnSubmit(discipline1); db.SubmitChanges(); UpdateData(); } } } else MessageBox.Show("Проверьте правильность введенных данных"); } private void btnDeleteData_Click(object sender, EventArgs e) { try { DataContext db = new DataContext(connectionString); var k = dataGridView1.SelectedRows.Cast<DataGridViewRow>().Select(z => z.Index).ToList(); foreach (var number in k) { IdToDelete.Add(Convert.ToInt32(dataGridView1[0, number].Value)); } foreach (var id in IdToDelete) { Discipline_academic dltGroups = (from c in db.GetTable<Discipline_academic>() where c.Id == id select c).SingleOrDefault<Discipline_academic>(); db.GetTable<Discipline_academic>().DeleteOnSubmit(dltGroups); db.SubmitChanges(); UpdateData(); } IdToDelete.Clear(); } catch (System.Data.SqlClient.SqlException) { MessageBox.Show("Ошибка удаления. Необходимо предварительно удалить все записи из других таблиц, которые связаны с этой строкой."); IdToDelete.Clear(); } } private void cmbFacultet_SelectionChangeCommitted(object sender, EventArgs e) { SqlDataAdapter SelectGroup = new SqlDataAdapter("SELECT [id_group],[name] FROM [group] where [id_facultet] = '" + cmbFacultet.SelectedValue.ToString() + "'", connectionString); 53 DataTable tbGroup = new DataTable(); SelectGroup.Fill(tbGroup); cmbGroup.DataSource = tbGroup; cmbGroup.DisplayMember = "name"; cmbGroup.ValueMember = "id_group"; } } [Приложение 1.11] public partial class officeForm : Form { public officeForm(Form f1, string connect) { InitializeComponent(); MainForm = f1; connectionString = connect; UpdateData(); } Form MainForm; List<int> IdToDelete = new List<int>(); string connectionString; string[] columnsDGV = {"Id", "Number", "Korpus", "Countplace"}; string[] nameColumnsDGV = {"Код аудитории", "Номер аудитории", "Корпус", "Количество мест"}; void UpdateData() { DataContext db = new DataContext(connectionString); dataGridView1.DataSource = (from dta in db.GetTable<Office>() select dta); ChangeNameDGV(); } void ChangeNameDGV() { for (int i = 0; i < dataGridView1.Columns.Count; i++) { dataGridView1.Columns[columnsDGV[i]].HeaderText = nameColumnsDGV[i]; } } bool CheckInpData() { if (tbNumber.Text.Length > 0 && tbKorpus.Text.Length > 0 && tbNumberplace.Text.Length > 0) // -4, так как декан имеет маску размеров 4 символа. { return true; } else { MessageBox.Show("Убедитесь, что вы ввели все обязательные поля."); return false; } } bool NotExistInTable() { DataContext db = new DataContext(connectionString); Table<Office> facultets = db.GetTable<Office>(); var count1 = facultets.Count(gr => gr.Number == Convert.ToInt32(tbNumber.Text) && gr.Korpus == Convert.ToInt32(tbKorpus.Text)); if (count1 != 0) { MessageBox.Show("Эта аудитория уже добавлена в базу данных."); return false; } else 54 { return true; } } int findFreeID() { DataContext db = new DataContext(connectionString); for (int number = 1; number < 100000; number++) { bool flag = true; foreach (var facult in db.GetTable<Office>()) { int valueCell = facult.Id; if (valueCell == number) { flag = false; break; } } if (flag) { return number; } } return 0; } private void btnAddData_Click(object sender, EventArgs e) { if (CheckInpData()) { if (NotExistInTable()) { int number = findFreeID(); DataContext db = new DataContext(connectionString); Office office1 = new Office { Id = number, Number = Convert.ToInt32(tbNumber.Text), Korpus = Convert.ToInt32(tbKorpus.Text), Countplace = Convert.ToInt32(tbNumberplace.Text) }; db.GetTable<Office>().InsertOnSubmit(office1); db.SubmitChanges(); UpdateData(); } } } private void btnDeleteData_Click(object sender, EventArgs e) { try { DataContext db = new DataContext(connectionString); var k = dataGridView1.SelectedRows.Cast<DataGridViewRow>().Select(z => z.Index).ToList(); // нахожу список индексов выделенных строк в DataGrid foreach (var number in k) { IdToDelete.Add(Convert.ToInt32(dataGridView1[0, number].Value)); } foreach (var number in IdToDelete) { Office dltOffices = (from c in db.GetTable<Office>() where c.Id == number select c).SingleOrDefault<Office>(); db.GetTable<Office>().DeleteOnSubmit(dltOffices); db.SubmitChanges(); UpdateData(); } IdToDelete.Clear(); 55 } catch (System.Data.SqlClient.SqlException) { MessageBox.Show("Ошибка удаления. Необходимо предварительно удалить все записи из других таблиц, которые связаны с этой строкой."); IdToDelete.Clear(); } } } [Приложение 1.12] public partial class timeTableReroptForm : Form { public timeTableReroptForm(Form f1, string connect) { InitializeComponent(); MainForm = f1; connectionString = connect; loadComboBox(); } Form MainForm; string connectionString; void loadComboBox() { DataContext db = new DataContext(connectionString); cmbFacultet.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbStart.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbEnd.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; SqlDataAdapter SelectDay = new SqlDataAdapter("SELECT [id_day] ,[name] FROM[day]", connectionString); DataTable tbDay = new DataTable(); SelectDay.Fill(tbDay); cmbFacultet.DataSource = db.GetTable<Facultet>(); cmbFacultet.DisplayMember = "Name"; cmbFacultet.ValueMember = "Id"; cmbStart.DataSource = tbDay; cmbStart.DisplayMember = "name"; cmbStart.ValueMember = "id_day"; cmbEnd.DataSource = tbDay; cmbEnd.DisplayMember = "name"; cmbEnd.ValueMember = "id_day"; SqlDataAdapter SelectGroup = new SqlDataAdapter("SELECT [id_group],[name] FROM[group]", connectionString); DataTable tbGroup = new DataTable(); SelectGroup.Fill(tbGroup); cmbGroup.DataSource = tbGroup; cmbGroup.DisplayMember = "name"; cmbGroup.ValueMember = "id_group"; } private void button1_Click(object sender, EventArgs e) { if (Convert.ToInt32(cmbStart.SelectedValue) <= Convert.ToInt32(cmbEnd.SelectedValue)) { using (SqlConnection connection = new SqlConnection(connectionString)) { 56 SqlDataAdapter adapterSql = new SqlDataAdapter("SELECT concat('Корпуc:', [office].korpus, ' Аудитория:',[office].number) as Аудитория ,concat(Format([para].start_time, 'hh\\:mm'), '-', Format([para].end_time, 'hh\\:mm')) as Время,[day].name as День,[group].name as Группа,[discipline].name as Дисциплина ,concat(teacher.surname,' ',teacher.name,' ',teacher.lastname) as Преподаватель FROM[raspisanie] join[office] on[raspisanie].id_office =[office].id_office join[para] on[raspisanie].id_para =[para].id_para join[discipline_academic] on[raspisanie].id_discipline_academic = [discipline_academic].id_discipline_academic join[discipline] on[discipline_academic].id_discipline =[discipline].id_discipline join[teacher] on[discipline_academic].id_teacher =[teacher].id_teacher join[group] on[discipline_academic].[id_group] =[group].id_group join[day] on[raspisanie].[id_day] =[day].id_day where([raspisanie].id_day between '" + cmbStart.SelectedValue.ToString() + "' and '" + cmbEnd.SelectedValue.ToString() + "') and[discipline_academic].id_group = '" + cmbGroup.SelectedValue.ToString() + "' order by [raspisanie].id_day,[raspisanie].id_para", connection); DataSet ds = new DataSet(); adapterSql.Fill(ds); DataTable dt = ds.Tables[0]; dataGridView1.DataSource = dt; dt.Dispose(); ds.Dispose(); } } else { MessageBox.Show("Неправильно выставленный порядок дней.(Пример. Если в ОТ выставлен вторник, то в ДО нельзя выставить понедельник)"); } } private void cmbFacultet_SelectionChangeCommitted(object sender, EventArgs e) { SqlDataAdapter SelectGroup = new SqlDataAdapter("SELECT [id_group],[name] FROM [group] where [id_facultet] = '" + cmbFacultet.SelectedValue.ToString() + "'", connectionString); DataTable tbGroup = new DataTable(); SelectGroup.Fill(tbGroup); cmbGroup.DataSource = tbGroup; cmbGroup.DisplayMember = "name"; cmbGroup.ValueMember = "id_group"; } } [Приложение 1.13] public markForm(Form f1, string connect) { InitializeComponent(); MainForm = f1; connectionString = connect; loadComboBox(); updateDGV(); } Form MainForm; Form markStudentReportForm; string connectionString; List<int> IdToChange = new List<int>(); int findFreeID() { DataContext db = new DataContext(connectionString); for (int number = 1; number < 100000; number++) { 57 bool flag = true; foreach (var mark in db.GetTable<Mark>()) { int valueCell = mark.Id; if (valueCell == number) { flag = false; break; } } if (flag) { return number; } } return 0; } void loadComboBox() { DataContext db = new DataContext(connectionString); cmbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbStudent.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbDiscipline.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbFacultet.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbFacultet.DataSource = db.GetTable<Facultet>(); cmbFacultet.DisplayMember = "Name";// столбец для отображения cmbFacultet.ValueMember = "Id";//столбец с id SqlDataAdapter SelectGroup = new SqlDataAdapter("SELECT [id_group],[name] FROM [group] where [id_facultet] = '" + cmbFacultet.SelectedValue.ToString() + "'", connectionString); DataTable tbGroup = new DataTable(); SelectGroup.Fill(tbGroup); cmbGroup.DataSource = tbGroup; cmbGroup.DisplayMember = "name"; cmbGroup.ValueMember = "id_group"; SqlDataAdapter SelectNameDiscipline = new SqlDataAdapter("SELECT id_discipline_academic,[discipline].name as Imena FROM[discipline_academic] join [discipline] on [discipline_academic].id_discipline =[discipline].id_discipline join[group] on [discipline_academic].id_group = [group].id_group where[discipline_academic].id_group = '" + cmbGroup.SelectedValue.ToString() + "'", connectionString); DataTable tbDiscipline = new DataTable(); SelectNameDiscipline.Fill(tbDiscipline); cmbDiscipline.DataSource = tbDiscipline; cmbDiscipline.DisplayMember = "Imena"; cmbDiscipline.ValueMember = "id_discipline_academic"; SqlDataAdapter SelectStudent = new SqlDataAdapter("SELECT id_student,concat([student].surname,' ',[student].name) as Студент FROM[student] where[student].id_group = '" + cmbGroup.SelectedValue.ToString() + "'", connectionString); DataTable tbStudent = new DataTable(); SelectStudent.Fill(tbStudent); cmbStudent.DataSource = tbStudent; cmbStudent.DisplayMember = "Студент"; cmbStudent.ValueMember = "id_student"; } void updateDGV() { try 58 { using (SqlConnection connection = new SqlConnection(connectionString)) { SqlDataAdapter adapter = new SqlDataAdapter("SELECT [id_mark] as [Код оценки],[group].name as Группа, concat([student].surname,' ',[student].name) as Студент ,[discipline].name as Дисциплина,[discipline_academic].type_certification as [Тип аттестации],[mark] as Оценка,[date_certification] as Дата FROM[mark] join[student] on[mark].id_student =[student].id_student join[group] on[student].id_group =[group].id_group join[discipline_academic] on[mark].id_discipline_academic =[discipline_academic].id_discipline_academic join[discipline] on[discipline_academic].id_discipline =[discipline].id_discipline", connection); DataSet ds = new DataSet(); adapter.Fill(ds); DataTable dt = ds.Tables[0]; dataGridView1.DataSource = dt; } } catch (Exception ex) { MessageBox.Show(ex.Message.ToString(), ex.Source.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error); } } bool StdDnthaveMark() { DataContext db = new DataContext(connectionString); Table<Mark> marks = db.GetTable<Mark>(); var count = marks.Count(gr => gr.IdStudent == Convert.ToInt32(cmbStudent.SelectedValue) && gr.IdDiscipline == Convert.ToInt32(cmbDiscipline.SelectedValue));// if (count == 0) { return true; } else { MessageBox.Show("Студент уже имеет оценку по этой дисциплине"); return false; } } private void addButton_Click(object sender, EventArgs e) { uint mark; DataContext db = new DataContext(connectionString); if (cmbDiscipline.SelectedValue != null && cmbStudent.SelectedValue != null && uint.TryParse(tbMark.Text,out mark) && tbId.Text.Length > 0) { if (StdDnthaveMark()) { Mark mark1 = new Mark { Id = Convert.ToInt32(tbId.Text), IdStudent = Convert.ToInt32(cmbStudent.SelectedValue), IdDiscipline = Convert.ToInt32(cmbDiscipline.SelectedValue), Typemark = Convert.ToInt32(tbMark.Text) }; db.GetTable<Mark>().InsertOnSubmit(mark1); db.SubmitChanges(); updateDGV(); } } else { MessageBox.Show("Проверьте правильность введенных данных."); } 59 } private void updateButton_Click(object sender, EventArgs e) { var k = dataGridView1.SelectedRows.Cast<DataGridViewRow>().Select(z => z.Index).ToList(); foreach (var number in k) { IdToChange.Add(Convert.ToInt32(dataGridView1[0, number].Value)); } if (IdToChange.Count == 1) { using (SqlConnection connection = new SqlConnection(connectionString)) { if (connection.State == ConnectionState.Closed) { connection.Open(); } SqlCommand command = new SqlCommand("UPDATE [mark] SET[mark] = @Mark WHERE[id_mark] = @id", connection); command.Parameters.AddWithValue("id", IdToChange[0]); command.Parameters.AddWithValue("Mark", Convert.ToInt32(tbMark2.Text)); command.ExecuteNonQuery(); updateDGV(); IdToChange.Clear(); } } else { MessageBox.Show("Вы не можете одновременно изменить 2 строки."); IdToChange.Clear(); } } private void deleteButton_Click(object sender, EventArgs e) { var k = dataGridView1.SelectedRows.Cast<DataGridViewRow>().Select(z => z.Index).ToList(); foreach (var number in k) { IdToChange.Add(Convert.ToInt32(dataGridView1[0, number].Value)); } if (IdToChange.Count == 1) { using (SqlConnection connection = new SqlConnection(connectionString)) { if (connection.State == ConnectionState.Closed) { connection.Open(); } SqlCommand command = new SqlCommand("DELETE FROM [mark] WHERE [id_mark] = @id", connection); command.Parameters.AddWithValue("id", IdToChange[0]); command.ExecuteNonQuery(); updateDGV(); IdToChange.Clear(); } } else { MessageBox.Show("Вы не можете одновременно удалить 2 строки."); IdToChange.Clear(); } } private void отчётToolStripMenuItem_Click(object sender, EventArgs e) 60 { if (markStudentReportForm == null || markStudentReportForm.IsDisposed) { markStudentReportForm = new markStudentReportForm(this, connectionString); } markStudentReportForm.Show(); } private void cmbFacultet_SelectionChangeCommitted(object sender, EventArgs e) { SqlDataAdapter SelectGroup = new SqlDataAdapter("SELECT [id_group],[name] FROM [group] where [id_facultet] = '" + cmbFacultet.SelectedValue.ToString() + "'", connectionString); DataTable tbGroup = new DataTable(); SelectGroup.Fill(tbGroup); cmbGroup.DataSource = tbGroup; cmbGroup.DisplayMember = "name"; cmbGroup.ValueMember = "id_group"; if (cmbGroup.SelectedValue != null) { SqlDataAdapter SelectNameDiscipline = new SqlDataAdapter("SELECT id_discipline_academic,[discipline].name as Imena FROM[discipline_academic] join [discipline] on [discipline_academic].id_discipline =[discipline].id_discipline join[group] on [discipline_academic].id_group = [group].id_group where[discipline_academic].id_group = '" + cmbGroup.SelectedValue.ToString() + "'", connectionString); DataTable tbDiscipline = new DataTable(); SelectNameDiscipline.Fill(tbDiscipline); cmbDiscipline.DataSource = tbDiscipline; cmbDiscipline.DisplayMember = "Imena"; cmbDiscipline.ValueMember = "id_discipline_academic"; SqlDataAdapter SelectStudent = new SqlDataAdapter("SELECT id_student,concat([student].surname,' ',[student].name) as Студент " + "FROM[student] where[student].id_group = '" + cmbGroup.SelectedValue.ToString() + "'", connectionString); DataTable tbStudent = new DataTable(); SelectStudent.Fill(tbStudent); cmbStudent.DataSource = tbStudent; cmbStudent.DisplayMember = "Студент"; cmbStudent.ValueMember = "id_student"; } else { cmbDiscipline.DataSource = null; cmbStudent.DataSource = null; } } private void cmbGroup_SelectionChangeCommitted(object sender, EventArgs e) { SqlDataAdapter SelectNameDiscipline = new SqlDataAdapter("SELECT id_discipline_academic,[discipline].name as Imena FROM[discipline_academic] join [discipline] on [discipline_academic].id_discipline =[discipline].id_discipline join[group] on [discipline_academic].id_group = [group].id_group where[discipline_academic].id_group = '" + cmbGroup.SelectedValue.ToString() + "'", connectionString); DataTable tbDiscipline = new DataTable(); SelectNameDiscipline.Fill(tbDiscipline); cmbDiscipline.DataSource = tbDiscipline; cmbDiscipline.DisplayMember = "Imena"; cmbDiscipline.ValueMember = "id_discipline_academic"; 61 SqlDataAdapter SelectStudent = new SqlDataAdapter("SELECT id_student,concat([student].surname,' ',[student].name) as Студент " + "FROM[student] where[student].id_group = '" + cmbGroup.SelectedValue.ToString() + "'", connectionString); DataTable tbStudent = new DataTable(); SelectStudent.Fill(tbStudent); cmbStudent.DataSource = tbStudent; cmbStudent.DisplayMember = "Студент"; cmbStudent.ValueMember = "id_student"; } } [Приложение 1.14] public partial class markStudentReportForm : Form { public markStudentReportForm(Form f1, string connect) { InitializeComponent(); MainForm = f1; connectionString = connect; loadComboBox(); cmbFind.Enabled = false; textBox1.Enabled = false; } Form MainForm; string connectionString; void loadComboBox() { DataContext db = new DataContext(connectionString); cmbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbStudent.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbFind.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;// запрет на ручной ввод cmbFacultet.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbFacultet2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; cmbFacultet.DataSource = db.GetTable<Facultet>(); cmbFacultet.DisplayMember = "Name"; cmbFacultet.ValueMember = "Id"; cmbFacultet2.DataSource = db.GetTable<Facultet>(); cmbFacultet2.DisplayMember = "Name"; cmbFacultet2.ValueMember = "Id"; } private void cmbGroup_SelectionChangeCommitted(object sender, EventArgs e) { SqlDataAdapter SelectStudent = new SqlDataAdapter("SELECT id_student,concat([student].surname,' ',[student].name) as Студент FROM[student] where[student].id_group = '" + cmbGroup.SelectedValue.ToString() + "'", connectionString); DataTable tbStudent = new DataTable(); SelectStudent.Fill(tbStudent); cmbStudent.DataSource = tbStudent; cmbStudent.DisplayMember = "Студент"; cmbStudent.ValueMember = "id_student"; } private void button1_Click(object sender, EventArgs e) { if (checkBox1.Checked == false) { if (cmbGroup.SelectedValue != null && cmbStudent.SelectedValue != null) { 62 using (SqlConnection connection = new SqlConnection(connectionString)) { if (radioButton1.Checked == true) { SqlDataAdapter adapterSql = new SqlDataAdapter("SELECT[group].name as Группа, concat([student].surname,' ',[student].name) as Студент,[discipline].name as Дисциплина ,[discipline_academic].type_certification as [Тип аттестации] ,[mark] as Оценка,[date_certification] as Дата FROM[mark] join[student] on[mark].id_student =[student].id_student join[group] on[student].id_group =[group].id_group join[discipline_academic] on[mark].id_discipline_academic =[discipline_academic].id_discipline_academic join[discipline] on[discipline_academic].id_discipline =[discipline].id_discipline" + where[mark].id_student = '" + cmbStudent.SelectedValue.ToString() + "' and [discipline_academic].type_certification = 'Экзамен'", connection); DataSet ds = new DataSet(); adapterSql.Fill(ds); DataTable dt = ds.Tables[0]; dataGridView1.DataSource = dt; dt.Dispose(); ds.Dispose(); } else if (radioButton2.Checked == true) { SqlDataAdapter adapterSql = new SqlDataAdapter("SELECT[group].name as Группа , concat([student].surname,' ',[student].name) as Студент,[discipline].name as Дисциплина ,[discipline_academic].type_certification as [Тип аттестации] ,[mark] as Оценка,[date_certification] as Дата FROM[mark] join[student] on[mark].id_student =[student].id_student join[group] on[student].id_group =[group].id_group join[discipline_academic] on[mark].id_discipline_academic =[discipline_academic].id_discipline_academic join[discipline] on[discipline_academic].id_discipline =[discipline].id_discipline where[mark].id_student = '" + cmbStudent.SelectedValue.ToString() + "' and [discipline_academic].type_certification = 'Зачёт'", connection); DataSet ds = new DataSet(); adapterSql.Fill(ds); DataTable dt = ds.Tables[0]; dataGridView1.DataSource = dt; dt.Dispose(); ds.Dispose(); } else { SqlDataAdapter adapterSql = new SqlDataAdapter("SELECT[group].name as Группа,concat([student].surname,' ',[student].name) as Студент,[discipline].name as Дисциплина ,[discipline_academic].type_certification as [Тип аттестации] ,[mark] as Оценка,[date_certification] as Дата FROM[mark] join[student] on[mark].id_student =[student].id_student join[group] on[student].id_group =[group].id_group join[discipline_academic] on[mark].id_discipline_academic =[discipline_academic].id_discipline_academic join[discipline] on[discipline_academic].id_discipline =[discipline].id_discipline where[mark].id_student = '" + cmbStudent.SelectedValue.ToString() + "'", connection); DataSet ds = new DataSet(); adapterSql.Fill(ds); DataTable dt = ds.Tables[0]; dataGridView1.DataSource = dt; dt.Dispose(); ds.Dispose(); 63 } } } else { MessageBox.Show("Не все необходимые параметры выбраны."); } } else { if (cmbFind.SelectedValue != null) { using (SqlConnection connection = new SqlConnection(connectionString)) { if (radioButton1.Checked == true) { SqlDataAdapter adapterSql = new SqlDataAdapter("SELECT[group].name as Группа,concat([student].surname,' ',[student].name) as Студент,[discipline].name as Дисциплина ,[discipline_academic].type_certification as [Тип аттестации],[mark] as Оценка,[date_certification] as Дата FROM[mark] join [student] on[mark].id_student =[student].id_student join[group] on[student].id_group =[group].id_group join[discipline_academic] on[mark].id_discipline_academic =[discipline_academic].id_discipline_academic join[discipline] on[discipline_academic].id_discipline =[discipline].id_discipline where[mark].id_student = '" + cmbFind.SelectedValue.ToString() + "' and [discipline_academic].type_certification = 'Экзамен'", connection); DataSet ds = new DataSet(); adapterSql.Fill(ds); DataTable dt = ds.Tables[0]; dataGridView1.DataSource = dt; dt.Dispose(); ds.Dispose(); } else if (radioButton2.Checked == true) { SqlDataAdapter adapterSql = new SqlDataAdapter("SELECT[group].name as Группа,concat([student].surname,' ',[student].name) as Студент,[discipline].name as Дисциплина ,[discipline_academic].type_certification as [Тип аттестации],[mark] as Оценка,[date_certification] as Дата FROM [mark] join[student] on[mark].id_student =[student].id_student join[group] on[student].id_group =[group].id_group join[discipline_academic] on[mark].id_discipline_academic =[discipline_academic].id_discipline_academic join[discipline] on[discipline_academic].id_discipline =[discipline].id_discipline where[mark].id_student = '" + cmbFind.SelectedValue.ToString() + "' and [discipline_academic].type_certification = 'Зачёт'", connection); DataSet ds = new DataSet(); adapterSql.Fill(ds); DataTable dt = ds.Tables[0]; dataGridView1.DataSource = dt; dt.Dispose(); ds.Dispose(); } else { SqlDataAdapter adapterSql = new SqlDataAdapter("SELECT[group].name as Группа, concat([student].surname,' ',[student].name) as Студент,[discipline].name as Дисциплина ,[discipline_academic].type_certification as [Тип аттестации] ,[mark] as Оценка,[date_certification] as Дата FROM[mark] join[student] on[mark].id_student =[student].id_student join[group] on[student].id_group =[group].id_group 64 join[discipline_academic] on[mark].id_discipline_academic =[discipline_academic].id_discipline_academic join[discipline] on[discipline_academic].id_discipline =[discipline].id_discipline where[mark].id_student = '" + cmbFind.SelectedValue.ToString() + "'", connection); DataSet ds = new DataSet(); adapterSql.Fill(ds); DataTable dt = ds.Tables[0]; dataGridView1.DataSource = dt; dt.Dispose(); ds.Dispose(); } } } else { MessageBox.Show("Не выбран студент."); } } } private void cmbGroup2_SelectionChangeCommitted(object sender, EventArgs e) { SqlDataAdapter SelectNameDiscipline = new SqlDataAdapter("SELECT id_discipline_academic,[discipline].name as Imena FROM[discipline_academic] join [discipline] on [discipline_academic].id_discipline =[discipline].id_discipline join[group] on [discipline_academic].id_group = [group].id_group where[discipline_academic].id_group = '" + cmbGroup2.SelectedValue.ToString() + "'", connectionString); DataTable tbDiscipline = new DataTable(); SelectNameDiscipline.Fill(tbDiscipline); cmbDiscipline2.DataSource = tbDiscipline; cmbDiscipline2.DisplayMember = "Imena"; cmbDiscipline2.ValueMember = "id_discipline_academic"; } private void button2_Click(object sender, EventArgs e) { if (cmbGroup2.SelectedValue != null && cmbDiscipline2.SelectedValue != null) { using (SqlConnection connection = new SqlConnection(connectionString)) { SqlDataAdapter adapterSql = new SqlDataAdapter("SELECT concat([student].surname,' ',[student].name) as Студент,[discipline].name as Дисциплина ,[discipline_academic].type_certification as [Тип аттестации] ,[mark] as Оценка,[date_certification] as Дата FROM[mark join[student] on[mark].id_student =[student].id_student join[group] on[student].id_group =[group].id_group join[discipline_academic] on[mark].id_discipline_academic =[discipline_academic].id_discipline_academic join[discipline] on[discipline_academic].id_discipline =[discipline].id_discipline where[mark].id_discipline_academic = '" + cmbDiscipline2.SelectedValue.ToString() + "'", connection); DataSet ds = new DataSet(); adapterSql.Fill(ds); DataTable dt = ds.Tables[0]; dataGridView1.DataSource = dt; dt.Dispose(); ds.Dispose(); } } else MessageBox.Show("Не все необходимые параметры выбраны."); } private void cmbFacultet_SelectionChangeCommitted(object sender, EventArgs e) { 65 SqlDataAdapter SelectGroup = new SqlDataAdapter("SELECT [id_group],[name] FROM [group] where [id_facultet] = '" + cmbFacultet.SelectedValue.ToString() + "'", connectionString); DataTable tbGroup = new DataTable(); SelectGroup.Fill(tbGroup); cmbGroup.DataSource = tbGroup; cmbGroup.DisplayMember = "name"; cmbGroup.ValueMember = "id_group"; if (cmbGroup.SelectedValue != null) { SqlDataAdapter SelectStudent = new SqlDataAdapter("SELECT id_student,concat([student].surname,' ',[student].name) as Студент FROM[student] where[student].id_group = '" + cmbGroup.SelectedValue.ToString() + "'", connectionString); DataTable tbStudent = new DataTable(); SelectStudent.Fill(tbStudent); cmbStudent.DataSource = tbStudent; cmbStudent.DisplayMember = "Студент"; cmbStudent.ValueMember = "id_student"; } else { cmbGroup.DataSource = null; cmbStudent.DataSource = null; } } private void cmbFacultet2_SelectionChangeCommitted(object sender, EventArgs e) { SqlDataAdapter SelectGroup2 = new SqlDataAdapter("SELECT [id_group],[name] FROM [group] where [id_facultet] = '" + cmbFacultet2.SelectedValue.ToString() + "'", connectionString); DataTable tbGroup2 = new DataTable(); SelectGroup2.Fill(tbGroup2); cmbGroup2.DataSource = tbGroup2; cmbGroup2.DisplayMember = "name"; cmbGroup2.ValueMember = "id_group"; if (cmbGroup2.SelectedValue != null) { SqlDataAdapter SelectNameDiscipline = new SqlDataAdapter("SELECT id_discipline_academic,[discipline].name as Imena FROM[discipline_academic] join [discipline] on [discipline_academic].id_discipline =[discipline].id_discipline join[group] on [discipline_academic].id_group = [group].id_group where[discipline_academic].id_group = '" + cmbGroup2.SelectedValue.ToString() + "'", connectionString); DataTable tbDiscipline = new DataTable(); SelectNameDiscipline.Fill(tbDiscipline); cmbDiscipline2.DataSource = tbDiscipline; cmbDiscipline2.DisplayMember = "Imena"; cmbDiscipline2.ValueMember = "id_discipline_academic"; } else { cmbGroup2.DataSource = null; cmbDiscipline2.DataSource = null; } } private void checkBox1_CheckedChanged(object sender, EventArgs e) { if(checkBox1.Checked==true) { cmbFacultet.Enabled = false; cmbGroup.Enabled = false; cmbStudent.Enabled = false; cmbFind.Enabled = true; 66 textBox1.Enabled = true; } else { cmbFacultet.Enabled = true; cmbGroup.Enabled = true; cmbStudent.Enabled = true; cmbFind.Enabled = false; textBox1.Enabled = false; } } private void textBox1_Leave(object sender, EventArgs e) { SqlDataAdapter SelectStudent = new SqlDataAdapter("SELECT id_student,concat([student].surname,' ',[student].name,' ',[student].lastname,' ',[group].name) as Студент FROM[student] join [group] on [student].id_group=[group].id_group where ([student].surname LIKE '" + textBox1.Text + "%')", connectionString); DataTable tbStudent = new DataTable(); SelectStudent.Fill(tbStudent); cmbFind.DataSource = tbStudent; cmbFind.DisplayMember = "Студент"; cmbFind.ValueMember = "id_student"; } } 67