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

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,08 Mb
  • Опубликовано:
    2012-01-18
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

Оглавление

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

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

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

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

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

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

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

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

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

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

Заключение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 - свободная <#"521617.files/image001.gif">

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

static public class peremenie

{ public string[] mas_shkola;public string m_shkola="";public string chetvert="";public int maksyrokov;public int dninedeli;public string m_klchas;public string m_god1;public string m_god2;

//основные данные о школеpublic string[] m_kab;public string[] m_klas;public string[] m_predmet;public string[] prepod;

//таблицы с данными которые нельзя изменять, наша datagridviewpublic int m_nomkab;public int m_mest;public string m_prepod;

//добавить новый классpublic string m_predimya;public int spar = 0;

//новый предметpublic string m_fio;public int kolchas;public string data;public string adres;public string tel;

//новй преподавательpublic int[] rabkab;public int[] a;public string[] nagryzka;public int[] rabvr;

//массивы для рабочего времениpublic int sprep = 0;public int b = 0;public int otkrit = 0;public string help;public int pred = 0;public int new_old = 0;public int IDklas = 0;public int IDshcool = 0;public bool[] nomerk;

}

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

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

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

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

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

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

static int sh;MySqlDataAdapter da;DataSet table;string conn="datasource=localhost;username=root;password=;database=mysql;CharSet=utf8;";MySqlConnection mycon;DataTable dt;string charsetQuery = "SET NAMES 'utf8';";public void bdread() //класс для чтения данных

{= new MySqlConnection(conn);command1 = new MySqlCommand(charsetQuery, mycon);cmd1 = new MySqlCommand("Select * From данные", mycon);query = "SELECT * FROM данные;";= new MySqlDataAdapter(query, conn);.Open();.ExecuteNonQuery();head;k=0;(MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{= dr.FieldCount;(dr.Read())

{++;

}= k;

}.Open();(MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{j=0;.mas_shkola = new string[k* head];(dr.Read())

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

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

}++;

}

}();

/////матрица для данных о школах= new MySqlCommand("Select * From кабинет", mycon);= "SELECT * FROM кабинет;";= new MySqlDataAdapter(query, conn);.Open();.ExecuteNonQuery();= 0;(MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{(dr.Read())

{++;

}

}.Open();(MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{.m_kab = new string[k * 5];j = 0;(dr.Read())

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

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

}++;

}

}

/////матрица для кабинетов= new MySqlCommand("Select * From классы", mycon);= "SELECT * FROM классы;";= new MySqlDataAdapter(query, conn);.Open();.ExecuteNonQuery();= 0;(MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{(dr.Read())

{++;

}

}.Open();(MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{j=0;.m_klas = new string[k * 6];(dr.Read())

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

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

}++;

}

}

////матрица для классов= new MySqlCommand("Select * From предмет", mycon);= "SELECT * FROM предмет;";= new MySqlDataAdapter(query, conn);.Open();.ExecuteNonQuery();= 0;(MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{(dr.Read())

{++;

}

}.Open();(MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{j = 0;.m_predmet = new string[k * 4];(dr.Read())

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

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

}++;

}

}

//////матрица для предметов= new MySqlCommand("Select * From преподаватели", mycon);= "SELECT * FROM преподаватели;";= new MySqlDataAdapter(query, conn);.Open();.ExecuteNonQuery();= 0;(MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{(dr.Read())

{++;

}

}.Open();(MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{j = 0;.prepod = new string[k * 7];(dr.Read())

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

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

}++;

}

}

//// преподы= new MySqlCommand("Select * From нагрузка", mycon);= "SELECT * FROM нагрузка;";= new MySqlDataAdapter(query, conn);.Open();.ExecuteNonQuery();= 0;(MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{(dr.Read())

{++;

}.Open();(MySqlDataReader dr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{j = 0;.nagryzka = new string[k * 6];(dr.Read())

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

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

}++;

}

}

////нагрузка= new MySqlCommand("Select * From рабвремяпрепода", mycon);= "SELECT * FROM рабвремяпрепода;";= new MySqlDataAdapter(query, conn);.Open();.ExecuteNonQuery();= 0;(MySqlDataReader dr=cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{(dr.Read())

{++;

}

}.Open();(MySqlDataReader dr=cmd1.ExecuteReader(CommandBehavior.CloseConnection))

{j=0;.rabvr = new int[k * 10];(dr.Read())

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

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

}++;

}

}

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

}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

}

}kol = 0; ////количество предмета в неделюprep = "";(int i = 0; i < peremenie.nagryzka.Length / 6; i++)

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

{= Convert.ToInt32(peremenie.nagryzka[i * 6 + 4]);//// naxodim eto kol-vo= peremenie.nagryzka[i * 6 + 5];(prep, r, c, data, f);(rabota(prep, r, c, data, f) == 3) //////////////необходимо передать имя препода в подпрограмму чтобы определить может он вести в это время

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

{1;

}

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

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

}

}

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

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

{= sum + 1;

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

{= sum + 1;

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

{= sum + 1;

{= sum + 1;

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

{= sum + 1;

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

{= sum + 1;

}

}k = 0;(kol <= sum)

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

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

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

{(j != c)

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

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

{[] word;= Convert.ToString(data.Rows[r].Cells[j].Value).Split('/');(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])

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

}

}

}

}

}

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

{(r != i)

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

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

{= 1;k;

}

}

}

}k;

}

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

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

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

{z = true;(int k = 0; k < peremenie.m_klas.Length / 6; k++)

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

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

}

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

{.ContextMenuStrip.Enabled = false;

}

{.ContextMenuStrip.Enabled = true;

}

}

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

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

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

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

{(i != c)

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

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

{(word[1] == nom)

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

}

}

{

}

}

}0;

}

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

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

Рис.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 <http://www.wiley.com>

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


Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!