Среда, 2025-01-22

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)
Просмотров: 7008 | Теги: программа, Vb.net, XML, Тест | Рейтинг: 5.0/1
Всего комментариев: 0
avatar
Облако тегов
Поиск
Друзья сайта
  • www.youtube.com

  • vk.com/professorvb

  • Партнерка AIR

  • Партнерка VSP Group
  • Поделись с друзьям
    Теги
    Видео Switch массивы уравнения геометрия continue forEach while Обработка событий задать цвет C# math Vb.net xml количество элементов xml поиск значений математика видеоуроки Soft системы Google pirat Proxy tor НОД нок добавление записи в xml поиск Уроки генератор hello world время деструкторы конструкторы дроби калькулятор десятичные дроби решебник сокращение дробей си шарп мнемоника тренажер random количество дней между датами professorvb дата Урок mindgames алгебра многомерные слова словарь Пароль cos SIN база timer рандом Цикл Break DO for RGB условия массив элементов xml редактирование xml создание вирус MenuStrip AntiCenz fri-gate запрещенные сайты база данных Open RichTextBox XML удалить из xml save TopMost анекдот создать XML Классы Тест OpenFileDialog английский развитие иностранные слова DateTimePicker календарь массив перемешивание массива Анаграммы Рифмоплет Сравнение дробей Меморина скорочтение Использование ребусы комплексные числа программа генератор имен
    Copyright ProfessorVB © 2025