Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Записка Карягин Жан.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

2.2 Структура і функціональне призначення модулів програмного продукту

Програма «Социологические исследования» складається з декількох модулів, які показані на рисунку 2.3.

Головний модуль програми – модуль «Main». Цей модуль описує головну форму програми, яке є в той же час і головним меню програми. В цьому модулі описуються зв’язки між головною та іншими формами програми. Через цю форму, завдяки компоненту меню, викликаються інші форми програми – майстри, що призначені для виконання своїх функцій (створення опитувань, вибір та проходження опитувань, перегляд статистики). Виклик кожної форми відбувається натиском миші на певний пункт меню, що знаходиться угорі форми.

Код процедури виклику форми з майстром створення опитувань показаний на рисунку 2.4.

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

Код процедури виклику форми з майстром перегляду статистики представлено на рисунку 2.6.

Рисунок 2.3 – Модулі програми «Социологические исследования»

private void исследованиеToolStripMenuItem_Click(object sender, EventArgs e)

{

InterviewCreator ic = new InterviewCreator();

ic.ShowDialog();

}

Рисунок 2.4 – Процедура виклику майстра створення опитувань

private void пройтиОпросToolStripMenuItem_Click(object sender, EventArgs e)

{

InterviewExplorer ie = new InterviewExplorer();

ie.ShowDialog();

}

Рисунок 2.5 – Процедура виклику майстра проходження опитувань

private void просмотретьСтатистикуОпросаToolStripMenuItem_Click(object sender, EventArgs e)

{

Stats st = new Stats();

st.ShowDialog();

}

Рисунок 2.6 – Процедура виклику майстра перегляду статистики

Код процедури, яка закриває головну форму програми, представлено на рисунку 2.7.

private void выходToolStripMenuItem_Click(object sender, EventArgs e)

{

this.Close();

}

Рисунок 2.7 – Процедура закриття головної форми програми

Код процедури, яка викликає діалогове вікно, в якому користувач підтверджує або скасовує вихід з програми, представлено на рисунку 2.8.

private void Main_FormClosing(object sender, FormClosingEventArgs e)

{

DialogResult result = MessageBox.Show("Закрыть приложение?", "Выход из приложения", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (result == DialogResult.No)

{

e.Cancel = true;

}

}

Рисунок 2.8 – Процедура підтвердження виходу з програми

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

Процедуру завантаження форми InterviewCreator зображено на рисунку 2.9.

private void InterviewCreator_Load(object sender, EventArgs e)

{Step = 0;button3.Visible = false;

comboBox1.Visible = false;

comboBox1.SelectedIndex = 0;

label2.Visible = false; }

Рисунок 2.9 – Процедура завантаження форми InterviewCreato

Процедура зміни кількості варіантів відповіді представлено на рисунку 2.10.

private void comboBox1_SelectedIndexChanged (object sender, EventArgs e) {if (Step > 0) {for (Iteration = 0; Iteration < PreviousIndex + 2; Iteration++) {this.Controls.Remove (Questions[Iteration]);Questions[Iteration].Dispose(); this.Controls.Remove(Descriptions[Iteration]);

Descriptions[Iteration].Dispose();}}

if (Step > 0) {for (Iteration = 0; Iteration < comboBox1.SelectedIndex + 2; Iteration++)

{ Questions[Iteration] = new TextBox();

Questions[Iteration].Width = 380; Questions[Iteration].Height = 30; Questions[Iteration].Location = new Point(190, 50 * Iteration + 135); Questions[Iteration].Name = "Textbox " + Iteration.ToString(); this.Controls.Add(Questions[Iteration]); Descriptions[Iteration] = new Label();

Descriptions[Iteration].Location = new Point(100, 50 * Iteration + 139); Descriptions[Iteration].Name = "Label " + Iteration.ToString(); Descriptions[Iteration].Text = "Вариант " + (Iteration + 1).ToString(); this.Controls.Add(Descriptions[Iteration]);} PreviousIndex = comboBox1.SelectedIndex;}}

Рисунок 2.10 – Процедура зміни кількості полів для варіантів відповіді

Процедура збереження створеного опитування та кожного запитання до файлу опитування представлена на рисунку 2.11.

private void button1_Click(object sender, EventArgs e) {if (Step > 1) {Control = 0;

for (Iteration = 0; Iteration < comboBox1.SelectedIndex + 2; Iteration++)

{if (Questions[Iteration].Text == "") Control = 1;}

if (textBox1.Text != "" && Control != 1)

{FileStream cst = new FileStream("Temp", FileMode.Append);

StreamWriter streamWriter = new StreamWriter(cst);

streamWriter.Write("\n" + textBox1.Text + "~");

for (Iteration = 0; Iteration < comboBox1.SelectedIndex + 2; Iteration++)

{streamWriter.Write(Questions[Iteration].Text + "#");

streamWriter.Write("0" + "#");}

streamWriter.Close(); cst.Close(); MessageBox.Show("Вопрос успешно сохранен!");

Step++; Next = 1; button1.Enabled = false;}

else {MessageBox.Show("Заполните все поля!");}}

if (Step == 1) {Control = 0; for (Iteration = 0; Iteration < comboBox1.SelectedIndex + 2; Iteration++)

{if (Questions[Iteration].Text == "") Control = 1;}

if (textBox1.Text != "" && Control != 1)

{FileStream cst = new FileStream("Temp", FileMode.Create); StreamWriter streamWriter = new StreamWriter(cst); streamWriter.Write(textBox1.Text + "~"); for (Iteration = 0; Iteration < comboBox1.SelectedIndex + 2; Iteration++)

{streamWriter.Write(Questions[Iteration].Text + "#");

streamWriter.Write("0" + "#");}

streamWriter.Close(); cst.Close();

MessageBox.Show("Вопрос успешно сохранен!");

Step++; Next = 1; button1.Enabled = false;}

else {MessageBox.Show("Заполните все поля!");}}

if (Step == 0) {if (textBox1.Text != "")

{FileStringName = textBox1.Text + ".cst";

if (!File.Exists(FileStringName))

{FileStream cst = new FileStream("Temp", FileMode.Create); cst.Close();

MessageBox.Show("Опрос " + textBox1.Text + " успешно создан!"); Step++;

button1.Text = "Сохранить текущий вопрос"; button2.Text = "Закрыть мастер"; button1.Location = new Point(10, 445); button2.Location = new Point(410, 445); button3.Location = new Point(210, 445); button3.Visible = true; comboBox1.Visible = true; comboBox1.Location = new Point(320, 90);

label1.Location = new Point(70, 52);

label1.Text = "Введите Ваш вопрос";

label2.Location = new Point(160, 94);

textBox1.Location = new Point(200, 50);

textBox1.Size = new System.Drawing.Size(375, 20);

label2.Visible = true; textBox1.Text = "";

PreviousIndex = 0; for (Iteration = 0; Iteration < 2; Iteration++) {Questions[Iteration] = new TextBox();

Questions[Iteration].Width = 380;

Questions[Iteration].Height = 30;

Questions[Iteration].Location = new Point(190, 50 * Iteration + 135); Questions[Iteration].Name = "Textbox " + Iteration.ToString(); this.Controls. Add(Questions[Iteration]); Descriptions[Iteration] = new Label(); Descriptions[Iteration].Location = new Point(100, 50 * Iteration + 139); Descriptions[Iteration].Name = "Label " + Iteration.ToString(); Descriptions[Iteration].Text = "Вариант " + (Iteration + 1).ToString(); this.Controls.Add(Descriptions[Iteration]);}}

else { MessageBox.Show("Опрос с именем '" + textBox1.Text + "' уже существует!"); }}

else {MessageBox.Show("Укажите имя создаваемого опроса!");}}}

Рисунок 2.11 – Процедура збереження опитування та кожного запитання

Процедура переходу до створення наступного запитання в опитуванні представлено на рисунку 2.12.

private void button3_Click(object sender, EventArgs e) { if (Next == 1) {textBox1.Text = ""; for (Iteration = 0; Iteration < comboBox1.SelectedIndex + 2; Iteration++) {this.Controls.Remove(Questions [Iteration]); Questions[Iteration].Dispose(); this. Controls.Remove (Descriptions[Iteration]); Descriptions[Iteration]. Dispose();} for (Iteration = 0; Iteration < 2; Iteration++) {Questions[Iteration] = new TextBox(); Questions[Iteration].Width = 380; Questions [Iteration].Height = 30; Questions [Iteration].Location = new Point(190, 50 * Iteration + 135); Questions[Iteration].Name = "Textbox " + Iteration.ToString(); this.Controls.Add (Questions [Iteration]); Descriptions[Iteration] = new Label(); Descriptions[Iteration].Location = new Point(100, 50 * Iteration + 139); Descriptions [Iteration].Name = "Label " + Iteration.ToString(); Descriptions [Iteration].Text = "Вариант " + (Iteration + 1).ToString(); this.Controls.Add(Descriptions [Iteration]);}Next = 0; button1.Enabled = true; comboBox1.SelectedIndex = 0;} else {MessageBox. Show("Сохраните текущий вопрос для перехода к следующему!");}}

Рисунок 2.12 – Процедура додавання нового запитання

Процедура закриття майстра створення опитування показана на рисунку 2.13.

private void button2_Click (object sender, EventArgs e)

{

this.Close();

}

Рисунок 2.13 – Процедура закриття майстра створення опитувань

Процедура, яка викликає діалог для підтвердження або скасування закриття форми, показана на рисунку 2.14.

private void InterviewCreator_FormClosing(object sender, FormClosingEventArgs e)

{

DialogResult result = MessageBox.Show("Несохраненные данные будут утеряны.\nЗакрыть мастер?", "Закрытие мастера", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (result == DialogResult.No)

{e.Cancel = true;}

if (result == DialogResult.Yes)

{

if (Step == 1) File.Delete(FileStringName);

if (Step > 1)

{

EncryptFile("Temp", FileStringName);

File.Delete("Temp");

}}}

Рисунок 2.14 – Процедура підтвердження виходу з майстра опитування

Процедура шифрування файлу опитування представлена на рисунку 2.15. Ця процедура має однаковий код для форми InterviewCreator та InterviewExplorer.

static void EncryptFile(string sInputFilename, string sOutputFilename)

{

FileStream fsInput = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read);

FileStream fsEncrypted = new FileStream(sOutputFilename, FileMode.Create, FileAccess.Write);

DESCryptoServiceProvider DES = new DESCryptoServiceProvider();

byte[] Key =

{

0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08

};

byte[] IV =

{

0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08

};

DES.Key = Key;

DES.IV = IV;

ICryptoTransform desencrypt = DES.CreateEncryptor();

CryptoStream cryptostream = new CryptoStream(fsEncrypted, desencrypt, CryptoStreamMode.Write);

byte[] bytearrayinput = new byte[fsInput.Length];

fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);

cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);

cryptostream.Close();

fsInput.Close();

fsEncrypted.Close();

}

Рисунок 2.15 – Процедура шифрування файлу опитування

Модуль InterviewExplorer описує форму, яка призначена для проходження опитувань користувачами. Під час завантаження форми програма формує список доступних опитувань, що містяться в папці з програмою. Цей список виводиться в компонент на формі. Користувач обирає потрібне йому опитування, натискає кнопку відкриття, після чого дані з файлу опитування розшифровуються в тимчасовий файл та завантажуються в програму. Програма порядково зчитує інформацію з файлу опитування, де кожен рядок відповідає запитанню та містить дані про варіанти відповіді та кількість відповідей на кожен з них. На основі зчитаної інформації на екран виводиться заголовок опитування та група компонентів, які дозволяють вибрати лише один з них, кожен компонент має заголовок, що відповідає варіанту відповіді. Після натиску на кнопку відповіді, до числа, яке відображає, скільки раз був вибраний варіант відповіді, який обрав користувач, додається один, після чого ця інформація зберігається в тимчасовий файл. Після того, як користувач відповість на всі запитання в опитуванні, дані з тимчасового файлу шифруються та записуються в файл опитування, а всі тимчасові файли видаляються.

Процедура завантаження майстра проходження опитувань представлена на рисунку 2.16.

private void InterviewExplorer_Load(object sender, EventArgs e)

{

string[] dir = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.cst");

for (int Iteration = 0; Iteration < dir.Length; Iteration++)

dir[Iteration] = Path.GetFileNameWithoutExtension(dir[Iteration]);

listBox1.Items.AddRange(dir);

}

Рисунок 2.16 – Процедура завантаження майстра проходження опитувань

Процедура розшифрування даних файлу опитування показана на рисунку 2.17. Ця процедура однакова для форм InterviewExplorer та Stats.

static void DecryptFile(string sInputFilename, string sOutputFilename)

{

DESCryptoServiceProvider DES = new DESCryptoServiceProvider();

byte[] Key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08

};

byte[] IV =

{

0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08

};

DES.Key = Key;

DES.IV = IV;

FileStream fsread = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read);

ICryptoTransform desdecrypt = DES.CreateDecryptor();

CryptoStream cryptostreamDecr = new CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read);

StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);

fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());

fsDecrypted.Flush();

fsDecrypted.Close();

cryptostreamDecr.Close();

}

Рисунок 2.17 – Процедура розшифрування файлу опитування

Процедура, яка завантажує дані, які отримані з файлу опитування після його розшифрування, в програму, та фіксує відповіді користувача і складує їх з основними результатами та записує їх до тимчасового файлу, представлена на рисунку 2.18.

private void button3_Click(object sender, EventArgs e)

{if (Step > 0) {FileStream cst = new FileStream("Temp", FileMode.Open);

StreamReader streamReader = new StreamReader(cst); if (Step == Counter + 1)

{cst.Close(); streamReader.Close();

EncryptFile("AdTemp", FileName);

File.Delete("AdTemp"); File.Delete("Temp");

this.Close();}if (Step == Counter)

{FileStream tmp = new FileStream("AdTemp", FileMode.Append); StreamWriter tmprd = new StreamWriter(tmp);

for (Iteration = 0; Iteration < Step; Iteration++)

Data = streamReader.ReadLine();

NumberOfVariants = 0;

for (Iteration = 0; Iteration < Data.Length; Iteration++)

{if (Data[Iteration].Equals('#') == true) NumberOfVariants++;}

Results = new float[NumberOfVariants / 2];

for (Iteration = 0; Iteration < NumberOfVariants; Iteration++)

{Questions = Data.Split('#');Res = Data.Split('#');}

try {

Res[0] = Res[1]; Res[1] = Res[3];

Res[2] = Res[5]; Res[3] = Res[7];

Res[4] = Res[9];Res[5] = Res[11];}

catch { }

try {Questions[1] = Questions[2];

Questions[2] = Questions[4];

Questions[3] = Questions[6];

Questions[4] = Questions[8];

Questions[5] = Questions[10];}

catch { }

for (Iteration = 0; Iteration < NumberOfVariants / 2; Iteration++)

{Results[Iteration] = Convert.ToSingle(Res[Iteration]);}

for (Iteration = 0; Iteration < NumberOfVariants / 2; Iteration++)

{if (Variants[Iteration].Checked == true) Results[Iteration] += 1;}

tmprd.Write(label1.Text + "~");

for (Iteration = 0; Iteration < NumberOfVariants / 2; Iteration++)

{tmprd.Write(Variants[Iteration].Text + "#" + Results[Iteration] + "#");}

for (Iteration = 0; Iteration < PreviousSize; Iteration++)

{this.Controls.Remove(Variants[Iteration]);

Variants[Iteration].Dispose();}

streamReader.Close(); cst.Close();

if (Step != Counter) tmprd.Write("\n");

tmprd.Close(); tmp.Close(); Step++;

label1.Text = "Вы ответили на все вопросы в данном опросе. \nСпасибо за то, что уделили личное время для прохождения данного опроса.\nВаше мнение будет учтено.";

label1.Location = new Point(100, 175);

this.Text = "Мастер прохождения опросов";

button3.Text = "Закрыть мастер";}

if (Step < Counter)

{FileStream tmp = new FileStream("AdTemp", FileMode.Append);

StreamWriter tmprd = new StreamWriter(tmp);

if (Step == 1) Data = streamReader.ReadLine();

if (Step > 1)

{for (Iteration = 0; Iteration < Step; Iteration++)

Data = streamReader.ReadLine();}

NumberOfVariants = 0;

for (Iteration = 0; Iteration < Data.Length ; Iteration++)

………………………………………………………..

Results = new float[NumberOfVariants / 2];

for (Iteration = 0; Iteration < NumberOfVariants; Iteration++)

{Questions = Data.Split('#');

Res = Data.Split('#');}

try

{Res[0] = Res[1]; Res[1] = Res[3];

Res[2] = Res[5]; Res[3] = Res[7];

Res[4] = Res[9]; Res[5] = Res[11];}

catch { }

try

{Questions[1] = Questions[2];

Questions[2] = Questions[4];

Questions[3] = Questions[6];

Questions[4] = Questions[8];

Questions[5] = Questions[10];}

catch { }

for (Iteration = 0; Iteration < NumberOfVariants / 2; Iteration++)

{Results[Iteration] = Convert.ToSingle(Res[Iteration]);}

for (Iteration = 0; Iteration < NumberOfVariants / 2; Iteration++)

{Variants[Iteration] = new RadioButton();

Variants[Iteration].Location = new Point(230, 50 * Iteration + 100);

Variants[Iteration].Name = "RadioButton " + Iteration.ToString();

Variants[Iteration].AutoSize = true;

Variants[Iteration].Text = Temp.ToString();

this.Controls.Add(Variants[Iteration]);

Variants[Iteration].Text = Questions[Iteration].ToString();}

Variants[0].Select();

try

{while ((HowMany = streamReader.ReadLine()) != null)

{Counter++;}}

catch { }

streamReader.Close();

cst.Close();

PreviousSize = NumberOfVariants / 2;

Step++;

}

}

Рисунок 2.18 – Процедура відкриття файлу опитування та збереження даних про відповіді користувача

Процедура, яка викликається при закритті майстра проходження опитувань для підтвердження або скасування виходу з майстра, показана на рисунку 2.19.

private void InterviewExplorer_FormClosing(object sender, FormClosingEventArgs e)

{

if (Step <= Counter)

{DialogResult result;

if (Step!=0) result = MessageBox.Show("Несохраненные данные будут утеряны.\nЗакрыть опрос?", "Закрытие опроса", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

else result = MessageBox.Show("Несохраненные данные будут утеряны.\nЗакрыть мастер?", "Закрытие мастера", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (result == DialogResult.No)

{

e.Cancel = true;

}

File.Delete("Temp");

File.Delete("AdTemp");

}

}

Рисунок 2.19 – Процедура підтвердження виходу з майстра проходження опитувань

Модуль Stats описує форму, яка призначена для перегляду статистики опитувань. Після завантаження майстра перегляду статистики на формі будується список з доступних опитувань, які містяться в папці з програмою. Після того, як користувач вибере потрібне опитування та натисне на кнопку вибору, дані з файлу опитування розшифруються до тимчасового файлу. Кожен рядок містить інформацію про одне запитання, отже натиском на кнопки переключення між запитаннями, програмі надається інструкція до зчитування певного рядка тимчасового файлу з розшифрованими даними файлу опитування. На їх основі будуються лінійні діаграми із зображенням кількості відповідей та процентною часткою кожного варіанту відповіді. Після вибору опитування одразу будується діаграма по першому запитанню, а потім побудова діаграм залежить від дій користувача, від того, на яке запитання в опитуванні він переключиться. Після закриття майстра перегляду статистики тимчасовий файл з розшифрованими даними видаляється.

Процедура завантаження майстру перегляду статистики показана на рисунку 2.20.

private void Stats_Load(object sender, EventArgs e)

{

string[] dir = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.cst");

for (int Iteration = 0; Iteration < dir.Length; Iteration++)

dir[Iteration] = Path.GetFileNameWithoutExtension(dir[Iteration]);

listBox1.Items.AddRange(dir);

button1.Visible = false;

button2.Visible = false;

pictureBox1.Visible = false;

}

Рисунок 2.20 – Процедура завантаження майстру перегляду статистики

Процедура вибору опитування та закриття майстра після перегляду статистики зображена на рисунку 2.21.

private void button3_Click(object sender, EventArgs e)

{if (Control == 1)

{this.Close();}

if (Control == 0)

{FileName = listBox1.SelectedItem.ToString() + ".cst";

this.Text = "Просмотр статистики опроса " + listBox1.SelectedItem.ToString();

label1.Font = new Font("Arial", 10, FontStyle.Regular);

listBox1.Dispose();

button3.Text = "Закрыть окно просмотра статистики";

button1.Visible = true;

button2.Visible = true;

pictureBox1.Visible = true;

DecryptFile(FileName, "Temp");

FileStream cst = new FileStream("Temp", FileMode.Open);

StreamReader streamReader = new StreamReader(cst);

try

{while ((HowMany = streamReader.ReadLine()) != null)

{Counter++;}}

catch { } button1.Enabled = false;

if (Counter == 0)

{button1.Enabled = false;

button2.Enabled = false;}

streamReader.Close();

cst.Close();

label1.Location = new Point(20, 5);

label1.MaximumSize = new Size(565, 50);

Step++;

PaintEventArgs p = new PaintEventArgs(pictureBox1.CreateGraphics(), pictureBox1.Bounds);

pictureBox1_Paint(sender, p);

Control++;}}

Рисунок 2.21 – Процедура вибору та закриття опитування

Процедура побудови лінійних діаграм для поточного запитання для відображення статистики зображена на рисунку 2.22.

private void pictureBox1_Paint(object sender, PaintEventArgs e)

{FileStream cst = new FileStream("Temp", FileMode.Open);

StreamReader streamReader = new StreamReader(cst);

Temp = "";

for (Iteration = 0; Iteration < Step; Iteration++)

Data = streamReader.ReadLine();

Iteration = 0;

while (Data[Iteration].Equals('~') != true)

{Temp += Data[Iteration]; Iteration++; }

label1.Text = Temp.ToString();

Data = Data.Remove(0, Temp.Length + 1);

NumberOfVariants = 0;

for (Iteration = 0; Iteration < Data.Length; Iteration++)

{if (Data[Iteration].Equals('#') == true) NumberOfVariants++;}

Results = new float[NumberOfVariants / 2];

for (Iteration = 0; Iteration < NumberOfVariants; Iteration++)

{Questions = Data.Split('#');Res = Data.Split('#');}

try

{Res[0] = Res[1]; Res[1] = Res[3];

Res[2] = Res[5]; Res[3] = Res[7];

Res[4] = Res[9]; Res[5] = Res[11];}

catch { }

try {Questions[1] = Questions[2];

Questions[2] = Questions[4];

Questions[3] = Questions[6];

Questions[4] = Questions[8];

Questions[5] = Questions[10];}

catch { } Sum = 0;

for (Iteration = 0; Iteration < NumberOfVariants / 2; Iteration++)

{Results[Iteration] = Convert.ToSingle(Res[Iteration]);

Sum += Results[Iteration];}

Graphics g = e.Graphics;

Brush b = new SolidBrush(Color.Blue);

Brush v = new SolidBrush(Color.Black);

Brush w = new SolidBrush(Color.FromKnownColor(KnownColor.Control));

g.FillRectangle(w, 0, 0, pictureBox1.Width, pictureBox1.Height);

Font f = new Font("Arial", 10);

for (Iteration = 0; Iteration < NumberOfVariants / 2; Iteration++)

{g.DrawString(Questions[Iteration], f, v, 30, 55 * Iteration);

g.FillRectangle(b, 30, 55 * Iteration + 25, 450 * (Results[Iteration] / Sum), 20);

Questions[Iteration] = Math.Round((Results[Iteration] / Sum * 100), 2).ToString() + " % (" + Results[Iteration].ToString() + ")";

g.DrawString(Questions[Iteration], f, v, 450, 55 * Iteration + 25);}

Questions[0] = "Чиcло опрошенных " + Sum.ToString();

g.DrawString(Questions[0], f, v, 22, 55 * (Iteration) + 25);

streamReader.Close();cst.Close();}

Рисунок 2.22 – Процедура побудови лінійних діаграм

Процедура переходу на наступне запитання показана на рисунку 2.23.

private void button2_Click(object sender, EventArgs e)

{

if (Step != Counter) Step++;

if (Step == Counter) button2.Enabled = false;

button1.Enabled = true;

PaintEventArgs p = new PaintEventArgs(pictureBox1.CreateGraphics(), pictureBox1.Bounds);

pictureBox1_Paint(sender, p);}

Рисунок 2.23 – Процедура переходу на наступне запитання

Процедура переходу на попереднє запитання представлена на рисунку 2.24.

private void button1_Click(object sender, EventArgs e)

{

if (Step != 1) Step--;

if (Step == 1) button1.Enabled = false;

button2.Enabled = true;

PaintEventArgs p = new PaintEventArgs(pictureBox1.CreateGraphics(), pictureBox1.Bounds);

pictureBox1_Paint(sender, p);}

Рисунок 2.24 – Процедура переходу на попереднє запитання

Процедура, яка викликається при виході з майстра перегляду статистики для підтвердження або скасування виходу з майстра зображена на рисунку 2.25.

private void Stats_FormClosing(object sender, FormClosingEventArgs e)

{

DialogResult result = MessageBox.Show("Закрыть окно просмотра статистики?", "Закрытие окна", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (result == DialogResult.No)

{e.Cancel = true;}

if (result == DialogResult.Yes)

{File.Delete("Temp");}

}

Рисунок 2.25 – Процедура підтвердження виходу з майстру перегляду статистики