Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка компьютерного теста.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
267.26 Кб
Скачать

4. Формирование интерфейса и описание обработчиков событий тестовой формы

При нажатии на кнопку «Начать тест» должна появиться форма с вопросом, вариантами ответов на него и кнопками для управления тестом: «Вперед», «Назад» и «Получить оценку». Перед тем, как разрабатывать интерфейс данной формы сначала нужно добавить в проект новую пустую форму. Для этого в пункте меню «Проект» выберем команду «Добавить форму Windows» и в появившемся после этого меню выбрать элемент «Форма Windows Forms».

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

Рисунок 2. Интерфейс формы для тестирования

Компонент label1 можно оставить с той надписью, с которой он был помещен на форму. Это можно сделать потому, что мы все равно при выводе очередного вопроса теста программно будем выводить в label1 номер вопроса и текущая надпись label1 в свойстве Text будет заменена на номер вопроса.

Компонент richTextBox1 будет использоваться для вывода текста вопроса. По умолчанию этот компонент поддерживает редактирование текста. Это значит, что пользователь, проходящий тест может из баловства стереть текст вопроса. Чтобы этого не случилось запретим для пользователя возможность редактирования данных в компоненте richTextBox1. Для этого в окне свойств установим свойство ReadOnly в значение true.

В компонент label2 выведем текст «Варианты ответов». На кнопки выведем надписи «Назад», «Вперед» и «Получить оценку».

После этого вторая форма должна выглядеть так, как это показано на рисунке 3.

Рисунок 3. Окончательный интерфейс формы для тестирования

Теперь в коде формы 2 нужно добавить функцию вывода вопроса и вариантов ответов на него и обработчики кнопок «Назад», «Вперед» и «Получить оценку».

Для того, чтобы добавить функцию вывода вопроса и вариантов ответов на него нажмем клавишу F7 (если не нравиться F7, то вы можете воспользоваться любым известным вам способом переключения между формой и ее кодом) и в открывшемся окне кода опишем нужную функцию в теле класса формы.

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;

namespace WindowsFormsApplication1

{

public partial class Form2 : Form

{

// функция вывода вопроса на форму

public void ShowVopr(int n)

{

// выводим номер вопроса в компонент label1

label1.Text = "Вопрос №" + Convert.ToString(Form1.NVopr+1);

// очищаем компонент richTextBox1, чтобы старый вопрос не оставался в данном компоненте

richTextBox1.Clear();

// добавляем текст вопроса в richTextBox1

richTextBox1.AppendText(Form1.MasVopr[n, 0]);

// очищаем компонент listBox1 от вариантов ответов старого вопроса

listBox1.Items.Clear();

// из массива MasVopr, описанного на первой форме добавляем варианты ответов

for (int i = 1; i <= 4; i++) listBox1.Items.Add(Form1.MasVopr[n, i]);

// выделяем тот вариант ответа, который ранее был выбран пользователем (по умолчанию не будет выбран ни один вариант ответа)

listBox1.SelectedIndex = Form1.MasOtv[n];

// 1 вариант управления доступностью кнопки Назад

// если текущий вопрос является самым первым, то кнопку Назад сделать недоступной иначе - доступной

if (Form1.NVopr==0)

button1.Enabled=false;

else button1.Enabled=true;

// 2 вариант (более кратки) управления доступностью кнопки Назад

// более простая запись управления доступностью кнопки Назад.

// не нужно писать в программе оба варианта. Выберите более понятный и понравившийся

button1.Enabled=Form1.NVopr!=0;

// управление доступностью кнопки Вперед. Если текущий вопрос является последним, то кнопка Вперед будет недоступной иначе - доступной

button2.Enabled = Form1.NVopr != Form1.MasVopr.GetLength(0)-1;

}

public Form2()

{

InitializeComponent();

}

}

}

Теперь добавим обработчики кнопок «Назад», «Вперед» и «Получить оценку».

Обработчик кнопки «Назад»:

private void button1_Click(object sender, EventArgs e)

{

// сохраняем в массиве MasOtv номер выбранного пользователем ответа на вопрос

Form1.MasOtv[Form1.NVopr] = listBox1.SelectedIndex;

// чтобы перейти к предыдущему вопросу уменьшаем номер вопроса на 1

Form1.NVopr--;

// вызываем функцию показа нового вопроса

ShowVopr(Form1.NVopr);

}

Обработчик кнопки «Вперед» полностью повторяет обработчик кнопки «Назад» с той лишь разницей, что при нажатии на кнопку «Назад» номер вопроса уменьшался, а при нажатии на кнопку «Вперед» номер вопроса будет увеличиваться.

Обработчик кнопки «Вперед» :

private void button2_Click(object sender, EventArgs e)

{

// сохраняем в массиве MasOtv номер выбранного пользователем ответа на вопрос

Form1.MasOtv[Form1.NVopr] = listBox1.SelectedIndex;

// чтобы перейти к следующему вопросу увеличиваем номер вопроса на 1

Form1.NVopr++;

// вызываем функцию показа нового вопроса

ShowVopr(Form1.NVopr);

}

Обработчик кнопки «Получить оценку»:

private void button3_Click(object sender, EventArgs e)

{

// сохраняем ответ пользователя на текущий вопрос

Form1.MasOtv[Form1.NVopr] = listBox1.SelectedIndex;

// переменная k будет содержать количество правильных ответов. Перед началом подсчетов обнуляем эту переменную

int k = 0;

// перебираем массив с вопросами и сравниваем ответ пользователя с правильным ответом. Если они совпадают, то k увеличиваем на 1

for (int i = 0; i < Form1.MasVopr.GetLength(0); i++)

if (Form1.MasOtv[i] > -1)

if (Form1.MasVopr[i, Form1.MasOtv[i]+1] == Form1.MasVopr[i, Form1.MasVopr.GetLength(1)-1])

k++;

// вычисляем процент правильных ответов

double proc = k/Form1.MasVopr.GetLength(0)*100;

// по вычисленному проценту правильных ответов определяем оценку за тест

int ocenka=0;

if (proc < 60)

ocenka = 2;

else

if (proc < 75)

ocenka = 3;

else

if (proc < 95)

ocenka = 4;

else ocenka = 5;

// создаем форму 3

Form3 f3 = new Form3();

// выводим на форму 3 результаты тестирования

f3.label1.Text = "Количенство вопросов: "+Convert.ToString(Form1.MasVopr.GetLength(0));

f3.label2.Text = "Количенство правильных ответов: " + Convert.ToString(k);

f3.label3.Text = "Ваша оценка: " + Convert.ToString(ocenka);

// показываем модально форму 3

f3.ShowDialog();

// закрываем форму 2 после закрытия формы 3

this.Close();

}