|
0 / 0 / 0
Регистрация: 31.03.2020
Сообщений: 6
|
||||||||||||||||
MS Access Авторизация пользователя в программе для тестирования "знаний" (Windows Forms, C++/CLI)31.03.2020, 21:42. Показов 19331. Ответов 9
Метки c++/cli, ms access, visual studio 2019, Windows 10, windows forms, авторизация, База данных, логин, пароль, visual studio (Все метки)
Читал несколько дней форумы по данной теме и не нашел решения для своего случая(возможно автор вопроса туповат))).
Проблема следующая. Необходимо создать приложение Windows Forms на C++ для тестирования студентов по пройденному материалу(Курсовая работа крч). Сделал окно авторизации и создания учетных записей в нем же. Создана база данных MS Access(пользователь, пароль, вопрос 1 и т.д.). Все прекрасно работает. После авторизации("Titul.h") юзер попадает в меню("MyMenu.h"), где может "пройти тест". Когда юзер нажмет "пройти тест" он будет отвечать на вопросы(Например 1-ый, "Question1.h"), которые появляются в отдельных формах(условие препода). Проблема заключается в том, как заставить программу запомнить, что вошел, например, пользователь "Ruslan" с паролем "zxcvbn" и соответственно записывать результаты его ответов(1 - верно, 0 - не верно) в эту же базу данных напротив именно этого пользователя. Ниже представлен код "Titul.h"
Буду благодарен за любую помощь
0
|
||||||||||||||||
| 31.03.2020, 21:42 | |
|
Ответы с готовыми решениями:
9
Чистые проекты C++/CLI Windows Forms для VS 2012 и VS 2015 Организация хранения данных в программе тестирования знаний Добавление картинок к программе тестирования знаний студента |
|
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
|
|
| 05.04.2020, 14:58 | |
|
Добрый день! На мой взгляд, нужно 2 таблицы: первая - для хранения имён пользователей (студентов) и их паролей, вторая - для вопросов и их ответов. В первой таблице следующие поля: ИД (целое последовательное число), Пользователь (тип - короткое текстовое), Пароль (тип - короткое текстовое, если в качестве пароля будут и буквы, и числа). Во второй: ИД (то же, что и в первой таблице), Вопрос (тип - короткое или длинное текстовое в зависимости от длины вопроса), Ответ (тип - логический, если ответы будут типа "да" или "нет"), Пользователь (целое число, это поле подстановки, его значение будет браться из поля ИД первой таблицы).
При входе пользователя данные логина и пароля формы надо сопоставить с Пользователем и Паролем первой таблицы. При этом надо в переменной сохранить его ИД (поле первой таблицы). Когда он будет отвечать во второй таблице, сохранённый ИД надо вставлять в поле Пользователь. Потом будет очень удобно выбирать его ответы через ... WHERE ID=1. Считаю крайне неразумным логин, пароль, вопросы и ответы хранить в одной таблице. Если же проблема стоит ребром, что сделать надо в одной таблице, тогда напишу другой ответ. Добавлено через 22 минуты Нужно и третья таблица. В третьей таблице поля: ИД вопроса, Вопрос (длинное целое). Во второй таблице поле Вопрос надо изменить на поле подстановки (ИД вопроса) из третьей таблицы.
1
|
|
|
0 / 0 / 0
Регистрация: 31.03.2020
Сообщений: 6
|
|
| 06.04.2020, 14:16 [ТС] | |
|
Добрый день, вы сказали: "При входе пользователя данные логина и пароля формы надо сопоставить с Пользователем и Паролем первой таблицы. При этом надо в переменной сохранить его ИД (поле первой таблицы). Когда он будет отвечать во второй таблице, сохранённый ИД надо вставлять в поле Пользователь. Потом будет очень удобно выбирать его ответы через ... WHERE ID=1."
Не совсем понимаю, как мне обратиться к переменной, которая будет в 1-ой форме(Titul.h) в которой я буду хранить ID из второй формы (MyMenu.h)? Полностью с вами согласен по поводу хранения вопросов в одной таблице с логином и паролем, поэтому создал 3 таблицы.
0
|
|
|
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
|
|
| 06.04.2020, 15:59 | |
Сообщение было отмечено SafKill как решение
Решение
Вы ведь сами сказали: "Создана база данных MS Access(пользователь, пароль, вопрос 1 и т.д.). ". Я понял так, что в БД Акцесс надо хранить пользователей (логины) и пароли.
Итак, как я считаю всё должно выглядеть. При регистрации студента он в форме должен указать свои ФИО, логин и пароль (три поля редактирования). При нажатии на ОК создаются три переменные для каждого поля редактирования, делается запрос к БД, в таблице Пользователи создаётся новая запись: полю ФИО присваивается значение переменной, хранящей ФИО из поля редактирования формы, полю Логин присваивается значение переменной, хранящей значение логина из поля редактирования формы, полю Пароль присваивается значение переменной, хранящей значение пароля из поля редактирования формы. Регистрация нового пользователя произошла. В следующий раз при авторизации студент будет вводить только значения логина и пароля в поля редактирования формы. При нажатии на ОК создаются 2 переменные, им присваиваются значения полей редактирования (введённые логин и пароль). Далее делается запрос к БД к таблице Пользователи. В этом запросе через WHERE указываются логин и пароль. Если такая запись в этой таблице существует, то надо создать ещё одну переменную, которая будет хранить значение поля ИД из этой таблицы Пользователи. Когда потом студент ответит на вопросы, в БД в таблицу Ответы будут внесены его ответы, а эта переменная сделает запись в поле ИД Пользователи уже таблицы Ответы для того, чтобы было понятно, чей ответ на какой вопрос хранит эта таблица. После этого делается следующий запрос к БД, но уже к таблице Вопросы. Вопросы из таблицы Вопросы выдаются в новую форму, например, через DataGridView. Т.к. в таблице Вопросы Базы Данных есть только 2 поля, БД может выдать только их. Для студента нужно напротив каждого вопроса проставлять ответы. Для этого в DataGridView надо добавить столбец Ответы (тип bool, в DataGridView можно оформить в виде переключателей RadioBotton или ещё каких-либо флажков, если ответы предполагаются в виде Да или Нет, если иначе, то тип стринг). Студент пощёлкал по Да или нет напротив вопроса, жмёт на кнопку Ответы готовы. Итак, у нас есть значение переменной, которая хранит ИД пользователя, есть DataGridView с ИД вопроса, вопросом и ответом. Теперь надо извлечь через цикл значения DataGridView в массив, например, сделать запрос к БД с внесением новых записей из этого массива в таблицу Ответы, не забыв вносить в поле этой таблицы ИД пользователя (или студента) сохранённый в переменной ИД пользователя. Касаемо обращения к переменной: её можно сделать "видимой" с помощью public или передать в качестве аргумента в функцию. Лучше покажите коды из обеих форм, чтобы было понятнее, о чём речь. Если что-то непонятно написал, спрашивайте! Добавлено через 30 минут Вот БД: https://cloud.mail.ru/public/qDBo/2AV3xHxr7
1
|
|
|
0 / 0 / 0
Регистрация: 31.03.2020
Сообщений: 6
|
|||||||||||
| 06.04.2020, 17:43 [ТС] | |||||||||||
|
Переделал кое-что. БД такая же как у Вас, только названия таблиц на английской)
Примерно представляю что дальше делать, но скорее всего еще Вам напишу здесь ![]() Код кнопки для входа
0
|
|||||||||||
|
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
|
||||||||||||||||
| 06.04.2020, 21:09 | ||||||||||||||||
Сообщение было отмечено SafKill как решение
Решение
Комментирую первый код.
В 3-й строке указан старый провайдер:
Запрос из 8-й строки вернёт количество записей с указанными логином и паролем. Можно без запроса догадаться, что такая запись будет одна. Такой запрос теряет смысл. Строка запроса должна быть, как в 10-й строке кода, нам нужен ИД пользователя. Кстати, при создании учётной записи пользователей надо предусмотреть, чтобы у них не было одинаковых логинов. 10-я строка: ID - это целое число, поэтому переменная должна быть не стринг, а int. Эту переменную достаточно здесь объявить, не определяя её. А вот дальше, в 13-й строке, когда мы получим результат запроса (а в результате мы получим ИД пользователя), мы должны присвоить переменной из 10-й строки результат запроса. В 17 строке я не понял, зачем меню. Здесь нам надо показать следующую форму (Form). На этой форме должен быть DataGridView. Уже в новой форме надо вновь сделать запрос к БД к таблице Вопросы (выбрать из этой таблицы вопросы). Результатом запроса нужно заполнить DataGridView. При этом надо не забыть добавить столбец в DataGridView, чтобы можно было в строках столбца отмечать Да или Нет. Комментарий второго кода. Строка 3: по поводу провайдера и ДатаСурс я уже высказался в комментарии к первому коду. Строка 4: я сильно сомневаюсь, что при таком коде произойдёт подключение к БД. Насколько я знаю, там много параметров, а у Вас только строка о провайдере и ДатаСурсе. Вот, например, моё подключение:
Остальное примерно правильно. Напомню, что было бы неплохо здесь сделать проверку на наличие пользователя с таким же логином, чтобы не было двух пользователей с одним и тем же логином.
1
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 31.03.2020
Сообщений: 6
|
||||||
| 10.04.2020, 17:26 [ТС] | ||||||
|
И все таки как мне переменную ID сделать доступной из других форм? Пытался сделать через public, VS отвечает, что нужен спецификатор типа, в конструкторе тоже не получается объявить. Здесь пытался в кнопке, но тоже думаю неправильно, подскажите пожалуйста
. В int не присвоить, если писать как я, скорее всего тут нужен другой синтаксис, но какой?
0
|
||||||
|
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
|
||||||
| 11.04.2020, 08:48 | ||||||
Сообщение было отмечено SafKill как решение
Решение
Итак, переменная ID хранит ИД пользователя. Ид пользователя находится в таблице "Users", поле "ИД пользователя". Нужно сделать запрос к БД, из этой таблицы взять значение "ИД пользователя" и присвоить переменной ID.
Посмотрел Ваш код, создалось впечатление, что Вы вообще не понимаете что к чему ) Неужели Ваш код работает?
1
|
||||||
|
0 / 0 / 0
Регистрация: 31.03.2020
Сообщений: 6
|
|
| 12.04.2020, 21:38 [ТС] | |
|
Не знаю как у Вас, но у меня using не работает так, что это вообще за конструкция? Я видел в c# такое работает, но в плюсах первый раз вижу.
0
|
|
|
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
|
|
| 13.04.2020, 08:23 | |
|
Верно, уберите using.
1
|
|
| 13.04.2020, 08:23 | |
|
Помогаю со студенческими работами здесь
10
C++/CLI Windows Forms
Литература по C++/CLI Windows Forms
Создание приложения Windows Forms на C++/CLI в Windows 8 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|