КУРСОВАЯ РАБОТА
по дисциплине «Программирование на ЯВУ»
на тему «Генератор заданий для вычислительной практики»
Содержание
ВВЕДЕНИЕ
.ТЕХНИЧЕСКОЕ ЗАДАНИЕ
.1Введение
.2Основания для разработки
.3Назначение разработки
.3.1Функциональное и эксплуатационное назначение изделия
.3.2Перечень требований пользователя к программному продукту
.3.3Рассмотренные альтернативы
.4Требования к программе или программному изделию
.4.1Стандарты
.4.2Требования к составу и параметрам технических средств
.4.3Требования к информационной и программной совместимости
.4.4Требования к функциональным характеристикам
.4.5Результирующие компоненты изделия
.4.6Носители информации
.4.7Безопасность и секретность
.4.8Рестарт
.4.9Удобства эксплуатации
.4.10Мобильность
.5Требования к программной документации
.ТЕХНИЧЕСКИЙ ПРОЕКТ
.1Введение
.2Назначение разработки
.3 Требования к пограмме или программному изделию
.3.1Стандарты
.3.2Требования к составу и параметрам технических средств
.3.3Требования к информационной и программной совместимости
.3.4Результирующие компоненты изделия
.3.5Безопасность и секретность
.3.6 Рестарт
.4Описание модулей
.4.1 Unit1.cpp
.4.2 Unit2.cpp
.4.3 Unit3.cpp
.4.4 Unit4.cpp
.4.5 Unit5.cpp
.4.6 Unit6.cpp
.4.7 Unit7.cpp
.4.8 Unit8.cpp
.4.9 Unit9.cpp
.4.10 Unit10.cpp
.4.11 Описание основных подпрограмм
.5 Тестирование
.5.1 Цель испытаний
.5.2 Тесты
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
ПРИЛОЖЕНИЯ
ВВЕДЕНИЕ
вorland builder компьютерный программный
Для программного продукта данной курсовой работы операционной средой является система MS-WINDOWS 7 и используемым языком программирования - Borland Builder С++, как наиболее удобный для решения задач высокого уровня; он позволяет легко работать с файлами и содержит большую библиотеку прочих функций.
Программы, написанные на языке C++ (если, конечно, они написаны грамотно), отличаются высокой эффективностью и простым написанием кода, т.е. минимальным объемом работы и максимальной функциональностью. Это обстоятельство обусловило широкое использование языка C++ в тех случаях, когда скорость написание программы имеет ключевое значение.
В целом можно сказать, что знание языка C++ желательно для любого специалиста, которому приходится создавать программы для персонального компьютера, потому что этот язык сочетает в себе высокую эффективность программ и простоту её написания.
Целью создания программного продукта данной курсовой работы является написание программы, которая в будущем будет использоваться другими людьми.
1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ
1.1Введение
Программное обеспечение - это один из самых важных компонентов успешного функционирования всей компьютерной деятельности. В настоящее время существует огромное число прикладных программ, написанных на самых разных языках программирования, начиная от самых ранних - низкоуровневых, так и на современных, более удобных - высокоуровневых.
В данной курсовой работе реализуется программный комплекс "Генератор семестровых заданий для первого курса групп ПО ".
1.2Основания для разработки
Данный программный продукт разрабатывается как задание на курсовую работу по дисциплине "Программное обеспечение на ЯВУ".
1.3Назначение разработки
1.3.1Функциональное и эксплуатационное назначение изделия
В соответствие с заданием программное изделие должно представлять собой генератор заданий для студентов первого курса специальности ПО.
Вариант задания вводятся с клавиатуры или мышью в специальной части программы. Окончание работы и выгрузка - клавиша выхода.
Программа представлена в виде приложения(*.EXE).
Передача данных должна осуществляться через специальные окошки ввода, такие как Edit, Memo, CSpinEdit и др.
Программа кодирует файлы с заданием, что делает невозможным их чтение студентами без использования данного продукта.
Программа имеет «админ панель», для редактирования заданий и настроек программы.
Входные данные, в соответствии с заданием, вводятся пользователем с клавиатуры или мыши.
Выходные данные представляют собой изображение заданий на экране или печать их в текстовый файл на любой носитель.
1.3.2Перечень требований пользователя к программному продукту
Данный программный продукт должен предоставлять программу с интуитивно понятным и простым интерфейсом для выдачи заданий студентам.
1.3.3Рассмотренные альтернативы
При постановке задачи на разработку данного программного изделия рассматривались альтернативы :
в связи с конкретными требованиями к программе (см. п. 1.4.3). Были выбраны:
·программно-аппаратная платформа: ОС Windows 7 на базе микропроцессора фирмы Intel.
·средства разработки: компилятор Borland Builder C++ v.6.0.
·средства разработки: компилятор Borland Builder Delphi v.7.0.
1.4Требования к программе или программному изделию
1.4.1Стандарты
Разработка программной документации и программного изделия должна производиться согласно ГОСТ 19.701-90, ГОСТ 2.304-88. Единая система программной документации.
1.4.2Требования к составу и параметрам технических средств
Программное изделие должно работать на компьютере, совместимом с IBM PC, управляемым семейством ОС Window. Для переноса программы не должны требоваться специальные программные и аппаратные средства.
1.4.3Требования к информационной и программной совместимости
Программное изделие должно быть написано на языке C++ для компилятора Borland Builder C++, и работать под управлением операционной системы MS-Windows XP или более поздней.
1.4.4Требования к функциональным характеристикам
Требования к структуре программы
Система должна представлять собой одну программу для студента и набор программ для преподавателя.
Входные данные
Входными данными являются:
1)состояние клавиатуры (введенное сочетание клавиш);
2)Состояние мыши.
)Файлы заданий к программе, файл конфигурации и файл справки.
Выходные данные
В процессе работы активной программы в зависимости от действий пользователя и состояния программы выходными данными будут являться:
1) пояснительные сообщения следующего характера:
·состояние отсутствия или неправильности заполнения файлов;
·состояние процессов производимых над файлами;
·информация о возможных вариантах действия пользователя.
2) Задания для семестровых в виде текстовых документов или изображений на экране.
) Отображение настроек программы.
Процессы обработки
Процессы обработки должны разделяться на следующие группы:
·проверка наличия и правильного заполнения требуемых файлов;
·раскодирование файлов для их вывода на экран или в файл;
·кодирование информации для записи её в файл;
·генерирование номера варианта в зависимости от года получения задания;
·нахождение и сравнение хеша пароля для входа в «админ панель»;
·информирование пользователя о процессах работы программы на разных этапах ее выполнения.
1.4.5Результирующие компоненты изделия
В комплект поставки программного изделия войдут:
)Исполняемый файл «Задания семестровых 3.2 Final.exe», являющимся ключевым файлом программы.
)Закодированный файл конфигурации «config.dll», в котором хранятся настройки программы и хеш пароля.
)Папка с заданиями «задания», содержащая закодированные файлы типа *.z
)Файл «справка.help», содержащий справку по данной программе и приёмы работы с ней.
)Файл «Конфигуратор заданий.exe» - ключевой файл программы для быстрого перекодирования заданий из их обычной формы(задания содержались в файлах «1.txt»; «2.txt»; «3.txt»; «4.txt».) в файлы заданий, пригодные для использования главной программой.
)Файл «редактор конфигурации.exe» - ключевой файл программы для редактирования файла конфигурации, минуя основную программу.
1.4.6Носители информации
Программное изделие будет размещено в виде группы файлов на диске формата CD-R, либо на жестком диске, либо на флешке USB.
1.4.7Безопасность и секретность
Информация, содержащаяся в программном изделии, является секретной. Программный продукт может свободно копироваться и распространяться и не требует специальных средств защиты от копирования или хранения информации. Но в продукте имеются закодированные файлы, которые декодируются только самой программой и только по вводу пароля(или варианта, в случае получения задания).
1.4.8Рестарт
В случаях рестарта необходимо запустить на выполнение программу. Данные при рестарте сохраняются, в большинстве, но не во всех случаях.
1.4.9Удобства эксплуатации
Интерфейс программы должен быть выполнен таким образом, чтобы обеспечивать простоту и удобство эксплуатации программы. Обо всех выполняемых действиях пользователь должен информироваться. Должна быть функция восстановления случайно утерянных файлов (кроме главного исполняемого файла).
1.4.10Мобильность
Программный продукт не требует дополнительных средств для переноса. Весь процесс переноса состоит в копировании файлов на электронный носитель информации, переносе их на другой компьютер и копирования с носителя в отдельную папку на постоянном внешнем запоминающем устройстве ЭВМ.
1.5Требования к программной документации
Программная документация должна включать следующие документы:
1)техническое задание;
2)технический проект;
)рабочий проект,
)тесты.
В приложении к документу "Рабочий проект" должен быть приведен листинг исходных текстов программного изделия.
2. РАБОЧИЙ ПРОЕКТ
2.1 Введение
В данном программном изделии используются технологии работы с файлами.
.2 Назначение разработки
Программное изделие можно использовать в работе с операционной системой Winows. При помощи данного программного продукта можно получать задания для семестровых работ.
.3 Требования к программе или программному изделию
.3.1 Стандарты
Программное изделие выполнено согласно стандартам, указанным в техническом задании в пункте 1.4.1.
.3.2 Требования к составу и параметрам технических средств
Программное изделие работает на компьютере, совместимом с IBM PC. Программа не требовательна к оперативной памяти.
Вся информация вводится при помощи клавиатуры 101/102. Контроль информации осуществляется при помощи дисплея с видеорежимом не ниже 1024х768х32.
.3.3 Требования к информационной и программной совместимости
Программное изделие написано на языке C++ для компилятора Borland Builder C++ 6.0, и работает под управлением операционной системы MS-Windows XP SP3 - Windows 8-m3.6955.
2.3.4 Результирующие компоненты изделия
Согласно пункту 1.4.6. технического задания все файлы программы предоставляются на диске формата CD-R.
.3.5 Безопасность и секретность
Данный программный продукт имеет внутренние алгоритмы шифрования и дешифрования, позволяющие надёжно защитить информацию от нежелательного просмотра.
.3.6 Рестарт
В случае, когда программа по внешним причинам перестает отвечать на запросы пользователя, необходимо
в системе Windows нажать комбинацию клавиш «CTRL+ALT+DEL» и средствами операционной системы прервать программу
И затем заново запустить ее согласно пункту 1.4.8. технического задания.
2.4 Описание модулей
2.4.1 Unit1.cpp
Данный модуль представляет собой стартовое окно программы, из которого вызываются остальные модули, кроме этого на данном окно вследствие работы с программой может отображаться задания варианта. Кроме функций вызова других модулей, данный модуль может сохранять выбранное задание в файл.
.4.2 Unit2.cpp
Данный модуль представляет собой «админ панель» программы. Его основная функции: чтение и редактирование файла конфигурации, а также редактирование/добавление файлов заданий. Помимо этих функций в данном модули реализованы алгоритмы защиты от записи ошибочной информации в файл конфигурации. А так же в этом модуле имеются функции чтения/записи файла конфигурации, использующиеся в большинстве других модулей, для получения настроек конфигурации программы.
.4.3 Unit3.cpp
Данный модуль представляет собой алгоритм защиты «админ панели» от посторонних лиц. Он умеет извлекать хеш из пароля, и сравнивать его с хешем имеющимся в файле конфигурации. А так же этот модуль имеет функцию вызова модуля смены пароля.
.4.4 Unit4.cpp
Данный модуль представляет собой алгоритм смены пароля. Он имеет функцию извлечения хеша из пароля для сверки его с хешем в файле конфигурации, а также для записи хеша пароля в файл конфигурации в случае удачной смены пароля.
.4.5 Unit5.cpp
В данном модуле реализован механизм выдачи заданий для определённого варианта и года.
.4.6 Unit6.cpp
Данный модуль служит для восстановления файла конфигурации в случае утери или порчи такового. В нём реализованы механизмы отслеживающие правильность заполнения данных в файл конфигурации.
.4.7 Unit7.cpp
Данный модуль служит для добавления варианта с заданиями в программу.
2.4.8 Unit8.cpp
Данный модуль служит для редактирования варианта с заданиями в программе.
.4.9 Unit9.cpp
Данный модуль обслуживает остальные модули и имеет функции: чтения/записи из/в файл(а) с декодирования/кодирования информации.
.4.10 Unit10.cpp
Данный модуль содержит справку по программе и основные приёмы работы с программой, рекомендации и требования.
2.4.11 Описание основных подпрограмм
Подпрограмма void coding();
Входные данные: Form9->Memo1
Выходные данные: выходными данными является временное помещение кодированных данных в Memo1 на 9ой форме
Процессы обработки: происходит посимвольное кодирование информации.
Подпрограмма void decoding();
Входные данные: Form9->Memo1
Выходные данные: выходными данными является временное помещение декодированных данных в Memo1 на 9ой форме
Процессы обработки: происходит посимвольное декодирование информации.
Подпрограмма void file_read(String s);
Входные данные: файл название которого содержится в s
Выходные данные: является запись данных из файла в Form9->Memo1
Процессы обработки: происходит чтение информации из файла с именем s.
Подпрограмма void file_write(String s);
Входные данные: является запись данных из файла в Form9->Memo1Выходные данные: файл название которого содержится в s
Процессы обработки: происходит запись информации в файл с именем s.
Подпрограмма protect();
Входные данные: Form2->Memo1
Выходные данные: код ошибки в виде целочисленной переменной
Процессы обработки: происходит проверка данных на соответствование правилам структуры файла, и в случае их не соблюдения выдаётся код на ошибку.
Подпрограмма void write_config() ;
Входные данные: Form2->Memo1
Выходные данные: файл config.dll
Процессы обработки: происходит запись информации в файл config.dll, с предшествующей проверкой его на соответствование правилам структуры файла.
Подпрограмма void read_config();
Входные данные: файл config.dll
Выходные данные: Form2->Memo1
Процессы обработки: происходит чтение информации из файла config.dll, с последующей проверкой его на соответствование правилам структуры файла и занесением данных в переменные настроек.
Текст подпрограмм
Cм. приложение.
2.5 Тестирование
.5.1 Цель испытаний
Выяснить поведение программы в различных ситуациях, созданных пользователем.
.5.2 Тесты
Тест №1
Действия: первый запуск программы.
Реакция программы: открывается главное окно программы.
См. рисунок 1
Рисунок 1 Тест №1
Тест №2
Действия: повторный запуск программы.
Реакция программы: открывается второе окно программы. См. рисунок 2.
Рисунок 2. Тест №2
Тест №3
Действия:
1)Выбор задания;
2)Сохранение задания в файл.
Реакция программы: программа отображает задание на главной форме, после чего по требованию пользователя сохраняет его в файл. См. рисунок 3.
Рисунок 3. Тест №3
Тест №4
Действия: вход в «админ панель».
Реакция программы: выводится запрос пароля и при удачном вводе происходит вход. См. рисунок 4.
Рисунок 4. Тест №4
Тест №5
Действия: вход в «админ панель» при неправильном вводе пароля.
Реакция программы: выводится сообщение об ошибке ввода пароля. См. рисунок 5.
Рисунок 5. Тест №5
ЗАКЛЮЧЕНИЕ
Выполнение разработки должно включать три стадии:
1)техническое задание;
2)технический проект;
)рабочий проект.
На стадии "Техническое задание" проводится постановка задачи, разработка требований к программному изделию, изучение литературы по задаче и оформление документа "Техническое задание".
На стадии "Технический проект" проводится анализ данной предметной области, выделение основных взаимодействий между пользователем, выяснение структуры программного комплекса, активной программой и резидентом. В заключение данного этапа оформляется документ "Технический проект".
На стадии "Рабочий проект" проводится разработка схем алгоритмов для каждого из функциональных модулей, физическое проектирование программного изделия, разработка тестов, тестирование и отладка программных модулей. В заключение данного этапа оформляется документ "Рабочий проект".
Приемка программного изделия осуществляется при сдаче документально оформленных этапов разработки и проведении испытаний на основе установленных тестов. Тесты должны быть разработаны на этапе рабочего проектирования программного изделия.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1Оверленд Брайан - С++ без страха Санкт-Петербург 2007
2Александреску А. - Современное проектирование на C++ Москва-Санкт-Питербург-Киев 2012
Сабуров С. - Языки программирования C и C++ МиК 2008
Н. Культин - С++ в задачах и примерах Санкт-Питербург 2009
Приложение
Листинг файла Unit1.cpp
//---------------------------------------------------------------------------
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit5.h"
#include "Unit6.h"
#include "Unit9.h"
#include "Unit10.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"*Form1;var=0;paswd="";kof=0;paswdhelp="";
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------__fastcall TForm1::Button1Click(TObject *Sender)
{
if (read_config()) exit(1);
else Form3->ShowModal();
}
//---------------------------------------------------------------------------__fastcall TForm1::Button4Click(TObject *Sender)
{
exit(1);
}
//---------------------------------------------------------------------------
__fastcall TForm1::Button2Click(TObject *Sender)
{
if (read_config()) exit(1);
else {
Form5->CSpinEdit1->MaxValue = var;
String s;
DateTimeToString(s,"yyyy",Date());
Form5->CSpinEdit2->Value = StrToInt(s);
Form5->ShowModal();
}
}
//---------------------------------------------------------------------------
__fastcall TForm1::Button3Click(TObject *Sender)
{
if (read_config()) exit(1);
else
if (SaveDialog1->Execute()){
Form1->Memo1->Lines->SaveToFile(SaveDialog1->FileName);
}
}
//---------------------------------------------------------------------------__fastcall TForm1::Button5Click(TObject *Sender)
{
Form6->ShowModal();
}
//---------------------------------------------------------------------------
__fastcall TForm1::Button6Click(TObject *Sender)
{
if (FileExists("справка.help")) Form10->Memo1->Lines->LoadFromFile("справка.help");
else Form10->Memo1->Lines->Strings[0] = "не найден файл справки!";
Form10->ShowModal();
}
//---------------------------------------------------------------------------
Листинг файла Unit2.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#include "Unit1.h"
#include "Unit7.h"
#include "Unit8.h"
#include "Unit9.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"*Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------reads(String s)
{
if (s.Pos("<")) s.Delete(1,s.Pos("<"));
else return "error#2"; //файл конфигурации повреждён!!!
if (s.Pos(">")) s.Delete(s.Pos(">"),s.Length());
else return "error#2"; //файл конфигурации повреждён!!!
if (s!="") return s;
else return "error#1"; //строка пуста
}
//---------------------------------------------------------------------------_config()
{
String s;
if (FileExists("config.dll")) {
file_read("config.dll");
Form2->Memo1->Text=Form9->Memo1->Text;
}
else {
ShowMessage("не найден файл конфигуации");
return 1;
}
//------------------количество вариантов
s = reads(Form2->Memo1->Lines->Strings[0]);
if (s=="error#2") {
ShowMessage("Отсутствуют операторные скобки!");
return 1;
}
if (s=="error#1") {
ShowMessage("Отсутствует значение!");
return 1;
}
for (int i=1; i<=s.Length(); i++)
if (s[i]<'0' || s[i]>'9') {
ShowMessage("Неправильный формат!");
return 1;
}
if (s.Length()>9) {
ShowMessage("Недопустимо большое число");
return 2;
}
if (StrToInt(s)<0) {
ShowMessage("Недопустимо малое число");
return 3;
}
var=StrToInt(s);
//------------------пароль админа
s=reads(Form2->Memo1->Lines->Strings[1]);
if (s=="error#2") {
ShowMessage("Отсутствуют операторные скобки!");
return 1;
}
if (s=="error#1") {
ShowMessage("Отсутствует значение!");
return 1;
}
paswd=s;
//-----------------коэффициэнт генерации
s=reads(Form2->Memo1->Lines->Strings[2]);
if (s=="error#2") {
ShowMessage("Отсутствуют операторные скобки!");
return 1;
}
if (s=="error#1") {
ShowMessage("Отсутствует значение!");
return 1;
}
for (int i=1; i<=s.Length(); i++)
if (s[i]<'0' || s[i]>'9') {
ShowMessage("Неправильный формат!");
return 1;
}
if (s.Length()>9) {
ShowMessage("Недопустимо большое число");
return 2;
}
if (StrToInt(s)<0) {
ShowMessage("Недопустимо малое число");
return 3;
}
kof=StrToInt(s);
//------------------подсказка о пароле
s=reads(Form2->Memo1->Lines->Strings[3]);
if (s=="error#2") {
ShowMessage("Отсутствуют операторные скобки!");
return 1;
}
if (s=="error#1") {
ShowMessage("Отсутствует значение!");
return 1;
}
paswdhelp=s;
return 0;
}
//---------------------------------------------------------------------------_config()
{
String s;
//------------------количество вариантов
s = reads(Form2->Memo1->Lines->Strings[0]);
if (s=="error#2") {
ShowMessage("Отсутствуют операторные скобки!");
return 1;
}
if (s=="error#1") {
ShowMessage("Отсутствует значение!");
return 1;
}
for (int i=1; i<=s.Length(); i++)
if (s[i]<'0' || s[i]>'9') {
ShowMessage("Неправильный формат!");
return 1;
}
if (s.Length()>9) {
ShowMessage("Недопустимо большое число");
return 2;
}
if (StrToInt(s)<0) {
ShowMessage("Недопустимо малое число");
return 3;
}
var=StrToInt(s);
//------------------пароль админа
s=reads(Form2->Memo1->Lines->Strings[1]);
if (s=="error#2") {
ShowMessage("Отсутствуют операторные скобки!");
return 1;
}
if (s=="error#1") {
ShowMessage("Отсутствует значение!");
return 1;
}
paswd=s;
//-----------------коэффициэнт генерации
s=reads(Form2->Memo1->Lines->Strings[2]);
if (s=="error#2") {
ShowMessage("Отсутствуют операторные скобки!");
return 1;
}
if (s=="error#1") {
ShowMessage("Отсутствует значение!");
return 1;
}
for (int i=1; i<=s.Length(); i++)
if (s[i]<'0' || s[i]>'9') {
ShowMessage("Неправильный формат!");
return 1;
}
if (s.Length()>9) {
ShowMessage("Недопустимо большое число");
return 2;
}
if (StrToInt(s)<0) {
ShowMessage("Недопустимо малое число");
return 3;
}
kof=StrToInt(s);
//------------------подсказка о пароле
s=reads(Form2->Memo1->Lines->Strings[3]);
if (s=="error#2") {
ShowMessage("Отсутствуют операторные скобки!");
return 1;
}
if (s=="error#1") {
ShowMessage("Отсутствует значение!");
return 1;
}
paswdhelp=s;
Form9->Memo1->Text=Form2->Memo1->Text;
file_write("config.dll");
return 0;
}
//---------------------------------------------------------------------------__fastcall TForm2::Button1Click(TObject *Sender)
{
if (write_config()) exit(1);
else ShowMessage("Именения успешно внесены");
}
//---------------------------------------------------------------------------
__fastcall TForm2::Button2Click(TObject *Sender)
{
Memo1->Clear();
Memo1->Lines->Add("количество вариантов: <49>");
Memo1->Lines->Add("пароль администратора: <650/32-,+> внимание, пароль находится в защифрованном виде!");
Memo1->Lines->Add("коэффициэнт генерации: <56>");
Memo1->Lines->Add("подсказка о пароле: <s>");
}
//---------------------------------------------------------------------------
__fastcall TForm2::Button3Click(TObject *Sender)
{
if (read_config()) exit(1);
else Form7->ShowModal();
}
//---------------------------------------------------------------------------
__fastcall TForm2::Button4Click(TObject *Sender)
{
if (read_config()) exit(1);
else {
Form8->CSpinEdit1->MaxValue=var;
Form8->ShowModal();
}
}
//---------------------------------------------------------------------------
__fastcall TForm2::Button5Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
Листинг файла Unit3.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit3.h"
#include "Unit2.h"
#include "Unit1.h"
#include "Unit4.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"*Form3;
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
__fastcall TForm3::Button2Click(TObject *Sender)
{
Edit1->Text="";
Close();
}
//---------------------------------------------------------------------------
__fastcall TForm3::Button1Click(TObject *Sender)
{
String s=Edit1->Text, a=paswd;
for (int i=1; i<=s.Length(); i++)
s[i]=(char)(s[i]-i%5-s[i]%4-1);
if (s==a) {
if (read_config()) exit(1);
else {
Form2->ShowModal();
Close();
Edit1->Text="";
}
}
else ShowMessage("пароль не верный!");
}
//---------------------------------------------------------------------------__fastcall TForm3::Button3Click(TObject *Sender)
{
Edit1->Text="";
Form4->ShowModal();
}
//---------------------------------------------------------------------------__fastcall TForm3::Button4Click(TObject *Sender)
{
Edit1->Text="";
ShowMessage("подсказка о пароле: " + paswdhelp);
}
//---------------------------------------------------------------------------
Листинг файла Unit4.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit4.h"
#include "Unit1.h"
#include "Unit9.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"*Form4;
//---------------------------------------------------------------------------
__fastcall TForm4::TForm4(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
__fastcall TForm4::Button2Click(TObject *Sender)
{
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";
Close();
}
//---------------------------------------------------------------------------
__fastcall TForm4::Button1Click(TObject *Sender)
{
String s=Edit1->Text, a=paswd;
for (int i=1; i<=a.Length(); i++)
a[i]=(char)(a[i]-Power(i,2));
if (s==a)
if (Edit2->Text!=Edit3->Text) ShowMessage("пароли не совпадают!");
else
if (Edit2->Text=="") ShowMessage("Заполните поле новый пароль!");
else
if (Edit4->Text=="") ShowMessage("Введите подсказку о пароле!");
else {
String newpas=Edit2->Text;
for (int i=1; i<=newpas.Length(); i++)
newpas[i]=(char)(newpas[i]-i%5-newpas[i]%4-1);
file_read("config.dll");
Memo1->Text=Form9->Memo1->Text;
paswd=newpas;
paswdhelp=Edit4->Text;
Memo1->Lines->Strings[1]="пароль администратора: <" + newpas + "> внимание, пароль находится в защифрованном виде!";
Memo1->Lines->Strings[3]="подсказка о пароле: <" + Edit4->Text + ">";
Form9->Memo1->Text=Form4->Memo1->Text;
file_write("config.dll");
ShowMessage("пароль успешно сменён");
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";
Close();
}
else ShowMessage("пароль не верный!");
}
//---------------------------------------------------------------------------
Листинг файла Unit5.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit5.h"
#include "Unit1.h"
#include "Unit9.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"*Form5;
//---------------------------------------------------------------------------
__fastcall TForm5::TForm5(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------__fastcall TForm5::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------__fastcall TForm5::Button1Click(TObject *Sender)
{
int n=CSpinEdit1->Value;
int h=CSpinEdit2->Value;
//генератор заданий
n=h/n+kof;
n=n*n*n;
n=n/kof;
n=n+h;
n=n%var+1;
if (FileExists("Задания//"+IntToStr(n)+".z")) {
file_read("Задания//"+IntToStr(n)+".z");
Form1->Memo1->Text=Form9->Memo1->Text;
Close();
}
else
ShowMessage("такой вариант не найден");
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
Листинг файла Unit6.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit6.h"
#include "Unit1.h"
#include "Unit2.h"
#include "Unit9.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"*Form6;
//---------------------------------------------------------------------------
__fastcall TForm6::TForm6(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------()
{
String s1=Form6->Edit1->Text;
String s2=Form6->Edit2->Text;
String s3=Form6->Edit3->Text;
String s4=Form6->Edit4->Text;
if (s1=="" || s2=="" || s3=="" || s4=="") return 4; //имеются пустые поля
for (int i=1; i<=s1.Length(); i++)
if (s1[i]<'0' ||s1[i]>'9') return 1; //несовместимый тип данных
for (int i=1; i<=s3.Length(); i++)
if (s3[i]<'0' ||s3[i]>'9') return 1; //несовместимый тип дынных
if (s1.Length()>4 || s3.Length()>9) return 2; //недопутимо большое число
if (StrToInt(s1)<0 || StrToInt(s3)<0) return 3; //недопустимо малое число
return 0;
}
//---------------------------------------------------------------------------__fastcall TForm6::Button2Click(TObject *Sender)
{
Edit1->Text="0";
Edit2->Text="";
Edit3->Text="0";
Edit4->Text="";
Close();
}
//---------------------------------------------------------------------------__fastcall TForm6::Button1Click(TObject *Sender)
{
switch (protect()) {
case 1: ShowMessage("несовместимый тип данных"); break;
case 2: ShowMessage("введены недопутимо большие числа"); break;
case 3: ShowMessage("введены недопутимо малые числа(меньше 0)"); break;
case 4: ShowMessage("Заполните пустые поля!"); break;
case 0:
Memo1->Clear();
Memo1->Lines->Add("количество вариантов: <" + Edit1->Text + ">");
String s=Edit2->Text;
for (int i=1; i<=s.Length(); i++)
s[i]=(char)(s[i]-i%5-s[i]%4-1);
Memo1->Lines->Add("пароль администратора: <" + s + "> внимание, пароль находится в защифрованном виде!");
Memo1->Lines->Add("коэффициент генерации: <" + Edit3->Text + ">");
Memo1->Lines->Add("подсказка о пароле: <" + Edit4->Text + ">");
Form9->Memo1->Text=Memo1->Text;
file_write("config.dll");
ShowMessage("Файл конфигурации успешно создан.");
Edit1->Text="0";
Edit2->Text="";
Edit3->Text="0";
Edit4->Text="";
Close();
if (read_config()) exit(1);
}
}
//---------------------------------------------------------------------------
Листинг файла Unit7.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit7.h"
#include "Unit2.h"
#include "Unit9.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"*Form7;
//---------------------------------------------------------------------------
__fastcall TForm7::TForm7(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------__fastcall TForm7::Button2Click(TObject *Sender)
{
Memo1->Lines->Clear();
Close();
}
//---------------------------------------------------------------------------__fastcall TForm7::Button1Click(TObject *Sender)
{
Form9->Memo1->Text=Memo1->Text;
file_write("Задания\\"+IntToStr(++var)+".z");
file_read("config.dll");
Form9->Memo1->Lines->Strings[0]="количество вариантов: <" + IntToStr(var) + ">";
file_write("config.dll");
Memo1->Lines->Clear();
ShowMessage("Вариант успешно добавлен.");
if (read_config()) exit(1);
Close();
}
//---------------------------------------------------------------------------
Листинг файла Uni8.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit8.h"
#include "Unit9.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"*Form8;variant=1;
//---------------------------------------------------------------------------
__fastcall TForm8::TForm8(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------__fastcall TForm8::Button1Click(TObject *Sender)
{
Form9->Memo1->Text=Memo1->Text;
file_write("Задания\\"+IntToStr(CSpinEdit1->Value)+".z");
Memo1->Lines->Clear();
Memo1->Enabled = false;
Button1->Enabled = false;
ShowMessage("Вариант успешно изменён.");
Close();
}
//---------------------------------------------------------------------------__fastcall TForm8::Button2Click(TObject *Sender)
{
Memo1->Lines->Clear();
Memo1->Enabled = false;
Button1->Enabled = false;
Close();
}
//---------------------------------------------------------------------------__fastcall TForm8::Button3Click(TObject *Sender)
{=CSpinEdit1->Value;_read("Задания\\"+IntToStr(variant)+".z");->Text=Form9->Memo1->Text;->Enabled = true;->Enabled = true;
}
//---------------------------------------------------------------------------
Листинг файла Unit9.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit9.h"
#define Form1 Form9
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"*Form9;
//---------------------------------------------------------------------------
__fastcall TForm9::TForm9(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
coding()
{
int k=Form1->Memo1->Lines->Count;
for (int i=0; i<k; i++) {
String s=Form1->Memo1->Lines->Strings[i];
int k=s.Length();
for (int i=1; i<=k; i++)
s[i]=s[i]-(i*i+i)%3-1;
Form1->Memo1->Lines->Strings[i]=s;
}
}
//---------------------------------------------------------------------------decoding()
{
int k=Form1->Memo1->Lines->Count;
for (int i=0; i<k; i++) {
String s=Form1->Memo1->Lines->Strings[i];
int k=s.Length();
for (int i=1; i<=k; i++)
s[i]=s[i]+(i*i+i)%3+1;
Form1->Memo1->Lines->Strings[i]=s;
}
}
//---------------------------------------------------------------------------file_read(String s)
{
Form1->Memo1->Lines->LoadFromFile(s);
decoding();
}
//---------------------------------------------------------------------------file_write(String s)
{
coding();
Form1->Memo1->Lines->SaveToFile(s);
}
//------------------------------------------
Листинг файла Unit10.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit10.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"*Form10;
//---------------------------------------------------------------------------
__fastcall TForm10::TForm10(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
Блок-схемы подпрограмм