Суббота, 2025-07-12

Professor VB - примеры на VB.net и C#
Меню сайта
Вход на сайт
Категории раздела
Уроки VB.net [25]
VB.net и математика [13]
Random VB [4]
VB.net - разное [7]
VB.net - Примеры программ [2]
Главная » Статьи » VB.net » VB.net - Примеры программ

VB.net - Создание тестов

VB.net - Создание тестов



Программа + XML
Тест файл XML

 

В этой статье я хочу показать ещё один пример использования файлов XML.

 

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

 

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

 


<?xml version="1.0" encoding="utf-8"?>

<Table>

  <vprs>

                <id>НОМЕР</id>

                <text>ВОПРОС</text>

                <otvet>ПравОтвет</otvet>

                <otvet1>Ответ1</otvet1>

                <otvet2>Ответ2 </otvet2>

                <otvet3>Ответ 3</otvet3>

                <otvet4>Ответ4 </otvet4>

  </vprs>


 

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

 

Количество вопросов берётся из файла, т.е. мы, не меняя кода программы, можем создать тест как на 2 вопроса, так и на 200.


 

Приступим  к созданию программы.

На форму помещаем RichTextBox - 1 ,  RadioButton - 4,  Button - 2.

 


Imports System.Xml  'библиотека для работы с ХМЛ
Public Class Form1
    Dim fileName = "test.xml"   'файл с вопросами и ответами

    Dim rang = 0                     'количество верных ответов
    Dim otvetPrav As String    'правильный ответ
    Dim rezylt As String          'ваш ответ и правильный ответ
    Dim a = 1                          'номер вопроса
    Dim maxId_                      ' общее колво вопросов

 

    ' (1) Получение общего колва вопросов
    Sub maxIDxml()

         Dim xdoc As XDocument = XDocument.Load(fileName)
        Me.Text = xdoc.Element("Table").Elements("vprs").Count

 End Sub

    ' (2) показывает текст по номеру ID - вопрос и ответы
    Sub element1(nnn As Integer)
        maxIDxml()
        maxId_ = Val(Me.Text)

        Dim xdoc As XDocument = XDocument.Load(fileName)
        rtbOtvet.Text = ""
        For Each xe As XElement In xdoc.Element("Table").Elements("vprs")

            If xe.Element("id").Value = nnn Then
                rtbOtvet.Text += xe.Elements("text").Value

                Dim o1 = xe.Elements("otvet1").Value
                Dim o2 = xe.Elements("otvet2").Value
                Dim o3 = xe.Elements("otvet3").Value
                Dim o4 = xe.Elements("otvet4").Value

                Dim mass() = {o1, o2, o3, o4}

                'перемешивание
                Dim x, y, el1, el2
                Randomize()
                For i = 1 To 10000
                    x = Int(Rnd() * 4)    
  'Определили случайный элемент массива с номером х
                    y = Int(Rnd() * 4)       'Определили случайный элемент массива с номером y
                    el1 = mass(x)           'Запомнили значение случайного х-элемента массива
                    el2 = mass(y)           'Запомнили значение случайного y-элемента массива
                    mass(y) = el1           'Присвоили случайному x элементу значение y элемента
                    mass(x) = el2           'Присвоили случайному y элементу значение x элемента
                Next
                'end перемешивание()

                rb1.Text = mass(0)
                rb2.Text = mass(1)
                rb3.Text = mass(2)
                rb4.Text = mass(3)

                otvetPrav = xe.Elements("otvet").Value
            End If
        Next
    End Sub

 

    'результаты теста
    Sub STOPS()
        maxId_ = Val(Me.Text)
        otvetPrav = ""
        MsgBox("Ваш результат " + Str(rang) + " из " + Str(maxId_) + vbCrLf + vbCrLf + rezylt)
        cmdOk.Enabled = False

    End Sub


    'запись ответов
    Sub RadBut(rb As RadioButton)
        If rb.Checked = True Then          'если выбранный РБ истина
            If rb.Text = otvetPrav Then      'если текст в этом РБ является прав ответом
                rang += 1                             '+1 прав ответ
            End If
         
   'в перемен рез записываем выбран отв и прав отв
            rezylt += rb.Text + " - " + otvetPrav + vbCrLf
        End If

    End Sub

    'обнуление всех переменных для нового теста
    Sub newTEST()
        a = 1
        rang = 0
        cmdOk.Text = "Дальше"
        cmdOk.Enabled = True
        rezylt = ""
        element1(a)

    End Sub

    'при запуске - новый тест
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        newTEST()
    End Sub

    'кнопка ОК
    Private Sub cmdOk_Click(sender As Object, e As EventArgs) Handles cmdOk.Click
        maxId_ = Val(Me.Text)

        'делаем проверку для каждого РБ,
        'тк выбран может быть только 1, но хз какой
        RadBut(rb1)
        RadBut(rb2)
        RadBut(rb3)
        RadBut(rb4)

        'если НЕ последний вопрос тогда
        If a < maxId_ Then
            a += 1                    
  'след вопрос
            element1(a)             'показываем его
            'статистика вопросов
            cmdOk.Text = Str(a) + " из " + Str(maxId_)
          
  'выбирается 1 РБ (для нового вопроса)
            rb1.Checked = True
        Else

            'иначе - проверка ответов
            STOPS()
        End If

    End Sub

    'кнопка Новый тест
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        newTEST()
  
  End Sub
End Class


 

 

Смотреть видео

В начало

 

 



 

Категория: VB.net - Примеры программ | Добавил: ProfessorVB (2016-02-14)
Просмотров: 7074 | Теги: программа, Vb.net, XML, тест | Рейтинг: 5.0/1
Всего комментариев: 0
avatar
Облако тегов
Поиск
Друзья сайта
  • www.youtube.com

  • vk.com/professorvb

  • Партнерка AIR

  • Партнерка VSP Group
  • Поделись с друзьям
    Теги
    урок C# си шарп видео hello world MenuStrip Генератор имен Switch дроби решебник Алгебра системы уравнения геометрия Vb.net генератор уроки математика программа условия Math массив элементов видеоуроки добавление записи в xml анекдот поиск создать XML удалить из xml калькулятор НОД нок время дата Деструкторы конструкторы тест сокращение дробей десятичные дроби тренажер английский развитие мнемоника иностранные слова random рандом professorvb OpenFileDialog Timer mindgames цикл словарь база пароль слова cos sin комплексные числа вирус массив классы массивы многомерные Break Continue do for forEach While Обработка событий rgb задать цвет XML база данных xml количество элементов xml поиск значений xml редактирование xml создание soft AntiCenz fri-gate google pirat proxy tor запрещенные сайты Open save RichTextBox TopMost DateTimePicker календарь количество дней между датами перемешивание массива Анаграммы Меморина Ребусы Рифмоплет скорочтение Сравнение дробей использование
    Copyright ProfessorVB © 2025