это быстро и бесплатно
Оформите заказ сейчас и получите скидку 100 руб.!
ID (номер) заказа
3369721
Ознакомительный фрагмент работы:
Введение
Задача теории расписаний в общей ее постановке считается весьма
привлекательной, хотя достижение даже небольшого прогресса на пути к решению
связано, как правило, с огромными трудностями. Несмотря на то, что задачами
теории расписаний занимались многие весьма квалифицированные специалисты, до
сих пор никому не удалось получить сколько-нибудь существенных результатов.
Безуспешные попытки получения таких результатов, как правило, не публикуются и
это отчасти обуславливает тот факт, что задача продолжает привлекать внимание
многих исследователей кажущейся простотой постановки.
Следуя этому предупреждению целью данной работы было создание такой
математической модели расписания в школе, которая помогала бы решать задачу
составления расписания и обладала бы гибкостью (незначительных изменений в
случае изменений входной информации) для адаптации системы в рамках
конкретной практической задачи, но не создавала его.
Цель курсовой работы создать программное обеспечение обработки данных
студентов, посещающих факультативные дисциплины, которое должно отвечать
всем требованиям пользователя, то есть быть предельно простым и понятным,
предугадывать все возможные ошибки пользователя, а также не перегружать
человека бессмысленной для него информацией.
Для достижения цели программное обеспечение должно:
1. Обеспечение взаимодействия пользователя с программным продуктом.
(Сведение к минимуму усилий пользователя при составлении расписания)
2. Разработка структуры базы данных
• Создание удобного интерфейса для доступа к базе данных и составления
расписания.
• Обеспечение оперативного доступа к данным, хранящимся в базе.
• Обеспечение возможности изменения и дополнения данных, хранящихся в
базе.
• Обеспечение поиска несоответствий в уже составленном расписании при
изменении или дополнении данных, хранящихся в базе.
3. Обеспечение возможности сохранения данных пользовательского
проекта в MS Excel для последующей печати.
4. Обеспечение архивации данных для анализа и повторного
использования.
5. Создание справочной информации о работе программы.
Основные требования:
- двухсменное расписание;
- сопоставление педагога и предмета;
- сопоставление предмета и кабинета;
- возможность выбора кабинетов для предмета;
- учет парных предметов; - учет числа учебных дней для класса;
- учет начала второй смены;
1 Постановка задачи
Задачей курсовой работы является создание программного обеспечения
для создания и ведения перечня дисциплин обучения студентов.
Программное обеспечение должно выполнять следующее:
1. Создать файл «Факультатив» со структурой записи:
номер группы;
Ф.И.О. студента;
рейтинг успеваемости студента;
количество прослушиваемых дисциплин.
Информация по каждой дисциплине:
название дисциплины;
выбор (1 – да; 0 - нет).
2. Выдавать на экран содержимое файла.
3. Выдавать на экран список студентов, желающих прослушать
определенную дисциплину в виде: № группы, Ф.И.О. студента, прослушиваемые
дисциплины.
4. Сформировать файл: Ф.И.О. студента, рейтинг успеваемости,
количество прослушиваемых дисциплин.
5. Вновь сформированный файл распечатать.
6. Добавлять запись в исходный файл.
7. Удалять все записи с указанными № групп.
8. Корректировать файл: по указанному номеру группы и Ф.И.О. студента
изменить рейтинг успеваемости студента.
2 Реализация задачи на языке программирования С#
2.1 Описание программы
Для создания программы использовалась среда разработки Visual Studio 2015.
Исходный код программы находится в приложение А.
Разработка программы началась с реализации набора функций, необходимых
для работы с файлами баз данных. Для сохранения файлов были задействована
функция 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
миллисекунд, после чего вновь получает событие от клавиатуры и мыши, и так пока
не выберут пункт меню «Выход».
началоИнициализация консолиВывод заставкиВывод менюФункция обработки событий менюконец
Рисунок 1 — Схема программы
При запуске программы выводится экран заставка, следом главное меню.
Навигация осуществляется посредством мыши. Алгоритм работы меню представлен
на рисунке 4.
началонажата левая кнопка мышиУказатель мыши на кнопке контакыконецзапрос событияс клавиатуры и мышиМеню расписаниенетнетдададаУказатель мыши на кнопке «события»Меню настройкиУказатель мыши на кнопке «выход»даНетдаУказатель мыши на кнопке «события»Меню помошьнет
Рисунок 4 - Алгоритм обработки событий главного меню
Особый интерес для нас имеет меню расписание, алгоритм его работы
представлен на последующих схемах.
9
началоНовое расписаниеВывод на экран информации о понедельникеСчитывание событий клавиатуры и мышиНажата одна из стрелокдаУправление курсоромнетКнопка «перейти»даВызов функции перехода к дню неделинетКнопка «Изменить»даОткрытие диалогивого окна ввода предметанетКнопка «очистить»даВысвобождение памяти, удаление всех предметов нетКнопка «удалить»даУдаление файла с расписаниемнетКнопка «сохранить»Сохранение расписания в файлдаСчитывание из файла выделение памятинетКнопка «назад»даконецнетнетВывод пустого расписания
Рисунок 5 - Алгоритм работы расписания
Основные действия разобраны на схемах ниже.
началоСчитывание имени дня неделиПеревод к нижнему региструСравнение с именами днейСовпадение найденонетВывод сообщения об ощибкеВывод указателя на день неделиконец
Рисунок 6 - Алгоритм перехода к определенному дню
Перевод к нижнему регистру осуществляется для того, чтобы пользователь
вводил дни как ему удобно: все символы в нижнем или с заглавной буквы. После
выполнения данной функции найденный день выводится на экран и вся работа
происходит с ним.
11
началоВывод на экран формы вводаВывод в поля исходной информацииНажато одно из полейнетНажата кнопка «ок»нетдаВвод информации в буферОсвобождение памятиВыделение памяти Запись информациидаконец
Рисунок 7- Алгоритм изменения информации о паре
Ни один байт зря не используется, память выделяется именно на то
количество символов, которое введено. Если после ввода поле оказалось пустым,
ему присваивается значение «_». Буфер используется на 100 символов, его вполне
достаточно для решения поставленной задачи.
началоконецI:=0i<6даДень выходнойнетj:=0j<7даПара пустанетВысвобождение памятиУстановка пары в «окно»данетУстановка дня в «выходной»i++j++нет
Рисунок 8- Алгоритм очистки информации
Очищается информация только из программы и оперативной памяти,
расписание, хранимое в файле, не трогается.
началоОткрытие файла на записьЗапись идетнификатора началаЗапись идентификатора дня неделиЗапись информации о количестве парЗапись информации о всех парах в этот деньЗапись идентификатора концаконецВывод последовательно информации о всех дняхначалоЕсть занятия в этот деньдаПереход к следующему днюВсе днидаконецнетнетВыбор первого дняВывод информации о всех дняхВ программе вывод это производится линейно, для сокращения схемы изобразили в виде цикла
Рисунок 9- Алгоритм сохранения расписания
В ходе выполнения курсовой работы был разработан новый тип файлов, с
которым может работать данная программа, в последующих версиях можно
обеспечить запуск из командной строки.
Работа программы начинается с модуля сценариев. То есть либо с открытия
уже созданной базы данных либо с создания новой путём заполнения
нижеперечисленных таблиц:
1. Таблица "Данные о школе" призвана собрать общие данные о школе и
учебном процессе.
2. Таблица "Предметы" содержит данные о предметах, преподаваемых в
данной школе.
3. Таблица "Преподаватели" содержит личную и служебную информацию
о преподавательском составе.
Таблица "Рабочее время", привязанная к таблице "Преподаватели" содержит
пожелания преподавателя, касающиеся его рабочего графика.
4. Таблица "Классы" содержит информацию об учащихся и о классах.
Таблица "Нагрузка", привязанная к таблице "Классы" содержит учебный план,
то есть количество часов, которые должны быть проведены для каждого класса по
предметам, изучающимся данным классом.
5. Таблица "Кабинеты" содержит информацию об аудиторном фонде
школы.
Таблица "Рабочее время", привязанная к таблице "Кабинеты" не заполняется
пользователем. Она существует как справочный материал и заполняется
компьютером по ходу работы пользователя с программой.
Данные хранятся в Базе данных MS SQL и взаимодействуют с ядром системы,
которое налагает ограничения на работу пользователя, то есть советует ему и
предупреждает о невозможности совершаемого действия. Прежде чем любой
предмет помещается в сетку расписания, программа осуществляет проверку.
Налагаемые ядром ограничения:
1. Если пользователь превышает возможное количество уроков в день,
программа сообщает об этом. Это является строгим ограничением.
2. Если пользователь пытается поставить предмет для класса обучаемого
во второй смене во время обучения первой, программа сообщает ему об этом.
3. Если в графе "спаренные" не стоит галочка, то при попытке
пользователем поставить в один день данный предмет более одного раза, программа
сообщает о невозможности данного действия. Это является строгим ограничением.
4. В графу "количество часов вносится количество оплачиваемых часов
для данного преподавателя. Если оно будет превышено, то программа сообщит об
этом.
5. Время классного часа вносится следующим образом: день недели; номер
урока. Эта информация автоматически устанавливается в сетку расписания после
заполнения таблицы "Данные о школе". Пользователь не имеет права менять
местоположение классного часа в сетке расписания, кроме как путём изменения
данных в таблице.
6. Если данные по какому-либо преподавателю отсутствуют в таблице, то
есть не дано количество часов и не выбран предмет, считается, что данный
преподаватель не ведёт каких-либо уроков в этом классе. Следовательно при
попытке поставить данный предмет для этого класса программа сообщит о
невозможности.
7. Если предмет не привязан ни к одному из учителей для выбранного
класса, программа запрещает пользователю помещать его в сетку расписания для
данного класса.
8. Если пользователь превышает номинальное количество часов в неделю,
программа сообщает об этом, но это не является строгим ограничением.
9. Если кабинет или преподаватель ведущий данный предмет уже заняты в
это время, то программа укажет на невозможность данного действия.
Модуль расписания – это непосредственно само расписание, которое и
заполняется пользователем, путём вызова контекстного меню для каждой из ячеек и
выбора предмета и кабинета. Изначально кабинет идёт в связке с предметом, но
пользователь может его поменять, если возникает такая необходимость.
По окончании работы над расписанием пользователь может сохранить его в
MS Exel для последующей печати или доработки.
Рисунок 10 - Структурная схема компьютерной системы расписания
Приложение Organizer.exe является основным модулем
программы. Для реализации интерфейса с пользователем была задействована
библиотека Barfic.lib. Используя функции из этой библиотеки, осуществляется
вывод строк на экран, получение событий от клавиатуры и мыши, перемещение
курсора мыши, закрашивание части рабочей области консоли. С помощью всех
перечисленных возможностей этой библиотеки были реализованы меню и экран для
работы со словарем. При запуске программы происходит вывод заставки –
приветствия, далее мы попадаем в главное меню, где можно открыть нужный
словарь или выйти из программы.
2.2 Тестирование программы
Модульное тестирование - тестируется отдельный модуль, в отрыве от
остальной системы. Самый распространенный случай применения -
тестирования модуля самим разработчиком, проверка того, что отдельные
модули, классы, методы делают действительно то, что от них ожидается.
Различные среды разработки широко поддерживают средства модульного
тестирования - например, популярная свободно распространяемая
библиотека для Visual Studio NUnit, JUnit для Java и т.д. Созданные
разработчиком модульные тесты часто включаются в пакет регрессионных
тестов и таким образом, могут запускаться многократно.
Программа schedule.exe предназначена для хранения информации о
расписании. Программа имеет интуитивно понятный интерфейс.
Чтобы закрыть заставку, необходимо нажать клавишу «Enter» на клавиатуре.
После происходит оповещение о предстоящих событиях, если что-то запланировано
на сегодня. Для закрытия окна сообщения необходимо кликнуть левой кнопкой
мыши по кнопке «OK» или нажать клавишу «Enter» на клавиатуре. Откроется
главное меню.
Рисунок 11 – Главное меню
Чтобы перейти к расписанию, нужно кликнуть левой кнопкой мышки по
соответствующей кнопке в меню.
Рисунок 12– Меню «словарь»
Для добавления занятия необходимо кликнуть по кнопке «Изменить».
В открывшемся диалоговом окне щелкните на синюю строку напротив ее
названия для того, чтобы ввести информацию. После ввода информации нажмите
кнопку «Enter» на клавиатуре. После заполнения Необходимой информации, для
добавления контакта необходимо кликнуть по кнопке «Добавить». Программа
добавит элемент в список.
Рисунок 13 – Добавление нового контакта
Для поиска нужного дня используйте кнопку «Перейти».
Для сохранения расписания необходимо кликнуть по кнопке «Сохранить».
Далее будет предложено ввести строку поиска. После этого вы увидите искомый
контакт или сообщение, что в списке его найти не удалось.
Для возвращения в предыдущее меню кликните по кнопке «Назад». Вам будет
предложено сохранить измененную базу данных.
В меню событий работа происходит таким же образом.
Заключение
При выполнении данной курсовой работы были получены навыки разработки
многомодульных программ. Были освоены приемы создания псевдографического
интерфейса, изучены функции работы с консолью, способы обработки событий от
клавиатуры и мыши. Усвоены механизмы реализации меню. Изучены функции
работы с файлом. Получены базовые навыки программирования на языке С и
Ассемблер. Изучены основные возможности среды программирования Visual Studio
2015. Получены навыки отладки и тестирования программ.
В процессе выполнения работы была разработана программа для создания и
ведения перечня дисциплин обучения студентов.
В программе было реализовано:
В программе было реализовано:
1. Создание файла с информацией о студентах и дисциплины, вывод
информации на экран.
2. Вывод на экран списка студентов, желающих прослушать определенную
дисциплину в виде: № группы, Ф.И.О. студента, перечень дисциплин
3. Удаление записей о студентах по номеру группы
4. Добавление, удаление и редактирование записей о студентах.
Программа отвечает всем требованиям пользователя, то есть простая и
понятная, предугадывает все возможные ошибки пользователя, а также не
перегружает человека бессмысленной для него информацией.
Список использованных источников
1. Вилле, К. Представляем C# / К. Вилле. — Москва: ДМК Пресс, 2008. —
183 с.; То же [Электронный ресурс]. – URL: https://e.lanbook.com/book/1225
2. Суханов, М.В. Основы Microsoft .NET Framework и языка
программирования C#: учебное пособие / М.В. Суханов, И.В. Бачурин, И.С.
Майоров; САФУ. – Архангельск: САФУ, 2014. – 97 с.; То же - URL:
https://biblioclub.ru/index.php?page=book&id=312313
3. Руководство по языку программирования C# [Электронный ресурс]:
сайт о программировании – Режим доступа: https://metanit.com/sharp/tutorial/
4. Cайт Microsoft.Visual Studio Community [Электронный ресурс]: офиц.
сайт – Режим доступа: https://visualstudio.microsoft.com/ru/downloads/
Приложение А
Задание на курсовую работу
Министерство науки и высшего образования Российской Федерации
ФГБОУ ВО «Алтайский государственный технический университет
имени И.И. Ползунова»
Заочный институт
Кафедра «Информатика, вычислительная техника и информационная безопасность»
ЗАДАНИЕ
на курсовую работу по дисциплине «Программирование приложений»
студенту группы
Тема курсовой работы:
«Разработка программного обеспечения для создания и ведения перечня дисциплин
обучения студентов»
№
этапа
Содержание этапа курсовой работы
1 Постановка задачи
2 Реализация задачи на языке программирования С#
3 Оформление пояснительной записки и представление на проверку
руководителю.
Руководитель работы ______________ Качесова Л.Ю., доцент
подпись
Дата выдачи задания «» 2021 г.
Задание принял к исполнению ___________________ Иванов И.И.
подпись
Приложение Б
Исходный код программы на С#
Файл StudentsDisciplines.cs
Листинг программы
Файл «header.h»
#include <windows.h>
#include <conio.h>
#include <wchar.h>
#include <locale>
#include <io.h>
bool Clic(INPUT_RECORD vRecord, //функция проверки на нажатие
IN unsigned nX,
IN unsigned nY,
IN unsigned nWidth,
IN unsigned nHeight);
void Table();//чтобы увеличить понятность кода, рисование таблицы вынесли
/////////////////////////////////////////////
///// функции меню
////
/////////////////////////////////////////////
int Menu();//функция работы меню
int Сreator();//функция информации о создлателее
int Help();//вывод окна помощи
void Splash();//заставка
int Raspisanie();//само долгожданное расписание
/////////////////////////////////////////////
///// все что относится к работе с расписанием
////
/////////////////////////////////////////////
struct para {//структура информации о паре
wchar_t* time;//время
wchar_t* name;//имя предмета
wchar_t* teacher;//преподаватель
wchar_t* room;//кабинет
bool okno;//свободна ли пара
};
struct grop {//расписание группы
//каждый день не больше 7ти пар
//воскресенье выходной
para raspicanie[6][7];
int NUM[6];//колличество пар в каждый день
//да и вывода тоже
};
class Shedule {//класс работы с расписанием
public:
Shedule(BOOL N,wchar_t* Name );//для имеющегося расписания
int print();//вывод на экран
grop* Grop;//само расписание
~Shedule();
private:
FILE* desc;
BOOL New;//новый ли файл
BOOL Error;//информация об ошибке
char* fName; //имя файла
void Output(unsigned int cursor,int num);//текст расписания выводит
void Save();//сохранение полученного расписания в файл
void Dell();//удаление расписания
para* Seach(int* num);//поиск дня недели
void Read();//чтение из файла
void Edit(int num,int idPos);//изменить/подробнее
void Сheck();//проверка на корректность и вывод на экран типа ошибки
void 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"
void main()
{
setlocale(LC_ALL,"russian");
int idButton=0;
BOOL fResult;
// Инициализация работы с консолью
fResult = ConsoleInitialize();
if (fResult == FALSE)
{
return;
}
// Скрытие курсора
fResult = SetCursorVisible(FALSE);
if (fResult == FALSE)
{
return;
}
Splash();//заставка
while (idButton!=4) {
idButton=Menu();
switch(idButton){
case 1://выбрана кнопка расписание
idButton=Raspisanie();
break;
case 2://выбрана кнопка помощь
idButton=Help();
break;
case 3://выбрана кнопка информация о создателе
idButton=Сreator();
break;
}
}
}
Приложение А.3 – Файл «menu.cpp»
#include "Barfic.h"
#include "header.h"
int Menu(){
CHAR_INFO vPoint;
EMessageBoxId eId;
INPUT_RECORD vRecord;
int idButton=0;
// Рисование окна с рамкой
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"Выход");
while(idButton==0) {
if (InputRecordRead(vRecord))
{
// проверка нажатия на кнопку
if(Clic(vRecord, 10, 3, 20, 4))
idButton=1;
else if(Clic(vRecord, 20, 8, 20, 4))
idButton=2;
else if(Clic(vRecord, 30, 13, 20, 4))
idButton=3;
else if(Clic(vRecord, 40, 18, 20, 4))
{
eId =
DialogMessageBox(
ColorBrightWhite, ColorGrey,
15, 10, 40, 8,
ColorYellow, ColorBlue, L"Точно желаете выйти?", TopLeft,
MessageBoxYesNo);
if (eId==MessageBoxIdYes)
idButton=4;
else {
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"Выход");
}
}
}
Sleep(20);
}
return idButton;
}
int Сreator() {
FILE* q;
int i=0;
char s[80];int idButton=9;
INPUT_RECORD vRecord;
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"Назад");
q=fopen("Creator.txt","r");
if (q) {
while (fgets(s,80,q)&&i<11) {
SetCursorPosition(5,9+i);
printf("%s",s);
i++;
}
}
while(idButton!=0) {
if (InputRecordRead(vRecord))
{
// проверка нажатия на кнопку
if(Clic(vRecord, 50, 22, 20, 2))//назад
idButton=0;
}
}
if (q) {
fclose(q);
}
return 1;
}
int Help() {
FILE* q;
int i=0;
char s[80];int idButton=9;
INPUT_RECORD vRecord;
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"Назад");
q=fopen("ReadMe.txt","r");
if (q) {
while (fgets(s,80,q)&&i<11) {
SetCursorPosition(5,9+i);
printf("%s",s);
i++;
}
}
while(idButton!=0) {
if (InputRecordRead(vRecord))
{
// проверка нажатия на кнопку
if(Clic(vRecord, 50, 22, 20, 2))//назад
idButton=0;
}
}
if (q) {
fclose(q);
}
return 1;
}
int Raspisanie() {
Shedule* p;
int idButton=0;
int idButton1=0;
wchar_t buf[100];
INPUT_RECORD vRecord;
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"Назад");
while(idButton==0) {
idButton1=0;
if (InputRecordRead(vRecord))
{
// проверка нажатия на кнопку
if(Clic(vRecord, 50, 22, 20, 2))//назад
idButton=1;
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);
while(idButton1==0) {
if (InputRecordRead(vRecord))
{
if(Clic(vRecord, 40, 17, 15, 2)){//назад
idButton1=1;
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)){//ок
//////////////////////////////////////
////инициализация класса и запуск работы
/////////////////////////////////////
idButton=1;
idButton1=1;
}
}
}
}
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);
while(idButton1==0) {
if (InputRecordRead(vRecord))
{
if(Clic(vRecord, 40, 17, 15, 2)){//назад
idButton1=1;
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)){//ок
//////////////////////////////////////
////инициализация класса и запуск работы
/////////////////////////////////////
idButton=2;
idButton1=2;
}
}
}
}
}
Sleep(20);
}
if (idButton1==1)//было выбрано "новое расписание"
p= new Shedule(true,buf);
if (idButton1==2)//было выбрано "имеющееся расписаниие"
p= new Shedule(false,buf);
p->print();//запуск словаря
delete p;
return 1;
}
Приложение А.4 – Файл «functions.cpp»
#include "Barfic.h"
#include "header.h"
bool Clic(INPUT_RECORD vRecord,
IN unsigned nX,
IN unsigned nY,
IN unsigned nWidth,
IN unsigned nHeight)
{
if(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)
return 1;
else
return 0;
}
Shedule::Shedule(BOOL N,wchar_t* Name ) {
New=N;
int i,j;
char* str;
int len=wcslen(Name);
fName= new char[len+4];
char* s=fName;
Grop= new grop;
memset(Grop,0,sizeof(grop));//все данные равны нулю
for (i=0;i<6;i++)
for (j=0;j<7;j++)
Grop->raspicanie[i][j].okno=true;
/////конвертирование
while (*Name) {
wctomb(s,*Name);
++Name;
++s;
}
fName[len]='.';//дописывание разрешения
fName[len+1]='s';
fName[len+2]='d';
fName[len+3]='h';
fName[len+4]=0;
if(New) {
desc=fopen(fName,"w");
if (desc==NULL)
Error=true;
else
Error=false;
}
else {
desc=fopen(fName,"r");
if (desc==NULL)
Error=true;
else {
Error=false;
Read();///чтение из файла
fclose(desc);
}
}
}
Shedule::~Shedule() {//деструктор, нужен при удалении класса
int i; //для освобождения памяти
int j;
for (i=0;i<6;i++)
if (Grop->NUM[i]!=0)//если в этот день есть хотябы одна пара
for (j=0;j<7;j++)
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;
}
}
int Shedule::print() {
int num=0;//номер дня
int idButton=0;
int idButton1=0;
int idPos=0;//номер курсора
INPUT_RECORD vRecord;
int pos=0;
wchar_t buf[100];
if (Error){
DrawWindow(ColorChlorine,ColorRed , 20, 5, 40, 15);
DrawSingleLineText(ColorBrightWhite, ColorRed, 21, 10, 38, 1, L"Ошибка
открытия файла", MiddleCenter);
Sleep(2000);
return 0;
}
//////////////////////////////////////////
////разхметка страницы
/////////////////////////////////////////
while(idButton==0) {
if(idButton1!=7) {
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"назад");
}
idButton1=0;
Table();
Output(idPos, num);
////////////////////////////////////////////////////////
/// пользовательский интерфейс
///////////////////////////////////////////////////////
while(idButton1==0) {
idButton1=0;
if (InputRecordRead(vRecord))
{
// проверка нажатия на кнопку
if(Clic(vRecord, 3, 22, 10, 0)){//перейти
idButton1=1;
if(!New)
Seach(&num);
}
else if(Clic(vRecord, 15, 22, 10, 0)){//изменить
Edit(num,idPos);
New=false;
idButton1=2;
}
else if(Clic(vRecord, 27, 22, 10, 0)){//очистить
if(New==false) {//копипаст дескриптора+установка всех пар в "окна"
for (int i=0;i<6;i++)
if (Grop->NUM[i]!=0) {
for (int j=0;j<7;j++)
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;
Grop->raspicanie[i][j].okno=true;
}
Grop->NUM[i]=0;
}
New=true;
}
DrawWindow(ColorChlorine,ColorRed , 20, 5, 40, 15);
DrawSingleLineText(ColorBrightWhite, ColorRed, 21, 10, 38, 1, L"Расписание
чисто", MiddleCenter);
Sleep(2000);
idButton1=2;
}
else if(Clic(vRecord, 39, 22, 10, 0)){//удалить
Dell();
idButton1=4;
}
else if(Clic(vRecord, 51, 22, 10, 0)){//сохранить
idButton1=1;
if(!New)
Save();
else {
DrawWindow(ColorChlorine,ColorRed , 20, 5, 40, 15);
DrawSingleLineText(ColorBrightWhite, ColorRed, 21, 10, 38, 1, L"Для начала
добавьте хотябы одно занятие", MiddleCenter);
Sleep(2000);
}
}///управление курсором
else if( vRecord.Event.KeyEvent.wVirtualKeyCode==VK_UP &&
vRecord.Event.KeyEvent.bKeyDown==1){
///реагирует только на процесс нажатия, а не на удержание или отпускание
if(idPos!=0)
idPos--;
idButton1=7;
}
else if( vRecord.Event.KeyEvent.wVirtualKeyCode==VK_DOWN &&
vRecord.Event.KeyEvent.bKeyDown==1){
if(idPos!=6)
41
idPos++;
idButton1=7;
}
else if(Clic(vRecord, 63, 22, 10, 0)){// назад
idButton=1;
idButton1=1;
}
}
Sleep(20);
}
}
return 1;
}
void Shedule::Read(){
//в этой программе не учтено возможное баловство с файлом в блокноте
//в блокноте можно только смотреть файл НО НЕ РЕДАКТИРОВАТЬ!!!!!!!!!!!
/////////////////////////
////при считывании строки вконце ставится \n
///это проблема......
///пока просто на место \n записываем 0
//////////////////////
wchar_t str[200];//буффер, думаю название предмета столько строк не
занимает)
int len;//длинна строки
int scht;
while (ftell (desc) < filelength(fileno(desc))) {//пока не конец файла
fgetws(str,200,desc);
len=wcslen(str);
str[len-1]=0;
if (!wcscmp(str,L"*Monday")){//сравнение считанной строки с
зарезервированными словами
fscanf(desc,"%d",&Grop->NUM[0]);//колличество пар в этот день
zagruzka(Grop->raspicanie[0],Grop->NUM[0]);
}
else if (!wcscmp(str,L"*Tuesday")){
fscanf(desc,"%d",&Grop->NUM[1]);
zagruzka(Grop->raspicanie[1],Grop->NUM[1]);
}
else if (!wcscmp(str,L"*Wednesday")){
fscanf(desc,"%d",&Grop->NUM[2]);
zagruzka(Grop->raspicanie[2],Grop->NUM[2]);
}
else if (!wcscmp(str,L"*Thursday")){
fscanf(desc,"%d",&Grop->NUM[3]);
zagruzka(Grop->raspicanie[3],Grop->NUM[3]);
}
else if (!wcscmp(str,L"*Friday")){
fscanf(desc,"%d",&Grop->NUM[4]);
zagruzka(Grop->raspicanie[4],Grop->NUM[4]);
}
else if (!wcscmp(str,L"*Saturday")){
fscanf(desc,"%d",&Grop->NUM[5]);
zagruzka(Grop->raspicanie[5],Grop->NUM[5]);
}
else if (!wcscmp(str,L"*END"))//данный чанк значает конец файла
break;
};
}
void Shedule::Save()
{
desc=fopen(fName,"w");//сохраняем в тот же файл, что и вводили при
открытии/создании расписания
if (desc==NULL) {
DrawWindow(ColorChlorine,ColorRed , 20, 5, 40, 15);
DrawSingleLineText(ColorBrightWhite, ColorRed, 21, 10, 38, 1, L"Ошибка
cохранения файла файла", MiddleCenter);
Sleep(2000);
return;
}
else {
fwprintf(desc,L"*BEGIN\n");//чанк начала
int i;
if (Grop->NUM[0]!=0) {//если есть пары в этот день
fwprintf(desc,L"*Monday\n");//день
fwprintf(desc,L"%d\n",Grop->NUM[0]);//колличество пар
for (i=0;i<6;i++)
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->NUM[1]!=0) {
fwprintf(desc,L"*Tuesday\n");
fwprintf(desc,L"%d\n",6);
for (i=0;i<6;i++)
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->NUM[2]!=0) {
fwprintf(desc,L"*Wednesday\n");
fwprintf(desc,L"%d\n",6);
for (i=0;i<6;i++)
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);
}
if (Grop->NUM[3]!=0) {
fwprintf(desc,L"*Thursday\n");
fwprintf(desc,L"%d\n",Grop->NUM[3]);
for (i=0;i<6;i++)
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);
}
if (Grop->NUM[4]!=0) {
fwprintf(desc,L"*Friday\n");
fwprintf(desc,L"%d\n",Grop->NUM[4]);
for (i=0;i<6;i++)
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);
}
if (Grop->NUM[5]!=0) {
fwprintf(desc,L"*Saturday\n");
fwprintf(desc,L"%d\n",Grop->NUM[5]);
for (i=0;i<6;i++)
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);
}
fwprintf(desc,L"*END\n");
fclose(desc);
DrawWindow(ColorChlorine,ColorRed , 20, 5, 40, 15);
DrawSingleLineText(ColorBrightWhite, ColorRed, 21, 10, 38, 1, L"Сохранение
успешно", MiddleCenter);
Sleep(2000);
}
}
void Shedule::zagruzka(para* ukaz, int i) {//считывание одного дня
int len;
int j;
int num;
wchar_t str[200];
for(j=0;j<i;j++) {
fwscanf(desc,L"%d",&num);//считываем номор пары
ukaz[num].okno=false;//автоматом она не окно
fwscanf(desc,L"%s",&str);
////для экономии памяти
len=wcslen(str);
ukaz[num].time= new wchar_t [len+1];
wcscpy(ukaz[num].time,str);//время
//специально оно не сделано стандартным для каждой пары, в каждом
заведении все по разному, включая перерывы
//и школы могут пользоваться
//нет проверки на равильность введения времени, так что вся ответственность
на заполнителя)
fwscanf(desc,L"%s",&str);
len=wcslen(str);
ukaz[num].room=new wchar_t [len+1];//кабинет
wcscpy(ukaz[num].room,str);
fwscanf(desc,L"%s",&str);
len=wcslen(str);
ukaz[num].name=new wchar_t [len+1];//название предмета
wcscpy(ukaz[num].name,str);
fwscanf(desc,L"%s",&str);
len=wcslen(str);
ukaz[num].teacher=new wchar_t [len+1];//препод
wcscpy(ukaz[num].teacher,str);
}
}
para* Shedule::Seach(int* num){//поис дня недели
int i;
int idButton=0;
int idButton1=0;
wchar_t buf[100];
INPUT_RECORD vRecord;
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, 35, 17, 10, 2, L"ОК");
DialogTextBox( ColorBrightWhite, ColorBlue, 25, 11, 29, 1, buf, 100);
i = wcslen(buf);//перевод к нижмему регистру
while(i--)
buf[i] = towlower(buf[i]);
while(idButton1==0) {
if (InputRecordRead(vRecord))
{
if(Clic(vRecord, 35, 17, 10, 2)){//ок
if (!wcscmp(buf,L"понедельник")){//сравнение считанной строки с именами
дней делелии
*num=0;
return Grop->raspicanie[0];//возвращаем день недели
}
else if (!wcscmp(buf,L"вторник")){//без учета регистра
*num=1;
return Grop->raspicanie[1];
}
else if (!wcscmp(buf,L"среда")){
*num=2;
return Grop->raspicanie[2];
}
else if (!wcscmp(buf,L"четверг")){
*num=3;
return Grop->raspicanie[3];
}
else if (!wcscmp(buf,L"пятница")){
*num=4;
return Grop->raspicanie[4];
}
else if (!wcscmp(buf,L"суббота")){
*num=5;
return Grop->raspicanie[5];
}
else {
DrawWindow(ColorChlorine,ColorRed , 20, 5, 40, 15);
DrawSingleLineText(ColorBrightWhite, ColorRed, 21, 7, 38, 1, L"Совпадений не
найдено", MiddleCenter);
Sleep(200);
*num=0;
return Grop->raspicanie[0];
}
}
}
Sleep(20);
}
}
void Shedule::Edit(int num,int idPos){
bool clr[4];//массив, указывпющий на наличия введенных данных в каждую
графу
int i;
wchar_t buf[100];
int len;
INPUT_RECORD vRecord;
DrawWindow(ColorChlorine,ColorRed , 20, 3, 40, 20);
DrawSingleLineText(ColorBrightWhite, ColorRed, 22, 5, 18, 1, L"Время",
BottomLeft);
DrawSingleLineText(ColorBrightWhite, ColorRed, 22, 9, 18, 1, L"Кабинет",
BottomLeft);
DrawSingleLineText(ColorBrightWhite, ColorRed, 22, 13, 18, 1, L"Предмет",
BottomLeft);
DrawSingleLineText(ColorBrightWhite, ColorRed, 22, 17, 18, 1,
L"Преподаватель", BottomLeft);
if(Grop->raspicanie[num][idPos].okno==false) {
DrawSingleLineText(ColorBrightWhite, ColorBlue, 36, 4, 20, 3, Grop-
>raspicanie[num][idPos].time, MiddleLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 36, 8, 20, 3, Grop-
>raspicanie[num][idPos].room, MiddleLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 36, 12, 20, 3, Grop-
>raspicanie[num][idPos].name, MiddleLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 36, 16, 20, 3, Grop-
>raspicanie[num][idPos].teacher, MiddleLeft);
for(i=0;i<4;i++)
clr[i]=false;
}
else {
DrawSingleLineText(ColorBrightWhite, ColorBlue, 36, 4, 20, 3, L"пусто",
MiddleLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 36, 8, 20, 3, L"пусто",
MiddleLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 36, 12, 20, 3,L"пусто",
MiddleLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 36, 16, 20, 3, L"пусто",
MiddleLeft);
Grop->raspicanie[num][idPos].okno=false;
Grop->NUM[num]++;
for(i=0;i<4;i++)
clr[i]=true;
}
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 45, 20, 13, 2, L"ОК");
while(1) {
if (InputRecordRead(vRecord))
{
if(Clic(vRecord, 45, 20, 13, 2)){//ок
break;
}
else if (Clic(vRecord, 36, 4, 20, 3)){//время
DialogTextBox( ColorBrightWhite, ColorBlue, 36, 5, 20, 1, buf, 100);
if(clr[0]==false)
delete[] Grop->raspicanie[num][idPos].time;//удаление рание имеющейся записи
clr[0]=false;
len=wcslen(buf);
if(len!=0){
Grop->raspicanie[num][idPos].time= new wchar_t [len+1];
wcscpy(Grop->raspicanie[num][idPos].time,buf);
}else//если вы не ввели строку- записываем слово EMPTY
{
Grop->raspicanie[num][idPos].time= new wchar_t [6];
wcscpy(Grop->raspicanie[num][idPos].time,L"_");
}
}
else if(Clic(vRecord, 36, 8, 20, 3)){//комната
DialogTextBox( ColorBrightWhite, ColorBlue, 36, 9, 20, 1, buf, 100);
if(clr[1]==false)
delete[] Grop->raspicanie[num][idPos].room;
clr[1]=false;
len=wcslen(buf);
if(len!=0){
Grop->raspicanie[num][idPos].room= new wchar_t [len+1];
wcscpy(Grop->raspicanie[num][idPos].room,buf);
}else
{
Grop->raspicanie[num][idPos].room= new wchar_t [6];
wcscpy(Grop->raspicanie[num][idPos].room,L"_");
}
}
else if(Clic(vRecord, 36, 12, 20, 3)){//предмет
DialogTextBox( ColorBrightWhite, ColorBlue, 36, 13, 20, 1, buf, 100);
if(clr[2]==false)
delete[] Grop->raspicanie[num][idPos].name;
clr[2]=false;
len=wcslen(buf);
if(len!=0){
Grop->raspicanie[num][idPos].name= new wchar_t [len+1];
wcscpy(Grop->raspicanie[num][idPos].name,buf);
}else
{
Grop->raspicanie[num][idPos].name= new wchar_t [6];
wcscpy(Grop->raspicanie[num][idPos].name,L"_");
}
}
else if(Clic(vRecord, 36, 16, 20, 3)){//преподаватель
DialogTextBox( ColorBrightWhite, ColorBlue, 36, 17, 20, 1, buf, 100);
if(clr[3]==false)
delete[] Grop->raspicanie[num][idPos].teacher;
clr[3]=false;
len=wcslen(buf);
if(len!=0){
Grop->raspicanie[num][idPos].teacher= new wchar_t [len+1];
wcscpy(Grop->raspicanie[num][idPos].teacher,buf);
}else
{
Grop->raspicanie[num][idPos].teacher= new wchar_t [6];
wcscpy(Grop->raspicanie[num][idPos].teacher,L"_");
}
}
}
Sleep(20);//чтобы не сжирать все мощности пк
}
if (clr[0]==true && clr[1]==true && clr[2]==true && clr[3]==true) {
Grop->raspicanie[num][idPos].okno=true;
} else {
if(clr[0]==true) {
Grop->raspicanie[num][idPos].time= new wchar_t [6];
wcscpy(Grop->raspicanie[num][idPos].time,L"_");
}
if(clr[1]==true) {
Grop->raspicanie[num][idPos].room= new wchar_t [6];
wcscpy(Grop->raspicanie[num][idPos].room,L"_");
}
if(clr[2]==true) {
Grop->raspicanie[num][idPos].name= new wchar_t [6];
wcscpy(Grop->raspicanie[num][idPos].name,L"_");
}
if(clr[3]==true) {
Grop->raspicanie[num][idPos].teacher= new wchar_t [6];
wcscpy(Grop->raspicanie[num][idPos].teacher,L"_");
}
}
}
void Shedule::Output(unsigned int cursor,int num){
int j;
DrawWindow(ColorChlorine,ColorRed , 2, 2, 76, 3);
switch (num){//выбираем дельнедели
case 0:
DrawSingleLineText(ColorBrightWhite, ColorRed, 3, 3, 74, 1,L"Понедельник" ,
MiddleCenter);
break;
case 1:
DrawSingleLineText(ColorBrightWhite, ColorRed, 3, 3, 74, 1,L"Вторник" ,
MiddleCenter);
break;
case 2:
DrawSingleLineText(ColorBrightWhite, ColorRed, 3, 3, 74, 1,L"Среда" ,
MiddleCenter);
break;
case 3:
DrawSingleLineText(ColorBrightWhite, ColorRed, 3, 3, 74, 1,L"Четверг",
MiddleCenter);
break;
case 4:
DrawSingleLineText(ColorBrightWhite, ColorRed, 3, 3, 74, 1,L"Пятница" ,
MiddleCenter);
break;
case 5:
DrawSingleLineText(ColorBrightWhite, ColorRed, 3, 3, 74, 1,L"Суббота" ,
MiddleCenter);
break;
}
for (j=0;j<7;j++)//для всех скми строк расписания
if(Grop->raspicanie[num][j].okno==false) {//если не окно- выводим инфу
if (j==cursor) {//если здесь стоит курсор- русуем на красном фоне
DrawSingleLineText(ColorBrightWhite, ColorRed, 4, 6+j*2, 9, 1,Grop-
>raspicanie[num][j].time , MiddleCenter);
DrawSingleLineText(ColorBrightWhite, ColorRed, 14, 6+j*2, 9, 1, Grop-
>raspicanie[num][j].room, MiddleCenter);
DrawSingleLineText(ColorBrightWhite, ColorRed, 24, 6+j*2, 29, 1, Grop-
>raspicanie[num][j].name, MiddleCenter);
DrawSingleLineText(ColorBrightWhite, ColorRed, 54, 6+j*2, 21, 1, Grop-
>raspicanie[num][j].teacher , MiddleCenter);
}
else {//на зеленом
DrawSingleLineText(ColorBrightWhite, ColorGreen, 4, 6+j*2, 9, 1,Grop-
>raspicanie[num][j].time , MiddleCenter);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 14, 6+j*2, 9, 1, Grop-
>raspicanie[num][j].room, MiddleCenter);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 24, 6+j*2, 29, 1, Grop-
>raspicanie[num][j].name, MiddleCenter);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 54, 6+j*2, 21, 1, Grop-
>raspicanie[num][j].teacher , MiddleCenter);
}
}
else//если окно
if (j==cursor) {//если здесь стоит курсор- русуем красный фон
DrawSingleLineText(ColorBrightWhite, ColorRed, 4, 6+j*2, 9, 1,L" ",
MiddleCenter);
DrawSingleLineText(ColorBrightWhite, ColorRed, 14, 6+j*2, 9, 1, L" ",
MiddleCenter);
DrawSingleLineText(ColorBrightWhite, ColorRed, 24, 6+j*2, 29, 1,L" ",
MiddleCenter);
DrawSingleLineText(ColorBrightWhite, ColorRed, 54, 6+j*2, 21, 1, L" " ,
MiddleCenter);
}
else {//если здесь не стоит курсор- русуем зеленый фон
DrawSingleLineText(ColorBrightWhite, ColorGreen, 4, 6+j*2, 9, 1,L" ",
MiddleCenter);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 14, 6+j*2, 9, 1, L" ",
MiddleCenter);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 24, 6+j*2, 29, 1, L" ",
MiddleCenter);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 54, 6+j*2, 21, 1, L" " ,
MiddleCenter);
}
}
void Table(){//чисто рисуем таблицу из псевдографики, ничего интересного
int i;
CHAR_INFO vPoint;
SetCharInfo(&vPoint, L'\x2554', ColorBrightWhite, ColorGreen);
DrawPoint(&vPoint, 3, 5);
SetCharInfo(&vPoint, L'\x255a', ColorBrightWhite, ColorGreen);
DrawPoint(&vPoint, 3, 19);
SetCharInfo(&vPoint, L'\x2557', ColorBrightWhite, ColorGreen);
DrawPoint(&vPoint, 75,5);
SetCharInfo(&vPoint, L'\x255d', ColorBrightWhite, ColorGreen);
DrawPoint(&vPoint, 75,19);
SetCharInfo(&vPoint, L'\x2560', ColorBrightWhite, ColorGreen);
for (i=0;i<6;i++)
DrawPoint(&vPoint, 3, 7+i*2);
SetCharInfo(&vPoint, L'\x2551', ColorBrightWhite, ColorGreen);
for (i=0;i<7;i++)
DrawPoint(&vPoint, 3, 6+i*2);
for (i=0;i<7;i++)
DrawPoint(&vPoint, 13, 6+i*2);
for (i=0;i<7;i++)
DrawPoint(&vPoint, 23, 6+i*2);
for (i=0;i<7;i++)
DrawPoint(&vPoint, 53, 6+i*2);
for (i=0;i<7;i++)
DrawPoint(&vPoint, 75, 6+i*2);
SetCharInfo(&vPoint, L'\x2563', ColorBrightWhite, ColorGreen);
for (i=0;i<6;i++)
DrawPoint(&vPoint, 75, 7+i*2);
SetCharInfo(&vPoint, L'\x2550', ColorBrightWhite, ColorGreen);
for (i=0;i<8;i++)
DrawHorLine(&vPoint, 4, 5+i*2,9);
for (i=0;i<8;i++)
DrawHorLine(&vPoint, 14, 5+i*2,9);
for (i=0;i<8;i++)
DrawHorLine(&vPoint, 24, 5+i*2,29);
for (i=0;i<8;i++)
DrawHorLine(&vPoint, 54, 5+i*2,21);
SetCharInfo(&vPoint, L'\x256c', ColorBrightWhite, ColorGreen);
for (i=0;i<6;i++)
DrawPoint(&vPoint, 13, 7+i*2);
for (i=0;i<6;i++)
DrawPoint(&vPoint, 23, 7+i*2);
for (i=0;i<6;i++)
DrawPoint(&vPoint, 53, 7+i*2);
SetCharInfo(&vPoint, L'\x2556', ColorBrightWhite, ColorGreen);
DrawPoint(&vPoint, 13, 5);
DrawPoint(&vPoint, 23, 5);
DrawPoint(&vPoint, 53, 5);
SetCharInfo(&vPoint, L'\x2569', ColorBrightWhite, ColorGreen);
DrawPoint(&vPoint, 13, 19);
DrawPoint(&vPoint, 23, 19);
DrawPoint(&vPoint, 53, 19);
}
void Shedule::Dell(){//удаление файла
bool i=remove(fName);//этой функцией
if (i==-1) {
DrawWindow(ColorChlorine,ColorRed , 20, 5, 40, 15);
DrawSingleLineText(ColorBrightWhite, ColorRed, 21, 10, 38, 1, L"Удалить не
удалось", MiddleCenter);
Sleep(2000);
}
else{
DrawWindow(ColorChlorine,ColorRed , 20, 5, 40, 15);
DrawSingleLineText(ColorBrightWhite, ColorRed, 21, 10, 38, 1, L"Удаление
успешно", MiddleCenter);
Sleep(2000);
}
}
Приложение А.5 – Файл «splash.cpp»
#include "Barfic.h"
#include "header.h"
void Splash()
{
// Рисование окна с рамкой
DrawWindow(ColorRed, ColorChlorine, 0, 0, 80, 25);
DrawWindow(ColorChlorine, ColorRed, 13, 9, 52, 7);
// Рисование однострочного текста в прямоугольнике
DrawSingleLineText(ColorBrightWhite, ColorRed, 14, 10, 50, 1, L" ",
MiddleCenter);
DrawSingleLineText(ColorBrightWhite, ColorRed, 14, 11, 50, 1, L"Курсовой
проект Мишанихиной Анны", MiddleCenter);
DrawSingleLineText(ColorBrightWhite, ColorRed, 14, 12, 50, 1,
L"\"РАСПИСАНЫЕ ЗАНЯТИЙ\"", MiddleCenter);
DrawSingleLineText(ColorBrightWhite, ColorRed, 14, 13, 50, 1, L"Пенза 2013",
MiddleCenter);
DrawSingleLineText(ColorBrightWhite, ColorRed, 14, 14, 50, 1, L" ",
MiddleCenter);
Sleep(3000);
getch();
}
Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников
Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.
Цены ниже, чем в агентствах и у конкурентов
Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит
Бесплатные доработки и консультации
Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки
Гарантируем возврат
Если работа вас не устроит – мы вернем 100% суммы заказа
Техподдержка 7 дней в неделю
Наши менеджеры всегда на связи и оперативно решат любую проблему
Строгий отбор экспертов
К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»
Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован
Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн
Выполнить 2 контрольные работы по Информационные технологии и сети в нефтегазовой отрасли. М-07765
Контрольная, Информационные технологии
Срок сдачи к 12 дек.
Архитектура и организация конфигурации памяти вычислительной системы
Лабораторная, Архитектура средств вычислительной техники
Срок сдачи к 12 дек.
Организации профилактики травматизма в спортивных секциях в общеобразовательной школе
Курсовая, профилактики травматизма, медицина
Срок сдачи к 5 дек.
краткая характеристика сбербанка анализ тарифов РКО
Отчет по практике, дистанционное банковское обслуживание
Срок сдачи к 5 дек.
Исследование методов получения случайных чисел с заданным законом распределения
Лабораторная, Моделирование, математика
Срок сдачи к 10 дек.
Проектирование заготовок, получаемых литьем в песчано-глинистые формы
Лабораторная, основы технологии машиностроения
Срок сдачи к 14 дек.
Вам необходимо выбрать модель медиастратегии
Другое, Медиапланирование, реклама, маркетинг
Срок сдачи к 7 дек.
Ответить на задания
Решение задач, Цифровизация процессов управления, информатика, программирование
Срок сдачи к 20 дек.
Написать реферат по Информационные технологии и сети в нефтегазовой отрасли. М-07764
Реферат, Информационные технологии
Срок сдачи к 11 дек.
Написать реферат по Информационные технологии и сети в нефтегазовой отрасли. М-07764
Реферат, Геология
Срок сдачи к 11 дек.
Разработка веб-информационной системы для автоматизации складских операций компании Hoff
Диплом, Логистические системы, логистика, информатика, программирование, теория автоматического управления
Срок сдачи к 1 мар.
Нужно решить задание по информатике и математическому анализу (скрин...
Решение задач, Информатика
Срок сдачи к 5 дек.
Заполните форму и узнайте цену на индивидуальную работу!