Что нового

Программа для проверки знаний начальных классов. Помогите реализовать

uritalex

Новичок
Сообщения
197
Репутация
3
Версия AutoIt: 3.12

Описание:
Добрый день/вечер. Изучая AutoIt столкнулся с необходимостью организации связки клиент-сервер.
Но так как особо в теории не силен и мне проще разбирать и учиться на примере, а именно при решении конкретной задачи то решил совместить приятное с полезным.
Итак моя задумка состоит в следующем:
Написать программу Клиент - сервер для прохождения детьми (у меня их двое) тестовых вопросов разной тематики. Форму накидал такого плана
Код:
#include <GUIConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 954, 443, 193, 125)
$Edit1 = GUICtrlCreateEdit("", 8, 8, 937, 209)
GUICtrlSetData(-1, "Edit1")
$Edit2 = GUICtrlCreateEdit("", 8, 232, 201, 41)
GUICtrlSetData(-1, "Edit2")
$Edit3 = GUICtrlCreateEdit("", 8, 288, 201, 41)
GUICtrlSetData(-1, "Edit3")
$Edit4 = GUICtrlCreateEdit("", 352, 232, 185, 41)
GUICtrlSetData(-1, "Edit4")
$Edit5 = GUICtrlCreateEdit("", 352, 288, 185, 41)
GUICtrlSetData(-1, "Edit5")
$Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 224, 240, 97, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 224, 296, 97, 17)
$Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 552, 240, 97, 17)
$Checkbox4 = GUICtrlCreateCheckbox("Checkbox4", 552, 296, 97, 17)
$Progress1 = GUICtrlCreateProgress(8, 376, 918, 17)
$Label1 = GUICtrlCreateLabel("Время для выполнения задания", 640, 344, 168, 17)
$Button1 = GUICtrlCreateButton("Готово", 16, 408, 75, 25, 0)
$Button2 = GUICtrlCreateButton("Пропустить", 112, 408, 75, 25, 0)
$Button3 = GUICtrlCreateButton("Выход", 208, 408, 75, 25, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

		Case $Checkbox1
		Case $Checkbox2
		Case $Checkbox3
		Case $Checkbox4
		Case $Button1
		Case $Button2
		Case $Button3
	EndSwitch
WEnd


Суть программы следующая: при запуске программа подключается к серверу, и получает задание в виде строки такого плана
"Вопрос", "1-вариант ответа", "2-й вариант ответа", "3-й вариант ответа", "4-й вариант ответа", "время на ответ"
"Какая планета больше", "Юпитер", "Марс", "Венера", "0", "1:00"
То есть может быть не только 4 варианта ответа но и 2 -3 и более.
После нажатия на кнопку "Готово" программа отправляет данные на сервер: "вопрос", "вариант ответа", "затраченное время"
Сервер обрабатывает данные и высылает ответ "правильно" или "неправильно",
Клиент получает ответ сервера и делает запрос на новое задание.
Пока думаю организовывать вопросы и ответы в виде текстового файла. Далее если будет получаться буду думать про базы данных.

Примечания:
Ну вот такая задумка и с пользой для изучения и с пользой для образования.
Уважаемые форумчане помогите в реализации проекта.
П.С. Идея возникла после сетования классной руководительницы на недостаток тестов и проверок знаний :(
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
Хм ... досадно что нет реакции старожил :( видимо данная тема им просто не интересна ( так что буду набивать шишки самостоятельно и вести эту тему как блог :smile:
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Не отвечают, т.к. не понятно, что именно Вы хотите.
Вы описали работу клиента. Тут все ясно. Решается путем: нарисовать формочку, отправить запрос, получить ответ, нарисовать формочку под ответ, отработать нажатие на ответ, отправить на сервер, дождаться ответа от сервера, нарисовать формочку под ответ, отправить запрос...
если нужно именно это, так и напишите.
Но из Вашего описания видно, что Вы хотите и серверную часть написать. И вот про нее Вы вообще ничего не сказали. Точнее сказали "Сервер обрабатывает данные и высылает ответ "правильно" или "неправильно"". Но это именно ничего.
Опишите, как Вы видите работу серверной части.

Если же проще, пока Вы не поймете, что именно Вы хотите получить, вплоть до болтика с гаечкой без всяких "черных ящиков", Вам мало чем помогут.
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
Резонно и справедливо. Действительно у меня нет понимания как работает связка клиент-сервер... но попробую описать серверную часть.
И так:
Думаю стоит организовать доступ к серверу не по ip, а через один из сервисов присваивающих доменное имя к пк при помощи своего клиента.
Сервер ждет входящий подключений отправляемых при подключении клиентов (можно для начала начать с одного но лучше рассчитывать на одновременную работу с несколькими клиентами)
При подключении сервер отправляет клиенту строку с заданием.
Для начала задания могут быть сформированы в виде текстового файла.
Вид строки в файле:
"Вопрос", "1-вариант ответа", "2-й вариант ответа", "3-й вариант ответа", "4-й вариант ответа", "время на ответ", "Правильный вариант"
Вид строки передаваемой клиенту:
"Вопрос", "1-вариант ответа", "2-й вариант ответа", "3-й вариант ответа", "4-й вариант ответа", "время на ответ"
После отправления строки клиенту сервер ждет заданное время (указанное в строке + задержка на прием отправку) и проверяет получен ответ или нет. Если получен ответ сверяет его с ответом и определяет он правильный или нет.
Если не получает то отсылает клиенту сообщение что время истекло.
Затем высылает новую строку и так по кругу.
Вроде описал но достаточно ли будет не знаю :(
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
uritalex [?]
Написать программу Клиент - сервер для прохождения детьми (у меня их двое) тестовых вопросов разной тематики.
Зачем вам клиент-сервер, можете обосновать?
IMHO это простая (desktop) программа.
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Garrett сказал(а):
uritalex [?]
Написать программу Клиент - сервер для прохождения детьми (у меня их двое) тестовых вопросов разной тематики.
Зачем вам клиент-сервер, можете обосновать?
IMHO это простая (desktop) программа.
Я помогу с ответом. Автор пишет, что изучает язык. Он поставил себе задачу и хочет ее реализовать. Полагаю - этого достаточно для ответа. Я когда учил язык, писал бота для онлайн игры. Когда написал бота и убедился в его работоспособности, оставил и игру и бота. Результат - изучение, а не сама программа.
В будущем программу можно развить. Опять же, в моей семье есть учителя младших классов, а так же 3 ребенка родившихся в пределах года, но проживающих в разных городах. Указанный вариант имеет право на жизнь. Как минимум для обучения.

uritalex, у Вас все те же проблемы. Существует "черный ящик" в виде сервера. Он где то берет вопросы, от куда то знает ответы.
Ну попробуйте быть очень дотошным. придирайтесь к каждому слову.
1. Сервер включили
2. он стал ждать запроса. Ему все равно, какие запросы, или конкретные, все равно от куда, или есть ограничения?
3. Он получил запрос и отправил серверу ответ в виде файла (лучше просто данные). От куда он их взял?
Что делать, когда закончатся вопросы? Вопросы по порядку или вперемешку?
В чем цель программы и чем она лучше других вариантов, грубо говоря, чем лучше десктопной системы, где не нужно обращаться к серверу.
Если программа для ребенка,, чем его мотивировать отвечать правильно? Т.е. ну получит он собщение о том, что ответ не верный, что это для него?
И т.д.

Язык - это способ реализации того, что Вы придумали. Но Вы же даже и половины не придумали. Как реализовать то, чего даже в голове нет.
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
Garrett сказал(а):
Зачем вам клиент-сервер, можете обосновать?
IMHO это простая (desktop) программа.
Практически все дети владеют интернетом, при реализации проекта возможно легко менять задания без изменения самой программы и её файлов. + ко всему в дальнейшем думаю организовать учет статистики ответов и привязки определенного клиента к учащемуся (это планы на будущее) пока хочу начальный костяк. Организация программы в виде декстопного приложения уже имеется на данном форуме : http://autoit-script.ru/index.php?topic=14743.0
Просто её обвесить своими вопросами не составит труда, но интересует именно связка работы клиент - сервер.
Так же в дальнейшем возможно возникнет необходимость в реализации фото вопросов хранящихся на своем хостинге внедряемых в клиент через _IECreateEmbedded() ... но до этого пока далеко.



Добавлено:
Сообщение автоматически объединено:

mef-t сказал(а):
2. он стал ждать запроса. Ему все равно, какие запросы, или конкретные, все равно от куда, или есть ограничения?
3. Он получил запрос и отправил серверу ответ в виде файла (лучше просто данные). От куда он их взял?
Что делать, когда закончатся вопросы? Вопросы по порядку или вперемешку?
Сервер ждет запросы только от клиента.
Вопросы как указывал выше будут пока храниться в txt файле
Рандомизировать вопросы не проблема (к примеру при помощи функции __ArrayShuffle(ByRef $avArray))
Код:
Func __ArrayShuffle(ByRef $avArray)
    Local $vTmp, $iRand

    For $i = UBound($avArray) - 1 To 1 Step -1
        $iRand = Random(0, $i, 1)
        $vTmp = $avArray[$i]
        $avArray[$i] = $avArray[$iRand]
        $avArray[$iRand] = $vTmp
    Next
    Return 1
EndFunc   ;==>__ArrayShuffle

.
К примеру: клиент подключается к серверу, сервер сразу формирует массив из файла рандомно выбирая 20 вопросов из 100 (к примеру) и выдает их клиенту. По завершению можно показать сколько правильно сколько нет
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
uritalex
Сервер где? В локальной сети или Интернет? Если в интернете, что это за сервер? Как туда попадают вопросы?
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
Сервер будет в интернете на своем vds с полным доступом.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Операционная система какая будет на сервере?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
uritalex [?]
Организация программы в виде декстопного приложения уже имеется на данном форуме : http://autoit-script.ru/index.php?topic=14743.0
Эта программа далека от идеала.

при реализации проекта возможно легко менять задания без изменения самой программы и её файлов.
Кто мешает использовать базу SQLite, MySQL ...?

но интересует именно связка работы клиент - сервер
О том, как создать клиент-сервер есть в справке.

Так же в дальнейшем
Вот здесь, наверное, остановимся.

IMHO!
Лучше начинать с desktop версии, перевести в сетевую не составит труда. Так как вопросов и ответов будет много, нужно подумать где их хранить, CSV, INI, SQLite, MySQL и т.д. Я бы остановился на SQL базах.
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
Согласен с Вами хранить данные лучше при помощи баз данных, но я так далеко пока не смотрел :(
Операционка будет винда 2012.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Кстати, серверную часть я бы написал на PHP :smile:
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
Garrett сказал(а):
Кстати, серверную часть я бы написал на PHP :smile:
С каждым ответом все интереснее и интереснее :smile: Согласен что применение серверного языка более разумно и рационально.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
uritalex [?]
Согласен что применение серверного языка более разумно и рационально.
Особенно когда ни одного не знаешь? :D


Добавлено:
Сообщение автоматически объединено:

В вашем случае - сервер и серверная реализация не нужна. Файл с вопросами кладите в web доступную директорию. Вы же сумеете поставить там апач какой нибудь.
Останется написать клиента, который копирует этот файл и дальше с ним работает. Можете его зашифровать, но это будет уже продвинутый уровень.
Хотите еще упрощение? Вообще выкиньте из схемы сервер. Закачайте файл с вопросами в любое облако или хостинг файлов публичный (который дает прямую ссылку) Или на общую папку в yandex, у меня к нему есть api в темах с udf.
Это все упростит ваш скрипт.
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
Знаю что они существуют ;D
Как уже указывалось в моих сообщениях смысл не только в написании программы но и на живом примере обуздать создание связки клиент -сервер.
Конечно для понимания процессов не окажусь от вариантов решения (с файлами, с облачными хранилищами и пр.)
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Слишком много желаний, который Вы хотите охватить сразу.
Обычно это приводит к тому, что проект бросается.
Вам правильно говорят: реализуйте, все что вы хотите на десктопном приложении. По сути, реализуйте вообще все в одном приложении без разделения клиент-сервер. Как только реализуете, сможете приступить к разделению функционала на 2 приложения. Сам обмен данными не является чем то сверх сложным, сложнее основной функционал, который Вы зачем то отодвигаете на второй план.
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
Ну что ж прислушаюсь к мнению большинства :smile: и начну реализовывать десктопную программу.
За основу пока возьму один из вариантов этой темы: http://autoit-script.ru/index.php?topic=14743.0
OffTopic:
Ну вообще то я и не планировал с нахрапу делать полный рабочий функционал :smile: Хотел просто программу клиент сервер без статистики, базы данных и прочих моментов. А уж потом её обвешивать дополнительными функциями, обработчиками украшательствами и так далее. Так в принципе я и поступал ранее с другими скриптами. К примеру один из моих скриптов в начале состоял из 10 строк (тыканья по координатам), а к финалу, практически на те же действия, он разрастался строк на 500 с логикой и обработкой
 
Верх