Материал: Информационная система составления расписания

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Рис. 27. Форма Tarif, вкладка Формирование тарификации

Последняя вкладка «Итоговая тарификация» позволяет пользователю выгрузить информацию о нагрузке определенных преподавателей в xlsxфайл. (Рис.28.)

Рис. 28. Форма Tarif, вкладка Итоговая тарификация

Чтобы составить расписание необходимо на вкладке «Tarif»нажать кнопку «Тарификацию», чтобы перейти на форму «Raspis», где администратор может вручную или автоматически составить расписание. На вкладке «Кабинеты преподавателя» пользователь может закрепить кабинет для преподавателя на определенный предмет. Например, урок химии может проходить только в кабинете, приспособленном для химических опытов.

Рис. 29. Форма Raspis, вкладка Кабинеты преподавателя

Чтобы просмотреть связи преподавателей с кабинетами, необходимо на вкладке «Raspis» нажать на кнопку «Просмотр» и перейти на форму «Teacher_Cabinet». На открытой форме пользователь может узнать кабинет, который закреплен на преподавателе, а также узнать преподавателя, который прикреплен к кабинету.

Рис. 30. Форма Teacher_Cabinet

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

Рис. 31. Форма Raspis, вкладка Редактор/просмотр

3.4 Usecases

Для того чтобы правильно понимать логику приложения было создано визуальное представление с помощью диаграммы Usecases.

Диаграмма показывает, что в приложении существует несколько страниц, которыми может воспользоваться администратор: страница «Редактирования, удаления и добавления информации», страница «Тарификации», страница «Составление расписания». Администратор изначально входит на страницу с редактированием, а далее может свободно перемещаться по этим трем блокам. С блоком редактирования связаны еще несколько страниц, такие как: добавление групп, предметов, преподавателей и кабинетов, а так же редактирование групп, предметов, преподавателей и кабинетов. С помощью блока с тарификацией администратор может выгрузить необходимую информацию в таблицы Excel. Страница «Составление расписания» помогает не только в правильной расстановке занятий, но и оптимизирует расписание.

Рис. 32. Usecase приложения по составлению расписания

3.5 Оптимизация

Заключительным этапом создания приложения для автоматизированного составления расписания для учебной части образовательного учрежденияявляется процесс оптимизации ручного составления расписания. Для создания функции оптимизации к программе VisualStudio была подключена программа IBMiLogCPLEXOptimizationStudio, которая автоматически может оптимизировать любой процесс, используя некоторые, вводимые пользователем ограничения. В данном случае математические ограничения описаны в части 2.3.3. С помощью языка, близкого по синтаксису с С#, ограничения были введены в программу IBMiLogCPLEXOptimizationStudio.

С помощью складки «Редактор/ Просмотр» пользователь может оптимизировать процесс ручного составления расписания. Программа автоматически сгенерирует расписание, опираясь на заданные ранее ограничения. Пример расписания для групп будет сохранен в Excel файле«KR-Tekhnikum», расписание, для каждой группы будет сохранено в отдельную вкладку. Каждое занятие описано, с помощью предмета, преподавателя, который ведет данный предмет, а также номером аудитории.

Аналогичным образом создано расписание для преподавателей, которое хранится в Excelфайле «Kartochki_prepodavatelya».

Выводы

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

Заключение

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

Однако основное внимание было уделено приложению, с помощью которого можно не только редактировать, удалять и добавлять данные, но и составлять само расписание, рассчитывать нагрузку преподавателей и групп. Такая система составления расписания подойдет не только Кировскому авиационному техникума, но и другим учебным заведениям с похожей структурой образования.

Также была создана система оптимизации расписания, чтобы администратор мог нажатием одной кнопки составить оптимальное расписание.

В марте 2016 года программа была внедрена в систему Кировского авиационного техникума для апробации. (Прил.13)На данном этапе сбоев в программе не обнаружено, система удовлетворяет всем требования технического задания.

В ходе работы были решены все задачи, а также цель была достигнута.

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

1)      БутузовВ.Ф., КрутицкаяН.Ч., МедведевГ.Н., Шишкин А.А. Математический анализ в вопросах и задачах - М.: ФИЗМАТЛИТ, 2002. - 480 с.

)        Дейт К. Введение в системы баз данных 8-е изд. - М.: Вильямс, 2006

)        Карпова Т.С. Базы данных: модели, разработка, реализация - СПб.: Питер, 2001. -304 с.;

)        Лазарев А.А., Гафаров Е.Р. Теория расписаний. Задачи и алгоритмы- М.: Московский государственный университет им. М.В. Ломоносова (МГУ), 2011. - 222 с.

)        Хансен Г., Хансен Д. Базы данных: разработка и управление - М. : БИНОМ, 2000. - 210 с.

6)      Ban Vu Thien. A finite Algorithm for Globally Minimizing a Concave Function under Linear Constraints and its Applications. Preprint Series. №4. Hannoy: Institute of Mathematics, 1983.

7)      Falk I. E. and Soland R. M. An algorithm for separable nonconvex programming problems // Management Sci. - 1969. - Vol. 15. - P. 550-569.

)        Frieze A. M. A bilinear programrningjormulation of the 1-dimensional assignment problem // Math. Progr. - 1974. - Vol. 7. - P. 376-379.

Приложение 1

Информация о типе преподавателя


Приложение 2

Информация о преподавателе


Приложение 3

Информация о группе


Приложение 4

Информация о специальности


Приложение 5

Информация о типе образования


Приложение 6

Информация о семестре


Приложение 7

Информация о номере предмета


Приложение 8

Информация о номере предмета в неделе


Приложение 9

Информация о кабинете


Приложение 10

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


Приложение 11

Информация о предмете


Приложение 12

Информация о связи между преподавателем и предметом


Приложение 13

Пример оформления сохраненного расписания для групп


Приложение 14

Пример оформления сохраненного расписания для преподавателей


Приложение 15

Часть кода программы Form1

publicForm1()

{();dataAdapter = newSqlDataAdapter("SELECT Name_Subject from Subject", connectionString);ds = newDataSet();.Fill(ds, "Названиедисциплины");_subject.DataSource = ds.Tables["Названиедисциплины"].DefaultView;dataAdapter1 = newSqlDataAdapter("SELECT Number_campus, Number from Cabinet", connectionString);ds1 = newDataSet();.Fill(ds1, "Кабинет");_cabinet.DataSource = ds1.Tables["Кабинет"].DefaultView;dataAdapter2 = newSqlDataAdapter("Select Grup.Group_Name, Specialty.Name_Specialty from Grup inner join Specialty on Grup.ID_Specialty=Specialty.ID_Specialty", connectionString);ds2 = newDataSet();.Fill(ds2, "Группа");_Group.DataSource = ds2.Tables["Группа"].DefaultView;awidth = table_cabinet.Width / table_cabinet.ColumnCount;(int i = 0; i < table_cabinet.ColumnCount; i++)_cabinet.Columns[i].Width = awidth;awidth1 = table_subject.Width / table_subject.ColumnCount;(int i = 0; i < table_subject.ColumnCount; i++)_subject.Columns[i].Width = awidth1;awidth2 = table_Group.Width / table_Group.ColumnCount;(int i = 0; i < table_Group.ColumnCount; i++)_Group.Columns[i].Width = awidth2;

}

Administrtion_button_Click(object sender, EventArgs e)

{dataAdapter = newSqlDataAdapter("SELECT Surname, Name, Second_Name from Teacher WHERE ID_type_teacher=1", connectionString);ds = newDataSet();.Fill(ds, "Фамилия");_teacher.DataSource = ds.Tables["Фамилия"].DefaultView;awidth3 = table_teacher.Width / table_teacher.ColumnCount;(int i = 0; i < table_teacher.ColumnCount; i++)_teacher.Columns[i].Width = awidth3;= 1;

}

Teacher_button_Click(object sender, EventArgs e)

{dataAdapter = newSqlDataAdapter("SELECT Surname, Name, Second_Name from Teacher WHERE ID_type_teacher=2", connectionString);ds = newDataSet();.Fill(ds, "Фамилия");_teacher.DataSource = ds.Tables["Фамилия"].DefaultView;awidth3 = table_teacher.Width / table_teacher.ColumnCount;(int i = 0; i < table_teacher.ColumnCount; i++)_teacher.Columns[i].Width = awidth3;= 2;

}

privatevoid inside_button_Click(object sender, EventArgs e)

{dataAdapter = newSqlDataAdapter("SELECT Surname, Name, Second_Name from Teacher WHERE ID_type_teacher=3", connectionString);ds = newDataSet();.Fill(ds, "Фамилия");_teacher.DataSource = ds.Tables["Фамилия"].DefaultView;awidth3 = table_teacher.Width / table_teacher.ColumnCount;(int i = 0; i < table_teacher.ColumnCount; i++)_teacher.Columns[i].Width = awidth3;= 3;

}

outside_button_Click(object sender, EventArgs e)

{dataAdapter = newSqlDataAdapter("SELECT Surname, Name, Second_Name from Teacher WHERE ID_type_teacher=4", connectionString);ds = newDataSet();.Fill(ds, "Фамилия");_teacher.DataSource = ds.Tables["Фамилия"].DefaultView;awidth3 = table_teacher.Width / table_teacher.ColumnCount;(int i = 0; i < table_teacher.ColumnCount; i++)_teacher.Columns[i].Width = awidth3;= 4;

}

privatevoid delete_subject_Click(object sender, EventArgs e)

{(MessageBox.Show("Выдействительнохотитеудалить?", "Удалениепредмета", MessageBoxButtons.YesNo) == DialogResult.Yes)

{.Open();ch = table_subject[0, table_subject.SelectedRows[0].Index].Value.ToString();com = newSqlCommand("DELETE FROM [Subject] WHERE [Name_subject] LIKE '" + ch + "';", con);.ExecuteNonQuery();dataAdapter = newSqlDataAdapter("SELECT Name_subject from Subject", connectionString);ds = newDataSet();.Fill(ds, "Названиедисциплины");_subject.DataSource = ds.Tables["Названиедисциплины"].DefaultView;.Close();

}

}

privatevoid delete_cabinet_Click(object sender, EventArgs e)

{(MessageBox.Show("Выдействительнохотитеудалить?", "Удалениекабинета", MessageBoxButtons.YesNo) == DialogResult.Yes)

{.Open();ch = table_subject[0, table_cabinet.SelectedRows[0].Index].Value.ToString();com = newSqlCommand("DELETE FROM [Cabinet] WHERE [Number] LIKE '" + ch + "';", con);.ExecuteNonQuery();dataAdapter1 = newSqlDataAdapter("SELECT Number_campus, Number from Cabinet", connectionString);ds1 = newDataSet();.Fill(ds1, "Кабинет");_cabinet.DataSource = ds1.Tables["Кабинет"].DefaultView;.Close();

}

}

delete_group_Click(object sender, EventArgs e)

{(MessageBox.Show("Выдействительнохотитеудалить?", "Удалениегруппы", MessageBoxButtons.YesNo) == DialogResult.Yes)

{.Open();ch = table_Group[0, table_Group.SelectedRows[0].Index].Value.ToString();com = newSqlCommand("DELETE FROM [Grup] WHERE [Grup_Name] LIKE '" + ch + "';", con);.ExecuteNonQuery();dataAdapter = newSqlDataAdapter("Select Grup_Name, Name_specialty from Grup inner join Specialty on Grup.ID_Specialty=Specialty.ID_code_specialty where ID_Type_education=2", connectionString);ds = newDataSet();.Fill(ds, "Группа");_Group.DataSource = ds.Tables["Группа"].DefaultView;.Close();

}

}

privatevoid delete_teacher_Click(object sender, EventArgs e)

{(MessageBox.Show("Выдействительнохотитеудалить?", "Удалениепреподавателя", MessageBoxButtons.YesNo) == DialogResult.Yes)

{.Open();ch = table_teacher[0, table_teacher.SelectedRows[0].Index].Value.ToString();com = newSqlCommand("DELETE FROM [Teacher] WHERE [Surname] LIKE '" + ch + "';", con);.ExecuteNonQuery();dataAdapter = newSqlDataAdapter("SELECT Surname from Teacher", connectionString);ds = newDataSet();.Fill(ds, "Названиепреподавателя");_teacher.DataSource = ds.Tables["Названиепреподавателя"].DefaultView;.Close();

}

}

Приложение 16

Часть кода программы Tarif

public Tarif(string constrc, Form1 DIL)

{();= DIL;.constrc = constrc;= newSqlConnection(constrc);.Open();= newSqlCommand("SELECT [Name_subject] FROM [Subject]", con);(SqlDataReader r = com.ExecuteReader())

{(r.Read())

{_subject.Items.Add((string)r[0]);

}

}= newSqlCommand("SELECT [Group_Name] FROM [Grup]", con);(SqlDataReader r = com.ExecuteReader())

{(r.Read())

{_group.Items.Add((string)r[0]);

}

}= newSqlCommand("SELECT [Name_teacher] FROM [Type_teacher]", con);(SqlDataReader r = com.ExecuteReader())

{(r.Read())

{_sp.Items.Add((string)r[0]);_pod1.Items.Add((string)r[0]);

}

}= newSqlCommand("SELECT [Name_teacher] FROM [Type_teacher]",con);(SqlDataReader r = com.ExecuteReader())

{(r.Read())

{_stp.Items.Add((string)r[0]);

}

}= newSqlCommand("SELECT [Surname] FROM [Teacher] WHERE [ID_Type_teacher] = 1", con);(SqlDataReader r = com.ExecuteReader())

{(r.Read())

{_t.Items.Add((string)r[0]);

}

}= newSqlCommand("SELECT [Group_Name] FROM [Grup]", con);(SqlDataReader r = com.ExecuteReader())

{(r.Read())

{_group.Items.Add((string)r[0]);

}

}.Close();_sp.SelectedIndex = 0;_pod1.SelectedIndex = 0;_stp.SelectedIndex = 0;_group.SelectedIndex = 0;

}

IDt=0;comboBox_sp_SelectedIndexChanged_1(object sender, EventArgs e)

{_teacher.Items.Clear();.Open();= newSqlCommand("SELECT [ID_Type_teacher] FROM [Type_teacher] WHERE [Name_teacher] LIKE '" + comboBox_sp.SelectedItem.ToString() + "'", con);(SqlDataReader r = com.ExecuteReader())

{(r.Read())

{= (int)r[0];

}

}= newSqlCommand("SELECT [Surname] FROM [Teacher] WHERE [ID_Type_teacher] = '" + IDt.ToString() + "'", con);(SqlDataReader r = com.ExecuteReader())

{(r.Read())

{_teacher.Items.Add((string)r[0]);

}

}.Close();

}

listBox_teacher_SelectedIndexChanged_1(object sender, EventArgs e)

{str = listBox_teacher.SelectedItem.ToString();_Teacher.Text = str;

Источник: https://www.bibliofond.ru/view.aspx?id=896641