Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Проблемма (Тестовая Система) Добавлено: 03.08.07 12:47  

Автор вопроса:  Administrator | Web-сайт: www.-.www | ICQ: ------------------------------ 
Здравствуйте!
У меня есть проблемма. Я разрабатываю систему для тестирования знаний. Для этого есть две утилиты:

1. Создатель тестов (Test Maker)
2. Исполнитель тестов (Test Executor)

На данный момент я работаю над создателем тестов. Вот какова проблемма. На форме создателя тестов помещены:

1. Поле для вопроса
2. Поле для ответа №1
2. Поле для ответа №2
2. Поле для ответа №3
2. Поле для ответа №4
2. Поле для ответа №5

Возле каждого поля для ответа существует галочка, помечающая правильный ли это ответ. В нижней масти формы есть кнопка Next, переводящяя пользователя к написанию следующего вопроса и кнопка Back, возвращяющая пользователя к написанию предыдущего вопроса.

1. Как сделать чтобы при нажатии на кнопке Next программа переходила к созданию следующего вопроса, очищая все поля, в то же время не удаляя вопроса из памяти, чтобы при нажатии на кнопку Back пользователь переходил к предыдущему вопросу.

2. Как сделать чтобы при выборе элемента меню Save все введенные вопросы и ответы сохранялись в файле примерно в вот таком виде:


[Q1] Кто я такой?
[A1] Человек [Correct]
[A2] Инопланетянин
[A3] Млекопитающее
[A4] Машина
[A5] Не знаю

[Q2] Где я живу?
[A1] На Земле [Correct]
[A2] На Планете [Correct]
[A3] На Луне
[A4] Дома [Correct]
[A5] Не знаю


Пожалуйста, опубликуйте конкретный сниппет кода, так как я начинающий программист!

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #1
Добавлено: 03.08.07 12:55
Не нужно спекулировать тем, что вы начинающий программист. Некрасиво
как-то получается.

Ответить

Номер ответа: 2
Автор ответа:
 Administrator



ICQ: ------------------------------ 

Вопросов: 6
Ответов: 98
 Web-сайт: www.-.www
 Профиль | | #2
Добавлено: 03.08.07 13:00
Но я действительно пока не очень хорошо разбираюсь в Visual Basic 6. Поэтому я и прошу о помощи. Но на будущее непременно учту ваш совет.

Ответить

Номер ответа: 3
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #3 Добавлено: 03.08.07 13:37
Не совсем понятен вопрос, т.к. мы ж незнаем как ты загружаешь вопросы, что делают кнопки назад/вперёд (понятно что это навигация по вопросам, но каким образом..) Могу лишь общие советы дать:

1. Как сделать чтобы при нажатии на кнопке Next программа переходила к созданию следующего вопроса, очищая все поля, в то же время не удаляя вопроса из памяти, чтобы при нажатии на кнопку Back пользователь переходил к предыдущему вопросу.


1) На все вопросы одна форма. Не в коем случае не делай на кнопках назад/вперед вызовы других форм. Это криво.

2) Вопросы хранятся в файле как я понял, вот и нужно подгружать из файла тот вопрос который нужен. Навигация будет всё через те же Назад/Вперёд, но по нажатию на них будет происходить чтение из файла нужный вопросов и замена старых вопросов на только-что считанные

2. Как сделать чтобы при выборе элемента меню Save все введенные вопросы и ответы сохранялись в файле примерно в вот таком виде:

Подобно кнопки (батона) у пункта меню есть событие "клик". При создании пункта ты указывал имя его. Вот и пиши в коде, например что-то вроде:
Private sub mnuSave_Click()
' здесь обработка записи в файл
End Sub


Пример записи в файл:
open "C:\1.txt" for output as #1
print #1, "Hello amigo!"
close #1


Но с работой с файлами нужно разобраться подробнее, там много нюансов. Ты спрашивай если чё не понятно, не стесняйся :)

Ответить

Номер ответа: 4
Автор ответа:
 Administrator



ICQ: ------------------------------ 

Вопросов: 6
Ответов: 98
 Web-сайт: www.-.www
 Профиль | | #4
Добавлено: 03.08.07 13:59
Собственно программа должна работать таким образом:

1. Пользователь вводит один вопрос.
2. Пользователь нажимает кнопку Next, и вопрос который он только что набрал исчезает (все поля очищаются) но при этом если он нажмет на Back, он вернется к толко что написаному вопросу.

Именно это я и не знаю как реализовать.

Ответить

Номер ответа: 5
Автор ответа:
 Administrator



ICQ: ------------------------------ 

Вопросов: 6
Ответов: 98
 Web-сайт: www.-.www
 Профиль | | #5
Добавлено: 03.08.07 15:18
Пожалуйста, помогите с решением задачи! Очень нужно!

Ответить

Номер ответа: 6
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #6 Добавлено: 03.08.07 15:55
Я делал подобный тест. Различия в том что у моего нет кнопки Назад и возможен только один вариант ответа.
Для твоей задачи надо все вопросы и введенные ответы хранить в массиве (или массивах) и кнопками Назад/Вперед просто убавлять/привавлять переменную, а затем считывать данные из массива с индексом, равным этой переменной. (И еще: перед изменением значения переменой, текущие данные с формы надо сохранять с массив)

Ответить

Номер ответа: 7
Автор ответа:
 Administrator



ICQ: ------------------------------ 

Вопросов: 6
Ответов: 98
 Web-сайт: www.-.www
 Профиль | | #7
Добавлено: 03.08.07 16:51
ZagZag, помогите пожалуйста с этими массивами. Как я уже говорил я не очень разбираюсь на данный момент в Visual Basic 6. Не могли бы вы опубликовать сниппет кода как вы это делали, пожалуйста...

Ответить

Номер ответа: 8
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #8 Добавлено: 03.08.07 17:32
сниппет

Это новая терминология или... первый раз слышу. Мне понятнее "кусок кода" =)

На форму 2 текстовика и 2 кнопки
Option Explicit
Private lngIndex As Long
Private arData() As String

Private Sub Command1_Click()
    If lngIndex = 1 Then Exit Sub
    arData(lngIndex) = Text1.Text & ";" & Text2.Text
    lngIndex = lngIndex - 1
    LoadQuestion
End Sub

Private Sub Command2_Click()
    If lngIndex = UBound(arData) Then Exit Sub
    arData(lngIndex) = Text1.Text & ";" & Text2.Text
    lngIndex = lngIndex + 1
    LoadQuestion
End Sub

Private Sub Form_Load()
    Command1.Caption = "Назад"
    Command2.Caption = "Далее"
    'Загрузка вопросов
    ReDim arData(1 To 10)
    arData(2) = "Какого цвета подсолнух?;Незнаю =)"
    'Текущий вопрос = 1
    lngIndex = 1
    'Показать текущий вопрос
    LoadQuestion
End Sub

Private Sub LoadQuestion()
Dim arTmp() As String
    Caption = "Текущий вопрос = " & lngIndex
    Text1.Text = ""
    Text2.Text = ""
    arTmp = Split(arData(lngIndex), ";";)
    If UBound(arTmp) = -1 Then Exit Sub ' В дальнейшем эту строку можно убрать, она предотвращает ошибку если arData(lngIndex) = ""
    Text1.Text = arTmp(0)
    Text2.Text = arTmp(1)
End Sub

Пасиба мне =D

Ответить

Номер ответа: 9
Автор ответа:
 Administrator



ICQ: ------------------------------ 

Вопросов: 6
Ответов: 98
 Web-сайт: www.-.www
 Профиль | | #9
Добавлено: 03.08.07 17:44
ZagZag, большое спасибо за фрагмент кода. Он полностью работает. Будет время, разберусь в нем по подробнее, дабы понять его суть и научиться самому такое делать. По поводу термина СНИППЕТ прошу меня извинить, так как я использую его из английского языка.

Snippet is a programming term for a small region of re-usable source code or text. Ordinarily, these are formally-defined operative units to incorporate into larger programming modules. Snippets are often used to clarify the meaning of an otherwise "cluttered" function, or to minimize the use of repeated code that is common to other functions.




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

Спасибо!

Ответить

Номер ответа: 10
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #10 Добавлено: 03.08.07 18:07
Private Sub Command1_Click()
Dim arTemp() As String
Dim lngIndex As Long, lngCount As Long
    ReDim arTemp(1 To 2)
    arTemp(1) = "Вопрос1;Ответ1;Ответ2;Ответ3;Ответ4;Ответ5"
    arTemp(2) = "Вопрос2;Ответ1;Ответ2;Ответ3;Ответ4;Ответ5"
    lngCount = UBound(arTemp)
    If lngCount = -1 Then Exit Sub
    Open App.Path & "\1.txt" For Output As #1
        For lngIndex = 1 To lngCount
            Print #1, "[Q" & lngIndex & "]"
            Print #1, "[A1] " & Split(arTemp(lngIndex), ";";)(1)
            Print #1, "[A2] " & Split(arTemp(lngIndex), ";";)(2)
            Print #1, "[A3] " & Split(arTemp(lngIndex), ";";)(3)
            Print #1, "[A4] " & Split(arTemp(lngIndex), ";";)(4)
            Print #1, "[A5] " & Split(arTemp(lngIndex), ";";)(5)
        Next
    Close #1
End Sub

Ответить

Номер ответа: 11
Автор ответа:
 Administrator



ICQ: ------------------------------ 

Вопросов: 6
Ответов: 98
 Web-сайт: www.-.www
 Профиль | | #11
Добавлено: 03.08.07 18:27
Спасибо, код работает! Задача РЕШЕНА!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам