Добавил:
при поддержке музыки группы Anacondaz Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа.docx
Скачиваний:
31
Добавлен:
06.04.2022
Размер:
5.94 Mб
Скачать

1.3. Дополнительные возможности

Перед входом в систему пользователь должен ввести логин- user и пароль- mtuci1234. При неправильном вводе выдается сообщение «Неправильный логин или пароль, проверьте правильность вводимых данных». Для новых пользователей есть возможность регистрации: написать новый логин и пароль, нажать на кнопку регистрации. Далее выдаст сообщение об успешной регистрации, продемонстрировано на рисунке 16. Запись логина и пароля нового пользователя ведется в Microsoft Access. Это продемонстрировано на рисунке 17.

Рисунок 16 - Сообщение об создании учетной записи

Рисунок 17 - Запись учетной записи в Microsoft Access

Так же время на авторизацию ограниченно элементом управления Timer. Для удобства отслеживания оставшегося времени на форме находится ProgressBar. При истечении времени форма так же закрывается. При успешном вводе выводится соответствующие соответствующее сообщение и осуществляется переход на форму с 1 вопросом. Все это представлено на рисунке 18.

Рисунок 18 - Форма для авторизации/регистрации пользователя

Далее представлен код данной формы:

#pragma endregion

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)

{

Application::Exit();

}

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)

{

bool check = Abibl::Class1::Check_Log_Password(textBox1, textBox2);

if (check)

{

MyForm1^ gform1 = gcnew MyForm1;

gform1->Show();

gform1->Owner = this;

this->Hide();

gform1->Visible = true;

timer1->Stop();

MessageBox::Show("Добро пожаловать!", "", MessageBoxButtons::OK, MessageBoxIcon::Information);

}

else

{

textBox1->Text == "";

textBox2->Text == "";

MessageBox::Show("Неправильный логин или пароль, проверьте правильность вводимых данных!", "Ошибка", MessageBoxButtons::OK, MessageBoxIcon::Information);

}

}

private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e)

{

}

private: System::Void textBox2_TextChanged(System::Object^ sender, System::EventArgs^ e) {

}

private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {

if (textBox1->Text == "" || textBox2->Text == "")

MessageBox::Show("Заполните все поля!");

else

{

Abibl::Class1::Add_Log_Password(textBox1, textBox2);

MyForm1^ gform1 = gcnew MyForm1;

gform1->Show();

gform1->Owner = this;

this->Hide();

gform1->Visible = true;

timer1->Stop();

}

}

private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) {

MyForm19^ gform19 = gcnew MyForm19(this);

gform19->Show();

this->Hide();

}

private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) {

timer1->Start();

}

private: System::Void timer1_Tick_1(System::Object^ sender, System::EventArgs^ e) {

progressBar1->Value += 1;

if (progressBar1->Value == progressBar1->Maximum)

{

MessageBox::Show("Время для ввода пароля истекло", "Авторизация", MessageBoxButtons::OK, MessageBoxIcon::Information);

this->timer1->Stop();

Application::Exit();

}

}

};

}

Далее представлен код из Dll-библиотеки, для записи данных в Microsoft Access при регистрации:

void Class1::Add_Log_Password(TextBox^ Login, TextBox^ Password)

{

auto connection = gcnew OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " + Application::StartupPath + "\\user.mdb"); connection->Open();

auto strConnect = gcnew OleDbCommand("INSERT INTO [LOG_PASS] (" + "[Log], [Password]) VALUES('" + Login->Text + "', '" + Password->Text + " ')");

strConnect->Connection = connection;

strConnect->ExecuteNonQuery();

connection->Close();

MessageBox::Show("Учётная запись успешно создана!");

}

bool Class1::Check_Log_Password(TextBox^ Login, TextBox^ Password)

{

auto connection = gcnew OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " + Application::StartupPath + "\\user.mdb"); connection->Open();

auto strConnect = gcnew OleDbCommand("SELECT * FROM LOG_PASS WHERE Log = '" + Login->Text + "'AND Password = '" + Password->Text + "'");

strConnect->Connection = connection;

if (strConnect->ExecuteScalar() != nullptr)

{

return true;

}

else

{

return false;

}

connection->Close();

}

}

Далее представлен код из Dll-библиотеки, для реализации записи массива с результатами тестирования в Microsoft Access:

void Class1::create_file() {

if (File::Exists("Mass_BD.mdb"))

File::Delete("Mass_BD.mdb");

ADOX::Catalog^ k = gcnew ADOX::CatalogClass();

try {

k->Create("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " Application::StartupPath + "/Mass_BD.mdb");

MessageBox::Show("Создание файла");

}

catch (System::Runtime::InteropServices::COMException^ situation)

{

MessageBox::Show(situation->Message);

}

finally

{

k = nullptr;

}

};

void Class1::structure() {

auto p = gcnew OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " Application::StartupPath + "/Mass_BD.mdb");

p->Open();

auto c = gcnew OleDbCommand("CREATE TABLE [test] ([Номер вопрос] char(200), [Ответ] char (200));", p);

try {

c->ExecuteNonQuery();

MessageBox::Show("База данных создана");

}

catch (System::Runtime::InteropServices::COMException^ situation)

{

MessageBox::Show(situation->Message);

}

p->Close();

};

void Class1::add_zap() {

for (int i = 0; i < 16; i++)

{

auto p = gcnew OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + Application::StartupPath + "/Mass_BD.mdb");

p->Open();

if (ans[i] == 1) {

auto c = gcnew OleDbCommand("INSERT INTO[Результаты теста] ([Номер вопроса], [Ответ]) VALUES('" + (i + 1) + "','Верно')");

c->Connection = p;

c->ExecuteNonQuery();

}

else

{

{ auto c = gcnew OleDbCommand("INSERT INTO[Результаты теста] ([Номер вопроса], [Ответ]) VALUES('" + (i + 1) + "','Неверно')");

c->Connection = p;

c->ExecuteNonQuery();

}

}

p->Close();

}

MessageBox::Show("в таблицу добавлены записи", " ", MessageBoxButtons::OK, MessageBoxIcon::Information);

}

Чтение электронного пособия осуществляется через элемент управления RichTextBox ниже представлен код формы:

#pragma endregion

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {

this->Hide();

otherform->Show();

}

private: System::Void MyForm18_Load(System::Object^ sender, System::EventArgs^ e) {

richTextBox1->LoadFile(Application::StartupPath + "\\Пособие.rtf");

}

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

MyForm1^ f1 = gcnew MyForm1();

this->Hide();

f1->ShowDialog();

}

};

}

Ниже представлен код диаграммы для отображения результатов тестирования:

private: System::Void MyForm17_Load(System::Object^ sender, System::EventArgs^ e) {

Abibl::Class1^ cl = gcnew Abibl::Class1;

chart1->Series[0]->Points->AddXY(1, cl->correct);

chart1->Series[1]->Points->AddXY(2, cl->wrong);

}

Для осуществления записи массива в Microsoft Word и текстовый файл была создана Dll-библиотека. Ниже представлен код функции записи результата тестирования в Microsoft Word:

void Class1::ZapisWord(int len, DataGridView^ dgv) {

Microsoft::Office::Interop::Word::_Application^ WORD = gcnew Microsoft::Office::Interop::Word::Application();

WORD->Visible = true;

auto t = Type::Missing;

auto doc = WORD->Documents->Add(t, t, t, t);

WORD->Selection->TypeText("Таблица ответов");

System::Object^ t1 = Microsoft::Office::Interop::Word::WdDefaultTableBehavior::wdWord9TableBehavior;

System::Object^ t2 = Microsoft::Office::Interop::Word::WdAutoFitBehavior::wdAutoFitContent;

WORD->ActiveDocument->Tables->Add(WORD->Selection->Range, 2, len, t1, t2);

for (int i = 0; i <= len; i++) {

WORD->ActiveDocument->Tables[1]->Cell(0, i)->Range->Text = Convert::ToString(i);

WORD->ActiveDocument->Tables[1]->Cell(1, i)->Range->Text = Convert::ToString(dgv->Rows[1]->Cells[i]->Value);

}

MessageBox::Show("Запись результатов в Word прошла успешно", "Запись в Microsoft Word");

}

Далее представлен рисунок 19 с записью результата.

Рисунок 19 - Запись результата в Microsoft Word

Код для записи в текстовый файл:

void Class1::zapis(DataGridView^ grid)

{

String^ f = Interaction::InputBox("Введите путь" + "\n Путь по умолчанию указан в поле.Укажите свой путь, прописав, к примеру, C:\\Users\\user\\Downloads", "Ввод", "C:\\TextFile", -1, -1);

String^ filename = f + ".txt";

try

{

auto fk = System::Text::Encoding::GetEncoding(1251);

auto Z = gcnew IO::StreamWriter(filename, false, fk);

for (int i = 0; i < grid->ColumnCount; i++)

{

Z->WriteLine(Convert::ToString(grid->Rows[1]->Cells[i]->Value));

}

Z->Close();

MessageBox::Show("Запись в текстовый файл успешна", "Запись в текстовый файл");

}

catch (System::Exception^ E)

{

MessageBox::Show(E->Message + "\nОшибка", "Ошибка");

}

}

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

Рисунок 20 - Текстовый файл с результатами тестирования

Так же вывод результатов осуществляется в DataGridView, ниже представлен код:

namespace Abibl {

void Class1::Vivod(double c, TextBox^ t)

{

t->Text = Convert::ToString(c);

}

void Class1::output_mass(int* mas, int len, DataGridView^ grid)

{

grid->ColumnCount = len;

grid->RowCount = 2;

for (int i = 0; i < len; i++)

{

grid->Rows[0]->Cells[i]->Value = "[" + i + "]";

}

for (int i = 0; i < len; i++)

{

grid->Rows[1]->Cells[i]->Value = mas[i];

}

int width = 0;

for (int s = 0; s < len; s++)

{

width += grid->Columns[s]->Width;

}

if (width > 41000)

grid->Width = 41000;

else

grid->Width = width + 3;

}

static int* ans = new int[16];

static int n = 0;

void Class1::Output_result(int* ans, int n, DataGridView^ d)

{

d->ColumnCount = n + 1;

d->RowCount = 2;

d->Rows[0]->Cells[0]->Value = "№ вопроса";

d->Rows[1]->Cells[0]->Value = "Ответ";

for (int i = 1; i <= n; i++)

{

d->Rows[0]->Cells[i]->Value = i;

if (ans[i - 1] == 1) {

d->Rows[1]->Cells[i]->Value = "Верно";

}

else {

d->Rows[1]->Cells[i]->Value = "Неверно";

}

}

int width = 0;

for (int s = 0; s < d->ColumnCount; s++)

{

width += d->Columns[s]->Width;

}

d->Width = width;

}

Далее представлен код формы, где содержатся вышеперечисленные функции:

#pragma endregion

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {

Abibl::Class1^ cl = gcnew Abibl::Class1;

cl->Output_result(cl->ans, 16, dataGridView1);

cl->Vivod(cl->correct, textBox1);

cl->Vivod(cl->wrong, textBox2 );

cl->zapis(dataGridView1);

}

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

Application::Exit();

}

private: System::Void MyForm17_Load(System::Object^ sender, System::EventArgs^ e) {

MessageBox::Show("Тестирование завершено! Узнайте Ваш результат.", "", MessageBoxButtons::OK, MessageBoxIcon::Information);

Abibl::Class1^ cl = gcnew Abibl::Class1;

chart1->Series[0]->Points->AddXY(1, cl->correct);

chart1->Series[1]->Points->AddXY(2, cl->wrong);

}

private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {

Abibl::Class1::ZapisWord(16, dataGridView1);

}

private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) {

Abibl::Class1::create_file();

Abibl::Class1::structure();

Abibl::Class1::add_zap();

}

};

}

Для реализации проверки верности ответа была в Dll библиотеке были созданы функции для каждого вопроса:

bool Class1::v1(TextBox^ textBox1) {

if ((textBox1->Text == "Персональные данные") || (textBox1->Text == "персональные данные"))

{

correct++;

ans[n] = 1;

n++;

return true;

}

else

{

wrong++;

ans[n] = 0;

n = n + 1;

return false;

}

}

bool Class1::v3(CheckBox^ c1, CheckBox^ c2, CheckBox^ c3, CheckBox^ c4) {

if ((c1->Checked == true) && (c2->Checked == false) && (c3->Checked == false) && (c4->Checked == true))

{

correct++;

ans[n] = 1;

n++;

return true;

}

else

{

wrong++;

ans[n] = 0;

n++;

return false;

}

}

bool Class1::v2(RadioButton^ r1, RadioButton^ r2, RadioButton^ r3, RadioButton^ r4) {

if (r3->Checked)

{

int rez = 1;

correct++;

ans[n] = rez;

n++;

return true;

}

else

{

wrong++;

ans[n] = 0;

n++;

return false;

}

}

bool Class1::v4(RadioButton^ r1, RadioButton^ r2, RadioButton^ r3, RadioButton^ r4) {

if (r4->Checked)

{

correct++;

ans[n] = 1;

n++;

return true;

}

else

{

wrong++;

ans[n] = 0;

n++;

return false;

}

}

bool Class1::v5(TextBox^ t) {

if ((t->Text == "Информационная система") || (t->Text == "информационная система") || (t->Text == "ИС"))

{

correct++;

ans[n] = 1;

n++;

return true;

}

else

{

wrong++;

ans[n] = 0;

n++;

return false;

}

}

bool Class1::v6(CheckBox^ c1, CheckBox^ c2, CheckBox^ c3, CheckBox^ c4) {

if ((c1->Checked == true) && (c2->Checked == false) && (c3->Checked == true) && (c4->Checked == true))

{

correct++;

ans[n] = 1;

n++;

return true;

}

else

{

wrong++;

ans[n] = 0;

n++;

return false;

}

}

bool Class1::v7(ListBox^ l1, ListBox^ l2, ListBox^ l3) {

if ((l1->Items[0] == "Доступность") && (l2->Items[0] == "Целостность") && (l3->Items[0] == "Конфиденциальность"))

{

correct++;

ans[n] = 1;

n++;

return true;

}

else

{

wrong++;

ans[n] = 0;

n++;

return false;

}

}

bool Class1::v8(ListBox^ l1, ListBox^ l2, ListBox^ l3) {

if ((l1->Items[0] == "законодательный уровень") && (l2->Items[0] == "административный уровень") && (l3->Items[0] == "процедурный уровень"))

{

correct++;

ans[n] = 1;

n++;

return true;

}

else

{

wrong++;

ans[n] = 0;

n++;

return false;

}

}

bool Class1::v9(TrackBar^ t) {

if (t->Value == 3)

{

correct++;

ans[n] = 1;

n++;

return true;

}

else

{

wrong++;

ans[n] = 0;

n++;

return false;

}

}

bool Class1::v10(ComboBox^ c1, ComboBox^ c2) {

if (((c1->SelectedIndex == 1) && (c2->SelectedIndex == 3)) || ((c2->SelectedIndex == 1) && (c1->SelectedIndex == 3)))

{

correct++;

ans[n] = 1;

n++;

return true;

}

else

{

wrong++;

ans[n] = 0;

n++;

return false;

}

}

bool Class1::v11(ComboBox^ c1, ComboBox^ c2, ComboBox^ c3) {

if ((c1->SelectedIndex == 0) && (c2->SelectedIndex == 1) && (c3->SelectedIndex == 0))

{

correct++;

ans[n] = 1;

n++;

return true;

}

else

{

wrong++;

ans[n] = 0;

n++;

return false;

}

}

bool Class1::v14(HScrollBar^ h) {

if (h->Value == 11)

{

correct++;

ans[n] = 1;

n++;

return true;

}

else

{

wrong++;

ans[n] = 0;

n++;

return false;

}

}

bool Class1::v12(TrackBar^ t) {

if (t->Value == 2) {

correct++;

ans[n] = 1;

n++;

return true;

}

else {

wrong++;

ans[n] = 0;

n++;

return false;

}

}

bool Class1::v13(HScrollBar^ h) {

if (h->Value == 5) {

correct++;

ans[n] = 1;

n++;

return(true);

}

else

{

wrong++;

ans[n] = 0;

n++;

return false;

}

}

bool Class1::v15(CheckedListBox^ c) {

if ((c->CheckedIndices->Contains(0)) && (c->CheckedIndices->Contains(2)) && (c->CheckedIndices->Contains(3)) && !(c->CheckedIndices->Contains(4)) && !(c->CheckedIndices->Contains(5)))

{

correct++;

ans[n] = 1;

n++;

return(true);

}

else

{

wrong++;

ans[n] = 0;

n++;

return false;

}}

ЗАКЛЮЧЕНИЕ

В данной курсовой работе были реализованы все поставленные задачи:

  1. Изучены и проанализированы основные понятия информационной безопасности.

  2. Изучены разнообразные правовые, а также нормативные источники обеспечения безопасности персональных данных.

  3. Разработаны электронное пособие и тестовая программа на языке программирования Visual C++, с целью проверки усвоенного материала по теме «Обеспечение безопасности персональных данных».

  4. Создана Dll-библиотека с функциями для каждого вопроса.

5. Создан массив, в которой записаны результаты ответов на вопросы и вывод его на элемент управления DataGridView.

6. Записаны результаты тестирования в:

  • Microsoft Word

  • В текстовый файл

  • Microsoft Access

7. Регистрация пользователей на тестовую и теоретическую часть с записью логина и пароля в Microsoft Access.

8. Вывод диаграммы с отображением результатов тестирования