Программа «Глобус ++»
ЦЕЛИ И ЗАДАЧИ
ПРЕДСТАВЛЕНИЕ ДАННЫХ
РАБОТА С ДАННЫМИ
АНАЛИЗ ДЕЙСТВИЙ УЧЕНИКА
ИНТЕРФЕЙС ПРОГРАММЫ
РЕДАКТОР ЗАДАНИЙ
РЕЗУЛЬТАТЫ РАБОТЫ
ДАЛЬНЕЙШЕЕ РАЗВИТИЕ ПРОЕКТА
АЛГОРИТМ ТЕСТИРОВАНИЯ
РЕАЛИЗАЦИЯ РАБОТЫ С ФАЙЛАМИ
5.48M

Программа «Глобус ++»

1. Программа «Глобус ++»

2.

Варенцов Михаил, 10 «В» класс, лицей «Вторая Школа»
Программа «Глобус++»
Целью проекта является разработка программы, позволяющей тестировать и улучшать знания по географии, как знания географической
номенклатуры, так и теоретические знания. Во ходе работы был спроектирован и реализован движок для тестирования с использованием
географических карт, формат для хранения заданий и алгоритмы работы с ним, создан приятный интерфейс программы, редактор для работы с
картами и заданиями, средства сетевого контроля тестирования.
Задания в программе были разделены на два типа: географические объекты и текстовые вопросы. Географические объекты представляются
набором ключевых точек. Объект может иметь несколько названий: основное и альтернативные, и коэффициент сложности. Для некоторых объектов
(например, реки) важно направление показа. Вопросы в программе сделаны в виде теста с вариантами ответа. Существует возможность привязать
вопросы к конкретному объекту с помощью специального ссылочного механизма. Главной структурной единицей в программе является тема - набор
заданий и вопросов на общую тематику. Тема имеет название и путь к файлу с картой. Карты в программе представляются растровыми
изображениями, и к ним привязываются определенные темы.
Для хранения заданий в файлах был разработан специальный формат. Каждая тема хранится в отдельном файле. Она представлена набором
определенных команд. Чтобы не дать ученику подглядеть ответы, файл подвергается шифрованию. При работе с базой тем программа с помощью
системных функций получает список файлов в директории и ищет в них темы. Для этого файл читается построчно, строка декодируется и
анализируется. Когда файл кончается, программа переходит к следующему файлу. Когда тема прочитана, она проходит проверку на пригодность для
теста (тема должна содержать хотя бы одно задание, имеет путь к карте и т.д.), и добавляется ее в список, из которого будет осуществляться выбор
тем для тестирования. По такому же принципу составляется список карт.
Довольно сложно было реализовать анализ действий ученика на карте, так как отмеченная им траектория должна быть пригодна для сравнения с
исходными точками объекта. Для этого был разработан специальный алгоритм. Сначала программа определяет ключевую точку объекта,
соответствующую первой точке, отмеченной учеником. Для этого сравниваются расстояния от первой точки ученика до всех ключевых точек объекта.
Номера точек переставляются таким образом, чтобы ближайшая точка стала первой. Далее определяется направление показа. Для этого
сравниваются расстояния от следующей точки ученика до двух соседей первой точки. Номера точек переставляются по направлению показа.
Следующие точки ученика отмечаются так, чтобы расстояния между ними были равны расстояниям между соответствующими точками объекта. Когда
все точки отмечены или отведенное на ответ время истекает, производится анализ. Если расстояние от точки ученика до соответствующей точки
объекта меньше, чем заданная константа, то эта точка отмечена правильно.
Важным шагом при разработке проекта было создание удобного и привлекательного графического интерфейса. Так, например, список рекордов
учеников сделан в виде классного журнала, а курсор мыши заменен указкой. Для удобства ориентирования на основной карте есть мини-карта.
Процесс тестирования сопровождается звуковыми комментариями.
Так как программа использует свой собственный формат данных, необходимо было создать редактор для работы с этим форматом. Редактор
изначально создавался как отдельная программа в составе проекта. Он включает в себя редактор географических объектов и текстовых вопросов и
инструменты для управления картами и темами. В последней версии программы была осуществлена полная переработка редактора заданий. Главным
отличием нового редактора версии более быстрый, удобный и красивый пользовательский интерфейс, реализованный средствами
кроссплатформенной библиотеки wxWidgets.
Одной из поставленных задач была реализация возможности сетевого контроля тестирования. Пока эта возможность реализована лишь частично.
Тестирующая программа записывает ход тестирования, и на основе этих данных генерирует web-страницу. Страница динамически обновляется. С
помощью программы “Apache” на основе этой страницы создается локальный сетевой сервер. Чтобы следить за ходом тестирования с любого
компьютера в локальной сети, необходимо в любом Интернет-браузере набрать IP-адрес компьютера, на котором ведется тестирование.
При дальнейшем развитие проекта, планируется, во-первых, обновление интерфейса тестирующей программы средствами OpenGL. Во-вторых,
предполагается развитие сетевой части проекта, создание полноценной системы «Клиент-Сервер». Также планируется расширение возможностей
движка и создание на его основе универсальной многопредметной обучающей программы, с разнообразными типами заданий и режимами
тестирования. Не без внимания останется и географическая часть проекта, возможности которой можно расширить за счет использования реальных
географических координат объектов, что позволит использовать объекты независимо от карты.
Сайт проекта: www.globusplusplus.ucoz.ru
E-Mail разработчика: [email protected]

3. ЦЕЛИ И ЗАДАЧИ

Цель:
Разработка программы, позволяющей тестировать и
улучшать знания по географии
Задачи:
Разработка и реализация «движка» для работы с
географическими объектами и текстовыми вопросами.
► Разработка формата для хранения заданий в файлах.
► Разработка удобного и приятного интерфейса.
► Создание редактора объектов и вопросов.
► Создание средств сетевого контроля тестирования

4. ПРЕДСТАВЛЕНИЕ ДАННЫХ

Названия:
А) основное название
Б) названия-синонимы
Тема
Географические
объекты
Ключевые точки
Тип объекта
Коэффициент
сложности
Вопросы
Текст вопроса
Варианты ответов
Информация о
карте
Номер правильного
ответа
Ссылка на объекты
Массив из тем:
Тема
Моря России
Объекты:

Вопросы:

Тема
Реки России
Объекты:

Вопросы:


struct Theme
{
const char* name;
Map* map;
Geo_Object Obj [MAX_OBJ];
Question Quest [MAX_QUEST];
int obj_n;
int quest_n;
};
struct Geo_Object
{
Text Names [MAX_NAMES];
Point Key_Points [MAX_OBJ];
int point_n;
int name_n;
int type;
int difficult;
};
struct Question
{
char* text;
Text Answers [MAX_ANSWER];
int answ_n;
int true_answ;
};

5. РАБОТА С ДАННЫМИ

Начало
Получение списка
файлов в директории
Поиск тем в файлах из списка
Запись данных в
файле с темой
Получение строки
FG4EG G;8@8G;8@8 A4@8- nГШЮпШз Гбд
Раскодирование строки
Анализ строки
Нет
Нет
Да
Конец файла?
Да
Тема содержит задания?
A8J B5=86GFG4EG A4@8FA4@8- nЖгУЮp
A4@8- nЖгУЮпдЭЫШ Цбгоp
8A7 A4@8FGLC8- %
7<99<6H?G- &#

Да
Добавление темы в массив
Еще файлы?
Переход к следующему файлу
Конец
Нет
Данные после
декодирования
START THEME
THEME NAME: {Рельеф}
NEW OBJECT:
START NANES:
NAME: {Урал}
NAME: {Уральские горы}
END NAMES
TYPE: 2;
DIFFICULT: 40

6. АНАЛИЗ ДЕЙСТВИЙ УЧЕНИКА

Получение
начальной точки
Определение направления
показа объекта
1
2
Начальный объект
3
1 2
3
4
+
4
1
2
Получение остальных
точек ученика
2
3
3
2
+
3 2
3
1
1
4
Сравнение траекторий
ученика и объекта
4
1
1
4
R = (CONST - сложность объекта) / сложность теста
3
2
+
2
1
1
4
+
4

7. ИНТЕРФЕЙС ПРОГРАММЫ

Экран во время
тестирования
Текущее
задание
Мини-карта
Главное меню
Варианты ответов
Указка
Тип теста
Список тем
Основная карта
Рекорды
Меню выбора задания

8. РЕДАКТОР ЗАДАНИЙ

Главное окно
(wxFrame)
Панель с закладками
(wxNotebook)
Набор закладок
(wxPanel)
Различные диалоги
(wxDialog)
Обозреватель карты
(wxScrolledWindow)
Управление
списком объектов,
редактор объектов
Закладка «Объекты»
Закладка «Вопросы»
Закладка «Тема»
Обзор информации
о теме, редактирование
названия и карты.
Управление
списком вопросов,
редактор вопросов
Открытие/Сохранение
темы
Обзор и управление
картами
Интерфейс редактора
реализован средствами
библиотеки wxWidgets

9.

СЕТЕВОЙ КОНТРОЛЬ
Результаты
теста:
1. …
2. …
Доступ к странице
тестирования
из сети
Запись лога
тестирования
Генерация
web-страницы
с результатами

10. РЕЗУЛЬТАТЫ РАБОТЫ


Разработана программа, позволяющая
тестировать и улучшать знания по
географии.
Разработан «движок» для работы с
географическими объектами и
текстовыми вопросами.
Разработан удобный защищенный формат
для хранения заданий в файлах.
Реализован приятный пользовательский
интерфейс.
Создан удобный редактор для создания и
редактирования заданий.

11. ДАЛЬНЕЙШЕЕ РАЗВИТИЕ ПРОЕКТА


Замена координат объектов относительно карты на
реальные географические координаты, что даст
возможность создавать независимые от конкретной
карты объекты.
Разработка новых режимов тестирования, например,
режим «спиной к карте» и «контурная карта».
Улучшение графики и интерфейса средствами OpenGL.
Улучшение средств сетевого контроля тестирования на
основе технологии «Клиент – Сервер». Создание
сетевой версии проекта с возможностью проведения
единых для класса тестов и контрольных работ.
Модернизация движка и создание на его основе пакета
тестирующих программ по разным предметам.

12. АЛГОРИТМ ТЕСТИРОВАНИЯ

Начало
Анализ задания
Получение задания
Да
Нет
Посл. задание –
географ. объект?
Задание – объект?
Нет
Анализ объекта
Да
Задание - вопрос
Нет
Нет
Нет
Найден вопрос с ссылкой
на посл. объект?
Случайный объект
найден?
Случайный вопрос
найден?
Анализ вопроса
Да
Да
Задание окончено?
Да
Да
Да
Задание выполнено
верно?
Увеличение очков
Вычисление оценки
Конец
Нет
Задание - пауза
Нет

13. РЕАЛИЗАЦИЯ РАБОТЫ С ФАЙЛАМИ

fgets (stn, MAX_QUESTION_TEXT + 20, out);
Uncoding (stn);
if ( flag == START_READING && sscanf (stn, " START THEME %c", &x) == 1 && x == ':') {flag = READ_THEME; continue;}
if ( flag == READ_THEME
&& sscanf (stn, " THEME NAME : {%[^}]", T->name) == 1) {
continue;}
if ( flag == READ_THEME
&& sscanf (stn, " NEW OBJECT %c", &x) == 1 && x == ':') { flag = READ_OBJECT; continue;}
if ( flag == READ_OBJECT && sscanf (stn, " TYPE : %i", &(T->Mass[obj_n].type)) == 1) {continue;}
if ( flag == READ_POINTS && sscanf (stn, " X : %d , Y : %d", &(T->Mass[obj_n].Kontur[point_n].x),
&(T->Mass[obj_n].Kontur[point_n].y)) == 2)
{point_n ++; continue;}
WIN32_FIND_DATA dd = {0};
HANDLE h = FindFirstFile (dir, &dd);
while (result)
{
result = FindNextFile (h, &dd);
if (result)
{
char stn [100] = "themes/";
strcat (stn, dd.cFileName);
strcpy (ways[F.n].stn, stn);
n ++;
}
}
Фрагмент анализатора
Составление списка
файлов в директории
English     Русский Rules