![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
xwicked |
![]() ![]()
Сообщение
#1
|
![]() Студент ![]() Группа: Участник Сообщений: 66 Регистрация: 2.8.2011 Из: Старый Оскол Пользователь №: 2781 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Здравствуйте!
Третья моя программа написана по наработкам второй(для создания электронных книг), поэтому содержит некоторые методы такого же названия например "openBookBase", что в последующих версиях будет исправлено на "openTestBase" ![]() Программа представляет собой миникомплекс, включающий: создание, тестирование, отчёт(статистика). Версия 0.3.1 - исходник + сборки. Скрин последней версии: ![]() Ссылка на SourceForge.net. Код под GNU GPL v2 - OpenSource. С++(Qt). Обсуждаем. |
|
|
![]() |
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
xwicked, а как ею пользоваться?
|
|
|
xwicked |
![]() ![]()
Сообщение
#3
|
![]() Студент ![]() Группа: Участник Сообщений: 66 Регистрация: 2.8.2011 Из: Старый Оскол Пользователь №: 2781 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Описание: кроссплатформенная программа для создания и редактирования тестов, с последующим тестированием.
Её могут использовать все, кому понадобиться быстро создать тест и проверить знания. Можно будет создать вопрос типа "Что показано на изображении" и использовать как в школе так и на предприятии, для сдачи квалификационных экзаменов. Все тесты хранятся в базе данных SQLite3. Это позволяет располагать файл базы на любом сервере(Windows, GNU / Linux, и т. д.), без необходимости установки сервера баз данных. Всё находится в одном исполняемом файле. Для редактирования / тестирования, необходимо переключить соответствующий пункт из меню "Режим". Отчёт о протестировавшихся представлен статистикой. Внутренняя архитектура: список вопросов хранится в QStringList ListQuestions, список правильных ответов в QStringList ListRightAnswer, варианты ответа при тестировании в QStringList ListCheckRightAnswer. Изображения к тесту находятся в QByteArray ListImages[100000]. Режим редактирования защищён паролем, который пока что, хранится в открытом виде. |
|
|
xwicked |
![]() ![]()
Сообщение
#4
|
![]() Студент ![]() Группа: Участник Сообщений: 66 Регистрация: 2.8.2011 Из: Старый Оскол Пользователь №: 2781 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Здравствуйте!
Вот новая версия 0.3.5. Теперь программа предоставляет возможность создавать тесты, используя 4-е новых типа вопроса: много ответов, ввод слова(предложения) с клавиатуры, ввод числа с клавиатуры, установка последовательности ответов. Хочу обратить Ваше внимание на то, что в данной версии я сделал вот так:
Функция slotSelectTypeQuestion() отвечает за вывод списка, из которого можно будет выбрать соответствующий тип вопроса. Далее идёт проверка типа и его применение - функция начинается на "set<Тип_вопроса>". Потом выбранный вариант загоняется в список типов QStringList slQuestionType. Но, здесь есть одно "но": - тип вопроса взят в "tr()", так что тест, составленный на русском языке не будет работать при использовании английского языка интерфейса программы и наоборот ![]() ![]() Дабы быть уверенным в том, что файлы не побились, при закачке, я добавил текстовик с md5-контрольными суммами. Git-репозиторий: Цитата git://shelk-test.git.sourceforge.net/gitroot/shelk-test/shelk-test (read-only) P.S. Ещё один очень важный момент: версии 0.3.5, 0.4.1, 0.4.2 - сборки являются минимальными. То есть, чтобы посмотреть на все функции, необходимо программу собрать из исходника ![]() |
|
|
silver47 |
![]()
Сообщение
#5
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: ![]() ![]() ![]() |
Как Вы решили вопрос с безопасностью? SQLite по умолчанию ничем не защищена, и вытащить из нее все ответы - плёвое дело.
|
|
|
xwicked |
![]() ![]()
Сообщение
#6
|
![]() Студент ![]() Группа: Участник Сообщений: 66 Регистрация: 2.8.2011 Из: Старый Оскол Пользователь №: 2781 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Как Вы решили вопрос с безопасностью? SQLite по умолчанию ничем не защищена, и вытащить из нее все ответы - плёвое дело. Пока никак. Я уже думал над этим вопросом. Тут, кроме применения какого-либо алгоритма шифрования, может потребоваться и синхронизация структур теста в базе данных и в экспортируемом файле(будущая функция ![]() Сообщение отредактировал xwicked - 30.8.2011, 21:47 |
|
|
vankleef |
![]() ![]()
Сообщение
#7
|
![]() Студент ![]() Группа: Участник Сообщений: 74 Регистрация: 21.10.2010 Пользователь №: 2134 Спасибо сказали: 9 раз(а) Репутация: ![]() ![]() ![]() |
Немного оффтоп
Раскрывающийся текст В институте за халявку сделал комплекс тестирования в стиле ЕГЭ. В комплексе две программы: сама форма тестирования, копирующая вот такой бланк ответов частей А и Б и программа по созданию тестов. Все работает с MySQL. Комплекс создан для подготовки/тренировки школьников к ЕГЭ (у преподавателя, которому делал комплекс, жена учитель в школе). Пара скриншотов ![]() ![]() ![]() P.S. Работы было проделано не мало, не хочется чтобы все это пропало просто так) Кому интересно могу выложить исходники. |
|
|
xwicked |
![]() ![]()
Сообщение
#8
|
![]() Студент ![]() Группа: Участник Сообщений: 66 Регистрация: 2.8.2011 Из: Старый Оскол Пользователь №: 2781 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Для распространения программы между RPM-дистрибутивами, воспользуйтесь следующим спекфайлом:
Цитата Summary: On Qt-based, cross-platform software is designed for creating and editing tests, followed by tests of knowledge. Но, в нём есть небольшая ошибка или, даже скорей недочёт: Summary(ru): Кроссплатформенная программа для создания и редактирования тестов, с последующим тестированием. Основана на Qt. %define version 0.3.5 Group: Education Name: shelk-test BuildRequires: gcc-c++, libqt4-sql-sqlite >= 4.4.3, libqtgui4 >= 4.4.3, libqt4-core >= 4.4.3 BuildArch: %ix86 Provides: shelk-test Release: alt1 Source: shelk-test-%{version}.tar.gz Url: http://labfreetech.org/index_e.html Version: %{version} License: GPLv2 Packager: LabFreeTech.org admin@labfreetech.org %description On Qt-based, cross-platform software is designed for creating and editing tests, followed by tests of knowledge. Supported features: - Creation of a test; - Editing of the test; - Testing; - Adding / removing tests from the database; - Rich editing the test of the tests; - Password protection regime editing; %description -l ru Кроссплатформенная программа для создания и редактирования тестов, с последующим тестированием. Основана на Qt. Поддерживаемые функции: - Создание теста; - Редактирование теста; - Тестирование; - Добавление / удаление тестов из базы данных; - Расширенное редактирование текста вопросов теста; - Защита паролем режима редактирования; %prep %setup -q %build %make_build %install cp -Rv shelk/ %buildroot/ %clean rm -rf $RPM_BUILD_ROOT %files /usr/bin/* /usr/share/* %post test -e /usr/bin/xwts-0.3.5 || ln -s /usr/bin/xwts-0.3.5 /usr/bin/shelk-test-0.3.5 if (test -d $HOME/Desktop) then test -e $HOME/Desktop/xwts.desktop || cp -r /usr/share/applications/xwts.desktop $HOME/Desktop/shelk-test.desktop else echo "Use command \"/usr/bin/xwts-0.3.5\"" fi %postun test -L /usr/bin/shelk-test-0.3.5 && rm -r /usr/bin/shelk-test-0.3.5 test -e $HOME/Desktop/shelk-test.desktop && rm -r $HOME/Desktop/shelk-test.desktop Цитата BuildRequires: gcc-c++, libqt4-sql-sqlite >= 4.4.3, libqtgui4 >= 4.4.3, libqt4-core >= 4.4.3 Непонятно почему при установке собранного пакета с этим спекфайлом, происходит игнорирование выделенной библиотеки ![]() Этот спекфайл находится в архиве shelk-test-0.3.5-rpm, расположенный по ссылке в предыдущем посте. Там же находится архив исходного кода и для дитрибутивов GNU / Linux Debian(/Ubuntu), с пометкой "deb". |
|
|
xwicked |
![]() ![]()
Сообщение
#9
|
![]() Студент ![]() Группа: Участник Сообщений: 66 Регистрация: 2.8.2011 Из: Старый Оскол Пользователь №: 2781 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Продолжаем знакомиться с кодом. Версия 0.4.1 Включает в себя следующие изменения:
Цитата - Исправлена ошибка в реализации типа вопроса "Ввод числа"; - Исправлена ошибка в реализации типа вопроса "Установка последовательности"; - Добавлена возможность вставки изображения в вопрос теста; - Добавлены горячие клавиши; - Добавлена возможность использования баллов; - Добавлена возможность ввода имени тестируемого; - Добавлена статистика. Статистика - это первый вариант журнала отчёта о протестировавшихся студентах, представлена обычным html-файлом: Есть что-нибудь проще или для начала сойдёт?
|
|
|
xwicked |
![]() ![]()
Сообщение
#10
|
![]() Студент ![]() Группа: Участник Сообщений: 66 Регистрация: 2.8.2011 Из: Старый Оскол Пользователь №: 2781 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Здравствуйте! Программа продолжает совершенствоваться и версия 0.4.2 включает 25 изменений. Было изменено отображение картинки в тесте. Теперь используется рисование непосредственно на виджите:
Как я предполагаю, что есть проще и правильнее способ, но времени найти его нет ![]() Ещё интересует вопрос по отлавливанию ошибок try catch. Это первая реализация. Что кроме вынесения в один метод обработчиков, во избежании наличия копированного кода, там можно сделать? Благодарю! ![]() Ещё изменения: Цитата - Добавлен учёт времени тестируемого;
- Добавилась возможность ручного запуска теста, по нажатию на клавишу; - Добавлена возможность остановки теста, с занесением информации о тестируемом в статистику; - Добавилась возможность экспорта в файл XWT; - Добавилась возможность импорта из файла XWT; Сообщение отредактировал xwicked - 22.11.2011, 23:35 |
|
|
xwicked |
![]() ![]()
Сообщение
#11
|
![]() Студент ![]() Группа: Участник Сообщений: 66 Регистрация: 2.8.2011 Из: Старый Оскол Пользователь №: 2781 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
0.4.3 - это новая версия программы.
Здравствуйте! ![]() Цитата - Добавлено шифрование и сжатие экспортируемого файла теста в формате xwt; - Исправлена ошибка, когда пароль режима программы хранился и проверялся в открытом виде; - Добавлена возможность работать с несколькими хранилищами тестов; - Добавлена возможность резервировать хранилище тестов(со сжатием до 5-ти раз(!)); - Добавлена возможность запроса на сохранение теста, при его закрытии; Для шифрования используется алгоритм Base64, для сжатия функция qCompress. Этот код может быть реверсирован и получен изначальный пароль фактически в 100%-ом виде. В будущем он будет заменён на md5 хеш или похожий.А вот следующая проблема - это шифрование самого теста. Алгоритмы те же. При наличии у студента(/пользователя) кода все тесты предстают в абсолютно первозданном виде ![]() Шифрование по ключу думаю будет слишком хорошая защита, которую мне одному не реализовать. Найти другой вариант за ~2-а месяца у меня не получилось. Какие есть варианты? Благодарю! ЗЫ: Всего 25 изменений. Сообщение отредактировал xwicked - 26.1.2012, 20:27 |
|
|
xwicked |
![]() ![]()
Сообщение
#12
|
![]() Студент ![]() Группа: Участник Сообщений: 66 Регистрация: 2.8.2011 Из: Старый Оскол Пользователь №: 2781 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
0.4.4. Исправлено 15 ошибок(!). Появились 2-е структуры:
Их было решено использовать сразу, после выхода кроссворда за предел стека ![]() Введение вектора типа QVariant позволило функцию проверки ответов максимально упростить и вынести отдельно: Несмотря на то, что QVariant не рекомендуется использовать из за большого потребления памяти, так как он позволяет хранить даже контейнеры(!), я решил сделать это. Использование один раз в масштабах простой программы для создания тестов показала свою рентабельность.Скачать |
|
|
Алексей1153 |
![]()
Сообщение
#13
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
0.4.4. Исправлено 15 ошибок(!). Появились 2-е структуры: //Структура файла свойств struct sFileSettings { bool gRegimeViewing,//true - Режим просмотра, false - Режим редактирования LanguageProgram,//Язык программы bStandardPanel,//Состояние показа стандартной панели bEditPanel,//Состояние показа панели редактирования bFormatPanel,//Состояние показа панели форматирования bTimePanel,//Состояние показа панели времени bPointPanel,//Состояние показа панели баллов bLimitTime,//Ограничение времени bAutoStartTest;//Автоматический запуск QString RegimePassword;//Пароль режима }; ой ой! Исправлено 15 ошибок, а добавлено ещё 15 ![]() Совсем-совсем не советую так оформлять структуры. Более того - не только структуры, а даже просто так объявлять переменные! Правильно так:
Но у меня это всё выглядело бы так (не из стремления экономить, а для удобства обнуления флагов): Раскрывающийся текст
QString str1, str2; QByteArray ba1, ba2; - та же мигня! Что экономишь то ? а в структуре sShelkTestVar у тебя не инициализированные в конструкторе указатели - это вообще ахтунг ) Сообщение отредактировал Алексей1153 - 6.2.2012, 8:22 |
|
|
xwicked |
![]() ![]()
Сообщение
#14
|
![]() Студент ![]() Группа: Участник Сообщений: 66 Регистрация: 2.8.2011 Из: Старый Оскол Пользователь №: 2781 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Алексей1153, благодарю, но конструкторы я буду осваивать для классов, с приходом полного ООП в эту программу
![]() |
|
|
Алексей1153 |
![]()
Сообщение
#15
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
xwicked, да не, начинай уже осваивать ) Потом же исправлять и глюки вылавливать придётся.
Открою маленький секрет: для компилятора C++ нет разницы, class это, struct или union - у них всех всё одинаково работает, они имеют конструктор и деструктор. Тонкости в различии : union и struct по умолчанию устанавливают доступ public своему содержимому, а class - private. Ну и в union у объединённых переменных вроде не может быть явного конструктора/деструктора, но это уже к нашему случаю не относится, так как это внутренние данные, а не сама структура. |
|
|
xwicked |
![]() ![]()
Сообщение
#16
|
![]() Студент ![]() Группа: Участник Сообщений: 66 Регистрация: 2.8.2011 Из: Старый Оскол Пользователь №: 2781 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Здравствуйте! Представляю новую версию программы 0.4.7. Добавился файл с константами:
Добавилась новая структура, но в коде она пока не задействована: Оптимизирована функция изменения шрифта(была 195 строк): Скачать
|
|
|
xwicked |
![]() ![]()
Сообщение
#17
|
![]() Студент ![]() Группа: Участник Сообщений: 66 Регистрация: 2.8.2011 Из: Старый Оскол Пользователь №: 2781 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Новая и последняя на данный момент версия 1.0.0. Здесь я постарался конкретно. Изменения:
Цитата - Добавились новые возможности: проверка наличия новой версии через интернет; печать теста; печать статистики; экспорт тестов в HTML, RTF, PDF, PostScript, простой текстовый формат; - Добавлено использование системных временных каталогов для размещения временных файлов; - Изменилось расположение файла статистики по-умолчанию на домашний каталог пользователя; - Изменилась кодировка файла статистики на UTF-8: - Изменилась кодировка импортируемого текстового файла на UTF-8;
Далее, задействовал webkit: , так как QTextEdit и QTextBrowser не могут отображать элементы ввода(текст, переключатель, флажок), для формирования правильной html-ки. Раз уж было принято решение добавить новую зависимость от библиотеки QtWebkit, то на его же основе я сделал проверку наличия новой версии через интернет, смотрим: Как видно - всё просто. Если текст "new_version" найден в загруженной html-ке, то есть новая версия ![]() Чтобы сделать всё так, как я задумал - пришлось использовать новый метод disconnect, который я ранее не использовал и всё получилось. Теперь за кодом можно наблюдать не дожидаясь релиза. В git создана новая ветка current. Скачать. |
|
|
xwicked |
![]() ![]()
Сообщение
#18
|
![]() Студент ![]() Группа: Участник Сообщений: 66 Регистрация: 2.8.2011 Из: Старый Оскол Пользователь №: 2781 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
1.5.2 - скачать
Цитата - Теперь сохранение свойств программы происходит при каждом их изменении; В следующей версии я хочу прикрутить веб-интрефейс тестируемого. Собираюсь использовать JavaScript(или Java? а возможно C++?) + свой простейший веб-сервер(на C++ для AJAX). Какие вопросы / проблемы меня могут поджидать?- Убрана чувствительность регистра ответа в вопросе типа "Ввод слова(предложения)"; - Исправлена ошибка ограничения количества вопросов в режиме редактирования; - Добавлено новое поле статистики "Количество заданных вопросов из общего числа"; - Исправлена ошибка, когда нельзя было ввести вариант ответа, при увеличении и обратном уменьшении изображения, в вопросе "Ввод слова(предложения)"; - Изменено и отлажено автоматическое определение пропущенных вопросов, при тестировании; - Добавлена дополнительная детализация к статистике протестировавшихся; Благодарю за ответы! Сообщение отредактировал xwicked - 17.11.2012, 21:01 |
|
|
xwicked |
![]() ![]()
Сообщение
#19
|
![]() Студент ![]() Группа: Участник Сообщений: 66 Регистрация: 2.8.2011 Из: Старый Оскол Пользователь №: 2781 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Гость_Гость_* |
![]()
Сообщение
#20
|
Гости ![]() |
если сделаешь возможность компиляции в exe, цены тебе не будет)
|
|
|
xwicked |
![]() ![]()
Сообщение
#21
|
![]() Студент ![]() Группа: Участник Сообщений: 66 Регистрация: 2.8.2011 Из: Старый Оскол Пользователь №: 2781 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
если сделаешь возможность компиляции в exe, цены тебе не будет) На самом деле в этом нет ничего сложного. Но есть небольшие но. Я определил стратегию развития проекта на максимальную переносимость, то есть не использовать платформенно-зависимый код. Так как я прислушиваюсь к каждому совету, то я могу переопределить основные и второстепенные планы совершенствования ввиду постепенно нарастающей популярности проекта.
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 13.6.2025, 23:58 |