close

Вход

Забыли?

вход по аккаунту

?

Отчет (20)

код для вставкиСкачать
 Лабораторное задание
Необходимо разработать программный комплекс, состоящий из приложения, выполняющего генерацию ключей и статической библиотеки.
Программа генерации ключей должна выполнять следующие функции:
> генерировать ключ и сохранять его значение в базе ключей вместе с информацией о пользователе, для которого он сгенерирован;
> выдавать информацию о пользователе по заданному ключу.
Библиотека должна содержать функции проверки корректности указанного ключа, сохранения ключа в заданной ветке реестра и считывания его оттуда.
Дополнительно следует разработать тестовую программу, использующую функции из ранее рассмотренной библиотеки. Программа должна проверять наличие регистрационной информации (ключа) в заданной ветке реестра. Если ее там не обнаружено, следует запросить ввод этой информации у пользователя. Далее необходимо выполнить проверку корректности введенной информации и в случае успеха сохранить ее в реестре.
Если на первом этапе регистрационная информация была найдена в заданной ветке реестра, следует проверить ее корректность.
В любом случае вывести пользователю информацию о результате проверки.
В качестве ветки реестра, в которой следует сохранять регистрационную информацию, следует использовать HKEY_CURRENT_USER\Software\<название программы>.
Для генерации ключа использовать генератор псевдослучайных чисел, разработанный в лабораторной работе №3.
Сгенерированный ключ должен иметь следующий формат:
XXXX-XXXX-XXXX-XXXX, где X - символ от '0' до '9' или от 'A' до 'Z', кроме символов 'I' и 'O'. Для простоты обозначим группы символов ключа как A, B, С и D.
Значения групп символов должны быть сгенерированы в соответствии с номером варианта задания.
ВариантИнформация, сохраняемая в базе вместе с ключамиСодержимое четвертой группы символов ключа1Имя пользователя
e-mailA=rand(), B=rand(), C=rand()
D=A/B*CХод работы
В библиотеке library.dll был описан класс содержащий функции для работы с реестром, осуществляющие запись, чтение, и сравнение.
Библиотека library.dll
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Win32;
namespace library
{
public class Class1
{
public void savekey(string klush, string infa)
{
RegistryKey saveKey = Registry.CurrentUser.CreateSubKey("software\\ProtectionLR4\\");
saveKey.SetValue(klush, infa);
saveKey.Close();
}
public string readkey(string klu)
{
RegistryKey readKey = Registry.CurrentUser.OpenSubKey("software\\ProtectionLR4\\");
if (readKey == null)
{
return null;
}
string loadString = (string)readKey.GetValue(klu);
readKey.Close();
return loadString;
}
public bool proverka(string klus)
{
Int32 a, b, c, d, d2;
if (klus.Length != 16) return false;
string aa, bb, cc, dd, dd2;
aa = klus.Substring(0, 4);
bb = klus.Substring(4, 4);
cc = klus.Substring(8, 4);
dd = klus.Substring(12, 4);
a = System.Convert.ToInt32(aa);
b = System.Convert.ToInt32(bb);
c = System.Convert.ToInt32(cc);
d = System.Convert.ToInt32(dd);
d2 = (a / b) * c;
dd2 = System.Convert.ToString(d2);
dd2 = dd2.Substring(0, 4);
d2 = System.Convert.ToInt32(dd2);
if (d2 == d) return true;
else return false;
}
}
}
Функциональная часть исходного кода модуля LR4.exe
При создании данного модуля использовалась ранее написанная библиотека, рисунок ниже иллюстрирует подключение данной библиотеки
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using library;
namespace laba_4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string kl = this.textBox1.Text;
string org = "";
string email="";
string infor="";
if (this.textBox2.Text != "") org = this.textBox2.Text;
if (this.textBox3.Text != "") email = this.textBox3.Text;
infor = org + "$" + email;
if (kl != "")
{
Class1 cl1 = new Class1();
cl1.savekey(kl, infor);
}
else MessageBox.Show("Ключ не сгенерирован");
}
private void button2_Click(object sender, EventArgs e)
{
Random rand = new Random();
Int32 a, b, c, d;
a = rand.Next(1000, 9999);
b = rand.Next(1000, 9999);
c = rand.Next(1000, 9999);
d = (a / b) * c;
string kod = "";
String rez = System.Convert.ToString(a) + System.Convert.ToString(b) + System.Convert.ToString(c);
kod = System.Convert.ToString(d);
kod=kod.Substring(0, 4);
rez = rez + kod;
this.textBox1.Text = rez;
}
private void button3_Click(object sender, EventArgs e)
{
string kl = this.textBox4.Text;
Int32 num;
string org = "";
string email = "";
string infor = "";
if (kl != "")
{
Class1 cl1 = new Class1();
if (cl1.readkey(kl) == null)
{
this.textBox5.Text = "Отсутствует в базе";
this.textBox6.Text = "Отсутствует в базе";
}
else
{ infor = cl1.readkey(kl);
num = infor.IndexOf("$");
if (num == -1)
{
this.textBox5.Text = "Повреждён";
this.textBox6.Text = "Повреждён";
}
else
{
org = infor.Substring(0, num);
if (org == "") org = "Не был введён";
email = infor.Substring(num + 1);
if (email == "") email = "Не был введён";
this.textBox5.Text = org;
this.textBox6.Text = email;
}
}
}
else MessageBox.Show("Введите код пользователя");
}
}
}
Результат выполнения
В результате выполнения данной программы в реестр была добавлена ветка Protection_LR4 в которой теперь находится один параметр с именем присвоенного ключа, а в качестве значения используются наименование организации и адрес электронной почты.
Функциональная часть исходного кода модуля LR_test.exe
Так же как и для основного модуля была подключена библиотека, содержащая класс работы с реестром Library.dll
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using library;
namespace test_lab_4
{
public partial class Form1 : Form
{
Int32 i = 0;
public Form1()
{
InitializeComponent();
label1.Text = "Введите код пользователя и нажмите кнопку";
}
private void button1_Click(object sender, EventArgs e)
{ if (this.textBox1.Text == "") label1.Text = "Введите код пользователя и нажмите кнопку";
else {
Class1 cl1 = new Class1();
string read;
read=cl1.readkey(this.textBox1.Text);
if (read == null) MessageBox.Show("Данная запись в реестре не найдена");
else {
Int32 num = read.IndexOf("$");
if (num == -1)
{
this.label1.Text = "Повреждёна запись";
}
else
{
String user = read.Substring(0, num);
if (user == "") {
user = "Не был введён";
this.button2.Enabled = true;
this.button2.Visible = true;
this.label3.Visible = true;
this.label4.Visible = true;
i = 1;
}
String email = read.Substring(num + 1);
if (email == "") { email = "Не был введён";
this.button2.Enabled = true;
this.button2.Visible = true;
this.label3.Visible = true;
this.label4.Visible = true;
i = 1;
}
this.textBox2.Visible = true;
this.textBox2.Enabled= true;
this.textBox3.Visible = true;
this.textBox3.Enabled = true;
this.label3.Visible = true;
this.label4.Visible = true;
this.textBox2.Text = user;
this.textBox3.Text = email;
bool rez;
if (i == 0) { rez = cl1.proverka(this.textBox1.Text);
if (rez == true)
{
this.label1.Text = "Ключ корректен";
}
else {
this.label1.Text = "Ключ некорректен";
}
}
}
}
}
}
private void button2_Click(object sender, EventArgs e)
{
String kod, mail, user;
kod = this.textBox1.Text;
user = this.textBox2.Text;
mail = this.textBox3.Text;
Class1 cl1 = new Class1();
bool rez;
rez = cl1.proverka(kod);
if (rez == true)
{
this.label1.Text = "Ключ корректен";
cl1.savekey(kod, user + "$" + mail);
this.label1.Text = "Информация проверена и сохранена";
this.textBox2.Enabled = false;
this.textBox2.Visible = false;
this.textBox3.Enabled = false;
this.textBox3.Visible = false;
this.button2.Enabled = false;
this.button2.Visible = false;
this.label3.Visible = false;
this.label4.Visible = false;
i = 0;
}
else
{
this.label1.Text = "Ключ некорректен" ;
}
}
}
}
Результат выполнения программы
Вывод
В ходе выполнения был написан программный комплекс, выполняющий все необходимые функции.
Документ
Категория
Рефераты
Просмотров
9
Размер файла
89 Кб
Теги
отчет
1/--страниц
Пожаловаться на содержимое документа