crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Программа для создания тестов, Обсуждение программы и кода
xwicked
  опции профиля:
сообщение 15.8.2011, 6:36
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 2.8.2011
Из: Старый Оскол
Пользователь №: 2781

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте!

Третья моя программа написана по наработкам второй(для создания электронных книг), поэтому содержит некоторые методы такого же названия например "openBookBase", что в последующих версиях будет исправлено на "openTestBase" :D

Программа представляет собой миникомплекс, включающий: создание, тестирование, отчёт(статистика). Версия 0.3.1 - исходник + сборки.

Скрин последней версии:


Ссылка на SourceForge.net. Код под GNU GPL v2 - OpenSource. С++(Qt).

Обсуждаем.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
xwicked
  опции профиля:
сообщение 6.2.2012, 1:54
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 2.8.2011
Из: Старый Оскол
Пользователь №: 2781

Спасибо сказали: 0 раз(а)




Репутация:   0  


0.4.4. Исправлено 15 ошибок(!). Появились 2-е структуры:
//Структура файла свойств
struct sFileSettings
{
     bool gRegimeViewing,//true - Режим просмотра, false - Режим редактирования
  LanguageProgram,//Язык программы
  bStandardPanel,//Состояние показа стандартной панели
  bEditPanel,//Состояние показа панели редактирования
  bFormatPanel,//Состояние показа панели форматирования
  bTimePanel,//Состояние показа панели времени
  bPointPanel,//Состояние показа панели баллов
  bLimitTime,//Ограничение времени
  bAutoStartTest;//Автоматический запуск
     QString RegimePassword;//Пароль режима
};

//Структура теста
struct sShelkTestVar
{
     QString sNameTest,//Название теста
     sAllPoint,//Все баллы строкой
     sMidPoint,//Средний балл строкой
     sCurrentPoint,//Текущий балл строкой
     sTypeQuestion,//Тип вопроса
     TestPassword,//Пароль теста
     StatNameTest,//Имя пользователя в статистике
     sQuestion,//Текст вопроса
     sTimeStart;//Время начала

int CountQuestion,//Количество вопросов
iNumberQuestion,//Номер вопроса
iNumberTest,//Номер теста
AllPoint,//Общий балл
MidPoint,//Средний балл
CurrentPoint,//Текущий балл
AllPointCheck,//Общий балл для проверки
AllTime,//Общее время
MidTime,//Среднее время
CurrentTime,//Текущее время
i5First;//Номер прошлого выделенного ответа (установка последовательности)

     QVector<double> *iRangeFirst,//Начальное значение диапазона (ввод числа)
                     *iRangeLast;//Конечное значение диапазона (ввод числа)

     QStringList ListQuestions,//Список вопросов
                 slTableNumber,//Список номеров таблиц в базе тестов
                 slQuestionType,//Список типов вопросов
                 slPoint,//Список баллов
                 slTime;//Список времени

     QVector<QVariant> *ListRightAnswer,//Список правильных ответов
                       *ListCheckRightAnswer;//Список правильных ответов для проверки

     QVector<QStringList> *ListAnswers;//Список ответов
     QVector<QByteArray> *ListImages;//Список изображений
     QVector<QFont> *ListFonts;//Список шрифтов
     QSqlDatabase db;//База данных тестов

     QTimer TimerTest,
            TimerTestLabel;
     QTime TimeTestCurrent,
           TimeTestAll;
};
Их было решено использовать сразу, после выхода кроссворда за предел стека :lol:
Введение вектора типа QVariant позволило функцию проверки ответов максимально упростить и вынести отдельно:
bool ShelkTest::MakeCheckRightAnswer(int iIndex)
{
    int iTypeR;
    QString str1, str2;
    QByteArray ba1, ba2;

    iTypeR = vShelkTestVar->ListRightAnswer->at(iIndex).type();

        if(iTypeR == QVariant::Int)
            {
                if(vShelkTestVar->ListRightAnswer->at(iIndex).toInt()
                    == vShelkTestVar->ListCheckRightAnswer->at(iIndex).toInt())
                    return true;
                else return false;
            }

        if(iTypeR == QVariant::Double)
            {
                if(vShelkTestVar->ListRightAnswer->at(iIndex).toDouble()
                    == vShelkTestVar->ListCheckRightAnswer->at(iIndex).toDouble())
                    return true;
                else return false;
            }

        if(iTypeR == QVariant::String)
            {
                if(vShelkTestVar->ListRightAnswer->at(iIndex).toString()
                    == vShelkTestVar->ListCheckRightAnswer->at(iIndex).toString())
                    return true;
                else return false;
            }

        if(iTypeR == QVariant::ByteArray)
            {
                ba1.append(vShelkTestVar->ListRightAnswer->at(iIndex).toByteArray());
                ba2.append(vShelkTestVar->ListCheckRightAnswer->at(iIndex).toByteArray());
                str1.append(vShelkTestVar->ListRightAnswer->at(iIndex).toByteArray());
                str2.append(vShelkTestVar->ListCheckRightAnswer->at(iIndex).toByteArray());

                if(vShelkTestVar->ListRightAnswer->at(iIndex).toByteArray()
                    == vShelkTestVar->ListCheckRightAnswer->at(iIndex).toByteArray())
                    return true;
                else return false;
            }

        if(iTypeR == QVariant::StringList)
            {
                if(vShelkTestVar->ListRightAnswer->at(iIndex).toStringList()
                    == vShelkTestVar->ListCheckRightAnswer->at(iIndex).toStringList())
                    return true;
                else return false;
            }
        return false;
}
Несмотря на то, что QVariant не рекомендуется использовать из за большого потребления памяти, так как он позволяет хранить даже контейнеры(!), я решил сделать это. Использование один раз в масштабах простой программы для создания тестов показала свою рентабельность.
Скачать
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- xwicked   Программа для создания тестов   15.8.2011, 6:36
- - Litkevich Yuriy   xwicked, а как ею пользоваться?   15.8.2011, 6:51
- - xwicked   Описание: кроссплатформенная программа для создани...   15.8.2011, 9:52
- - xwicked   Здравствуйте! Вот новая версия 0.3.5. Теперь...   29.8.2011, 23:20
- - silver47   Как Вы решили вопрос с безопасностью? SQLite по ум...   30.8.2011, 5:25
|- - xwicked   Цитата(silver47 @ 30.8.2011, 6:25) Как Вы...   30.8.2011, 13:45
- - vankleef   Немного оффтоп Раскрывающийся текст В институте за...   30.8.2011, 18:26
- - xwicked   Для распространения программы между RPM-дистрибути...   21.10.2011, 16:32
- - xwicked   Продолжаем знакомиться с кодом. Версия 0.4.1 Включ...   7.11.2011, 0:52
- - xwicked   Здравствуйте! Программа продолжает совершенст...   22.11.2011, 22:26
- - xwicked   0.4.3 - это новая версия программы. Здравствуйте...   26.1.2012, 20:15
- - xwicked   0.4.4. Исправлено 15 ошибок(!). Появились 2-е ...   6.2.2012, 1:54
- - Алексей1153   Цитата(xwicked @ 26.1.2012, 23:15) 0.4.4....   6.2.2012, 8:24
- - xwicked   Алексей1153, благодарю, но конструкторы я буду осв...   6.2.2012, 13:24
- - Алексей1153   xwicked, да не, начинай уже осваивать ) Потом же и...   6.2.2012, 13:48
- - xwicked   Здравствуйте! Представляю новую версию програм...   14.2.2012, 23:03
- - xwicked   Новая и последняя на данный момент версия 1.0.0. З...   19.2.2012, 1:22
- - xwicked   1.5.2 - скачатьЦитата- Теперь сохранение свойств п...   17.11.2012, 18:42
- - xwicked   По-тихоньку идёт совершенствование программы. И се...   3.11.2013, 20:58
- - Гость   если сделаешь возможность компиляции в exe, цены т...   5.11.2014, 8:26
- - xwicked   Цитата(Гость @ 5.11.2014, 9:26) если сдел...   8.11.2014, 21:34


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.4.2024, 22:05