Что нового

Ошибки в Работе с CheckBox и архетиктурой кода

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
Всем доброго времени суток!
Ну не будем тянуть кота за уши и сразу к делу. Старый школьный учитель меня попросил написать опросники для своих учеников. ( догадываюсь что в интернете наверняка много примеров и готовых программ, но мне эти знания не помешают на реальной практике)

Суть такова. Ученик. Запускает опрос, отвечает. Его ответы сохраняются в текстовый документ под другим форматом, что бы он не успел открыть и посмотреть где он ошибся)

Вот код, который я сумел для этого написать. Но в некоторых местах мне так и осталось не ясно что делать
Код:
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>

GUICreate("Анкетировщик 1.0.0", 500,500, @DesktopWidth/2-160, @DesktopHeight/2-45, -1, 0x00000018); WS_EX_ACCEPTFILES

$tipaDA1 = 'Правильно'
$nifiga1 = 'Неверно'
$iDAiNET1 = 'Относительно'

$file1 = GUICtrlCreateInput ( "Введите ФИО...", 10, 30, 300, 20)
$file2 = GUICtrlCreateInput ( "Введите Город...", 10, 60, 300, 20)
$file3 = GUICtrlCreateInput ( "Введите Школу и класс...", 10, 90, 300, 20)

; тут что то вроде вопроса

$CheckBox1 = GUICtrlCreateCheckbox( 'ДА', 10, 150, 50, 50)
$CheckBox1 = GUICtrlCreateCheckbox( 'НЕТ', 10, 200, 50, 50)
$CheckBox1 = GUICtrlCreateCheckbox( 'НЕ ЗНАЮ', 90, 150, 100, 50)
GUICtrlSetState(-1,$GUI_DROPACCEPTED)
$btn = GUICtrlCreateButton ("Готово", 400, 75, 60, 20)

GUISetState ()

While 1

Switch GUIGetMsg()
Case $btn

 if BitAND( GUIctrlRead($Checkbox1), $GUI_CHECKED) = $GUI_CHECKED Then
 GUICtrlRead($hren1)
Or Not BitAND( GUIctrlRead($Checkbox1), $GUI_CHECKED) = $GUI_CHECKED Then
 GUICtrlRead($nifiga1)
Or Not BitAND( GUIctrlRead($Checkbox1), $GUI_CHECKED) = $GUI_CHECKED Then
 GUICtrlRead($iDAiNET1)
 ; ТУТ Я НЕ СМОГ ТОЧНО ВЫРАЗИТЬ ЧТО ТРЕБУЕТСЯ СДЕЛАТЬ ПРОГРАММЕ. ТУТ НЕОБХОДИМО СДЕЛАТЬ ТАК:
 ; 1) ГАЛОЧКА НЕ СТОИТ - ПРОВЕРЯЕМ ДАЛЬШЕ - ГАЛОЧКА СТОИТ - ЗАПОМИНАЕМ

 ; 2) ГАЛОЧКА СТОИТ - ЗАПОМИНАЕМ - ДАЛЬШЕ НЕ ПРОВЕРЯЕМ
 $Pass1 = GUICtrlRead($file1)
 $Pass2 = GUICtrlRead($file2)
 $Pass3 = GUICtrlRead($file3)

 EndIf
GUIDelete()
ExitLoop
Case $GUI_EVENT_CLOSE
Exit

EndSwitch

WEnd

$Text = "" & $file1 & $file2 & $file3 & "" & @CRLF & _
 ;ЕСЛИ ОТМЕЧЕНО ДА ТО
 "" & $tipaDA1 & ""
 ;ЕСЛИ ОТМЕЧЕНО НЕТ ТО

 "" & $nifiga1 & ""
 ;ЕСЛИ ОТМЕЧЕНО НЕ ЗНАЮ ТО
 "" & $iDAiNET1 & ""
FileWrite("nameschoolcity.para", $Text)




Затем. Запускается открывашка и счетчик в одном лице

Вот до куда мне удалось добраться
Код:
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <Word.au3>
#include <File.au3>

; Пример 1
$hGui = GUICreate("Дешифратор анкет 1.0.0", 500,500, @DesktopWidth/2-160, @DesktopHeight/2-45, -1, 0x00000018)
$iButton = GUICtrlCreateButton('-', 10, 10, 21, 21, $BS_ICON)

GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', 4, 0)
GUISetState()
While 1
 Switch GUIGetMsg()
 Case $iButton
 $sPath = FileSelectFolder('Выберите папку', '', 3, @DesktopDir, $hGui)
   If @error Or Not StringInStr(FileGetAttrib($sPath), "D") Then ContinueLoop

$Folder = $sPath
$Files = _FileListToArray($Folder, "*.para", 1, True)
If @error Then Exit

GUISetState()

; Тут ОН ДОЛЖЕН АВТОМАТИЧЕСКИ ПЕРЕИМЕНОВАТЬСЯ В TXT

Как наверняка заметно, в расшифровке моя задумка состоит в том, чтобы открыть папку сразу со всеми файлами "para".

Затем в мои планы входит по нажатию кнопки, все файлы автоматом меняют формат на "txt" а затем читаются по отдельности и записываются в таблице excel примерно следующим образом

Имя текстового документа без расширения | blablablabla
Количество верных ответов. | 10



Вот собственно мой сегодняшний вопрос. Как мне все это дело осуществить?

Буду благодарен любой помощи, будь то наглядный пример или совет

Заранее спасибо!


Я так же посмотрел вот эту тему, и мне кажется что она может подойти для решения вопроса со вторым кодом http://autoit-script.ru/index.php?topic=20800.msg122804;topicseen#new
Но к сожалению как и автор того поста, я мало что понял на этот счет
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Введите ФИО, город, и школу и класс и варианты, да нет не знаю? :D Крутой у вас учитель, который хочет данные собирать по всей стране, и город ему дай и школу и класс :smile:
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
inververs сказал(а):
Введите ФИО, город, и школу и класс и варианты, да нет не знаю? :D Крутой у вас учитель, который хочет данные собирать по всей стране, и город ему дай и школу и класс :smile:

;D :rofl:
Это чисто для примера пока сделал, что бы знать как мне и что располагать))))
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Создаете массив 2D
Код:
в [x][0]- сам вопрос
в [x][1] - GUICtrlCreateCheckbox( 'ДА', ...)
в [x][2] - GUICtrlCreateCheckbox( 'Нет', ...)
в [x][3] - GUICtrlCreateCheckbox( 'Не знаю', ...)

и кнопка Ответить
На кнопку ответить вешаешь обработчик, по нажатию на которую сохраняешь массив куда нибудь в файл с шифрованием, и показываешь следующий вопрос.
Дальше это шифрованный файл вместе с ключом через одноклассники или вк присылаешь преподавателю, он его расшифровывает, заполняет бланк ответов, печатает, подшивает в планы, сдает в районо, получает премию, ну и тебе пятерку ставит. Вот как то так.
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
inververs сказал(а):
Создаете массив 2D
Код:
в [x][0]- сам вопрос
в [x][1] - GUICtrlCreateCheckbox( 'ДА', ...)
в [x][2] - GUICtrlCreateCheckbox( 'Нет', ...)
в [x][3] - GUICtrlCreateCheckbox( 'Не знаю', ...)

и кнопка Ответить
На кнопку ответить вешаешь обработчик, по нажатию на которую сохраняешь массив куда нибудь в файл с шифрованием, и показываешь следующий вопрос.
Дальше это шифрованный файл вместе с ключом через одноклассники или вк присылаешь преподавателю, он его расшифровывает, заполняет бланк ответов, печатает, подшивает в планы, сдает в районо, получает премию, ну и тебе пятерку ставит. Вот как то так.


:rofl: :rofl:
Да вот жаль что пятерку не поставит))))) я же в школе уже не учусь как года 3))))
Система забавная получилась конечно :laugh:
Да вот попроще бы попроще))))))

Ну вот как сохранить текст я себе могу представить. А вот с массивом как играться... Нету чего то похожего в справке? А то чего то не нахожу
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
А, ну я думал что не успели прийти в школу, там сразу в плечи писать программу ;D
Хз если честно как сделать по проще опросник на autoit.
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
inververs сказал(а):
А, ну я думал что не успели прийти в школу, там сразу в плечи писать программу ;D
кто его знает если честно как сделать по проще опросник на autoit.

Ну я так вот в принципе пересмотрел код. Можно в первом вообще убрать в конце два варианта ответа и отследить только сколько раз было выбрано правильных ответов.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Вообще нужно делить назначение программа. Если это опросник - то он вообще не должен знать правильных ответов, что пользователь выбрал - то он сохранил.
А уже вторая программа должна понимать формат в котором сохраняются ответы, и знать где из них правильные, а где нет.
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
inververs сказал(а):
Вообще нужно делить назначение программа. Если это опросник - то он вообще не должен знать правильных ответов, что пользователь выбрал - то он сохранил.
А уже вторая программа должна понимать формат в котором сохраняются ответы, и знать где из них правильные, а где нет.
.

Хмммм :scratch: это уже существенно упрощает задачу в первом случае....

Но тогда главной проблемой остаются два вопроса

Верно ли это
Код:
While 1

Switch GUIGetMsg()
Case $btn

 if BitAND( GUIctrlRead($Checkbox1), $GUI_CHECKED) = $GUI_CHECKED Then
 GUICtrlRead($hren1)
Or Not BitAND( GUIctrlRead($Checkbox1), $GUI_CHECKED) = $GUI_CHECKED Then
 GUICtrlRead($nifiga1)
Or Not BitAND( GUIctrlRead($Checkbox1), $GUI_CHECKED) = $GUI_CHECKED Then
 GUICtrlRead($iDAiNET1)




И как постоянно в конец записывать результат выбора ответа?


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

Не ну можно конечно сделать через ключевые слова

Типа в конце на каждый вопрос ставить $punkt = $checkbox = $tipaDa, но ведь наверняка есть более гуманный способ решить проблему ординарно
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Опрашивай сразу 3 чекбокса, зачем if else else, пиши в отчет 101 - где первый и третий выбран. А если переведешь это в десятичную то сможешь записать как 5. Тогда у тебя будет файл с ответами такой: 1 вопрос - 5, 2 вопрос - 3, или компактнее 015, 023. Или еще компактнее 015023 итп.
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
inververs сказал(а):
Опрашивай сразу 3 чекбокса, зачем if else else, пиши в отчет 101 - где первый и третий выбран. А если переведешь это в десятичную то сможешь записать как 5. Тогда у тебя будет файл с ответами такой: 1 вопрос - 5, 2 вопрос - 3, или компактнее 015, 023. Или еще компактнее 015023 итп.

Так. Ну вот теперь я в ступоре......
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Ок, не пиши так ;D Делай как можно проще что бы не запутаться.
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
inververs сказал(а):
Ок, не пиши так ;D Делай как можно проще что бы не запутаться.

Ну вот ладно, возьмем к примеру, что сикось-накось 1 скрипт сделан. И "без компактности" скрипт записал в файл ответы в формате 100, 010 Итд.
Как это теперь автоматически рассчитать что верно а что нет?
При этом не потеряв владельца ответов и выведя результат в таблицу
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Ну тут все просто, всего доступно 8 вариантов правильных ответов:
000
001
010
011
100
101
110
111
У первого вопроса правильно это 101, у второго 110, у третьего 000, у четвертого, скорее всего, 111.
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
inververs сказал(а):
Ну тут все просто, всего доступно 8 вариантов правильных ответов:
000
001
010
011
100
101
110
111
У первого вопроса правильно это 101, у второго 110, у третьего 000, у четвертого, скорее всего, 111.


Это то мне хорошо понятно, а как это реализовать то можно?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Так если и это вы не можете сделать, то что вы будете показывать профессору?
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
inververs сказал(а):
Так если и это вы не можете сделать, то что вы будете показывать профессору?

Сделать то я сделаю. Понятное дело что не моментально. Я просто пока даже не могу понять в каком направление мне копать информацию.

На форуме прошерстил все что свзяно с checkbox, обработкой событий все посмотрел. Но так пока и не наткнулся на что то стоящее
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Или когда профессор попросит вас добавить формирование сводного отчета, что бы будете говорить. я не знаю?, а он спросит, но послушайте, голубчик, кто же сделал эту программа.. А вы ему что, эээ, да так, пацаны на форуме накатали. Ептиль, ты мужик или нет, сядь и разберись :rofl:
 

Ksaan

Знающий
Сообщения
207
Репутация
15
VermanVendetta13 сказал(а):
Это то мне хорошо понятно, а как это реализовать то можно?
Если по быстрому, и по простому то
Код:
#include <File.au3>

Dim $true_test[8] = [000, 001, 010, 011, 100, 101, 110, 111]
Local $student
_FileReadToArray(@DesktopDir & "\Ответы.txt", $student )

For $x = 1 To UBound($student) - 1
	Switch $student[$x]
		Case $true_test[$x - 1]
			MsgBox(0, "Ответ Верен", "Ответ Верен")

		Case Else
			MsgBox(0, "Ответ не верен", "Ответ не верен")
	EndSwitch
Next
 
Верх