Создание программы для составления расписания в школе

Составление математической модели расписания в школе. Назначение и область применения программного продукта. Обоснование выбора инструментальных средств. Описание разработки, алгоритмов и методов решения, форматов данных и пользовательского интерфейса.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 18.01.2012
Размер файла 1,6 M

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

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

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

Оглавление

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

1. Цели и задачи проекта

2. Назначение и область применения программного продуктa

3. Выбор и обоснование выбора инструментальных средств

4. Особенности программирования в данной области

5. Структурное описание разработки. Описание форматов данных

6. Описание программы

7. Описание алгоритмов и методов решения

8. Описание пользовательского интерфейса

9. Руководство пользователя

Заключение

Список используемой литературы

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

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

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

1. Цели и задачи проекта

1. Обеспечение взаимодействия пользователя с программным продуктом. (Сведение к минимуму усилий пользователя при составлении расписания)

2. Разработка структуры базы данных

• Создание удобного интерфейса для доступа к базе данных и составления расписания.

• Обеспечение оперативного доступа к данным, хранящимся в базе.

• Обеспечение возможности изменения и дополнения данных, хранящихся в базе.

• Обеспечение поиска несоответствий в уже составленном расписании при изменении или дополнении данных, хранящихся в базе.

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

4. Обеспечение архивации данных для анализа и повторного использования.

5. Создание справочной информации о работе программы.

Основные требования: - двухсменное расписание; - сопоставление педагога и предмета; - сопоставление предмета и кабинета; - возможность выбора кабинетов для предмета; - учет парных предметов; - учет числа учебных дней для класса; - учет начала второй смены;

2. Назначение и область применения программного продукта

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

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

Представляемый нами программный продукт предназначен для облегчения ручного и умственного труда завуча при составлении школьного расписания. Использование данного продукта позволит сэкономить время и силы потраченные на выполнение этого трудоёмкого процесса.

3. Выбор и обоснование выбора инструментальных средств

Ядро системы и интерфейсная часть были написаны на языке высочайшего уровня С#. База данных была реализована на СУБД MS SQL. Связь с базой данных осуществляется при помощи mysql-connector-net-5.0.9.

В выборе инструментальных средств мы в первую очередь руководствовались особенностями разрабатываемого приложения. Которые включают в себя последующую возможность создания NET-приложения на базе уже созданного. Следовательно для того чтобы этот переход был наименее затратен приложение должно базироваться на такой СУБД, которая поддерживает NET-приложения. Такой СУБД является MS SQL.

С# же является одним из двух наиболее распространённых языков для написания NET-приложений. Он создан в наследие C ++ и должен быть наиболее комфортабельным для C ++ программистов.

Немного о языке C# .

В течение последних 20 лет, C и C++ были языками выбора для коммерческих и критических деловых приложений. Эти языки предусматривали серьезную степень управления разработчикам позволяя им использовать указатели и много системные функции низкого уровня. Тем не менее, когда Вы сравниваете языки, как например, Microsoft Visual Basic to C/C++, вы начинаете понимать что тогда как C и C++ - более мощные языки, это занимает намного больше времени, чтобы разрабатывать приложения. Много C/C ++ программистов страшились понятия переключения натакие языки как например, Visual Basic. Microsoft представил C# публике на Профессиональной Конференции Разработчика в Orlando, Флориде, летом 2000. C# объединяет наилучшие идеи с языков C, C++, и Java с расширениями призводительности обнаруженными в Microsoft .NET Framework и обеспечивает то же продуктивное кодирование опыта как для новых так и опытных разработчиков.

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

Подобно языкам C++ и Java, C# подразделяет типы на два вида: встроенные типы, которые определены в языке, и определяемые пользователем типы, которые выбирает программист. С# также подразделяет типы на две другие категории: размерные и ссылочные. Основное различие между ними -- это способ, которым их значения сохраняются в памяти. Размерные типы сохраняют свое фактическое значение в стеке. Ссылочные типы хранят в стеке лишь адрес объекта, а сам объект сохраняется в куче. Куча -- основная память программ, доступ к которой осуществляется на много медленнее чем к стеку. Если вы работаете с очень большими объектами, то сохранение их в куче имеет много преимуществ. В следующих уроках будут подробно рассмотрены различные преимущества и недостатки работы с ссылочными типами.

С# также поддерживает и указатели на типы, но они редко употребляются. Применение указателей связано с использованием неуправляемого кода. Язык С# предоставляет программисту широкий спектр встроенных типов, которые соответствуют CLS (Common Language Specification) и отображаются на основные типы платформы .NET. Это гарантирует, что объекты, созданные на С#, могут успешно использоваться наряду с объектами, созданными на любом другом языке программирования, поддерживающем .NET CLS (например, VB.NET).

Каждый тип имеет строго заданный для него размер, который не может изменяться. В отличие от языка C++, в С# тип int всегда занимает 4 байта, потому что отображается к Int32 в .NET CLS. Представленная ниже таблица содержит список всех встроенных типов, предлагаемых С#. В дополнение к этим примитивным типам С# может иметь объекты типа enum и struct.

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

MySQL -- свободная система управления базами данных (СУБД). MySQL является решением для малых и средних приложений. Входит в состав серверов WAMP, LAMP и в портативные сборки серверов Денвер, XAMPP. Обычно MySQL используется в качестве сервера, к которому обращаются локальные или удалённые клиенты, однако в дистрибутив входит библиотека внутреннего сервера, позволяющая включать MySQL в автономные программы.

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

4. Особенности программирования в данной области

Когда вы пишете исходный код на С#, то создаете инструкции для исполнения программой. Инструкции определяются с помощью языка программирования С#, который, в общем, понятен людям, но совсем непонятен компьютерам. Компьютеры не понимают информацию в виде текста, они понимают единицы и нули. Чтобы вводить инструкции в компьютер в понятной для него форме, был разработан высокоуровневый механизм, который преобразовывает текстовые инструкции в формат, понимаемый компьютером. Этот преобразовывающий инструмент называется компилятором.

Но особенность .NET, в отличие от традиционных языков программирования, таких как С++ и С, состоит в том, что компилятор генерирует двоичный промежуточный код на языке CIL (Common Intermediate Language). .NET Framework потом преобразовывает инструкции из формата CIL в двоичные инструкции, требуемые для процессора. Для построения любого приложения нужны эффективные средства сохранения данных, загрузки и обработки их. Отображение данных должно быть интуитивно понятным и пользовательский интерфейс должен быть довольно прост. Для этого используется привязка к данным, которая инкапсулирует все требуемые операции по сохранению и извлечению кода в компонентах, помогающих отображать данные, что позволяет уменьшить оббьем подлежащего написанию кода.

Рис.1 Процесс привязки к данным

Общие замечания:

1. Соединение с базой данных MS SQL осуществляется при помощи компонента BdpConnection.

2. Взаимодействие с базой данных после того как взаимодействие установлено, осуществляется при помощи компонента BdpAdapter.

3. Хранение таблиц базы данных может осуществляться компонентом DataSet.

4. Таблица базы данных записывается в DataSet при помощи вызова метода Fill() компонента BdpDataAdapter.

5. Простой вывод содержимого компонента DataSet может быть осуществлён при помощи компонента DataGrid.

5. Структурное описание разработки. Описание форматов данных

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

Очередность ввода данных

· Данные о школе

· Предметы, которые ведутся в школе

· Преподаватели

· Существующие классы

· Рабочие кабинеты

Наименование школы имеет текстовый формат, учебный год - формат года.

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

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

О преподавателях необходимо заполнить личные данные: ФИО (формат текстовый), номер телефона (формат текстовый), адрес (формат текстовый), дата рождения (формат дата).

Информация о классах содержит наименование класса, классного руководителя, смена и количество учащихся.

Форма с кабинетами содержит номер кабинета, закрепленного за этим кабинетом преподавателя, количество посадочных мест.

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

Программный код:

static public class peremenie

{

static public string[] mas_shkola;

static public string m_shkola="";

static public string chetvert="";

static public int maksyrokov;

static public int dninedeli;

static public string m_klchas;

static public string m_god1;

static public string m_god2;

//основные данные о школе

static public string[] m_kab;

static public string[] m_klas;

static public string[] m_predmet;

static public string[] prepod;

//таблицы с данными которые нельзя изменять, наша datagridview

static public int m_nomkab;

static public int m_mest;

static public string m_prepod;

//добавить кабинет

static public string m_klimya;

static public int kolychen;

static public string klryk;

static public int smena=0;

//добавить новый класс

static public string m_predimya;

static public int spar = 0;

//новый предмет

static public string m_fio;

static public int kolchas;

static public string data;

static public string adres;

static public string tel;

//новй преподаватель

static public int[] rabkab;

static public int[] a;

static public string[] nagryzka;

static public int[] rabvr;

//массивы для рабочего времени

static public int sprep = 0;

static public int b = 0;

static public int otkrit = 0;

static public string help;

static public int pred = 0;

static public int new_old = 0;

static public int IDklas = 0;

static public int IDshcool = 0;

static public bool[] nomerk;

}

ИНФОРМАЦИЮ, НА ОСНОВЕ КОТОРОЙ СТРОИТСЯ РАСПИСАНИЕ, НЕ РЕКОМЕНДУЕТСЯ ИЗМЕНЯТЬ ПОСЛЕ ТОГО, КАК ЗАВУЧ НАЧАЛ ЕГО СОСТАВЛЯТЬ!!!

Информация в программе взаимодействует друг с другом, поэтому все лучше прописать сразу, чтобы потом не добавлять.

В самой программе работа с данными происходит следующим образом:

Если наша школа уже есть в списке, и мы ее просто открываем, тогда все данные будут перемещены в специальные матрицы. И затем информация уже извлекается из матриц, согласно условиям. Когда же мы создаем либо изменяем информацию, она изменяется или создается в таблицах при нажатии на кнопку ОК или ДАЛЕЕ.

Программный код для извлечения информации из таблиц MySql:

программный алгоритм интерфейс пользовательский

static int sh;

static MySqlDataAdapter da;

static DataSet table;

static string conn="datasource=localhost;username=root;password=;database=mysql;CharSet=utf8;";

static MySqlConnection mycon;

static DataTable dt;

static string charsetQuery = "SET NAMES 'utf8';";

static public void bdread() //класс для чтения данных

{

mycon = new MySqlConnection(conn);

MySqlCommand command1 = new MySqlCommand(charsetQuery, mycon);

MySqlCommand cmd1 = new MySqlCommand("Select * From данные", mycon);

string query = "SELECT * FROM данные;";

da = new MySqlDataAdapter(query, conn);

mycon.Open();

command1.ExecuteNonQuery();

int head;

int k=0;

using (MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{

head = dr.FieldCount;

while (dr.Read())

{

k++;

}

sh = k;

}

mycon.Open();

using (MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{

int j=0;

peremenie.mas_shkola = new string[k* head];

while (dr.Read())

{

for (int i = 0; i < head; i++)

{

peremenie.mas_shkola[j * 8 + i] = dr.GetValue(i).ToString().Trim();

}

j++;

}

}

dannie();

/////матрица для данных о школах

cmd1 = new MySqlCommand("Select * From кабинет", mycon);

query = "SELECT * FROM кабинет;";

da = new MySqlDataAdapter(query, conn);

mycon.Open();

command1.ExecuteNonQuery();

k = 0;

using (MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{

while (dr.Read())

{

k++;

}

}

mycon.Open();

using (MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{

peremenie.m_kab = new string[k * 5];

int j = 0;

while (dr.Read())

{

for (int i = 0; i < 5; i++)

{

peremenie.m_kab[j * 5 + i] =dr.GetValue(i).ToString().Trim();

}

j++;

}

}

/////матрица для кабинетов

cmd1 = new MySqlCommand("Select * From классы", mycon);

query = "SELECT * FROM классы;";

da = new MySqlDataAdapter(query, conn);

mycon.Open();

command1.ExecuteNonQuery();

k = 0;

using (MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{

while (dr.Read())

{

k++;

}

}

mycon.Open();

using (MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{

int j=0;

peremenie.m_klas = new string[k * 6];

while (dr.Read())

{

for (int i = 0; i <6; i++)

{

peremenie.m_klas[j * 6+ i] = dr.GetValue(i).ToString().Trim();

}

j++;

}

}

////матрица для классов

cmd1 = new MySqlCommand("Select * From предмет", mycon);

query = "SELECT * FROM предмет;";

da = new MySqlDataAdapter(query, conn);

mycon.Open();

command1.ExecuteNonQuery();

k = 0;

using (MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{

while (dr.Read())

{

k++;

}

}

mycon.Open();

using (MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{

int j = 0;

peremenie.m_predmet = new string[k * 4];

while (dr.Read())

{

for (int i = 0; i < 4; i++)

{

peremenie.m_predmet[j *4 + i] = dr.GetValue(i).ToString().Trim();

}

j++;

}

}

//////матрица для предметов

cmd1 = new MySqlCommand("Select * From преподаватели", mycon);

query = "SELECT * FROM преподаватели;";

da = new MySqlDataAdapter(query, conn);

mycon.Open();

command1.ExecuteNonQuery();

k = 0;

using (MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{

while (dr.Read())

{

k++;

}

}

mycon.Open();

using (MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{

int j = 0;

peremenie.prepod = new string[k * 7];

while (dr.Read())

{

for (int i = 0; i < 7; i++)

{

peremenie.prepod [j * 7 + i] = dr.GetValue(i).ToString().Trim();

}

j++;

}

}

//// преподы

cmd1 = new MySqlCommand("Select * From нагрузка", mycon);

query = "SELECT * FROM нагрузка;";

da = new MySqlDataAdapter(query, conn);

mycon.Open();

command1.ExecuteNonQuery();

k = 0;

using (MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{

while (dr.Read())

{

k++;

}

}

mycon.Open();

using (MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{

int j = 0;

peremenie.nagryzka = new string[k * 6];

while (dr.Read())

{

for (int i = 0; i < 6; i++)

{

peremenie.nagryzka[j * 6 + i] = dr.GetValue(i).ToString().Trim();

}

j++;

}

}

////нагрузка

cmd1 = new MySqlCommand("Select * From рабвремяпрепода", mycon);

query = "SELECT * FROM рабвремяпрепода;";

da = new MySqlDataAdapter(query, conn);

mycon.Open();

command1.ExecuteNonQuery();

k = 0;

using(MySqlDataReader dr=cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{

while (dr.Read())

{

k++;

}

}

mycon.Open();

using(MySqlDataReader dr=cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{

int j=0;

peremenie.rabvr = new int[k * 10];

while (dr.Read())

{

for (int i = 0; i <10; i++)

{

peremenie.rabvr[j * 10 + i]= Convert.ToInt32(dr.GetValue(i).ToString().Trim());

}

j++;

}

}

//рабочее время

}

6. Описание программы

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

1. Таблица "Данные о школе" призвана собрать общие данные о школе и учебном процессе.

2. Таблица "Предметы" содержит данные о предметах, преподаваемых в данной школе.

3. Таблица "Преподаватели" содержит личную и служебную информацию о преподавательском составе.

Таблица "Рабочее время", привязанная к таблице "Преподаватели" содержит пожелания преподавателя, касающиеся его рабочего графика.

4. Таблица "Классы" содержит информацию об учащихся и о классах.

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

5. Таблица "Кабинеты" содержит информацию об аудиторном фонде школы.

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

Данные хранятся в Базе данных MS SQL и взаимодействуют с ядром системы, которое налагает ограничения на работу пользователя, то есть советует ему и предупреждает о невозможности совершаемого действия. Прежде чем любой предмет помещается в сетку расписания, программа осуществляет проверку.

Налагаемые ядром ограничения:

1. Если пользователь превышает возможное количество уроков в день, программа сообщает об этом. Это является строгим ограничением.

2. Если пользователь пытается поставить предмет для класса обучаемого во второй смене во время обучения первой, программа сообщает ему об этом.

3. Если в графе "спаренные" не стоит галочка, то при попытке пользователем поставить в один день данный предмет более одного раза, программа сообщает о невозможности данного действия. Это является строгим ограничением.

4. В графу "количество часов вносится количество оплачиваемых часов для данного преподавателя. Если оно будет превышено, то программа сообщит об этом.

5. Время классного часа вносится следующим образом: день недели; номер урока. Эта информация автоматически устанавливается в сетку расписания после заполнения таблицы "Данные о школе". Пользователь не имеет права менять местоположение классного часа в сетке расписания, кроме как путём изменения данных в таблице.

6. Если данные по какому-либо преподавателю отсутствуют в таблице, то есть не дано количество часов и не выбран предмет, считается, что данный преподаватель не ведёт каких-либо уроков в этом классе. Следовательно при попытке поставить данный предмет для этого класса программа сообщит о невозможности.

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

8. Если пользователь превышает номинальное количество часов в неделю, программа сообщает об этом, но это не является строгим ограничением.

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

Модуль расписания - это непосредственно само расписание, которое и заполняется пользователем, путём вызова контекстного меню для каждой из ячеек и выбора предмета и кабинета. Изначально кабинет идёт в связке с предметом, но пользователь может его поменять, если возникает такая необходимость.

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

Рис.2 Структурная схема компьютерной системы расписания

7. Описание алгоритмов и методов решения

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

Когда мы выбрали какой-то предмет в ячейке определенного класса.… Хотя давайте рассмотрим сразу на примере: Мы выбираем предмет черчение в 9 "Б" классе. Для начала программа должна знать ведется ли черчение в 9 классе, и она начинает проверять по базе - сколько часов стоит в неделю черчения в этом классе. Если количество часов равно нулю, то и выведется соответствующее сообщение. Если же не равно нулю, то программа просматривает предметы за всю неделю в этом классе и просчитывает сколько раз черчение уже поставлено и если эта цифра равна общему количеству часов черчения в неделю, программа также выводит сообщение. В противном случае проверка продолжается. Далее происходит проверка преподавателя, т.е. не ведет ли он урок в этот момент в другом классе. А также проверяется рабочее время преподавателя, в котором расставляется время, когда он может работать, а когда не может.

public Int32 logicblok(int r, int c, DataGridView data, int f, string predmet)

{

nomer = "";

for (int i = 0; i < peremenie.m_klas.Length / 6; i++)

{

if (data.Columns[c].HeaderText == peremenie.m_klas[i * 6 + 2] && peremenie.m_klas[i * 6 + 1] == Convert.ToString(peremenie.IDshcool))

{

peremenie.IDklas = Convert.ToInt32(peremenie.m_klas[i * 6 + 0]); ////ID klassa

}

}

int kol = 0; ////количество предмета в неделю

string prep = "";

for (int i = 0; i < peremenie.nagryzka.Length / 6; i++)

{

if (predmet == peremenie.nagryzka[i * 6 + 3] && Convert.ToInt32(peremenie.nagryzka[i * 6 + 2]) == peremenie.IDklas)

{

kol = Convert.ToInt32(peremenie.nagryzka[i * 6 + 4]);//// naxodim eto kol-vo

prep = peremenie.nagryzka[i * 6 + 5];

standart(prep, r, c, data, f);

if (rabota(prep, r, c, data, f) == 3) //////////////необходимо передать имя препода в подпрограмму чтобы определить может он вести в это время

{

if (MessageBox.Show("Вероятно преподаватель не сможет. Все равно продолжить?", "Предупреждение", MessageBoxButtons.YesNo) == DialogResult.No)

{

return 1;

}

}

else if (rabota(prep, r, c, data, f) == 2)

{

MessageBox.Show("Преподаватель не сможет.", "Предупреждение");

return 1;

}

}

}

int sum = 0;

for (int i = 0; i < dataGridView1.RowCount; i++)

{

string[] w;

w= Convert.ToString(dataGridView1.Rows[i].Cells[c].Value).Split('/');

if (w[0]== predmet)

{

sum = sum + 1;

}

string[] w1;

w1= Convert.ToString(dataGridView2.Rows[i].Cells[c].Value).Split('/');

if (w1[0]== predmet)

{

sum = sum + 1;

}

string[] w2;

w2= Convert.ToString(dataGridView3.Rows[i].Cells[c].Value).Split('/');

if (w2[0]== predmet)

{

sum = sum + 1;

}

string[] w3;

w3=Convert.ToString(dataGridView4.Rows[i].Cells[c].Value).Split('/');

if (w3[0]== predmet)

{

sum = sum + 1;

}

string[] w4;

w4= Convert.ToString(dataGridView5.Rows[i].Cells[c].Value).Split('/');

if (w4[0]== predmet)

{

sum = sum + 1;

}

string[] w5;

w5= Convert.ToString(dataGridView6.Rows[i].Cells[c].Value).Split('/');

if (w5[0]== predmet)

{

sum = sum + 1;

}

}

int k = 0;

if (kol <= sum)

{

k = 1;

MessageBox.Show("Недопустимое количество данного предмета для этого класса.", "Предупреждение");

return k;

}

for (int i = 0; i < peremenie.m_klas.Length / 6; i++)

{

for (int j = 0; j < dataGridView1.ColumnCount; j++)

{

if (j != c)

{

if (data.Columns[j].HeaderText == peremenie.m_klas[i * 6 + 2] && peremenie.m_klas[i * 6 + 1] == Convert.ToString(peremenie.IDshcool))

{

for (int u = 0; u < peremenie.nagryzka.Length / 6; u++)

{

string[] word;

word = Convert.ToString(data.Rows[r].Cells[j].Value).Split('/');

if (prep == peremenie.nagryzka[u * 6 + 5] && Convert.ToInt32(peremenie.nagryzka[u * 6 + 2]) == Convert.ToInt32(peremenie.m_klas[i * 6 + 0]) && word[0] == peremenie.nagryzka[u * 6 + 3])

{

k = 1;

MessageBox.Show("Преподаватель занят.", "Предупреждение");

return k;

}

}

}

}

}

}

for (int i = 0; i < data.RowCount; i++)

{

if (r != i)

{

string[] word;

word = Convert.ToString(data.Rows[i].Cells[c].Value).Split('/');

if (word[0] == predmet)

{

if (MessageBox.Show("Вы уверенны, что хотите проставить два одинаковых предмета в день?", "Предупреждение", MessageBoxButtons.YesNo) == DialogResult.No)

{

k = 1;

return k;

}

}

}

}

return k;

}

Данный программный код выполняет выше указанные действия.

Также происходит сверка смены:

public void smena(int i, int j, DataGridView data)

{

bool z = true;

for (int k = 0; k < peremenie.m_klas.Length / 6; k++)

{

if (data.Columns[j].HeaderText == peremenie.m_klas[k * 6 + 2] && peremenie.m_klas[k * 6 + 1] == Convert.ToString(peremenie.IDshcool))

{

z=Convert.ToBoolean( peremenie.m_klas[k * 6 + 4]); ////ID klassa

}

}

if (z==true&& i<4)

{

data.ContextMenuStrip.Enabled = false;

}

else

{

data.ContextMenuStrip.Enabled = true;

}

}

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

Программный код для проверки кабинета:

public int razdel(DataGridView data, int r,int c,string nom)

{

for (int i = 0; i < data.ColumnCount; i++)

{

if (i != c)

{

string[] word;

word = Convert.ToString(data.Rows[r].Cells[i].Value).Split('/');

//MessageBox.Show(Convert.ToString(data.Rows[r].Cells[i].Value), word[0]);

try

{

if (word[1] == nom)

{

MessageBox.Show("Кабинет занят!", "Предупреждение");

return 1;

}

}

catch

{

}

}

}

return 0;

}

8. Описание пользовательского интерфейса

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

Рис.3 Интерфейс.

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

Рис.4 Данные о школе

Рис.5 Данные о предметах

Рис.6 Данные о кабинетах

Рис.7 Данные о преподавателях

Рис.8 Данные о классах

Рис.9 Данные о нагрузке для классов

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

Рис.10 Окно открытия сохранённой записи.

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

Рис. 11 Расписание с проставленным классным часом.

Рис.12 Работа над расписанием.

9. Руководство пользователя

Для того чтобы открыть уже созданный проект зайдите в меню файл в подменю открыть. В появившемся окне выберите требующуюся Вам запись и нажмите кнопку ОК. После чего Вы можете приступить к работе над составлением расписания, в открывшейся рабочей области. Выберите ячейку расписания, с которой Вы хотели бы начать. Но помните, что если класс учится во вторую смену, то программа не позволит Вам поставить какой-либо предмет раньше чем пятым либо шестым уроком (в зависимости от того как заполнена таблица "Данные о школе"). Кликните по выбранной ячейке правой кнопкой мыши, чтобы вызвать контекстное меню. Из контекстного меню выберите требуемый предмет. Изначально кабинет будет привязан к предмету, но при желании его можно изменить, выбрав в контекстном меню подменю кабинеты и требуемый кабинет. При неправильной работе с программой, то есть при попытках поставить в одно и то же время предметы, которые ведёт один и тот же преподаватель, поставить в расписание уже занятый кабинет или превысить требуемое количество данного предмета для класса, программа сообщит об этом. Если же преподавателю, который ведёт данный предмет не подходит выбранное Вами время, программа так же сообщит об этом.

Рис.13 Предупреждение.

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

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

Рис.14 Таблица занятости кабинетов.

Если в таблице занятости кабинета стоит галочка, значит в это время кабинет уже занят.

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

При создании нового проекта Вам будет предложено заполнить ряд таблиц, первая из которых содержит данные о школе. При заполнении этих данных советую сразу перевести язык на русский. Выбирая время классного часа, Вы выбираете только день, программа поставит его в этот день первым уроком. После заполнения этой таблицы нажимаем кнопку далее и переходим к заполнению следующей таблицы. Если в таблице занятости преподавателя стоит !!! это значит что преподаватель ни в коем случае не может работать в это время, а если ??? то вероятно не может, но это не строгое ограничение. И лишь … означает что преподаватель свободен.

После заполнения всех требуемых таблиц откроется окно работы над расписанием. Работа, с которым описана выше.

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

Следует помнить, что прежде чем внести какие-либо изменения в таблицы, либо просто их открыть необходимо, нажать кнопку "подтвердить" иначе все несохранённые изменения будут уничтожены.

Желаем приятной работы и плодотворных результатов!!!

Заключение

В ходе проделанной работы нами были изучены Язык программирования С# и его взаимодействие с СУБД MS SQL и MS Exel. Была создана база данных и интерфейсная часть программы для составления расписания и осуществлены подготовительные работы и исследования для создания программы с автоматическим составлением расписания. При создании данного приложения помощь в сборе информации нам была оказана завучами средних школ ПСШК и СШ№40. А также выражаем свою благодарность за помощь при создании данного приложения заведующему кафедрой КИСиУ Миркину Евгению Леонидовичу и преподавателям одноимённой кафедры Савченко Е. Ю. и Мусакуловой Ж.А.

Список используемой литературы

1. Гросс К. Г88 С# 2008: Пер. с англ. -- СПб.: БХВ-Петербург, 2009. -- 576 е.: ил. -- (Самоучитель)

2. М.Абрамян "Visual C# в примерах" -- СПб.: БХВ-Петербург, 2008

3. Брайан Нойес "Привязка данных в Windows Forms" Москва 2009

4. C# Bible Jeff Ferguson, Brian Patterson, Jason Beres, Pierre Boutquin, and Meeta Gupta Published by Wiley Publishing, Inc. 10475 Crosspoint Boulevard Indianapolis,_IN 46256

5. Интернет ресурс www.wiley.com

6. Интернет ресурс Википедия

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


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

  • Анализ существующих решений для составления расписания репетитора. Разработка архитектуры программного продукта. Выбор инструментальных средств. Проектирование реляционной базы данных. Определение методики тестирования. Реализация интерфейса пользователя.

    дипломная работа [411,7 K], добавлен 22.03.2018

  • Практический опыт и проблемы внедрения систем автоматизированного составления расписания. Описание исходных данных для разработки функционала программы. Описание структуры разделов пользовательского интерфейса. Модуль проверок корректности расписания.

    курсовая работа [3,6 M], добавлен 26.09.2014

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

    дипломная работа [3,1 M], добавлен 19.01.2017

  • Создание программного обеспечения информационной системы автоматизации учебно-учетной деятельности в школе. Формирование логической и концептуальной моделей структурирования данных с использованием CASE-средств. Организация пользовательского интерфейса.

    дипломная работа [1,6 M], добавлен 11.06.2014

  • Обоснование выбора метода проектирования и инструментальных средств для разработки программного средства и базы данных. Требования к эргономике и технической эстетике. Разработка алгоритмов приложения. Руководство пользователя. Безопасность труда.

    дипломная работа [2,9 M], добавлен 17.10.2014

  • Проектирование структуры и архитектуры программного продукта. Реализация программы конвертера файлов баз данных. Описание пользовательского интерфейса. Выбор порядка конвертации dbf файлов. Создание и исполнение шаблонов. Расчет себестоимости продукта.

    дипломная работа [2,2 M], добавлен 21.06.2013

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

    контрольная работа [877,0 K], добавлен 10.01.2012

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

    курсовая работа [2,9 M], добавлен 24.03.2023

  • Применение программного обеспечения для разработки игры "Быки и коровы". Описание алгоритма и интерфейса пользователя программы. Назначение и область применения и описание возможностей программы. Рассмотрение списка сообщений об ошибках программы.

    курсовая работа [799,2 K], добавлен 26.04.2021

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

    дипломная работа [2,7 M], добавлен 12.05.2016

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