Загрузил Артём

Курсовая управление данными. Разработка ИС, создание приложения со связью с БД

Реклама
Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования
Нижегородский государственный архитектурностроительный университет (ННГАСУ)
Факультет инженерно-экологических систем и сооружений
Кафедра информационных систем и технологий
КУРСОВАЯ РАБОТА
по дисциплине: «Управление данными»
На тему: «Разработка базы данных и графического интерфейса для
информационных систем»
Выполнил студент 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
Скачать