Форум программистов, компьютерный форум CyberForum.ru

Комментарии к программе - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ создать последовательность (список) x1 * xn, x2 * xn, …, xn–1 * xn http://www.cyberforum.ru/cpp-beginners/thread1699395.html
Здравствуйте, нужна ваша помощь Условие задачи: Даны натуральное число n, действительные числа x1, x2, …, xn (n≥2). Получить последовательность (список) x1 * xn, x2 * xn, …, xn–1 * xn.
C++ Сформировать очередь по файлу символов Доброго времени суток! Только начали проходить списки. Помогите, пожалуйста, решить задачу: Сформировать очередь (односвязный линейный список) по файлу символов. Промоделировать работу очереди в зависимости от введенных чисел: если вводится положительное число – добавить элемент в конец очереди, если вводится отрицательное число – удалить первый элемент очереди, если вводится нуль – вывести... http://www.cyberforum.ru/cpp-beginners/thread1699388.html
C++ Ввод символьной строки. Подскажите что делаю не так?
Подскажите что делаю не так? char model; хочу что бы модель можно было ввести спробелами. меняем на string mondel; значит нужно поменять способ ввода cin >> x.model; на getline(cin, x.model), ну или оставить char model, а поменять способ ввода, скажеи так cin.getline(model, 15); В любом случаи получаю ошибку: индекатор getline не определен ну или просто подчеркнуто красным. В чем...
Удалить слова, где есть цифры C++
Есть файлик, в нем слова разные из латинского алфавита и цифр что-то вроде: "sdfdsf dsf03sdf ;sl 322eds" Нужно в другой файлик записать те слова, в которых нет цифр. Помогите пожалуйста :)
C++ Сохранение позиции переноса строки. Неправельная нумерация! http://www.cyberforum.ru/cpp-beginners/thread1699354.html
Привет, задача такая: Есть огромный файл! Скажем 100 мб. Мне нужно максимально быстро узнать количество строк в этом файле и сохранить позиции новых строк в целочисленный список. Пробую сделать вот так. qint64 lineCount() { QFile File("FileName.txt"); if (!File.open(QFile::ReadOnly)) return -1; QList<qint64> _List; _List.append(0);
C++ Сформировать массив состоящий из четных и нечетных элементов помещеных в порядке следования исходного массива Создать массив с размерностью 200 элементов со значениями от 0 до 100. Требуется сформировать массив А в который помещены в порядке следования четные и нечетные элементы созданного массива. При этом размерность сформированного массива - 2к, где к - минимальное число четных или нечетных элементов. подробнее

Показать сообщение отдельно
Иван Толпыгин
0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 52
31.03.2016, 08:42     Комментарии к программе
Здраствуйте. Напишите, пожалуйста, комментарии к строкам, где этих комментариев нет. У меня брат - бездарь. А сам я написать комментарии не могу, так как работаю.
Вот сама программа:
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
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
#include <iostream> // Обеспечивает работу с консольным вводом - выводом
#include <fstream> // Обеспечивает работу с файловым вводом - выводом
#include <cstdio>
#include <string> 
#include <windows.h>
using namespace std; 
 
int stop(0); // Если пользователь выберет в списке функций программы функцию выключения, переменная stop инкреметируется и сработает завершение работы.
string error; // В случае наличия ошибки её текст будет помещён в данную переменную
string types[4]; // Список типов данных для удобного запроса
 
int select(); // Выбор функции программы
int list(); // Вывод списка номеров кафедр
int add(); // Добавление записи в БД
int dell(); // Удаление записи из БД
int red(); // Редактирование записи
int search(); // Поиск записи по номеру кафедры и вывод её данных
 
int main() { // Данная функция начинает выполнение программы, запускает и обрабатывает завершение функции select()
    setlocale(LC_ALL, "rus"); // Консольные ввод-вывод без кракозябр
    SetConsoleCP(1251); // Файловый ввод-вывод без кракозябр
    SetConsoleOutputCP(1251); // То же, что и выше
 
    cout << "*Журнал аренды v 0.1*\n\n";
start:
    if (select()) { // Если функция select() вернёт значение 1, программа выведёт текст ошибки и завершит работу.
        cout << "\nВо время выполнения программы произошла ошибка:\n" << error;
        system("pause");
        return 1;
    }
    else { // Иначе программа выполнена успешно. Далее она либо останавливается (пользователь выбрал функцию выключения), либо пользователя возвращает к выбору функции.
 
        if (stop) { // Если пользователь выберет в списке функций программы функцию выключения, переменная stop инкреметируется и сработает завершение работы.
            cout << "\nВыключение программы...\n\n";
            system("pause");
            return 0;
        }
        else { // Возвращаемся к выбору функций
            cout << "\nПрограмма выполнена успешно!\n\n";
            goto start; // Возвращаемся к выбору функций
        }
    }
}
 
int select() { //  Функция select даёт пользователю возможность выбрать, что программа должна сделать.
    setlocale(LC_ALL, "rus"); // Локализация
    int num; // Номер функций, которую выберет пользователь.
 
    cout << "Список функций:\n"; // Выводим все возможные функции
    cout << "1. Вывод списка аренд в табличном виде.\n";
    cout << "2. Добавление записи о аренде\n";
    cout << "3. Удаление записи о аренде.\n";
    cout << "4. Редактирование конкретной записи.\n";
    cout << "5. Поиск записи по номеру кафедры.\n";
    cout << "0. Выход из программы.\n";
    cout << "\nВведите номер необходимой функции: ";
    cin >> num;
 
    switch (num) { // В зависимости от выбранного номера либо запускается та или иная функция, либо выводится ошибка(функции с таким номером не существует)
    case 1:
        if (list()) {
            return 1;
        }
        else {
            return 0;
        }
    case 2:
        if (add()) {
            return 1;
        }
        else {
            return 0;
        }
    case 3:
        if (dell()) {
            return 1;
        }
        else {
            return 0;
        }
    case 4:
        if (red()) {
            return 1;
        }
        else {
            return 0;
        }
    case 5:
        if (search()) {
            return 1;
        }
        else {
            return 0;
        }
    case 0:
        stop = 1;
        return 0;
    default: // Конкретные действия при условии ввода несуществующего номера функции
        error = "Функции с выбранным номером не существует!\n\n";
        return 1;
    }
}
 
int list() {
    setlocale(LC_ALL, "rus"); // Локализация
    string num; // Номер кафедры, которую выберет пользователь
    string directory; // Директория файла
    string buffer; // Буфер обмена между программой и файлами
    string data[100]; // Промежуточная БД между программой и файлами
    int tmp; // Временная переменная (для промежуточного сохранения значений)
 
    cout << "\nВывод списка номеров кафедр:\n\n";
    ifstream in; // Назначаем идентификатор для чтения файла
    directory = "list\\list.txt"; // Назначаем директорию
    char direct[100];
    strcpy(direct, directory.c_str());
    in.open(direct); // Открываем файл list.txt, который содержит список номеров кафедр
    if (in) { // Если файл открылся
        int i = 0; // Счётчик
        while (getline(in, data[i])) i++; // Вытаскиваем все номера кафедр из list, запихивая их в массив data
        tmp = i; // Используем временную переменную
        in.close(); // Закрываем файловый ввод-вывод
    } else { // Если файл не открылся, выводим сообщение об ошибке и завершаем программу
        error = "Ошибка открытия файла!\n\n";
        return 1;
    }
    if (data[0] == "" || data[0] == " ") { // Если в файле list.txt не оказалось данных
        cout << "В базе данных отсутствуют записи.\n";
    }
    else { // Иначе выводим все данные
        for (int i = 0; i < tmp; i++) {
            cout << "№" << (i + 1) << ". " << data[i] << "\n";
        }
        cout << "\nБолее подробную информацию о записях Вы можете узнать через поиск по номеру кафедры.\n";
    }
    return 0;
}
 
int add() {
    setlocale(LC_ALL, "rus");
    string data[4];
    string directory;
    string check;
    char direct[100];
    int num(0); // Счётчик
    types[0]="Номер кафедры";
    types[1]="Название кафедры";
    types[2]="Фирма аренды";
    types[3]="Дата окончания аренды(дд.мм.гг)";
 
    cout << "\nДобавление новой записи аренды.\nВведите необходимые данные.\n\n";
 
    for (int i = 0; i < 4; i++) { // Пользователь вводит данные, которые запрашивает программа
        cout << types[i] << ": "; // Выводим тип данных
        cin >> data[i]; // Получаем данные
        if (data[i]=="" || data[i]==" ") { // Проверяем, чтобы поля не остались пустыми
            error = "Вы не ввели данные!";
            return 1;
        }
    }
    directory = "list\\list.txt"; 
    strcpy(direct, directory.c_str());
    ifstream in; // Залезаем в list.txt, чтобы проверить, существует ли уже такой номер кафедры
    in.open(direct);
    if(!in) {
         error = "Ошибка открытия файла!\n\n";
         return 1;
     }
    while (getline(in, check)) { // Захватываем все номера по одному
        if (check == data[0]) num++; // Если произошло совпадение с номером кафедры, который хотел добавить пользователь, инкреметируем счётчик
    }
    if (num) { // Если счётчик инкреметирован, значит запись с таким номером уже есть, значит выводим ошибку
        error = "Запись аренды с таким номером кафедры уже существует!\n\n";
        in.close();
        return 1;
    }
    in.close();
    directory = "list\" + data[0] + ".txt";
    memset(direct, ' ', 100);
    strcpy(direct, directory.c_str());
    ofstream out; // Если такого номера нет, создаём новый файл и добавляем в него все данные
    out.open(direct);
    if (!out) {
        error = "Ошибка открытия файла!\n\n";
        return 1;
    }
    for (int f = 0; f < 4; f++) { // Заносим данные, каждые в новой строке
        out << data[f] << "\n";
    }
    out.close();
    ofstream add; // Открываем list.txt, чтобы добавить в него номер кафедры
    add.open("list\\list.txt", ios_base::app); // Открываем, чтобы начал записывать с конца
    if (!add) { // Если файл не открылся
        error = "Ошибка открытия файла!\n\n";
        return 1;
    }
    add << data[0] << "\n"; // Закидываем данные, каждый раз с новой строки
    add.close(); // Закрываем файловый ввод-вывод
    cout << "\nДанные успешно добавлены!\n";
    return 0;
}
 
int dell() {
    setlocale(LC_ALL, "rus");
    string num;
    string directory;
    string buffer;
    string data[100];
    char direct[100];
    int tmp;
    types[0]="Номер кафедры";
    types[1]="Название кафедры";
    types[2]="Фирма аренды";
    types[3]="Дата окончания аренды(дд.мм.гг)";
 
    cout << "\nУдаление записи аренды.\n\nВведите номер кафедры: ";
    cin >> num; // Запрвшиваем номер кафедры
    ifstream in; // Задаём идентификатор файлового ввода-вывода
    directory = "list\\list.txt"; // Директория
    strcpy(direct, directory.c_str());
    in.open(direct); // Открываем файл
    if (in) { // Если файл открылся
        int i = 0; // Счётчик
        while (getline(in, data[i])) i++; // Вытаскиваем список всех номеров кафедр
        tmp = i; // Временная переменная
        in.close(); // Закрываем файловый ввод-вывод
        for (; i > -1; i--) { // Запускаем цикл, в котором сравниваем введённый пользователем номер со списком из list.txt. Так мы проверим, есть ли вообще такая запись
            if (data[i] == num) { // Если запись нашлась, открываем её файл
                directory = "list\" + num + ".txt";
                memset(direct, ' ', 100);
                strcpy(direct, directory.c_str());
                ifstream read;
                read.open(direct);
                if (!read) { // Если файл с записью не открылся
                    error = "Ошибка открытия файла!\n\n";
                    return 1;
                }
                cout << "\nВывод данных найденной записи.\n\n";
                for (int f = 0; f < 4; f++) { // В цыклы вытаскиваем все данные из файла, чтобы показать пользователю, что он удаляет
                    getline(read, buffer); // Вытаскиваем из файла
                    cout << types[f] << ": " << buffer << "\n"; // Выводим в окно все данные записи по очереди
                }
                read.close(); // Закрываем файловый ввод-вывод
                cout << "\nУдалить запись?(y/n): "; // Спрашиваем пользователя, действительно ли он хочет удалить запись
                cin >> buffer; // Получаем ответ
                if (buffer == "y") { // Согласился
                    ofstream clear; // Назначаем идентификатор файлового ввода-вывода
                    clear.open(direct); // Открытие файла через ofstream подразумевает запись в него данных с предварительным очищением. Так что мы просто открываем и закрываем файл, в результате чего его содержимое просто удаляется.
                    if (!clear) { // Если файл не открылся
                        error = "Ошибка удаления записи!\n\n";
                        return 1;
                    }
                    clear.close(); // Закрываем файл. Теперь он чист
                    data[i] = ""; // Очищаем тот элемент массива с номерами кафедр, в котором был номер ныне удалённой записи
                    ofstream update; // Обновляем list.txt, занеся туда оставшиеся номера
                    update.open("list\\list.txt");
                    for (int k = 0; k <= tmp; k++) {
                        if(data[k]!="") update << data[k] << "\n"; // Ставим if, чтобы в list.txt не было пустых строк 
                    }
                    update.close(); // Закрываем list.txt
                    cout << "\nЗапись успешно удалена!\n";
                    return 0;
                }
                else if (buffer == "n") { // Если пользователь решил не удалять файл
                    cout << "\nВы отменили удаление записи!\n";
                    return 0;
                }
                else { // Если пользовател ввёл не ту команду (нажал любую другую клавишу кроиме Y или N)
                    error = "Вы ввели неверную команду!\n\n";
                    return 1;
                }
            }
        }
        error = "Кафедры с таким номером не существует!\n\n"; // Если программа умудрилась дойти до этого куска кода, значит ранее не сработал return 0;, а значит пользователь ввёл неверный номер кафедры
        return 1;
    } else { // Если list.txt не открылся
        error = "Ошибка открытия файла!\n\n";
        return 1;
    }
}
 
int red() {
    setlocale(LC_ALL, "rus");
    string num;
    string directory;
    string buffer;
    string data[100];
    string red[3]; // Сюда будем пихать данные, которые введёт пользователь
    char direct[100];
    int tmp;
    types[0]="Номер кафедры";
    types[1]="Название кафедры";
    types[2]="Фирма аренды";
    types[3]="Дата окончания аренды(дд.мм.гг)";
 
    cout << "\nРедактирование записи аренды.\n\nВведите номер кафедры: "; // Начало кода то же самое, что и у int dell();
    cin >> num;
    ifstream in;
    directory = "list\\list.txt";
    memset(direct, ' ', 100);
    strcpy(direct, directory.c_str());
    in.open(direct);
    if (in) {
        int i = 0;
        while (getline(in, data[i])) i++;
        tmp = i;
        in.close();
        for (; i > -1; i--) {
            if (data[i] == num) {
                directory = "list\" + num + ".txt";
                memset(direct, ' ', 100);
                strcpy(direct, directory.c_str());
                ifstream read;
                read.open(direct);
                if (!read) {
                    error = "Ошибка открытия файла!\n\n";
                    return 1;
                }
                cout << "\nВывод данных найденной записи.\n\n";
                for (int f = 0; f < 4; f++) { // Берём все данные из файла записи в массив и выводим их пользователю
                    getline(read, buffer);
                    cout << types[f] << ": " << buffer << "\n";
                    buffer = "";
                }
                read.close();
                cout << "\nРедактировать запись?(y/n): ";
                cin >> buffer;
                if (buffer == "y") { // Если пользователь соглашается отредактировать запись
                    ofstream update;
                    update.open(direct);
                    cout << "\nВводите данные, запрашиваемые программой.\n\n";
                    for (int g = 0; g < 3; g++) { // Закидываем данные, вводимые пользователем, но начиная с названия кафедры, ибо её номер менять нельзя!
                        cout << types[g + 1] << ": ";
                        cin >> red[g];
                        if (red[g] == "" || red[g] == " ") { // Если поля остались пустыми(хотя бы одно из)
                            error = "Вы не ввели данные!";
                            return 1;
                        }
                    }
                    update << num << "\n"; // Сначала закидываем в файл записи номер кафедры. Его пользователь вводил в начале выполнения функции
                    for (int k = 0; k < 3; k++) { // Закидываем остальные данные, закрываем файл
                        update << red[k] << "\n";
                    }
                    update.close();
                    cout << "\nЗапись успешно изменена!\n";
                    return 0;
                }
                else if (buffer == "n") { // Если отказался редактировать
                    cout << "\nВы отменили редактирование записи!\n";
                    return 0;
                }
                else { // Если вообще ввёл неверную команду
                    error = "Вы ввели неверную команду!\n\n";
                    return 1;
                }
            }
        } // Если дошли до этого куска кода, значит return 0; не было, а значит пользователь ввёл несуществующий номер кафедры
        error = "Кафедры с таким номером не существует!\n\n";
        return 1;
    }
    else { // Если list.txt не открылся
        error = "Ошибка открытия файла!\n\n";
        return 1;
    }
}
 
int search() {
    setlocale(LC_ALL, "rus");
    string num;
    string directory;
    string buffer;
    string data[100];
    char direct[100];
    int tmp;
    types[0]="Номер кафедры";
    types[1]="Название кафедры";
    types[2]="Фирма аренды";
    types[3]="Дата окончания аренды(дд.мм.гг)";
 
    cout << "\nПоиск записи по номеру кафедры.\n\nВведите номер кафедры: ";
    cin >> num; // Получаем номер кафедры
    ifstream in; // Идентификатор
    directory = "list\\list.txt";
    strcpy(direct, directory.c_str());
    in.open(direct); // Открываем list.txt
    if (in) {
        int i = 0;
        while (getline(in, data[i])) i++; // Вытаскиваем все данные из list.txt
        tmp = i;
        in.close();
        for (; i > -1; i--) { // Ищем совпадение с введённым номером
            if (data[i] == num) { // Если сошлось
                directory = "list\" + num + ".txt"; // Составляем директорию
                memset(direct, ' ', 100);
                strcpy(direct, directory.c_str());
                ifstream read; // Открываем файл на чтение
                read.open(direct);
                if (!read) { // Если файл не открылся
                    error = "Ошибка открытия файла!\n\n";
                    return 1;
                }
                cout << "\nВывод данных найденной записи.\n\n";
                for (int f = 0; f < 4; f++) { // Выводим список данных найденной записи
                    getline(read, buffer);
                    cout << types[f] << ": " << buffer << "\n";
                    buffer = "";
                }
                read.close();
                return 0;
            }
        }
        error = "Кафедры с таким номером не существует!\n\n";
        return 1;
    } else {
        error = "Ошибка открытия файла!\n\n";
        return 1;
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru