}
Также несколько методов класса 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 ?\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");