3 / 1 / 1
Регистрация: 29.11.2012
Сообщений: 479
1

Как с консоли записать строку или предложение в файл?

13.08.2019, 21:06. Показов 4001. Ответов 12
Метки нет (Все метки)

Не могу понять, как сделать так чтобы я ввел вопросы для тестируемого и они сохранились в файл, а потом студент после входа в систему мог открыть этот файл считать вопросы и пройти тест по этим вопросам, и получить оценку по 12 бальной шкале, и чтобы админ видел эти оценки, а также чтобы тестируемый их тоже видел? Или хотя бы покажите, как сделать запись вопросов для теста в файл?
Ниже мой код:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
#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();
}


Добавлено через 2 минуты
Т. е я хочу составить вопросы для теста и за них определенная оценка.
Например 1. Вопрос? - 1 балл или 6 баллов и тд. За не правильный ответ 0 баллов. Потов это все суммируется и показывается процент правильных ответов и общий балл. Задание ниже.

Кликните здесь для просмотра всего текста
Реализовать полнофункциональную систему тестирования.
В системе должны быть 2 режима: Администратор и Тестируемый.
Описание режима работа для Тестируемого (в дальнейшем Гость).
- Для входа в систему Гость должен зарегистрироваться. Данная процедура выполняется один раз, при дальнейших входах в систему доступ идет по логину и паролю.

- При регистрации нужно указывать ФИО, домашний адрес, телефон.

- Важно, чтобы логины для пользователей были уникальными.

- После входа Гость имеет возможность просмотреть свои предыдущие
результаты тестирования, сдать новое тестирование.

- Тестирование может осуществляться по различным категориям знаний. Например:
• Программирование (раздел):
1) Основы программирования (конкретный тест);
2) Объектно-ориентированное программирование (конкретный тест).
• Администрирование (раздел):
1) Основы информационных технологий (конкретный тест);
2) Операционные системы (конкретный тест).

- После сдачи теста Гость видит результат тестирования,
количество правильно отвеченных вопросов, процент правильных ответов и полученную оценку.

- Студент имеет возможность прервать тестирование и продолжить его
тогда, когда ему это будет удобно.

- Оценивание нужно вести на основании 12-ти балльной системы, привязанной к количеству вопросов теста.

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


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

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

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

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




Добавлено через 5 минут
Или может как сделать это проще?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.08.2019, 21:06
Ответы с готовыми решениями:

Как записать в файл что-либо!(строку или абзац)?
Как записать в файл что-либо!(строку или абзац)?

Как записать строку из консоли в переменную
Всем привет, не знаю, как назвать то, что мне нужно, суть состоит в том: есть у меня код, который...

Как записать в файл вывод из консоли?
package newpackage; import examples.Ellipse; public class Main { public static void...

Как с консоли записать в файл русский текст
Как с консоли записать в файл русский текст? Если так, то пишется только английский: #include...

12
nd2
3416 / 2796 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
13.08.2019, 21:47 2
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
Как с консоли записать строку или предложение в файл?
C++
1
2
3
4
5
    string str;
    getline(cin, str);
    
    ofstream fout("Test for the tested.txt"); 
    fout << str << endl;
0
3 / 1 / 1
Регистрация: 29.11.2012
Сообщений: 479
13.08.2019, 21:54  [ТС] 3
Цитата Сообщение от nd2 Посмотреть сообщение
string str;
* * getline(cin, str);
ofstream fout("Test for the tested.txt");
* * fout << str << endl;
Не работает, вот так я сделал и не работает. Что я не так делаю?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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;
        cin >> m;
        switch (m)
        {
        case 1: Createand_upload_a_test_for_the_test_taker();
            break;
        }
    }
 
    void Createand_upload_a_test_for_the_test_taker() // Составить и загрузить тест для тестируемого
    {
        string question;
        getline(cin, question);
        ofstream fout; // создаю объект для записи в файл вопросов для теста
        fout.open("Test for the tested.txt"); // связваю объект с файлом и ниже начинаю записывать строки в файл
        fout << question << n;
    }
0
nd2
3416 / 2796 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
13.08.2019, 22:07 4
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
Не работает
Как это выглядит?
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
вот так я сделал и не работает.
Мой код не работает, или твой?

Добавлено через 3 минуты
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
C++
1
fout << question << n;
C++
1
fout << question << '\n';
0
3 / 1 / 1
Регистрация: 29.11.2012
Сообщений: 479
13.08.2019, 22:20  [ТС] 5
Цитата Сообщение от nd2 Посмотреть сообщение
Как это выглядит?
Ни чего не происходит.
Цитата Сообщение от nd2 Посмотреть сообщение
Мой код не работает, или твой?
Возможно мой. Думаю я что то не так делаю. Пока не знаю что.

Добавлено через 4 минуты
Цитата Сообщение от nd2 Посмотреть сообщение
Мой код не работает, или твой?
Вот я так сделал:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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";
        string question;
        getline(cin, question);
        ofstream fout; // создаю объект для записи в файл вопросов для теста
        fout.open("Test for the tested.txt"); // связваю объект с файлом и ниже начинаю записывать строки в файл
        fout << question << n;
    }

И ничего не происходит.
0
3 / 1 / 1
Регистрация: 29.11.2012
Сообщений: 479
13.08.2019, 22:24  [ТС] 6
Цитата Сообщение от nd2 Посмотреть сообщение
Как это выглядит?
Выглядит вот так.
Я хочу чтобы после того, как админ вошел, он сразу мог составить ЗАДАНИЯ ДЛЯ ТЕСТА и загрузить в файл.
0
Миниатюры
Как с консоли записать строку или предложение в файл?  
3 / 1 / 1
Регистрация: 29.11.2012
Сообщений: 479
13.08.2019, 22:30  [ТС] 7
И в файл записывается пробел. А мне надо ввести в консоли например 1. Что такое программирование?
И в файле должно появится вот это:
И потом студент должен прочитать этот файл и ответить на этот вопрос и получить оценку 12 или 0 к примеру.А так строка сама по себе записывается.
0
Миниатюры
Как с консоли записать строку или предложение в файл?  
nd2
3416 / 2796 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
13.08.2019, 22:30 8
Лучший ответ Сообщение было отмечено Anonymous4722 как решение

Решение

Цитата Сообщение от Anonymous4722 Посмотреть сообщение
Выглядит вот так.
Перед getline(), вот это пропиши:
C++
1
cin.ignore(cin.rdbuf() ->in_avail());
0
3 / 1 / 1
Регистрация: 29.11.2012
Сообщений: 479
13.08.2019, 22:46  [ТС] 9
Заработало, как я и хотел. Но в файле выводит кракозябры, когда на русском пишу
0
Миниатюры
Как с консоли записать строку или предложение в файл?  
nd2
3416 / 2796 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
13.08.2019, 22:50 10
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
Но в файле выводит кракозябры, когда на русском пишу
В начале main():
C++
1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
В свойствах консоли выбрать шрифт: Lucida Console.
0
3 / 1 / 1
Регистрация: 29.11.2012
Сообщений: 479
13.08.2019, 22:54  [ТС] 11
Цитата Сообщение от nd2 Посмотреть сообщение
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
В свойствах консоли выбрать шрифт: Lucida Console.
Теперь запись в файл с консоли работает, как надо.
Осталось теперь допилить еще функции.
0
nd2
3416 / 2796 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
13.08.2019, 22:59 12
Лучший ответ Сообщение было отмечено Anonymous4722 как решение

Решение

Цитата Сообщение от Anonymous4722 Посмотреть сообщение
Осталось теперь допилить еще функции.
"Пилите, Шура..."
1
3 / 1 / 1
Регистрация: 29.11.2012
Сообщений: 479
13.08.2019, 23:04  [ТС] 13
Цитата Сообщение от nd2 Посмотреть сообщение
"Пилите, Шура..."
Которых очень много еще((
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.08.2019, 23:04

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как записать с консоли в файл русское слово?
В моей программе Объект имеет 2 string значения, 1 на английском , второе на русском.Когда пытаюсь...

Как в консоли записать в файл последовательность команд?
Помогите пожалуйста!!! В командной строке Linux с помощью какого-либо pедактоpа (le, joe и другие)...

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

Записать слово или предложение в двумерный массив
Подскажите пожалуйста, как записать слово в двумерный массив ? К примеру есть такой массив: *****...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.