Модераторы: JackYF, bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как с консоли записать строку или предложение в фа, Не могу понять 
:(
    Опции темы
Vadik4722
Дата 13.8.2019, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 13.7.2019
Где: Россия

Репутация: нет
Всего: нет



Не могу понять, как сделать так чтобы я ввел вопросы для тестируемого и они сохранились в файл, а потом студент после входа в систему мог открыть этот файл считать вопросы и пройти тест по этим вопросам, и получить оценку по 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-ти балльной системы, привязанной к количеству вопросов теста.

- Пароли и логины Гостей хранятся в зашифрованном виде.


Описание режима работа для Администратора (в дальнейшем Админ).
- В системе может быть только один Админ, логин и пароль Админа задается при первом входе в программу.

- В дальнейшем пароль и логин можно изменить (но данную возможность имеет только Админ).

- Пароль и логин необходимо хранить только в зашифрованном виде.

- При работе с системой Админ имеет следующие возможности:
• управление пользователями – создание, удаление, модификация пользователей;
• просмотр статистики – просмотр результатов тестирования в общем по категориям, по конкретным тестам, по конкретным пользователям. Результаты просмотра статистики можно вывести в файл;
• управление тестированием – Админ имеет возможность добавлять категории, 
тесты, вопросы к тестам, задавать правильные и неправильные ответы, 
импортировать и экспортировать категории и тесты с вопросами из файла (и в файл).

PM WWW ICQ Skype   Вверх
kapbepucm
Дата 14.8.2019, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 967
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Цитата(Vadik4722 @  13.8.2019,  21:29 Найти цитируемый пост)
как сделать запись вопросов для теста в файл
Ну, зависит, какой результат надо получить. Я это вижу, как нужно создать некий редактор файла, состоящий из таких структур:
Код
struct test
{
 char question[1000];//текст вопроса
 char answer1[1000]; //текст ответа1
 char val1;          //оценка, если гость выберет ответ1
 char answer2[1000]; //текст ответа2
 char val2;          //оценка, если гость выберет ответ2
 char answer3[1000]; //текст ответа3
 char val3;          //оценка, если гость выберет ответ3
 char answer4[1000]; //текст ответа4
 char val4;          //оценка, если гость выберет ответ4
};
Это конечно очень не экономно- можно заморочиться с плавающей длиной текстов, а также с изменяемым количеством ответов- но это усложнит написание редактора.

Это сообщение отредактировал(а) kapbepucm - 14.8.2019, 14:45


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Google
  Дата 18.8.2019, 00:10 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0758 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.