Разработка программы "Расписание" - Программирование, компьютеры и кибернетика курсовая работа

Разработка программы "Расписание" - Программирование, компьютеры и кибернетика курсовая работа



































Определение необходимых модулей программы, структуры файла базы данных. Описание разработки программы, отладка и тестирование. Разработка приложения Organizer.exe, меню и руководство пользователя. Алгоритм обработки событий главного меню (расписания).


посмотреть текст работы


скачать работу можно здесь


полная информация о работе


весь список подобных работ


Нужна помощь с учёбой? Наши эксперты готовы помочь!
Нажимая на кнопку, вы соглашаетесь с
политикой обработки персональных данных

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
2.1 Определение необходимых модулей программы
2.1 Определение структуры файла базы данных
5.1 Разработка приложения Organizer.exe
Приложение А.3 - Файл «Graphics.cpp»
Приложение А.4 - Файл «Database.cpp»
Приложение В Результаты работы программы
Приложение B.1 - Информационная заставка
Приложение B.4 - Меню Подробнее/Изменить
Приложение B.5 - Рез у льтаты поиска
Цель курсовой работы - проверить знания студента по пройденному за семестр материалу. Студент должен владеть основами работы в операционной системе Windows, знать ее основные команды и возможности, иметь представление об окнах и обработке оконных сообщений. Решая задачи курсовой работы, необходимо изучить приемы программирования на языке С и ассемблер, способы хранения данных в файле, организацию и работу с массивами данных, поиск, добавление и удаление записей в файле, создание и удаление файлов, научиться обрабатывать сообщения клавиатуры и мыши, получить навыки написания программ с использованием псевдографики.
Цель оформления отчетов по курсовой работе - привить студентам навыки правильного оформления научно-технических отчетов, программной и технической документации в соответствии со стандартами.
Любая программа, выполняемая на ЭВМ, обрабатывает данные с целью получения требуемого результата. В современных языках программирования (Pascal,C) имеются базовые типы данных и средств построения структурных типов данных из базовых; они облегчают составление программ для решения сложных задач, однако не избавляют программиста от проблем разработки алгоритмов и выбора подходящей структуры данных. При разработке алгоритма выбирается некоторая удобная абстрактная структура данных и алгоритм разрабатывается в терминах операций над этим абстрактным типом данных. После разработки алгоритма выбирается представление абстрактной структуры данных с помощью структуры данных языка программирования (отображение на массив, на файлы). Если задача позволяет, целесообразнее использовать более простые структуры данных. К таким традиционным структурам данных, допускающих простое и эффективное представление на ЭВМ, относятся массивы, строки, записи, таблицы, файлы. Очень часто язык содержит лишь некоторые из перечисленных структур, а остальные приходится представлять с помощью имеющихся.
Псевдографика, псевдографические символы -- совокупность символов , включенных в набор символов компьютерного шрифта , отображающих графические примитивы (линии, прямоугольники, треугольники, кресты, различная заливка и т. п.). Псевдографические символы реализуются в рамках формата (к примеру, матрица 8х12 точек) шрифта и дополняют в таком наборе цифро-буквенные и служебные символы.
Основное назначение псевдографики -- графическое оформление программ с текстовым интерфейсом пользователя (в том числе и т. н. консольных ) -- отображение в них окон, меню, кнопок и прочих элементов интерфейса , создания рамок и таблиц. Первоначальная цель применения -- изображение рамок и таблиц на текстовых терминалах . Псевдографика также зачастую используется там, где передача, хранение и визуализация графики непосредственно невозможна или затруднена: телетайпы , текстовые терминалы, почтовая переписка , СМС и т. п.
В системах с графическим интерфейсом псевдографика практически не используется, поскольку там есть возможность отрисовывать те же графические элементы с более высоким качеством и изобразительностью, используя встроенные графические средства системы (скажем, GDI ). Кроме того, возможность рисовать рамки псевдографикой ограничена -- аккуратно это можно делать только используя шрифты фиксированной ширины .
Другой вид псевдографики используется когда недоступны и псевдографические символы. В этом случае используются доступные и визуально схожие с псевдографикой символы: !, I, O, -, =, +, и т. п. Поэтому псевдографикой можно считать и широко применяющиеся при виртуальном общении составленные из нескольких цифро-буквенных символов комбинации -- смайлики (впрочем, непосредственное вхождение их в состав некоторых наборов символов (к примеру, Юникод ) позволяет им считаться полноценными псевдографическими символами).
Работа с файлом может проходить либо в режиме записи, либо в режиме чтения. Для определения размера файла, создание, удаление, открытие, закрытие файла в С имеются стандартные функции.
Необходимо разработать программу «Расписание». Программа должна уметь:
- производить ввод информации о занятиях
- удаление занятий и расписания в целом
- редактирование слов и описания к ним
Также программа должна обладать описанными ниже свойствами.
Многомодульность программы. Необходимо поделить программу на логические модули. Это повысит расширяемость программы и локализации ошибок при отладке и тестировании программы.
Использование сложных типов данных - массивов, структур, файлов. Необходимо изучить базовые и сложные типы данных. Это необходимо для структуризации базы данных и при обработке данных в коде программы.
Программа должна работать в графическом или текстовом режиме видеоподсистемы. Необходимо определиться с типом интерфейса, с элементами управления. Необходимо изучить приемы и механизмы реализации псевдографического интерфейса. Это необходимо для понимания, как и почему на консоли появляются псевдографические символы, линии, окна, кнопки и т.д.
Устройство ввода-вывода - клавиатура и мышь. Необходимо научится анализировать и различать события, возникающие от работы с клавиатурой и мышью. Необходимо однозначно идентифицировать и выполнять те или иные действия в зависимости от действий пользователя. Это необходимо для легкого использования программы.
Пользовательский интерфейс должен быть построен на основе меню и панели инструментов. Необходимо изучить приемы программирования меню, выбрать подходящий вид меню. Это необходимо для создания интуитивно понятного интерфейса.
Наличие заставки. Заставка-приветствие должна сообщать пользователю необходимую и достаточную информацию о программе, имя разработчика, тему курсовой работы.
2.1 Определение необходимых модулей программы
Разработанная программа состоит из двух модулей:
Рисунок 1 - структура модулей программы
Библиотека Barfic.lib необходима для реализации консольных псевдографических приложений, данная библиотека предоставлялась для выполнения данной курсовой работы и не модифицировалась. Библиотека предоставляет богатый набор функций и позволяет: управлять положением курсора, выводить символы, инициализировать консоль, рисовать диалоговые окна, получать события от клавиатуры и мыши.
Приложение schedule.exe является основным модулем данной курсовой работы. Приложение использует функции из библиотеки Barfic.lib. Тем самым удовлетворяет требование модульности данной курсовой работы. Управление приложением осуществляется с помощью клавиатуры и мыши. При запуске приложения выводится заставка, затем, программа готова к работе. Программа предназначена для работы базой данных (дней недели и занятий), базы данных находится в соответствующем файле, открытие и сохранение файлов выполняются средствами данной программы. Программа дает возможность просматривать содержимое файлов (баз данных), добавлять новые записи, искать, удалять и редактировать существующие записи. Допускается одновременная работа двух приложений с одними и теми же базами данных. Данные из БД отображаются в программе в виде таблицы. Навигация по БД реализована через переход между днями недели и установкой курсора на определенном занятии.
2.2 Определение структуры файла базы данных
Для работы с рапсписаниями был разработан класс:
class Shedule {//класс работы с расписанием
Shedule(BOOL N,wchar_t* Name );//для имеющегося расписания
void Output(unsigned int cursor,int num);//текст расписания выводит
void Save();//сохранение полученного расписания в файл
para* Seach(int* num);//поиск дня недели
void Edit(int num,int idPos);//изменить/подробнее
void Сheck();//проверка на корректность и вывод на экран типа ошибки
void zagruzka(para* ukaz, int i);//считывание одного дня учебы
Структура, хранящая информацию о расписании:
struct para {//структура информации о занятии
int NUM[6];//удобного удаления считанного расписания
Основные поля структур имеют текстовый формат. Для решения проблемы организации данных был выбран статический массив указателей.
Выбранная структура проста и соответствуют всем потребностям программы.
Количество дней занятий и количество занятий в день ограничено размерами массива. Структура информации о занятии динамична, что позволяет экономить память.
Ниже на рисунке 2 представлена схема данных.
Для написания данной программы будет использован язык программирования Си. Этот язык является распространённым языком программирования. При разработке языка Си был принят компромисс между низким уровнем языка ассемблера и высоким уровнем других языков. В языке Си предусмотрено много операций, непосредственно исполняемых большинством микропроцессоров; в то же время он дает программисту возможность выражать свои алгоритмы и данные наиболее подходящими средствами. Язык Си обеспечивает возможности структурирования данных. Он позволяет разрабатывать большие, но структурированные программы, предоставляя возможность отдельной разработки подпрограмм.
Целью создателей языка Си была разработка мобильного языка, который можно было бы использовать для разработки системного программного обеспечения. Программы, написанные на языке высокого уровня, мобильны, поскольку язык должен быть одним и тем же независимо от того, на каком компьютере и в какой операционной системе он используется. Дополнительное свойство языка Си, называемое условной компиляцией, позволяет программисту изолировать машинно-зависимые операторы и контролировать их компиляцию в другой среде. Это дополнительно повышает мобильность программного обеспечения, написанного на языке Си.
В качестве среды программирования был выбран программный продукт Visual Studio 2005.
Разработка программы началась с реализации набора функций, необходимых для работы с файлами баз данных. Для сохранения файлов были задействована функция Save(). Для чтения из файлов используется функции Read() и zagruzka(para* ukaz, int i). Добавление элементов и их редактирование осуществляется с помощью функции void Editing (int num,int idPos). Поиск выполняет функция Seach(int* num). Удаление расписания производится функцией Dell(word* ukaz). Для реализации псевдографического интерфейса была изучена библиотека Barfic.lib. Библиотека содержит все необходимые функции для инициализации консоли, отображения меню, вывода окон, ввода текстовой информации с клавиатуры, получения событий клавиатуры и мыши, перемещения курсора, рисование символов и линий.
Основная программа schedule.exe выполнятся функцией main. В функции main осуществляется переход к вспомогательным функциям, которые реализуют меню добавления, редактирования, поиска и другие. Был разработан алгоритм функции main. Блок-схема функции представлена на рисунке 3. Функция отвечает за инициализацию консоли, за вывод заставки-приветствия и за передачу управления в функции обработки меню. Цикл обработки событий главного окна обеспечивает активизацию меню и выход из него. После выхода из функции обработки меню функция обработки событий главного окна получает идентификатор выбранного пункта меню. В зависимости от идентификатора функция вызывает функцию обработки выбранного пункта меню.
Блок схема функции main() и функции обработки событий главного окна представлена на рисунке 3. Основной задачей данной функции является получения события от клавиатуры или мыши, если событие присутствует, то вызывается функция обработки этого события. Если события нет, то программа засыпает на 20 миллисекунд, после чего вновь получает событие от клавиатуры и мыши, и так пока не выберут пункт меню «Выход».
При запуске программы выводится экран заставка, следом главное меню. Навигация осуществляется посредством мыши. Алгоритм работы меню представлен на рисунке 4.
Рисунок 4 - Алгоритм обработки событий главного меню
Особый интерес для нас имеет меню расписание, алгоритм его работы представлен на последующих схемах.
Рисунок 5 - Алгоритм работы расписания
Основные действия разобраны на схемах ниже.
Рисунок 6 - Алгоритм перехода к определенному дню
Перевод к нижнему регистру осуществляется для того, чтобы пользователь вводил дни как ему удобно: все символы в нижнем или с заглавной буквы. После выполнения данной функции найденный день выводится на экран и вся работа происходит с ним.
Рисунок 7- Алгоритм изменения информации о паре
Ни один байт зря не используется, память выделяется именно на то количество символов, которое введено. Если после ввода поле оказалось пустым, ему присваивается значение «_». Буфер используется на 100 символов, его вполне достаточно для решения поставленной задачи.
Рисунок 8- Алгоритм очистки информации
Очищается информация только из программы и оперативной памяти, расписание, хранимое в файле, не трогается.
Рисунок 9- Алгоритм сохранения расписания
В ходе выполнения курсовой работы был разработан новый тип файлов, с которым может работать данная программа, в последующих версиях можно обеспечить запуск из командной строки.
В качестве среды разработки была выбрана программа Visual Studio 2010. Программа предоставляет все средства необходимые при разработке и отладке разрабатываемых модулей и программ. Для отладки использовались такие инструменты как точка останова, выполнение кода по шагам, анализ содержимого локальных и глобальных переменных, анализ содержимого памяти.
Тестирование проводилось в рабочем порядке, в процессе разработки, после завершения написания программы. В ходе тестирования было выявлено и исправлено множество проблем связанных с перерисовкой содержимого таблицы, с перерисовкой меню, с освобождением выделенной памяти и многое другое. Также были добавлены проверки связанные с недопустимостью обработки некоторых пунктов меню при определенных условиях.
5.1 Разработка приложения schedule.exe
Приложение Organizer.exe является основным модулем программы. Для реализации интерфейса с пользователем была задействована библиотека Barfic.lib. Используя функции из этой библиотеки, осуществляется вывод строк на экран, получение событий от клавиатуры и мыши, перемещение курсора мыши, закрашивание части рабочей области консоли. С помощью всех перечисленных возможностей этой библиотеки были реализованы меню и экран для работы со словарем. При запуске программы происходит вывод заставки - приветствия, далее мы попадаем в главное меню, где можно открыть нужный словарь или выйти из программы.
Главное меню состоит из четырех кнопок. Кнопки «Расписание» переводит нас в меню выбора словаря.
Кнопка «Выход» закрывает программу.
Недостает кнопки «Настройки», может в дальнейших версиях программы появится возможность настройки.
Кнопка «Выход» закрывает программу.
В меню словарей и в центре мы видим таблицу со словом и ниже управляющие кнопки, позволяющие добавить новый элемент, просмотреть/изменит/удалить выделенный, найти элемент в списке и вернуться назад в главное меню.
Для данной программы был разработан новый тип файлов с расширением sdh.
После имени дня недели идет информации о количестве занятий в этот день. Затем последовательно информация о занятиях, начиная с его номера, заканчивая преподавателем, ведущим данный предмет.
Программа schedule.exe предназначена для хранения информации о расписании. Программа имеет интуитивно понятный интерфейс.
Чтобы закрыть заставку, необходимо нажать клавишу «Enter» на клавиатуре. После происходит оповещение о предстоящих событиях, если что-то запланировано на сегодня. Для закрытия окна сообщения необходимо кликнуть левой кнопкой мыши по кнопке «OK» или нажать клавишу «Enter» на клавиатуре. Откроется главное меню.
Чтобы перейти к расписанию, нужно кликнуть левой кнопкой мышки по соответствующей кнопке в меню.
Для добавления занятия необходимо кликнуть по кнопке «Изменить».
В открывшемся диалоговом окне щелкните на синюю строку напротив ее названия для того, чтобы ввести информацию. После ввода информации нажмите кнопку «Enter» на клавиатуре. После заполнения Необходимой информации, для добавления контакта необходимо кликнуть по кнопке «Добавить». Программа добавит элемент в список.
Рисунок 6.3 - Добавление нового контакта
Для поиска нужного дня используйте кнопку «Перейти».
Для сохранения расписания необходимо кликнуть по кнопке «Сохранить». Далее будет предложено ввести строку поиска. После этого вы увидите искомый контакт или сообщение, что в списке его найти не удалось.
Для возвращения в предыдущее меню кликните по кнопке «Назад». Вам будет предложено сохранить измененную базу данных.
В меню событий работа происходит таким же образом.
При выполнении данной курсовой работы были получены навыки разработки многомодульных программ. Были освоены приемы создания псевдографического интерфейса, изучены функции работы с консолью, способы обработки событий от клавиатуры и мыши. Усвоены механизмы реализации меню. Изучены функции работы с файлом. Получены базовые навыки программирования на языке С и Ассемблер. Изучены основные возможности среды программирования Visual Studio 2005. Получены навыки отладки и тестирования программ.
В рамках выполнения курсовой работы была написана программа необходимая для ведения базы данных контактов и событий. Программа предоставляет небольшой, но достаточный список возможностей. Не требует большого количества системных ресурсов и обеспечивает быструю обработку базы данных.
Не удалось реализовать панель инструментов, т.к. псевдографический интерфейс накладывает ограничения на интерфейс программы.
В дальнейшем программу можно улучшить, добавив в интерфейс горячие клавиши на каждый пункт меню. Улучшить навигацию по базе данных путем добавления постраничного перемещения и сортировки. Добавить вывод сообщений об ошибках и подсказок при неверных действиях пользователя. Оптимизировать код для более быстрого выполнения операций чтения и записи базы данных.
1. Керниган Б. Ритчи Д. Язык программирования С. 1985 г.
3. К. Джамса. Учимся программировать на языке С++. 1997 г.
4. В. Г. Давыдов. Программирование и основы алгоритмизации. 2003 г.
bool Clic(INPUT_RECORD vRecord, //функция проверки на нажатие
void Table();//чтобы увеличить понятность кода, рисование таблицы вынесли
/////////////////////////////////////////////
/////////////////////////////////////////////
int Сreator();//функция информации о создлателее
int Raspisanie();//само долгожданное расписание
/////////////////////////////////////////////
///// все что относится к работе с расписанием
/////////////////////////////////////////////
struct para {//структура информации о паре
int NUM[6];//колличество пар в каждый день
class Shedule {//класс работы с расписанием
Shedule(BOOL N,wchar_t* Name );//для имеющегося расписания
void Output(unsigned int cursor,int num);//текст расписания выводит
void Save();//сохранение полученного расписания в файл
para* Seach(int* num);//поиск дня недели
void Edit(int num,int idPos);//изменить/подробнее
void Сheck();//проверка на корректность и вывод на экран типа ошибки
void zagruzka(para* ukaz, int i);//считывание одного дня учебы
case 3://выбрана кнопка информация о создателе
DrawWindow(ColorRed, ColorChlorine, 0, 0, 80, 25);
DrawSingleLineText(ColorBrightWhite, ColorRed, 50, 4, 20, 3, L"Главное меню", MiddleCenter);
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 10, 3, 20, 4, L"Расписание");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 20, 8, 20, 4, L"Помощь");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 30, 13, 20, 4, L"О создателе");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 40, 18, 20, 4, L"Выход");
else if(Clic(vRecord, 20, 8, 20, 4))
else if(Clic(vRecord, 30, 13, 20, 4))
else if(Clic(vRecord, 40, 18, 20, 4))
ColorYellow, ColorBlue, L"Точно желаете выйти?", TopLeft,
DrawWindow(ColorRed, ColorChlorine, 0, 0, 80, 25);
DrawSingleLineText(ColorBrightWhite, ColorRed, 50, 4, 20, 3, L"Главное меню", MiddleCenter);
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 10, 3, 20, 4, L"Расписание");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 20, 8, 20, 4, L"Помощь");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 30, 13, 20, 4, L"О создателе");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 40, 18, 20, 4, L"Выход");
DrawWindow(ColorRed, ColorChlorine, 0, 0, 80, 25);
DrawWindow(ColorChlorine,ColorBlack , 4, 2, 72, 5);
DrawSingleLineText(ColorBrightWhite, ColorBlack, 30, 4, 20, 1, L"Создатель", MiddleCenter);
DrawWindow(ColorChlorine, ColorBlack , 2, 8, 76, 13);
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 50, 22, 20, 2, L"Назад");
if(Clic(vRecord, 50, 22, 20, 2))//назад
DrawWindow(ColorRed, ColorChlorine, 0, 0, 80, 25);
DrawWindow(ColorChlorine,ColorBlack , 4, 2, 72, 5);
DrawSingleLineText(ColorBrightWhite, ColorBlack, 30, 4, 20, 1, L"Помощь", MiddleCenter);
DrawWindow(ColorChlorine, ColorBlack , 2, 8, 76, 13);
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 50, 22, 20, 2, L"Назад");
if(Clic(vRecord, 50, 22, 20, 2))//назад
DrawWindow(ColorRed, ColorChlorine, 0, 0, 80, 25);
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 10, 5, 25, 4, L"Новое расписание");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 10, 10, 25, 4, L"Имеющееся расписание");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 50, 22, 20, 2, L"Назад");
if(Clic(vRecord, 50, 22, 20, 2))//назад
else if(Clic(vRecord, 10, 5, 25, 4)){//новое
DrawWindow(ColorChlorine,ColorRed , 20, 5, 40, 15);
DrawSingleLineText(ColorBrightWhite, ColorRed, 21, 7, 38, 1, L"ВВЕДИТЕ ИМЯ ФАЙЛА С РАСПИСАНИЕМ", MiddleCenter);
DrawWindow(ColorRed, ColorBlue, 24, 10, 31, 3);
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 25, 17, 10, 2, L"ОК");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 40, 17, 15, 2, L"Отмена");
DialogTextBox( ColorBrightWhite, ColorBlue, 25, 11, 29, 1, buf, 100);
if(Clic(vRecord, 40, 17, 15, 2)){//назад
DrawWindow(ColorRed, ColorChlorine, 0, 0, 80, 25);
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 10, 5, 25, 4, L"Новое расписание");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 10, 10, 25, 4, L"Имеющееся расписание");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 50, 22, 20, 2, L"Назад");
else if(Clic(vRecord, 25, 17, 10, 2)){//ок
//////////////////////////////////////
////инициализация класса и запуск работы
/////////////////////////////////////
else if(Clic(vRecord, 10, 10, 25, 4)) {//открыть имеющееся
DrawWindow(ColorChlorine,ColorRed , 20, 5, 40, 15);
DrawSingleLineText(ColorBrightWhite, ColorRed, 21, 7, 38, 1, L"ВВЕДИТЕ ИМЯ НОВОГО ФАЙЛА С РАСПИСАНИЕМ", MiddleCenter);
DrawWindow(ColorRed, ColorBlue, 24, 10, 31, 3);
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 25, 17, 10, 2, L"ОК");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 40, 17, 15, 2, L"Отмена");
DialogTextBox( ColorBrightWhite, ColorBlue, 25, 11, 29, 1, buf, 100);
if(Clic(vRecord, 40, 17, 15, 2)){//назад
DrawWindow(ColorRed, ColorChlorine, 0, 0, 80, 25);
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 10, 5, 25, 4, L"Новое расписание");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 10, 10, 25, 4, L"Имеющееся расписание");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 50, 22, 20, 2, L"Назад");
else if(Clic(vRecord, 25, 17, 10, 2)){//ок
//////////////////////////////////////
////инициализация класса и запуск работы
/////////////////////////////////////
if (idButton1==1)//было выбрано "новое расписание"
if (idButton1==2)//было выбрано "имеющееся расписаниие"
Приложение А.4 - Файл «functions.cpp»
&& vRecord.Event.MouseEvent.dwMousePosition.X>=nX
&& vRecord.Event.MouseEvent.dwMousePosition.X<=(nX+nWidth)
&& vRecord.Event.MouseEvent.dwMousePosition.Y>=nY
&& vRecord.Event.MouseEvent.dwMousePosition.Y<=nY+nHeight
&& vRecord.Event.MouseEvent.dwButtonState==1)
Shedule::Shedule(BOOL N,wchar_t* Name ) {
memset(Grop,0,sizeof(grop));//все данные равны нулю
fName[len]='.';//дописывание разрешения
Shedule::~Shedule() {//деструктор, нужен при удалении класса
if (Grop->NUM[i]!=0)//если в этот день есть хотябы одна пара
if(Grop->raspicanie[i][j].okno==false) {//и эта пара не окно
delete[] Grop->raspicanie[i][j].name;//чистим память
delete[] Grop->raspicanie[i][j].room;
delete[] Grop->raspicanie[i][j].teacher;
delete[] Grop->raspicanie[i][j].time;
DrawWindow(ColorChlorine,ColorRed , 20, 5, 40, 15);
DrawSingleLineText(ColorBrightWhite, ColorRed, 21, 10, 38, 1, L"Ошибка открытия файла", MiddleCenter);
//////////////////////////////////////////
/////////////////////////////////////////
DrawWindow(ColorRed, ColorChlorine, 0, 0, 80, 25);
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 3, 22, 12, 2, L"Перейти");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 15, 22, 12, 2, L"Изменить");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 27, 22, 12, 2, L"Очистиь");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 39, 22, 12, 2, L"Удалить");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 51, 22, 12, 2, L"Сохранить");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 63, 22, 12, 2, L"назад");
////////////////////////////////////////////////////////
///////////////////////////////////////////////////////
if(Clic(vRecord, 3, 22, 10, 0)){//перейти
else if(Clic(vRecord, 15, 22, 10, 0)){//изменить
else if(Clic(vRecord, 27, 22, 10, 0)){//очистить
if(New==false) {//копипаст дескриптора+установка всех пар в "окна"
if(Grop->raspicanie[i][j].okno==false) {
delete[] Grop->raspicanie[i][j].name;
delete[] Grop->raspicanie[i][j].room;
delete[] Grop->raspicanie[i][j].teacher;
delete[] Grop->raspicanie[i][j].time;
DrawWindow(ColorChlorine,ColorRed , 20, 5, 40, 15);
DrawSingleLineText(ColorBrightWhite, ColorRed, 21, 10, 38, 1, L"Расписание чисто", MiddleCenter);
else if(Clic(vRecord, 39, 22, 10, 0)){//удалить
else if(Clic(vRecord, 51, 22, 10, 0)){//сохранить
DrawWindow(ColorChlorine,ColorRed , 20, 5, 40, 15);
DrawSingleLineText(ColorBrightWhite, ColorRed, 21, 10, 38, 1, L"Для начала добавьте хотябы одно занятие", MiddleCenter);
else if( vRecord.Event.KeyEvent.wVirtualKeyCode==VK_UP && vRecord.Event.KeyEvent.bKeyDown==1){
///реагирует только на процесс нажатия, а не на удержание или отпускание
else if( vRecord.Event.KeyEvent.wVirtualKeyCode==VK_DOWN && vRecord.Event.KeyEvent.bKeyDown==1){
else if(Clic(vRecord, 63, 22, 10, 0)){// назад
//в этой программе не учтено возможное баловство с файлом в блокноте
//в блокноте можно только смотреть файл НО НЕ РЕДАКТИРОВАТЬ!!!!!!!!!!!
////при считывании строки вконце ставится \n
///пока просто на место \n записываем 0
wchar_t str[200];//буффер, думаю название предмета столько строк не занимает)
while (ftell (desc) < filelength(fileno(desc))) {//пока не конец файла
if (!wcscmp(str,L"*Monday")){//сравнение считанной строки с зарезервированными словами
fscanf(desc,"%d",&Grop->NUM[0]);//колличество пар в этот день
zagruzka(Grop->raspicanie[0],Grop->NUM[0]);
else if (!wcscmp(str,L"*Tuesday")){
zagruzka(Grop->raspicanie[1],Grop->NUM[1]);
else if (!wcscmp(str,L"*Wednesday")){
zagruzka(Grop->raspicanie[2],Grop->NUM[2]);
else if (!wcscmp(str,L"*Thursday")){
zagruzka(Grop->raspicanie[3],Grop->NUM[3]);
zagruzka(Grop->raspicanie[4],Grop->NUM[4]);
else if (!wcscmp(str,L"*Saturday")){
zagruzka(Grop->raspicanie[5],Grop->NUM[5]);
else if (!wcscmp(str,L"*END"))//данный чанк значает конец файла
desc=fopen(fName,"w");//сохраняем в тот же файл, что и вводили при открытии/создании расписания
DrawWindow(ColorChlorine,ColorRed , 20, 5, 40, 15);
DrawSingleLineText(ColorBrightWhite, ColorRed, 21, 10, 38, 1, L"Ошибка cохранения файла файла", MiddleCenter);
fwprintf(desc,L"*BEGIN\n");//чанк начала
if (Grop->NUM[0]!=0) {//если есть пары в этот день
fwprintf(desc,L"%d\n",Grop->NUM[0]);//колличество пар
if(Grop->raspicanie[0][i].okno==false)//если не окно, зыписываем инфу
fwprintf(desc,L"%d\n%s\n%s\n%s\n%s\n",i,Grop->raspicanie[0][i].time,Grop->raspicanie[0][i].room,Grop->raspicanie[0][i].name,Grop->raspicanie[0][i].teacher);
if(Grop->raspicanie[1][i].okno==false)
fwprintf(desc,L"%d\n%s\n%s\n%s\n%s\n",i,Grop->raspicanie[1][i].time,Grop->raspicanie[1][i].room,Grop->raspicanie[1][i].name,Grop->raspicanie[1][i].teacher);
if(Grop->raspicanie[2][i].okno==false)
fwprintf(desc,L"%d\n%s\n%s\n%s\n%s\n",i,Grop->raspicanie[2][i].time,Grop->raspicanie[2][i].room,Grop->raspicanie[2][i].name,Grop->raspicanie[2][i].teacher);
fwprintf(desc,L"%d\n",Grop->NUM[3]);
if(Grop->raspicanie[3][i].okno==false)
fwprintf(desc,L"%d\n%s\n%s\n%s\n%s\n",i,Grop->raspicanie[3][i].time,Grop->raspicanie[3][i].room,Grop->raspicanie[3][i].name,Grop->raspicanie[3][i].teacher);
fwprintf(desc,L"%d\n",Grop->NUM[4]);
if(Grop->raspicanie[4][i].okno==false)
fwprintf(desc,L"%d\n%s\n%s\n%s\n%s\n",i,Grop->raspicanie[4][i].time,Grop->raspicanie[4][i].room,Grop->raspicanie[4][i].name,Grop->raspicanie[4][i].teacher);
fwprintf(desc,L"%d\n",Grop->NUM[5]);
if(Grop->raspicanie[5][i].okno==false)
fwprintf(desc,L"%d\n%s\n%s\n%s\n%s\n",i,Grop->raspicanie[5][i].time,Grop->raspicanie[5][i].room,Grop->raspicanie[5][i].name,Grop->raspicanie[5][i].teacher);
DrawWindow(ColorChlorine,ColorRed , 20, 5, 40, 15);
DrawSingleLineText(ColorBrightWhite, ColorRed, 21, 10, 38, 1, L"Сохранение успешно", MiddleCenter);
void Shedule::zagruzka(para* ukaz, int i) {//считывание одного дня
fwscanf(desc,L"%d",&num);//считываем номор пары
ukaz[num].okno=false;//автоматом она не окно
ukaz[num].time= new wchar_t [len+1];
//специально оно не сделано стандартным для каждой пары, в каждом заведении все по разному, включая перерывы
//нет проверки на равильность введения времени, так что вся ответственность на заполнителя)
ukaz[num].room=new wchar_t [len+1];//кабинет
ukaz[num].name=new wchar_t [len+1];//название предмета
ukaz[num].teacher=new wchar_t [len+1];//препод
para* Shedule::Seach(int* num){//поис дня недели
DrawWindow(ColorChlorine,ColorRed , 20, 5, 40, 15);
DrawSingleLineText(ColorBrightWhite, ColorRed, 21, 7, 38, 1, L"К какому дню недели перейти?", MiddleCenter);
DrawWindow(ColorRed, ColorBlue, 24, 10, 31, 3);
DrawB
Разработка программы "Расписание" курсовая работа. Программирование, компьютеры и кибернетика.
Мединский Курс Том 1 Контрольная Работа
Шпаргалки На Тему Экономическая Сущность Страхования
Реферат по теме Период преобразований системы государственного управления последнего пятнадцатилетия ХХ в.
Реферат по теме Маркетинговые коммуникации
Как Оформить Реферат По Информатике
Мини Сочинение Химические Реакции Которые Изменили Мир
Практическая Работа Сортировка И Поиск Данных
Учебное пособие: Кровеносная система
Стартовая Контрольная Работа По Геометрии 7
Реферат по теме Политическая модернизация в России: поиск альтернативы
Курсовая работа по теме Налогообложение прибыли обособленного подразделения
Реферат: Управленческий учет в системе менеджмента
Салауатты Өмір Салты Өмірді Ұзартады Эссе
Курсовая работа по теме Етичні проблеми функціонування зарубіжної преси
Контрольная работа по теме Культура личности и культура общества
Реферат по теме Мифы и реальность Санкт-Петербурга
Аварии и осложнении при бурении
Сочинение В Три Строчки Гроза
Контрольная Работа На Тему Антидемпинговые Меры. Соглашение По Антидемпинговым Мерам В Рамках Вто
Эссе По Английскому По Теме Технологии
Силинский парк как объект физико-географического исследования - География и экономическая география курсовая работа
Стили семейного воспитания детей - Педагогика контрольная работа
Понятие хищения и его признаки - Государство и право дипломная работа


Report Page