Форум 3DNews
Вернуться   Форум 3DNews > Программирование > Программирование

Ответ Создать новую тему
Опции темы Опции просмотра
Непрочитано 28.11.2004, 14:32   [включить плавающее окно]   #1
DMx
Мужской Продвинутый
Автор темы
 
Аватар для DMx
 
Регистрация: 29.07.2003
Адрес: СПб
Red face Тестирование, на Visual C++

Подскажите, как лучше всего реализовать систему тестирования на Visual C++. Нужно, чтобы можно было без проблем добавлять в неё новые тесты, удалять их, редактировать. Как лучше всего это сделать?
Особых заморочек не нужно. Например, не требуется добавлять новые тесты в самой проге, т.е. не нужен соответствующий диалог. Думаю, тесты (и ответы на них) хранить в обычных txt-файлах. Только как это
всё будет выглядеть и как удобней всего это сделать?
Под тестированием я подразумеваю: вопрос и несколько вариантов ответов.

Может кто-нить видел похожие проги с исходниками в сети? Или кто-нибудь уже делал такое?
__________________
Baller's Choice -> http://bchance.ru
DMx вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 28.11.2004, 14:52   [включить плавающее окно]   #2
MFractal
Мужской Общительный
 
Аватар для MFractal
 
Регистрация: 25.10.2004
Адрес: Israel
А почему не взять готовое решение?
Например Mercury TestDirector, или надо чего нибудь поскромнее?
MFractal вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 28.11.2004, 17:48   [включить плавающее окно]   #3
DMx
Мужской Продвинутый
Автор темы
 
Аватар для DMx
 
Регистрация: 29.07.2003
Адрес: СПб
Поскромнее. И эту работу мне на учёбе сдавать надо...
__________________
Baller's Choice -> http://bchance.ru
DMx вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 28.11.2004, 19:20   [включить плавающее окно]   #4
Ant.ttk
Мужской Продвинутый
 
Аватар для Ant.ttk
 
Регистрация: 16.11.2004
Адрес: Троицк
Ну здесь надо вспомнить всю смекалку, какую учили в школе на уроках инфы. Типа, ммм, сканируй папку с тестами на их наличие и дальнейший выбор одного из них. Создай алгоритм отделения вопросов из .тхт... Потом подобным алгоритмом кидай в новый .тхт ответы на пару с вопросом. Потом напиши анализотар, который бы динамически распознавал кол-во вопросов и создавал необходимые элементы управления в диалоге анализатора. Примерно так. С ходу =)))). По пути, если серьезно этим заняться, найдешь много удобных решений.
__________________
Feel the force, motherf*ckers.
Ant.ttk вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 03.12.2004, 16:45   [включить плавающее окно]   #5
DMx
Мужской Продвинутый
Автор темы
 
Аватар для DMx
 
Регистрация: 29.07.2003
Адрес: СПб
Значит так, решил не париться с вытаскиванием вопросов и ответов из txt-файлов (к тому же это не надёжно, ведь юзер может без проблем посмотреть ответы ). Сделаю по простому.
Не хочу плодить много форм (надо 10 вопросов), поэтому решил после каждого вопроса менять подписи у Radio Box'а и сам вопрос в Edit Box'е, т.е. всё будет на одной форме, но её содержание будет меняться по ходу выполнения программы. Однако тут появилась трабла - после ответа на первый вопрос, события Radio Box'ов перестают работать. Может нужно как-то обновить окно или ещё что?
Вот код:
Код:
#include "stdafx.h"
#include "TestDualityProblem.h"
#include "TestDualityProblem_2.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CTestDualityProblem_2 dialog


CTestDualityProblem_2::CTestDualityProblem_2(CWnd* pParent /*=NULL*/)
: CDialog(CTestDualityProblem_2::IDD, pParent)
{
//{{AFX_DATA_INIT(CTestDualityProblem_2)
m_question = _T("");
//}}AFX_DATA_INIT
}


void CTestDualityProblem_2::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestDualityProblem_2)
DDX_Text(pDX, IDC_EDIT1, m_question);
//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CTestDualityProblem_2, CDialog)
//{{AFX_MSG_MAP(CTestDualityProblem_2)
ON_BN_CLICKED(IDC_BUTTON3, OnButtonNext)
ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
ON_BN_CLICKED(IDC_BUTTON4, OnButtonExit)
ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
ON_BN_CLICKED(IDC_RADIO3, OnRadio3)
ON_BN_CLICKED(IDC_RADIO4, OnRadio4)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestDualityProblem_2 message handlers

BOOL CTestDualityProblem_2::OnInitDialog() 
{
CDialog::OnInitDialog();

m_question = "Лучший игрок And1?";
test = 1;
q = 0;
UpdateData(false);

return TRUE;  // return TRUE unless you set the focus to a control
              // EXCEPTION: OCX Property Pages should return FALSE
}

void CTestDualityProblem_2::OnButtonNext() 
{
UpdateData(true);
CStdioFile File;
File.Open("stat.txt", CFile::modeCreate|CFile::modeWrite|CFile::modeNoTruncate);
File.SeekToEnd();
if (test == 1) {
 File.WriteString("Вопрос 1: ");
 if (q == 2) {
  File.WriteString("правильно.");
 }
 else
  File.WriteString("не правильно.");
 test++;
}
if (test == 2) {
 File.WriteString("Вопрос 2: ");
 if (q == 1) {
  File.WriteString("правильно.");
 }
 else
  File.WriteString("не правильно.");
 m_question = "Лучший игрок NBA?";
 SetWindowText("Программа тестирования. Вопрос 2 из 10");
 GetDlgItem(IDC_RADIO1)->SetWindowText("Kobe Bryant");
 GetDlgItem(IDC_RADIO2)->SetWindowText("Tracy McGrady");
 GetDlgItem(IDC_RADIO3)->SetWindowText("Shaquille O'Neal");
 GetDlgItem(IDC_RADIO4)->SetWindowText("Kevin Garnett");
 test++;
 UpdateData(false);
}
if (test == 3) {
 File.WriteString("Вопрос 3: ");
 if (q == 1) {
  File.WriteString("правильно.");
 }
 else
  File.WriteString("не правильно.");
 m_question = "Лучший данкер Slam Nation?";
 SetWindowText("Программа тестирования. Вопрос 3 из 10");
 GetDlgItem(IDC_RADIO1)->SetWindowText("Кадур Зиани");
 GetDlgItem(IDC_RADIO2)->SetWindowText("Абдул Бамба");
 GetDlgItem(IDC_RADIO3)->SetWindowText("Саламон Сэми");
 GetDlgItem(IDC_RADIO4)->SetWindowText("Стиви Лоубел");
 test++;
 UpdateData(false);
}
File.Close();
}

void CTestDualityProblem_2::OnButtonExit() 
{
int status = MessageBox( "Вы хотите выйти?", "ВЫХОД", MB_OKCANCEL | MB_ICONQUESTION );
if (status == IDOK) exit(0); 
}

void CTestDualityProblem_2::OnRadio1() 
{
q = 1;
}

void CTestDualityProblem_2::OnRadio2() 
{
q = 2; 
}

void CTestDualityProblem_2::OnRadio3() 
{
q = 3; 
}

void CTestDualityProblem_2::OnRadio4() 
{
q = 4; 
}
Что надо поправить, чтобы 3 вопроса (пока 3) работали нормально?
__________________
Baller's Choice -> http://bchance.ru
DMx вне форума  
Конфигурация ПК
Ответить с цитированием
Ответ Создать новую тему

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 02:33. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 2000-2017 3DNews. All Rights Reserved.
Администрация 3DNews требует соблюдения на форуме правил и законов РФ
Серверы размещены в Hostkey