Разработка программы "Расписание"

 

Содержание


Введение

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

2. Выбор решения

2.1 Определение необходимых модулей программы

2.1 Определение структуры файла базы данных

3. Описание разработки программы

4. Отладка и тестирование

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

5.1 Разработка приложения Organizer.exe

5.2 Разработка меню

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

Заключение

Список используемых источников

Приложение А Листинг программы

Приложение А.1 - Файл «Kurs.h»

Приложение А.2 - Файл «Main.cpp»

Приложение А.3 - Файл «Graphics.cpp»

Приложение А.4 - Файл «Database.cpp»

Приложение В Результаты работы программы

Приложение B.1 - Информационная заставка

Приложение B.2 - Окно напоминания

Приложение B.3 - Меню событий

Приложение B.4 - Меню Подробнее/Изменить

Приложение B.5 - Результаты поиска


Введение


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

Цель оформления отчетов по курсовой работе - привить студентам навыки правильного оформления научно-технических отчетов, программной и технической документации в соответствии со стандартами.

Любая программа, выполняемая на ЭВМ, обрабатывает данные с целью получения требуемого результата. В современных языках программирования (Pascal,C) имеются базовые типы данных и средств построения структурных типов данных из базовых; они облегчают составление программ для решения сложных задач, однако не избавляют программиста от проблем разработки алгоритмов и выбора подходящей структуры данных. При разработке алгоритма выбирается некоторая удобная абстрактная структура данных и алгоритм разрабатывается в терминах операций над этим абстрактным типом данных. После разработки алгоритма выбирается представление абстрактной структуры данных с помощью структуры данных языка программирования (отображение на массив, на файлы). Если задача позволяет, целесообразнее использовать более простые структуры данных. К таким традиционным структурам данных, допускающих простое и эффективное представление на ЭВМ, относятся массивы, строки, записи, таблицы, файлы. Очень часто язык содержит лишь некоторые из перечисленных структур, а остальные приходится представлять с помощью имеющихся.

Псевдографика, псевдографические символы - совокупность символов <#"220" src="doc_zip1.jpg" />

Рисунок 1 - структура модулей программы


Библиотека Barfic.lib необходима для реализации консольных псевдографических приложений, данная библиотека предоставлялась для выполнения данной курсовой работы и не модифицировалась. Библиотека предоставляет богатый набор функций и позволяет: управлять положением курсора, выводить символы, инициализировать консоль, рисовать диалоговые окна, получать события от клавиатуры и мыши.

Приложение schedule.exe является основным модулем данной курсовой работы. Приложение использует функции из библиотеки Barfic.lib. Тем самым удовлетворяет требование модульности данной курсовой работы. Управление приложением осуществляется с помощью клавиатуры и мыши. При запуске приложения выводится заставка, затем, программа готова к работе. Программа предназначена для работы базой данных (дней недели и занятий), базы данных находится в соответствующем файле, открытие и сохранение файлов выполняются средствами данной программы. Программа дает возможность просматривать содержимое файлов (баз данных), добавлять новые записи, искать, удалять и редактировать существующие записи. Допускается одновременная работа двух приложений с одними и теми же базами данных. Данные из БД отображаются в программе в виде таблицы. Навигация по БД реализована через переход между днями недели и установкой курсора на определенном занятии.


2.2 Определение структуры файла базы данных


Для работы с рапсписаниями был разработан класс:Shedule {//класс работы с расписанием:(BOOL N,wchar_t* Name );//для имеющегося расписанияprint();//вывод на экран* Grop;//само расписание

~Shedule();

private:* desc;New;//новый ли файл

BOOL Error;//информация об ошибке* fName; //имя файла

void Output(unsigned int cursor,int num);//текст расписания выводит

void Save();//сохранение полученного расписания в файлDell();//удаление записи* Seach(int* num);//поиск дня неделиRead();//чтение из файлаEdit(int num,int idPos);//изменить/подробнееСheck();//проверка на корректность и вывод на экран типа ошибкиzagruzka(para* ukaz, int i);//считывание одного дня учебы

};

Структура, хранящая информацию о расписании:para {//структура информации о занятии_t* time;//время_t* name;//имя предмета_t* teacher;//преподаватель_t* room;//кабинетokno;//свободна ли пара

};grop {//расписание группы

//каждый день не больше 7ти пар

//воскресенье выходнойraspicanie[6][7];NUM[6];//удобного удаления считанного расписания

};

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

Выбранная структура проста и соответствуют всем потребностям программы.

Количество дней занятий и количество занятий в день ограничено размерами массива. Структура информации о занятии динамична, что позволяет экономить память.

Ниже на рисунке 2 представлена схема данных.

Рисунок 2 - Схема данных.


3. Описание разработки программы


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

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

В качестве среды программирования был выбран программный продукт 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 миллисекунд, после чего вновь получает событие от клавиатуры и мыши, и так пока не выберут пункт меню «Выход».

Рисунок 3 - Схема программы.


При запуске программы выводится экран заставка, следом главное меню. Навигация осуществляется посредством мыши. Алгоритм работы меню представлен на рисунке 4.

Рисунок 4 - Алгоритм обработки событий главного меню


Особый интерес для нас имеет меню расписание, алгоритм его работы представлен на последующих схемах.

Рисунок 5 - Алгоритм работы расписания

программа база данный приложение

Основные действия разобраны на схемах ниже.

Рисунок 6 - Алгоритм перехода к определенному дню


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

Рисунок 7- Алгоритм изменения информации о паре


Ни один байт зря не используется, память выделяется именно на то количество символов, которое введено. Если после ввода поле оказалось пустым, ему присваивается значение «_». Буфер используется на 100 символов, его вполне достаточно для решения поставленной задачи.

Рисунок 8- Алгоритм очистки информации


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

Рисунок 9- Алгоритм сохранения расписания


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


4. Отладка и тестирование


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

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


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


5.1 Разработка приложения schedule.exe


Приложение Organizer.exe является основным модулем программы. Для реализации интерфейса с пользователем была задействована библиотека Barfic.lib. Используя функции из этой библиотеки, осуществляется вывод строк на экран, получение событий от клавиатуры и мыши, перемещение курсора мыши, закрашивание части рабочей области консоли. С помощью всех перечисленных возможностей этой библиотеки были реализованы меню и экран для работы со словарем. При запуске программы происходит вывод заставки - приветствия, далее мы попадаем в главное меню, где можно открыть нужный словарь или выйти из программы.


.2 Разработка меню


Главное меню состоит из четырех кнопок. Кнопки «Расписание» переводит нас в меню выбора словаря.

Кнопка «Выход» закрывает программу.

Недостает кнопки «Настройки», может в дальнейших версиях программы появится возможность настройки.

Кнопка «Помощь» выводит подсказки.

Кнопка «Выход» закрывает программу.

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

5.3 Структура файла словаря


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

Его структура:

*BEGIN //начало расписания

*Monday //понедельник

*Tuesday //вторник

*Wednesday //среда

*Thursday //четверг

*Friday //пятница

*Saturday //суббота

*END //конец словаря

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


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


Программа schedule.exe предназначена для хранения информации о расписании. Программа имеет интуитивно понятный интерфейс.

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


Рисунок 6.1 - Главное меню


Чтобы перейти к расписанию, нужно кликнуть левой кнопкой мышки по соответствующей кнопке в меню.


Рисунок 6.1 - Меню «словарь»

Для добавления занятия необходимо кликнуть по кнопке «Изменить».

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


Рисунок 6.3 - Добавление нового контакта


Для поиска нужного дня используйте кнопку «Перейти».

Для сохранения расписания необходимо кликнуть по кнопке «Сохранить». Далее будет предложено ввести строку поиска. После этого вы увидите искомый контакт или сообщение, что в списке его найти не удалось.

Для возвращения в предыдущее меню кликните по кнопке «Назад». Вам будет предложено сохранить измененную базу данных.

В меню событий работа происходит таким же образом.


Заключение


При выполнении данной курсовой работы были получены навыки разработки многомодульных программ. Были освоены приемы создания псевдографического интерфейса, изучены функции работы с консолью, способы обработки событий от клавиатуры и мыши. Усвоены механизмы реализации меню. Изучены функции работы с файлом. Получены базовые навыки программирования на языке С и Ассемблер. Изучены основные возможности среды программирования Visual Studio 2005. Получены навыки отладки и тестирования программ.

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

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

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


Список используемых источников


1. Керниган Б. Ритчи Д. Язык программирования С. 1985 г.

. MSDN.

. К. Джамса. Учимся программировать на языке С++. 1997 г.

. В. Г. Давыдов. Программирование и основы алгоритмизации. 2003 г.



Приложение А


Листинг программы

Приложение А.1 - Файл «header.h»

#include <windows.h>

#include <conio.h>

#include <wchar.h>

#include <locale>

#include <io.h>Clic(INPUT_RECORD vRecord, //функция проверки на нажатие unsigned nX,unsigned nY,unsigned nWidth,unsigned nHeight);

void Table();//чтобы увеличить понятность кода, рисование таблицы вынесли

/////////////////////////////////////////////

///// функции меню

////

/////////////////////////////////////////////Menu();//функция работы менюСreator();//функция информации о создлателееHelp();//вывод окна помощиSplash();//заставкаRaspisanie();//само долгожданное расписание

/////////////////////////////////////////////

///// все что относится к работе с расписанием

////

/////////////////////////////////////////////para {//структура информации о паре_t* time;//время_t* name;//имя предмета_t* teacher;//преподаватель_t* room;//кабинетokno;//свободна ли пара

};grop {//расписание группы

//каждый день не больше 7ти пар

//воскресенье выходнойraspicanie[6][7];NUM[6];//колличество пар в каждый день

//да и вывода тоже

};Shedule {//класс работы с расписанием:(BOOL N,wchar_t* Name );//для имеющегося расписанияprint();//вывод на экран* Grop;//само расписание

~Shedule();

private:* desc;New;//новый ли файл

BOOL Error;//информация об ошибке* fName; //имя файла

void Output(unsigned int cursor,int num);//текст расписания выводит

void Save();//сохранение полученного расписания в файлDell();//удаление расписания* Seach(int* num);//поиск дня неделиRead();//чтение из файлаEdit(int num,int idPos);//изменить/подробнееСheck();//проверка на корректность и вывод на экран типа ошибкиzagruzka(para* ukaz, int i);//считывание одного дня учебы

};


Приложение А.2 - Файл «Main.cpp»

#define _CRT_NONSTDC_NO_WARNINGS


#include <windows.h>

#include <conio.h>

#include <locale>

#include "Barfic.h"

#include "header.h"main()

{(LC_ALL,"russian");

int idButton=0;fResult;

// Инициализация работы с консолью

fResult = ConsoleInitialize();(fResult == FALSE)

{;

}

// Скрытие курсора= SetCursorVisible(FALSE);(fResult == FALSE)

{;

}();//заставка(idButton!=4) {=Menu();(idButton){1://выбрана кнопка расписание=Raspisanie();;2://выбрана кнопка помощь=Help();;

case 3://выбрана кнопка информация о создателе=Сreator();;

}

}

}


Приложение А.3 - Файл «menu.cpp»


#include "Barfic.h"

#include "header.h"Menu(){_INFO vPoint;eId;_RECORD vRecord;

int idButton=0;

// Рисование окна с рамкой

DrawWindow(ColorRed, ColorChlorine, 0, 0, 80, 25);(ColorBrightWhite, ColorRed, 50, 4, 20, 3, L"Главное меню", MiddleCenter);(ColorBrightWhite, ColorGreen, ColorBlue, 10, 3, 20, 4, L"Расписание");(ColorBrightWhite, ColorGreen, ColorBlue, 20, 8, 20, 4, L"Помощь");(ColorBrightWhite, ColorGreen, ColorBlue, 30, 13, 20, 4, L"О создателе");(ColorBrightWhite, ColorGreen, ColorBlue, 40, 18, 20, 4, L"Выход");(idButton==0) {(InputRecordRead(vRecord))

{

// проверка нажатия на кнопку(Clic(vRecord, 10, 3, 20, 4))

idButton=1;if(Clic(vRecord, 20, 8, 20, 4))=2;if(Clic(vRecord, 30, 13, 20, 4))=3;if(Clic(vRecord, 40, 18, 20, 4))

{=(, ColorGrey,

, 10, 40, 8,, ColorBlue, L"Точно желаете выйти?", TopLeft,);(eId==MessageBoxIdYes)=4;{(ColorRed, ColorChlorine, 0, 0, 80, 25);(ColorBrightWhite, ColorRed, 50, 4, 20, 3, L"Главное меню", MiddleCenter);(ColorBrightWhite, ColorGreen, ColorBlue, 10, 3, 20, 4, L"Расписание");(ColorBrightWhite, ColorGreen, ColorBlue, 20, 8, 20, 4, L"Помощь");(ColorBrightWhite, ColorGreen, ColorBlue, 30, 13, 20, 4, L"О создателе");(ColorBrightWhite, ColorGreen, ColorBlue, 40, 18, 20, 4, L"Выход");

}

}

}(20);

}idButton;

}Сreator() {* q;i=0;s[80];int idButton=9;_RECORD vRecord;(ColorRed, ColorChlorine, 0, 0, 80, 25);(ColorChlorine,ColorBlack , 4, 2, 72, 5);(ColorBrightWhite, ColorBlack, 30, 4, 20, 1, L"Создатель", MiddleCenter);(ColorChlorine, ColorBlack , 2, 8, 76, 13);(ColorBrightWhite, ColorGreen, ColorBlue, 50, 22, 20, 2, L"Назад");=fopen("Creator.txt","r");(q) {(fgets(s,80,q)&&i<11) {(5,9+i);("%s",s);++;

}


}

(idButton!=0) {(InputRecordRead(vRecord))

{

// проверка нажатия на кнопку(Clic(vRecord, 50, 22, 20, 2))//назад

idButton=0;

}

}(q) {(q);

}1;

}Help() {* q;i=0;s[80];int idButton=9;_RECORD vRecord;(ColorRed, ColorChlorine, 0, 0, 80, 25);(ColorChlorine,ColorBlack , 4, 2, 72, 5);(ColorBrightWhite, ColorBlack, 30, 4, 20, 1, L"Помощь", MiddleCenter);(ColorChlorine, ColorBlack , 2, 8, 76, 13);(ColorBrightWhite, ColorGreen, ColorBlue, 50, 22, 20, 2, L"Назад");=fopen("ReadMe.txt","r");(q) {(fgets(s,80,q)&&i<11) {(5,9+i);("%s",s);++;

}


}

(idButton!=0) {(InputRecordRead(vRecord))

{

// проверка нажатия на кнопку(Clic(vRecord, 50, 22, 20, 2))//назад

idButton=0;

}

}(q) {(q);

}1;

}Raspisanie() {* p;idButton=0;idButton1=0;_t buf[100];_RECORD vRecord;(ColorRed, ColorChlorine, 0, 0, 80, 25);(ColorBrightWhite, ColorGreen, ColorBlue, 10, 5, 25, 4, L"Новое расписание");(ColorBrightWhite, ColorGreen, ColorBlue, 10, 10, 25, 4, L"Имеющееся расписание");(ColorBrightWhite, ColorGreen, ColorBlue, 50, 22, 20, 2, L"Назад");(idButton==0) {=0;(InputRecordRead(vRecord))

{

// проверка нажатия на кнопку(Clic(vRecord, 50, 22, 20, 2))//назад

idButton=1;if(Clic(vRecord, 10, 5, 25, 4)){//новое(ColorChlorine,ColorRed , 20, 5, 40, 15);(ColorBrightWhite, ColorRed, 21, 7, 38, 1, L"ВВЕДИТЕ ИМЯ ФАЙЛА С РАСПИСАНИЕМ", MiddleCenter);(ColorRed, ColorBlue, 24, 10, 31, 3);(ColorBrightWhite, ColorGreen, ColorBlue, 25, 17, 10, 2, L"ОК");(ColorBrightWhite, ColorGreen, ColorBlue, 40, 17, 15, 2, L"Отмена");( ColorBrightWhite, ColorBlue, 25, 11, 29, 1, buf, 100);(idButton1==0) {(InputRecordRead(vRecord))

{(Clic(vRecord, 40, 17, 15, 2)){//назад=1;(ColorRed, ColorChlorine, 0, 0, 80, 25);(ColorBrightWhite, ColorGreen, ColorBlue, 10, 5, 25, 4, L"Новое расписание");(ColorBrightWhite, ColorGreen, ColorBlue, 10, 10, 25, 4, L"Имеющееся расписание");(ColorBrightWhite, ColorGreen, ColorBlue, 50, 22, 20, 2, L"Назад");

}if(Clic(vRecord, 25, 17, 10, 2)){//ок

//////////////////////////////////////

////инициализация класса и запуск работы

/////////////////////////////////////=1;=1;

}

}

}

}if(Clic(vRecord, 10, 10, 25, 4)) {//открыть имеющееся

DrawWindow(ColorChlorine,ColorRed , 20, 5, 40, 15);(ColorBrightWhite, ColorRed, 21, 7, 38, 1, L"ВВЕДИТЕ ИМЯ НОВОГО ФАЙЛА С РАСПИСАНИЕМ", MiddleCenter);(ColorRed, ColorBlue, 24, 10, 31, 3);(ColorBrightWhite, ColorGreen, ColorBlue, 25, 17, 10, 2, L"ОК");(ColorBrightWhite, ColorGreen, ColorBlue, 40, 17, 15, 2, L"Отмена");( ColorBrightWhite, ColorBlue, 25, 11, 29, 1, buf, 100);(idButton1==0) {(InputRecordRead(vRecord))

{(Clic(vRecord, 40, 17, 15, 2)){//назад=1;(ColorRed, ColorChlorine, 0, 0, 80, 25);(ColorBrightWhite, ColorGreen, ColorBlue, 10, 5, 25, 4, L"Новое расписание");(ColorBrightWhite, ColorGreen, ColorBlue, 10, 10, 25, 4, L"Имеющееся расписание");(ColorBrightWhite, ColorGreen, ColorBlue, 50, 22, 20, 2, L"Назад");

}if(Clic(vRecord, 25, 17, 10, 2)){//ок

//////////////////////////////////////

////инициализация класса и запуск работы

/////////////////////////////////////=2;=2;

}

}

}

}

}(20);

}(idButton1==1)//было выбрано "новое расписание"

p= new Shedule(true,buf);

if (idButton1==2)//было выбрано "имеющееся расписаниие"

p= new Shedule(false,buf);>print();//запуск словаряp;1;

}


Приложение А.4 - Файл «functions.cpp»

#include "Barfic.h"

#include "header.h"

Clic(INPUT_RECORD vRecord, unsigned nX,unsigned nY,unsigned nWidth,unsigned nHeight)

{(vRecord.EventType==MOUSE_EVENT

&& 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)1;0;

}::Shedule(BOOL N,wchar_t* Name ) {=N;i,j;* str;len=wcslen(Name);= new char[len+4];* s=fName;

= new grop;

memset(Grop,0,sizeof(grop));//все данные равны нулю

for (i=0;i<6;i++)(j=0;j<7;j++)>raspicanie[i][j].okno=true;

/////конвертирование(*Name) {(s,*Name);

++Name;

++s;

}[len]='.';//дописывание разрешения

fName[len+1]='s';[len+2]='d';[len+3]='h';[len+4]=0;(New) {=fopen(fName,"w");(desc==NULL)=true;=false;

}{=fopen(fName,"r");(desc==NULL)=true;{=false;();///чтение из файла

fclose(desc);

}

}

}::~Shedule() {//деструктор, нужен при удалении классаi; //для освобождения памятиj;(i=0;i<6;i++)(Grop->NUM[i]!=0)//если в этот день есть хотябы одна пара

for (j=0;j<7;j++)(Grop->raspicanie[i][j].okno==false) {//и эта пара не окно[] Grop->raspicanie[i][j].name;//чистим память[] Grop->raspicanie[i][j].room;[] Grop->raspicanie[i][j].teacher;[] Grop->raspicanie[i][j].time;

}

}Shedule::print() {num=0;//номер дняidButton=0;idButton1=0;idPos=0;//номер курсора_RECORD vRecord;pos=0;_t buf[100];(Error){(ColorChlorine,ColorRed , 20, 5, 40, 15);(ColorBrightWhite, ColorRed, 21, 10, 38, 1, L"Ошибка открытия файла", MiddleCenter);(2000);0;

}

//////////////////////////////////////////

////разхметка страницы

/////////////////////////////////////////(idButton==0) {(idButton1!=7) {(ColorRed, ColorChlorine, 0, 0, 80, 25);(ColorBrightWhite, ColorGreen, ColorBlue, 3, 22, 12, 2, L"Перейти");(ColorBrightWhite, ColorGreen, ColorBlue, 15, 22, 12, 2, L"Изменить");(ColorBrightWhite, ColorGreen, ColorBlue, 27, 22, 12, 2, L"Очистиь");(ColorBrightWhite, ColorGreen, ColorBlue, 39, 22, 12, 2, L"Удалить");(ColorBrightWhite, ColorGreen, ColorBlue, 51, 22, 12, 2, L"Сохранить");(ColorBrightWhite, ColorGreen, ColorBlue, 63, 22, 12, 2, L"назад");

}=0;(); (idPos, num);

////////////////////////////////////////////////////////

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

///////////////////////////////////////////////////////(idButton1==0) {=0;(InputRecordRead(vRecord))

{

// проверка нажатия на кнопку

if(Clic(vRecord, 3, 22, 10, 0)){//перейти=1;(!New)(&num);

}if(Clic(vRecord, 15, 22, 10, 0)){//изменить(num,idPos);=false;=2;

}if(Clic(vRecord, 27, 22, 10, 0)){//очистить

if(New==false) {//копипаст дескриптора+установка всех пар в "окна"

for (int i=0;i<6;i++)(Grop->NUM[i]!=0) {(int j=0;j<7;j++)(Grop->raspicanie[i][j].okno==false) {[] Grop->raspicanie[i][j].name;[] Grop->raspicanie[i][j].room;[] Grop->raspicanie[i][j].teacher;[] Grop->raspicanie[i][j].time;>raspicanie[i][j].okno=true;

}>NUM[i]=0;

}=true;

}(ColorChlorine,ColorRed , 20, 5, 40, 15);(ColorBrightWhite, ColorRed, 21, 10, 38, 1, L"Расписание чисто", MiddleCenter);(2000);=2;

}if(Clic(vRecord, 39, 22, 10, 0)){//удалить();=4;

}if(Clic(vRecord, 51, 22, 10, 0)){//сохранить=1;(!New)();{(ColorChlorine,ColorRed , 20, 5, 40, 15);(ColorBrightWhite, ColorRed, 21, 10, 38, 1, L"Для начала добавьте хотябы одно занятие", MiddleCenter);(2000);

}

}///управление курсоромif( vRecord.Event.KeyEvent.wVirtualKeyCode==VK_UP && vRecord.Event.KeyEvent.bKeyDown==1){

///реагирует только на процесс нажатия, а не на удержание или отпускание(idPos!=0)-;=7;

}if( vRecord.Event.KeyEvent.wVirtualKeyCode==VK_DOWN && vRecord.Event.KeyEvent.bKeyDown==1){

if(idPos!=6)++;=7;

}if(Clic(vRecord, 63, 22, 10, 0)){// назад=1;=1;

}

}(20);

}

}1;

}Shedule::Read(){

//в этой программе не учтено возможное баловство с файлом в блокноте

//в блокноте можно только смотреть файл НО НЕ РЕДАКТИРОВАТЬ!!!!!!!!!!!

/////////////////////////

////при считывании строки вконце ставится \n

///это проблема......

///пока просто на место \n записываем 0

//////////////////////_t str[200];//буффер, думаю название предмета столько строк не занимает)

int len;//длинна строкиscht;(ftell (desc) < filelength(fileno(desc))) {//пока не конец файла(str,200,desc);=wcslen(str);

str[len-1]=0;(!wcscmp(str,L"*Monday")){//сравнение считанной строки с зарезервированными словами(desc,"%d",&Grop->NUM[0]);//колличество пар в этот день

zagruzka(Grop->raspicanie[0],Grop->NUM[0]);

}if (!wcscmp(str,L"*Tuesday")){(desc,"%d",&Grop->NUM[1]);(Grop->raspicanie[1],Grop->NUM[1]);


}if (!wcscmp(str,L"*Wednesday")){(desc,"%d",&Grop->NUM[2]);(Grop->raspicanie[2],Grop->NUM[2]);

}if (!wcscmp(str,L"*Thursday")){(desc,"%d",&Grop->NUM[3]);(Grop->raspicanie[3],Grop->NUM[3]);


}if (!wcscmp(str,L"*Friday")){(desc,"%d",&Grop->NUM[4]);(Grop->raspicanie[4],Grop->NUM[4]);


}if (!wcscmp(str,L"*Saturday")){(desc,"%d",&Grop->NUM[5]);(Grop->raspicanie[5],Grop->NUM[5]);


}if (!wcscmp(str,L"*END"))//данный чанк значает конец файла

break;

};

}Shedule::Save()

{=fopen(fName,"w");//сохраняем в тот же файл, что и вводили при открытии/создании расписания

if (desc==NULL) {(ColorChlorine,ColorRed , 20, 5, 40, 15);(ColorBrightWhite, ColorRed, 21, 10, 38, 1, L"Ошибка cохранения файла файла", MiddleCenter);(2000);;

}{(desc,L"*BEGIN\n");//чанк начала

int i;(Grop->NUM[0]!=0) {//если есть пары в этот день

fwprintf(desc,L"*Monday\n");//день(desc,L"%d\n",Grop->NUM[0]);//колличество пар(i=0;i<6;i++)(Grop->raspicanie[0][i].okno==false)//если не окно, зыписываем инфу(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);

}(Grop->NUM[1]!=0) {(desc,L"*Tuesday\n");(desc,L"%d\n",6);(i=0;i<6;i++)(Grop->raspicanie[1][i].okno==false)(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);

}(Grop->NUM[2]!=0) {(desc,L"*Wednesday\n");(desc,L"%d\n",6);(i=0;i<6;i++)(Grop->raspicanie[2][i].okno==false)(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);

}(Grop->NUM[3]!=0) {(desc,L"*Thursday\n");(desc,L"%d\n",Grop->NUM[3]);(i=0;i<6;i++)(Grop->raspicanie[3][i].okno==false)(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);


}(Grop->NUM[4]!=0) {(desc,L"*Friday\n");(desc,L"%d\n",Grop->NUM[4]);(i=0;i<6;i++)(Grop->raspicanie[4][i].okno==false)(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);

}(Grop->NUM[5]!=0) {(desc,L"*Saturday\n");(desc,L"%d\n",Grop->NUM[5]);(i=0;i<6;i++)(Grop->raspicanie[5][i].okno==false)(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);

}(desc,L"*END\n");(desc);(ColorChlorine,ColorRed , 20, 5, 40, 15);(ColorBrightWhite, ColorRed, 21, 10, 38, 1, L"Сохранение успешно", MiddleCenter);(2000);

}

}Shedule::zagruzka(para* ukaz, int i) {//считывание одного дняlen;j;num;_t str[200];(j=0;j<i;j++) {

fwscanf(desc,L"%d",&num);//считываем номор пары[num].okno=false;//автоматом она не окно

fwscanf(desc,L"%s",&str);

////для экономии памяти=wcslen(str);

ukaz[num].time= new wchar_t [len+1];(ukaz[num].time,str);//время

//специально оно не сделано стандартным для каждой пары, в каждом заведении все по разному, включая перерывы

//и школы могут пользоваться

//нет проверки на равильность введения времени, так что вся ответственность на заполнителя)

fwscanf(desc,L"%s",&str);=wcslen(str);[num].room=new wchar_t [len+1];//кабинет(ukaz[num].room,str);(desc,L"%s",&str);=wcslen(str);[num].name=new wchar_t [len+1];//название предмета(ukaz[num].name,str);

(desc,L"%s",&str);=wcslen(str);[num].teacher=new wchar_t [len+1];//препод(ukaz[num].teacher,str);

}

}* Shedule::Seach(int* num){//поис дня неделиi;idButton=0;idButton1=0;_t buf[100];_RECORD vRecord;(ColorChlorine,ColorRed , 20, 5, 40, 15);(ColorBrightWhite, ColorRed, 21, 7, 38, 1, L"К какому дню недели перейти?", MiddleCenter);(ColorRed, ColorBlue, 24, 10, 31, 3);(ColorBrightWhite, ColorGreen, ColorBlue, 35, 17, 10, 2, L"ОК");( ColorBrightWhite, ColorBlue, 25, 11, 29, 1, buf, 100);= wcslen(buf);//перевод к нижмему регистру(i--)[i] = towlower(buf[i]);(idButton1==0) {(InputRecordRead(vRecord))

{(Clic(vRecord, 35, 17, 10, 2)){//ок(!wcscmp(buf,L"понедельник")){//сравнение считанной строки с именами дней делелии

*num=0;Grop->raspicanie[0];//возвращаем день недели

}if (!wcscmp(buf,L"вторник")){//без учета регистра

*num=1;Grop->raspicanie[1];

}if (!wcscmp(buf,L"среда")){

*num=2;Grop->raspicanie[2];

}if (!wcscmp(buf,L"четверг")){

*num=3;Grop->raspicanie[3];

}if (!wcscmp(buf,L"пятница")){

*num=4;Grop->raspicanie[4];

}if (!wcscmp(buf,L"суббота")){

*num=5;Grop->raspicanie[5];

}{(ColorChlorine,ColorRed , 20, 5, 40, 15);(ColorBrightWhite, ColorRed, 21, 7, 38, 1, L"Совпадений не найдено", MiddleCenter);(200);

*num=0;Grop->raspicanie[0];

}


}

}(20);

}

}Shedule::Edit(int num,int idPos){

bool clr[4];//массив, указывпющий на наличия введенных данных в каждую графу

int i;_t buf[100];len;_RECORD vRecord;(ColorChlorine,ColorRed , 20, 3, 40, 20);(ColorBrightWhite, ColorRed, 22, 5, 18, 1, L"Время", BottomLeft);(ColorBrightWhite, ColorRed, 22, 9, 18, 1, L"Кабинет", BottomLeft);(ColorBrightWhite, ColorRed, 22, 13, 18, 1, L"Предмет", BottomLeft);(ColorBrightWhite, ColorRed, 22, 17, 18, 1, L"Преподаватель", BottomLeft);(Grop->raspicanie[num][idPos].okno==false) {(ColorBrightWhite, ColorBlue, 36, 4, 20, 3, Grop->raspicanie[num][idPos].time, MiddleLeft);(ColorBrightWhite, ColorBlue, 36, 8, 20, 3, Grop->raspicanie[num][idPos].room, MiddleLeft);(ColorBrightWhite, ColorBlue, 36, 12, 20, 3, Grop->raspicanie[num][idPos].name, MiddleLeft);(ColorBrightWhite, ColorBlue, 36, 16, 20, 3, Grop->raspicanie[num][idPos].teacher, MiddleLeft);(i=0;i<4;i++)[i]=false;

}{(ColorBrightWhite, ColorBlue, 36, 4, 20, 3, L"пусто", MiddleLeft);(ColorBrightWhite, ColorBlue, 36, 8, 20, 3, L"пусто", MiddleLeft);(ColorBrightWhite, ColorBlue, 36, 12, 20, 3,L"пусто", MiddleLeft);(ColorBrightWhite, ColorBlue, 36, 16, 20, 3, L"пусто", MiddleLeft);>raspicanie[num][idPos].okno=false;>NUM[num]++;(i=0;i<4;i++)[i]=true;

}(ColorBrightWhite, ColorGreen, ColorBlue, 45, 20, 13, 2, L"ОК");(1) {(InputRecordRead(vRecord))

{

(Clic(vRecord, 45, 20, 13, 2)){//ок;

}if (Clic(vRecord, 36, 4, 20, 3)){//время( ColorBrightWhite, ColorBlue, 36, 5, 20, 1, buf, 100);(clr[0]==false)[] Grop->raspicanie[num][idPos].time;//удаление рание имеющейся записи[0]=false;=wcslen(buf);(len!=0){>raspicanie[num][idPos].time= new wchar_t [len+1];(Grop->raspicanie[num][idPos].time,buf);

}else//если вы не ввели строку- записываем слово EMPTY

{>raspicanie[num][idPos].time= new wchar_t [6];(Grop->raspicanie[num][idPos].time,L"_");

}

}if(Clic(vRecord, 36, 8, 20, 3)){//комната( ColorBrightWhite, ColorBlue, 36, 9, 20, 1, buf, 100);(clr[1]==false)[] Grop->raspicanie[num][idPos].room;[1]=false;=wcslen(buf);(len!=0){>raspicanie[num][idPos].room= new wchar_t [len+1];(Grop->raspicanie[num][idPos].room,buf);

}else

{>raspicanie[num][idPos].room= new wchar_t [6];(Grop->raspicanie[num][idPos].room,L"_");

}

}if(Clic(vRecord, 36, 12, 20, 3)){//предмет( ColorBrightWhite, ColorBlue, 36, 13, 20, 1, buf, 100);(clr[2]==false)[] Grop->raspicanie[num][idPos].name;[2]=false;=wcslen(buf);(len!=0){>raspicanie[num][idPos].name= new wchar_t [len+1];(Grop->raspicanie[num][idPos].name,buf);

}else

{>raspicanie[num][idPos].name= new wchar_t [6];(Grop->raspicanie[num][idPos].name,L"_");

}

}if(Clic(vRecord, 36, 16, 20, 3)){//преподаватель( ColorBrightWhite, ColorBlue, 36, 17, 20, 1, buf, 100);(clr[3]==false)[] Grop->raspicanie[num][idPos].teacher;[3]=false;=wcslen(buf);(len!=0){>raspicanie[num][idPos].teacher= new wchar_t [len+1];(Grop->raspicanie[num][idPos].teacher,buf);

}else

{>raspicanie[num][idPos].teacher= new wchar_t [6];(Grop->raspicanie[num][idPos].teacher,L"_");

}

}

}(20);//чтобы не сжирать все мощности пк

}(clr[0]==true && clr[1]==true && clr[2]==true && clr[3]==true) {>raspicanie[num][idPos].okno=true;

} else {(clr[0]==true) {>raspicanie[num][idPos].time= new wchar_t [6];(Grop->raspicanie[num][idPos].time,L"_");

}(clr[1]==true) {>raspicanie[num][idPos].room= new wchar_t [6];(Grop->raspicanie[num][idPos].room,L"_");

}(clr[2]==true) {>raspicanie[num][idPos].name= new wchar_t [6];(Grop->raspicanie[num][idPos].name,L"_");

}(clr[3]==true) {>raspicanie[num][idPos].teacher= new wchar_t [6];(Grop->raspicanie[num][idPos].teacher,L"_");

}

}

}Shedule::Output(unsigned int cursor,int num){j;(ColorChlorine,ColorRed , 2, 2, 76, 3);

switch (num){//выбираем дельнедели0:

DrawSingleLineText(ColorBrightWhite, ColorRed, 3, 3, 74, 1,L"Понедельник" , MiddleCenter);;1:(ColorBrightWhite, ColorRed, 3, 3, 74, 1,L"Вторник" , MiddleCenter);;2:(ColorBrightWhite, ColorRed, 3, 3, 74, 1,L"Среда" , MiddleCenter);;3:(ColorBrightWhite, ColorRed, 3, 3, 74, 1,L"Четверг", MiddleCenter);;4:(ColorBrightWhite, ColorRed, 3, 3, 74, 1,L"Пятница" , MiddleCenter);;5:(ColorBrightWhite, ColorRed, 3, 3, 74, 1,L"Суббота" , MiddleCenter);

break;

}(j=0;j<7;j++)//для всех скми строк расписания(Grop->raspicanie[num][j].okno==false) {//если не окно- выводим инфу(j==cursor) {//если здесь стоит курсор- русуем на красном фоне

DrawSingleLineText(ColorBrightWhite, ColorRed, 4, 6+j*2, 9, 1,Grop->raspicanie[num][j].time , MiddleCenter);(ColorBrightWhite, ColorRed, 14, 6+j*2, 9, 1, Grop->raspicanie[num][j].room, MiddleCenter);(ColorBrightWhite, ColorRed, 24, 6+j*2, 29, 1, Grop->raspicanie[num][j].name, MiddleCenter);(ColorBrightWhite, ColorRed, 54, 6+j*2, 21, 1, Grop->raspicanie[num][j].teacher , MiddleCenter);

}{//на зеленом(ColorBrightWhite, ColorGreen, 4, 6+j*2, 9, 1,Grop->raspicanie[num][j].time , MiddleCenter);(ColorBrightWhite, ColorGreen, 14, 6+j*2, 9, 1, Grop->raspicanie[num][j].room, MiddleCenter);(ColorBrightWhite, ColorGreen, 24, 6+j*2, 29, 1, Grop->raspicanie[num][j].name, MiddleCenter);(ColorBrightWhite, ColorGreen, 54, 6+j*2, 21, 1, Grop->raspicanie[num][j].teacher , MiddleCenter);

}

} //если окно(j==cursor) {//если здесь стоит курсор- русуем красный фон

DrawSingleLineText(ColorBrightWhite, ColorRed, 4, 6+j*2, 9, 1,L" ", MiddleCenter);(ColorBrightWhite, ColorRed, 14, 6+j*2, 9, 1, L" ", MiddleCenter);(ColorBrightWhite, ColorRed, 24, 6+j*2, 29, 1,L" ", MiddleCenter);(ColorBrightWhite, ColorRed, 54, 6+j*2, 21, 1, L" " , MiddleCenter);

}{//если здесь не стоит курсор- русуем зеленый фон

DrawSingleLineText(ColorBrightWhite, ColorGreen, 4, 6+j*2, 9, 1,L" ", MiddleCenter);(ColorBrightWhite, ColorGreen, 14, 6+j*2, 9, 1, L" ", MiddleCenter);(ColorBrightWhite, ColorGreen, 24, 6+j*2, 29, 1, L" ", MiddleCenter);(ColorBrightWhite, ColorGreen, 54, 6+j*2, 21, 1, L" " , MiddleCenter);

}


}Table(){//чисто рисуем таблицу из псевдографики, ничего интересного

int i;_INFO vPoint;(&vPoint, L'\x2554', ColorBrightWhite, ColorGreen);(&vPoint, 3, 5);(&vPoint, L'\x255a', ColorBrightWhite, ColorGreen);(&vPoint, 3, 19);(&vPoint, L'\x2557', ColorBrightWhite, ColorGreen);(&vPoint, 75,5);(&vPoint, L'\x255d', ColorBrightWhite, ColorGreen);(&vPoint, 75,19);(&vPoint, L'\x2560', ColorBrightWhite, ColorGreen);(i=0;i<6;i++)(&vPoint, 3, 7+i*2);(&vPoint, L'\x2551', ColorBrightWhite, ColorGreen);(i=0;i<7;i++)(&vPoint, 3, 6+i*2);(i=0;i<7;i++)(&vPoint, 13, 6+i*2);(i=0;i<7;i++)(&vPoint, 23, 6+i*2);(i=0;i<7;i++)(&vPoint, 53, 6+i*2);(i=0;i<7;i++)(&vPoint, 75, 6+i*2);(&vPoint, L'\x2563', ColorBrightWhite, ColorGreen);(i=0;i<6;i++)(&vPoint, 75, 7+i*2);(&vPoint, L'\x2550', ColorBrightWhite, ColorGreen);(i=0;i<8;i++)(&vPoint, 4, 5+i*2,9);(i=0;i<8;i++)(&vPoint, 14, 5+i*2,9);(i=0;i<8;i++)(&vPoint, 24, 5+i*2,29);(i=0;i<8;i++)(&vPoint, 54, 5+i*2,21);(&vPoint, L'\x256c', ColorBrightWhite, ColorGreen);(i=0;i<6;i++)(&vPoint, 13, 7+i*2);(i=0;i<6;i++)(&vPoint, 23, 7+i*2);(i=0;i<6;i++)(&vPoint, 53, 7+i*2);(&vPoint, L'\x2556', ColorBrightWhite, ColorGreen);(&vPoint, 13, 5);(&vPoint, 23, 5);(&vPoint, 53, 5);(&vPoint, L'\x2569', ColorBrightWhite, ColorGreen);(&vPoint, 13, 19);(&vPoint, 23, 19);(&vPoint, 53, 19);

}Shedule::Dell(){//удаление файлаi=remove(fName);//этой функцией(i==-1) {

DrawWindow(ColorChlorine,ColorRed , 20, 5, 40, 15);(ColorBrightWhite, ColorRed, 21, 10, 38, 1, L"Удалить не удалось", MiddleCenter);(2000);

}{

DrawWindow(ColorChlorine,ColorRed , 20, 5, 40, 15);(ColorBrightWhite, ColorRed, 21, 10, 38, 1, L"Удаление успешно", MiddleCenter);(2000);

}

}


Приложение А.5 - Файл «splash.cpp»

#include "Barfic.h"

#include "header.h"

void Splash()

{

// Рисование окна с рамкой

DrawWindow(ColorRed, ColorChlorine, 0, 0, 80, 25);(ColorChlorine, ColorRed, 13, 9, 52, 7);

// Рисование однострочного текста в прямоугольнике(ColorBrightWhite, ColorRed, 14, 10, 50, 1, L" ", MiddleCenter);(ColorBrightWhite, ColorRed, 14, 11, 50, 1, L"Курсовой проект Мишанихиной Анны", MiddleCenter);(ColorBrightWhite, ColorRed, 14, 12, 50, 1, L"РАСПИСАНЫЕ ЗАНЯТИЙ", MiddleCenter);(ColorBrightWhite, ColorRed, 14, 13, 50, 1, L"Пенза 2013", MiddleCenter);(ColorBrightWhite, ColorRed, 14, 14, 50, 1, L" ", MiddleCenter);

Sleep(3000);

getch();

}


Приложение В


Результаты работы программы


Приложение B.1 - Информационная заставка


Приложение B.2 - Выход

Приложение B.3 - Меню выбора расписания


Приложение B.4 - Меню сохранить



Приложение B.5 -результаты поиска




Приложение С


Пример файла с расписанием


Содержание Введение 1. Постановка задачи 2. Выбор решения 2.1 Определение необходимых модулей программы 2.1 Определение структуры файла базы

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ