Смекни!
smekni.com

Разработка программы "Формирование и проверка контрольной суммы кластеров" (стр. 3 из 5)

}

Также несколько методов класса Form1, код которого приведен в приложении являются обработчиками событий: нажатие кнопки, работа с информацией.

Программная реализация функции privatevoidAddHDDItemToListview()

Данная функция добавляет в список подключенные запоминающие устройства. Нижеприведенкодфункции.

private void AddHDDItemToListview()

{

//Makes the Search group:::......

ListViewGroup HDDGroup = new ListViewGroup();

HDDGroup.Header = "HardDrive(s) :";

HDDGroup.HeaderAlignment = HorizontalAlignment.Left;

HDDGroup.Name = "HardDrive(s)";

//Adds the search group...

listView1.Groups.Add(HDDGroup);

int i = 0;

foreach (HardDrive x in hdCollection)

{ AddItemToListview(HDDGroup, i, x.Model.ToString(), 0, "1");

i++; }

HDDGroup = null; }

Программнаяреализацияфункцииprivate void AddItemToListview(ListViewGroup GroupName, int IndexNumber, string ItemName, int ImageIndex, string ItemTAG)

Данная функция добавляет информацию в структуру HardDrive. Нижеприведенкодфункции.

private void AddItemToListview(ListViewGroup GroupName, int IndexNumber, string ItemName, int ImageIndex, string ItemTAG)

{ ListViewItem NewItem = new ListViewItem();

ListViewItem.ListViewSubItem NewSubItem = new ListViewItem.ListViewSubItem();

NewSubItem.Text = IndexNumber.ToString();

NewSubItem.Name = "Subitem1";

NewItem.SubItems.Add(NewSubItem);

NewItem.SubItems.Add(NewSubItem);

NewItem.Name = ItemName;

NewItem.Text = ItemName;

NewItem.Group = GroupName;

NewItem.ImageIndex = ImageIndex;

NewItem.Tag = ItemTAG;

listView1.Items.Add(NewItem);

NewItem = null;

NewSubItem = null;

// Group = null; }

Программнаяреализацияфункцииprivate void private void listView1_SelectedIndexChanged(object sender, EventArgs e)

Данная функция определяет какое устройство пользователь выбрал в списке. Нижеприведенкодфункции.

private void listView1_SelectedIndexChanged(object sender, EventArgs e)

{ int selected_index;

try {

//MessageBox.Show(listView1.SelectedItems[0].Tag.ToString());

selected_index = listView1.SelectedItems[0].Index;

switch (listView1.SelectedItems[0].Tag.ToString())

{ case "1":

WriteHDDText();

break; } }

catch (Exception)

{ //Do nothing } }


2.5 Программная реализация класса Form2

программа контрольная сумма кластер

Класс Form2 описывает поведение дополнительного окна приложения, внешний вид которого представлен на рисунке 3.3.

Рисунок 3.3 – Внешний вид дополнительного окна приложения

Как видно на рисунке 3.3, дополнителное окно разработанного приложения Контрольная сумма включает в себя следующие элементы:

- четыре текстовых поля для ввода и вывода информации проверки алгоритмов формирования контрольной суммы кластеров, реализованные объектами textBox1, textBox2, textBox3, textBox4 ;

- кнопку для запуска проверки алгоритма CRC32(проверить CRC32);

- кнопку для запуска проверки алгоритма MD5 (проверить MD5);

- стандартные элементы управления окном в ОС семейств Windows.

Конструктор, обработчики событий и члены класса Form2

Инициализация объектов-членов класса Form2 осуществляется в конструкторе класса. Ниже приведен код конструктора с комментариями:

public Form2() {

//инициализация компонента – необходима для создания окна

InitializeComponent();

}

Также несколько методов класса Form2, код которого приведен в приложении являются обработчиками событий: нажатие кнопки, работа с информацией.

Программная реализация обработчика сообщений privatevoidbutton1_Click(objectsender, EventArgse)

Определяет действие при нажатии кнопки «CRC32». Кодобработчикаприведенниже.

private void button1_Click(object sender, EventArgs e)

{ // Читаем

System.IO.FileStream stream1 = System.IO.File.OpenRead(textBox1.Text.ToString());

textBox3.Text=(string.Format("{0:X}", CalculateCRC(stream1))).ToString();}

Программнаяреализацияфункции public static uint CalculateCRC(System.IO.Stream stream)

Данная функция реализует алгоритм формирования контрольной суммы CRC32. Код функции приведен ниже с комментариями.

publicstaticuintCalculateCRC(System.IO.Streamstream)

{ const int buffer_size = 1024;

const uint POLYNOMIAL = 0xEDB88320;

uint result = 0xFFFFFFFF;

uint Crc32;

byte[] buffer = new byte[buffer_size];

uint[] table_CRC32 = new uint[256];

unchecked

{ // Инициалиазациятаблицы

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

{ Crc32 = (uint)i;

for (int j = 8; j > 0; j--)

{ if ((Crc32 & 1)==1)

Crc32 = (Crc32 >> 1) ^ POLYNOMIAL;

else

Crc32 >>= 1; }

table_CRC32[i] = Crc32; }

// Чтениеизбуфера

int count = stream.Read(buffer, 0, buffer_size);

// Вычисление CRC

while (count > 0)

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

{ result = ((result) >> 8)

^ table_CRC32[(buffer[i])

^ ((result) & 0x000000FF)]; }

count = stream.Read(buffer, 0, buffer_size); } }

return ~result; }

Программнаяреализацияобработчикасообщений private void button2_Click(object sender, EventArgs e)

Определяет действие при нажатии кнопки «проверка MD5». Также мостит в себе алгоритм формирования контрольной суммы MD5 и все прилагающие функции. Код из-за большого объема не описывается, его можно просмотреть в общем коде программы в Приложении Б.


3. ТЕСТИРОВАНИЕ ПРОГРАММЫ И РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

3.1 Тестирование программы

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

В результате тестирования программы были установлены как недостатки разработанных алгоритмов, так и несовершенство их программной реализации, как-то:

- зависимость от прав администратора;

- невозможность изменения кластера с помощью прямого доступа, а сложности при проверке;

- проблемы с прямым доступом, связанные с новыми введенными ограничениями в ОС Windows 7.

Обнаруженные недостатки были исправлены как на уровне алгоритма (если требовалось), так и на уровне программной реализации.

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

ОС Windows XP, процессор Pentium IV 1 ГГц, ОЗУ 128 Мб, 100 KB свободного места на жестком диске, библиотека .NET Framework 4.0 и выше.

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

После запуска программы на экране отображается окно со следующими элементами:

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

- текстовое поле отображения информации об устройстве и контрольная сумма кластеров;

- текстовое поле отображения информации для проверки и сравнения;

- кнопка для анализа (Анализ), активирует второе текстовое поле;

- кнопка запуска и проверки алгоритмов (Проверить алгоритм);

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

- кнопка для запуска проверки алгоритма CRC32(проверить CRC32);

- кнопка для запуска проверки алгоритма MD5 (проверить MD5);


ВЫВОДЫ

Во время выполнения задания были закреплены навыки использования функций библиотеки .NET Framework, углублены знания в языке C# и написании программ под ОС семейства Windows.

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

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

В результате выполнения курсового проекта было разработано приложение с использованием библиотеки .NET Framework – программа Формирования и проверки контрольной суммы клатеров.

Можно сказать, что поставленное при курсовом проектировании задание было реализовано полностью.

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

- недостаточная гармоничность и привлекательность графической составляющей проекта;

- небольшие задержки при выполнении приложения на компьютерах с малым объемом оперативной памяти;

- требования к предустановленном ПО (в частности .NET Framework 4.0)

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


СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. CLR via C#. Программирование на платформе Microsoft .NET Framework 2.0 на языке C#. Мастер-класс./ Пер. с англ. – М.: Издательство «Русская редакция»; СПб.: Питер, 2007. – 656 с.

2. С# в подлиннике: Пер. с англ./ Дейтел Х., Дейтел П., Листфиолд Дж., Нието Т., Йегер Ш., Златкина М. – СПб.Ж БХВ-Петербург, 2006. – 1056 с.

3. http://msdn.microsoft.com/

4. http://intuit.ru/

5. http://windxp.ru/

6. ДСТУ 3008-95 "ЗВІТИ У СФЕРІ НАУКИ І ТЕХНІКИ. Структура та правила оформлення".


ПРИЛОЖЕНИЕ А

Пример выполненияпрограммы «Формирование и проверка контрольной суммы кластеров»

Рисунок 1 – Внишний вид диологового окна перед запуском сомой программы

Рисунок 2 – Внешний вид гланого окна программы


Рисунок 3 – Пример выполнения программы

Рисунок 4 – Пример выполнения проверки


ПРИЛОЖЕНИЕ Б

Код приложения «Формирование и проверка контрольной суммы кластеров»

//Form1.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Collections;

using System.Management;

using Microsoft.Win32;

namespace kurs_pogulyat

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

ArrayList hdCollection = new ArrayList();

int Num_Hdd = 0;

double TotalSize = 0;

double TotalSpaceLeft = 0;

bool analiz = false;

bool OSXP = false;

private void Form1_Load(object sender, EventArgs e)

{

if (MessageBox.Show("Start getting info ?&bsol;nThis may take a while, so please stand by.", "Notice", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No)

{

this.Close();

}

else

{

//AddGeneralinfoTolistview();

GetHardDiskInfo();

AddHDDItemToListview();

}

}

private void GetHardDiskInfo()

{

#region HDD_Collction of Infomation

hdCollection.Clear();

Num_Hdd = 0;

TotalSize = 0;

TotalSpaceLeft = 0;

ManagementObjectSearcher searcher = new

ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");