Не могу понять, как сделать так чтобы я ввел вопросы для тестируемого и они сохранились в файл, а потом студент после входа в систему мог открыть этот файл считать вопросы и пройти тест по этим вопросам, и получить оценку по 12 бальной шкале, и чтобы админ видел эти оценки, а также чтобы тестируемый их тоже видел? Или хотя бы покажите, как сделать запись вопросов для теста в файл? Ниже мой код:
| Код | #include <iostream> #include <iomanip> #include <vector> #include <string> #include <algorithm> #include <math.h> #include <fstream> #include <map> #include <list> #include <Windows.h> using namespace std; const char n = '\n'; void login(), registr(), menu(), statusCheck(); void statusCheck() { } class Reg_user // register to user // регистрация { public: struct log_adm { char login[255]; char password[255]; }; void login_adm() // вход для администратора { log_adm userIn, readIn; cout << "Введите логин "; cin >> userIn.login; cout << "Введите пароль "; cin >> userIn.password; ifstream in("user.dat", ios::binary); bool flag = false; while (!in.eof()) { in.read(reinterpret_cast<char*>(&readIn), sizeof(log_adm)); // приведение типов if (strcmp(userIn.login, readIn.login) == 0 && strcmp(userIn.password, readIn.password) == 0); { flag = true; break; } } in.close(); flag ? cout << "Вы успешно вошли в систему, " << userIn.login << "!\n" : cout << "Ошибка, вам нужно попробовать еще раз\n"; cout << n; int m = 0; cout << "Вы можете выбрать опцию и нажать соответствующий её номер" << n; cout << "1. Составить и загрузить тест для тестируемого." << n; switch (m) { case 1: ofstream fout; // создаю объект для записи в файл вопросов для теста fout.open("Test for the tested.txt"); // связваю объект с файлом и ниже начинаю записывать строки в файл fout << ""; } } void To_make_a_test() // Составить тест { } struct log_users // регистрация { string name; // имя string adress; // название улицы string House_number; // номер дома string num; // номер телефона char login[255]; // логин char password[255]; // пароль }; void login() { log_users userIn, readIn; cout << "Введите логин "; cin >> userIn.login; cout << "Введите пароль "; cin >> userIn.password; ifstream in("user.dat", ios::binary); bool flag = false; while (!in.eof()) { in.read(reinterpret_cast<char*>(&readIn), sizeof(log_users)); // приведение типов if (strcmp(userIn.login, readIn.login) == 0 && strcmp(userIn.password, readIn.password) == 0); { flag = true; break; } } in.close(); flag ? cout << "Вы успешно вошли в систему, " << userIn.login << "!\n" : cout << "Ошибка, вам нужно попробовать еще раз\n"; } void menu() { cout << "Привет, тестируемый!" << n; cout << "Войти или пройти регистрацию? (y/n) "; char temp; cin >> temp; if (temp == 'y') { login(); } else if (temp == 'n') { registr(); } } void registr() // регистрация Юзера. При регистрации он вводит Свой адрес, телефон и имя { log_users dataUser; char i; // определяю идентификатор чтобы идентифицировать переменную do { cout << "Имя тестируемого? "; cin >> dataUser.name; for (i = 0; dataUser.name[i]; i++) { if (dataUser.name[i] >= '0' && dataUser.name[i] <= '9') { cout << "Имя тестируемого не может состоять из цифр или в вашем имени не должно быть цифр!" << n << "Имя должно состоять только из букв английского или русского алфавита!" << n << "Пожалуйста повторите!" << n; break; } if (dataUser.name[i] >= 'Aa' && dataUser.name[i] <= 'Zz' || dataUser.name[i] >= 'Аа' && dataUser.name[i] <= 'Яя'); } } while (dataUser.name[i]); do { cout << "Название улицы? "; cin >> dataUser.adress; for (i = 0; dataUser.adress[i]; i++) { if (dataUser.adress[i] >= '0' && dataUser.adress[i] <= '9') { cout << "В названии улицы должны быть только буквы" << n << "Повторите попытку" << n; break; } } if (dataUser.adress[i] >= 'Aa' && dataUser.adress[i] <= 'Zz' || dataUser.adress[i] >= 'Аа' && dataUser.adress[i] <= 'Яя'); } while (dataUser.adress[i]); do { cout << "Номер дома? "; cin >> dataUser.House_number; for (i = 0; i < dataUser.House_number[i]; i++) { if (!isdigit(dataUser.House_number[i])) { cout << "Номер дома должен содержать только цифры!" << n << "Попробуйте еще раз!" << n;; break; } if (isdigit(dataUser.House_number[i])); } } while (dataUser.House_number[i]); do { cout << "Ваш номер телефона? "; cin >> dataUser.num; for (i = 0; i < dataUser.num[i]; i++) { if (!isdigit(dataUser.num[i])) { cout << "Номер телефона должен содержать только цифры!" << n << "Попробуйте еще раз!" << n;; break; } if (isdigit(dataUser.num[i])); } } while (dataUser.num[i]); ofstream out("users.dat", ios_base::binary | ios_base::app); cout << "ENTER LOGIN "; cin >> dataUser.login; cout << "ENTER PASSWORD"; cin >> dataUser.password; out.close(); cout << "Регистрация прошла успешно, " << dataUser.login << "!" << n; } private: }; void Selection_menu_output() // Вывод меню выбора { Reg_user reg_stud, reg_adm; int m = 0; cout << "Выберете необходимый пункт меню нажав на соответствующий номер" << n << "В качестве кого вы хотите войти в систему?" << n << "1. Тестируемый" << n << "2. Администратор" << n; cin >> m; switch (m) { case 1: reg_stud.menu(); break; case 2: reg_adm.login_adm(); break; } } int main() { setlocale(0, ""); system("Color F0"); Selection_menu_output(); }
|
Т. е я хочу составить вопросы для теста и за них определенная оценка. Например 1. Вопрос? - 1 балл или 6 баллов и тд. За не правильный ответ 0 баллов. Потов это все суммируется и показывается процент правильных ответов и общий балл. Задание ниже.
Реализовать полнофункциональную систему тестирования. В системе должны быть 2 режима: Администратор и Тестируемый. Описание режима работа для Тестируемого (в дальнейшем Гость). - Для входа в систему Гость должен зарегистрироваться. Данная процедура выполняется один раз, при дальнейших входах в систему доступ идет по логину и паролю.
- При регистрации нужно указывать ФИО, домашний адрес, телефон.
- Важно, чтобы логины для пользователей были уникальными.
- После входа Гость имеет возможность просмотреть свои предыдущие результаты тестирования, сдать новое тестирование.
- Тестирование может осуществляться по различным категориям знаний. Например: • Программирование (раздел): 1) Основы программирования (конкретный тест); 2) Объектно-ориентированное программирование (конкретный тест). • Администрирование (раздел): 1) Основы информационных технологий (конкретный тест); 2) Операционные системы (конкретный тест).
- После сдачи теста Гость видит результат тестирования, количество правильно отвеченных вопросов, процент правильных ответов и полученную оценку.
- Студент имеет возможность прервать тестирование и продолжить его тогда, когда ему это будет удобно.
- Оценивание нужно вести на основании 12-ти балльной системы, привязанной к количеству вопросов теста.
- Пароли и логины Гостей хранятся в зашифрованном виде.
Описание режима работа для Администратора (в дальнейшем Админ). - В системе может быть только один Админ, логин и пароль Админа задается при первом входе в программу.
- В дальнейшем пароль и логин можно изменить (но данную возможность имеет только Админ).
- Пароль и логин необходимо хранить только в зашифрованном виде.
- При работе с системой Админ имеет следующие возможности: • управление пользователями – создание, удаление, модификация пользователей; • просмотр статистики – просмотр результатов тестирования в общем по категориям, по конкретным тестам, по конкретным пользователям. Результаты просмотра статистики можно вывести в файл; • управление тестированием – Админ имеет возможность добавлять категории, тесты, вопросы к тестам, задавать правильные и неправильные ответы, импортировать и экспортировать категории и тесты с вопросами из файла (и в файл). |