Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Условные операторы Помогите расшифровать это на обычные if и else. int curLen = i == 0 ? mas.len : mas.len - mas.len; https://www.cyberforum.ru/ cpp-beginners/ thread2495332.html C++ Массив: Определить методом бинарного поиска, содержит ли массив заданное число...
формировать массив элементы которого выбираются случайно из интервала определить методом бинарного поиска содержит ли он заданное число если элемент найден то заменить его на 0
C++ Четкое понимание определений https://www.cyberforum.ru/ cpp-beginners/ thread2495295.html
Добрый день. Учу ООП. Есть отрывок из конспекта, который я пытаюсь понять. Инкапсуляция поддерживает принцип черного ящика. Это означает, что реализация всегда должна быть в закрытой части....
C++ Поиск и замена слов в файле https://www.cyberforum.ru/ cpp-beginners/ thread2495289.html
В общем есть файл1, в нем записаны слова через пробел в 1 строку, нужно чтоб из этого файла бралось 1-ое слово, открывал второй файл искал в нем определенное слово <\Word> после это слова вставлял...
C++ Программа читает из файла, ищет среднее и медиану, не компилируется
Программа читает из файла, ищет среднее и медиану, не компилируется. IDE VS 2019. Часть которая закоменчена работает. Вот что говорит компилятор. https://ibb.co/t4hFDkD https://ibb.co/zQQ0sfd...
C++ Литература по файловому вводу-выводу https://www.cyberforum.ru/ cpp-beginners/ thread2495249.html
Привет Перерыл кучу литературы по плюсам, но не смог найти то что мне нужно. подскажите какую-нибудь литературу по файловому вводу-выводу в плюсах. чтобы примеров было много и растолковывалось для...
C++ Долговой журнал магазина https://www.cyberforum.ru/ cpp-beginners/ thread2495247.html
Доброго здравия, дорогие форумчане. Программировать я еще только учусь. Хочу написать долговой журнал магазина, который состоит из записей клиентов и их долговой историей (мысль навеяна весьма...
Календарь майя C++
Как известно, календарь майя заканчивался на 2012 году. Однако Чарли Фрост считает, что календарь должен быть другим. Поэтому он попросил Джексон Кёртиса, чтобы тот помог составить календарь. Так...
C++ Ввод и вывод в структурах https://www.cyberforum.ru/ cpp-beginners/ thread2495233.html
Подскажите пожалуйста, как для структуры создать оператор ввода и вывода, ведь << и >> побитовые сдвиги влево и вправо
C++ Гарри Поттер и магические шахматы [C, B’] - массивыыыыыы Гарри, Рон и Гермиона попали на шахматное поле. Пустое. С загадочными числами. Гермиона, мысленно пролистывая страницы книг, отпечатанные в памяти, быстро поняла, что это древняя магическая... https://www.cyberforum.ru/ cpp-beginners/ thread2495230.html
C++ Массив: Последнее дело Оушена. Составьте маршрут, следуя которому, Оушен успеет ограбить все банки.
Оушен отправляется на пенсию! Но для обеспечения безбедной старости он решил напоследок ограбить n банков. Так совпало, что все банки расположены на прямой. Позиция банка с номером i...
C++ с++ где тут ошибка #include <iostream> using namespace std; template<typename T,int N> int arr_size(T (&arr1)) { size_t size; size=sizeof(arr1)/sizeof(arr1); return size; https://www.cyberforum.ru/ cpp-beginners/ thread2495222.html
1477 / 941 / 811
Регистрация: 30.04.2016
Сообщений: 3,286
01.09.2019, 00:25 0

Телефонный справочник - C++ - Ответ 13800741

01.09.2019, 00:25. Показов 4156. Ответов 2
Метки (Все метки)

Лучший ответ Сообщение было отмечено Egor_S как решение

Решение

Egor_S, здравствуйте! Вот, писал программу не так давно. Возможно, вам это поможет:

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
/*
Файл "Абонент телефона"
 
Предполагаемая структура записи:
 
- Ф.И.О. абонента;
- номер телефона;
- год установки телефона;
 
- создать файл с заданной структурой записи.
- выдать на экран содержимое файла.
 
Выдать на экран список всех абонентов, телефоны которых начинаются с двух заданных цифр в виде:
 
- Ф.И.О. абонента
- номер телефона
 
Сформировать новый файл:
 
- Ф.И.О. абонента
- год установки телефона
 
Вновь сформированный файл распечатать.
 
- добавить запись в исходный файл.
- удалить все записи с указанными Ф.И.О. абонентов.
- корректировка файла: по заданной Ф.И.О. абонента изменить номер телефона.
*/
 
#include <iostream> 
#include <string> 
#include <list> 
#include <algorithm> 
#include <fstream> 
#include <cmath> 
#include <windows.h> //Шрифт консоли - Lucida Console
 
    using namespace std;
 
struct Subscriber {
    string surname;
    string phone_number;
    int mount_year;
};
 
list<Subscriber> lst;
 
ifstream& operator>>(ifstream &in, Subscriber &obj) { //Перегрузка оператора чтения из файла
    in >> obj.surname; 
    in >> obj.phone_number; 
    in >> obj.mount_year; 
    return in;
}
 
istream& operator>>(istream &in, Subscriber &obj) { //Перегрузка оператора ввода в консоль
    cout << "Добавление новых записей:\n\n";
    cout << "Ф.И.О.: "; in >> obj.surname;
    cout << "Номер телефона: "; in >> obj.phone_number;
    cout << "Год установки телефона: "; in >> obj.mount_year;
    return in;
}
 
ostream& operator<<(ostream &out, Subscriber &obj) { //Перегрузка оператора вывода в консоль
    out << obj.surname << "\n";
    out << obj.phone_number << "\n";
    out << obj.mount_year << "\n";
    return out;
}
 
void clear() { //Функция очистки файла
    ofstream in("input.txt", ios::out | ios::trunc); 
    in.close();
}
 
void clear_new() { //Функция очистки нового файла
    ofstream in("input_new.txt", ios::out | ios::trunc); 
    in.close();
}
 
bool is_file_empty() { //Функция проверки файла на пустоту
    ifstream in ("input.txt"); 
    in.seekg(0, ios::end);
    if (in.tellg() == 0) {
        return true;
    } 
    in.close();
    return false;
}
 
void save_into_file() { //Функция сохранения списка в файл
    clear();
    ofstream out("input.txt");
    for (const Subscriber &data: lst) {
        out << data.surname << "\n";
        out << data.phone_number << "\n";
        out << data.mount_year << "\n";
    }
    out.close();
}
 
void save_into_new_file() { //Функция сохранения списка в новый файл (Ф.И.О. и год установки телефона)
    clear_new();
    ofstream out("input_new.txt");
    for (const Subscriber &data: lst) {
        out << data.surname << "\n";
        out << data.mount_year << "\n";
    }
    cout << "\nНовый файл успешно сформирован!\n\n";
    out.close();
}
 
void read_from_file(Subscriber &data) { //Функция добавления записей из файла в список
    ifstream in("input.txt");
    while (in >> data) {
        lst.push_back(data);
    } 
    in.close();
}
 
void output_from_file(Subscriber &data) { //Функция вывода записей из файла в консоль
    if (!is_file_empty()) {
        ifstream in ("input.txt");
        if (in) {
            int k = 0;
            while ( in >> data) {
                k++;
                cout << "Запись #" << k << ":\n\n";
                cout << data;
                cout << "\n";
            } 
            in.close();
        } else {
            cout << "Файл input.txt не найден!\n\n";
        }
    } else {
        cout << "Файл input.txt пуст!\n\n";
    }
}
 
void output_from_new_file(Subscriber &data) { //Функция вывода записей из нового файла в консоль
        ifstream in("input_new.txt");
        if (in) {
            int k = 0;
            while (in >> data.surname >> data.phone_number) {
                k++;
                cout << "Запись #" << k << ":\n\n";
                cout << data.surname << "\n";
                cout << data.mount_year << "\n\n";
            } 
            in.close();
        } else {
            cout << "Файл input_new.txt не найден!\n\n";
        }
    }
 
void add_client(Subscriber &data) { //Добавление новой записи в список (записи добавляются в конец списка)
    int k;
    cout << "Введите число добавляемых записей: ";
    cin >> k;
    for (int i = 1; i <= k; i++) {
        cout << "\nЗапись #" << i << ":\n";
        cin >> data;
        lst.push_back(data);
    }
    cout << "\nЗаписи успешно добавлены!\n\n";
    save_into_file(); //Сохраняем результат в файл
}
 
void del_client(string const &key) { //Функция удаления элементов из списка (по Ф.И.О. абонента)
    bool flag = false;
    for (auto it = lst.begin(); it != lst.end();) {
        if (it->surname == key) {
            it = lst.erase(it);
            flag = true;
        } else {
            ++it;
        }
    }
    if (!flag) {
        cout << "\nЗаписи с такой Ф.И.О. не найдено!\n\n";
        return;
    } else {
        cout << "\nЗаписи успешно удалены!\n\n";
    }
    save_into_file(); //Сохраняем результат в файл
}
 
void replace_client(string const &key) { //Функция изменения номера телефона (по Ф.И.О. абонента)
    int k = 0;
    for (auto it = lst.begin(); it != lst.end(); ++it) {
        if (it->surname == key) {
            k++;
            cout << "Запись #" << k << ":\n";
            cout << it->phone_number 
            << " => ";
            cin >> it->phone_number;
            it->phone_number = it->phone_number;
            cout << "\n";
        }
    }
    if (!k) {
        cout << "Записи с такой Ф.И.О. не найдено!\n\n";
        return;
    } else {
        cout << "Записи успешно обновлены!\n\n";
    }
    save_into_file(); //Сохраняем результат в файл
}
 
void output_client() { //Функция вывода списка клиентов, телефоны которых начинаются с двух заданных цифр
    ifstream in("input.txt");
    bool flag = false;
    string digits;
    cout << "Enter two phone number digits: ";
    cin >> digits;
    for (auto it = lst.begin(); it != lst.end(); ++it) {
       if (it->phone_number.find(digits) == 0) {
            cout << it->surname << "\n";
            cout << it->phone_number << "\n";
            cout << it->mount_year << "\n";
            flag = true;
        }
    } 
    in.close();
    if (!flag) {
        cout << "Искомых клиентов не найдено!\n\n";
    }
}
 
int main() {
    setlocale(LC_ALL, "Russian");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Subscriber person;
    read_from_file(person); //Считываем в односвязный список записи, которые уже есть в файле (при первом запуске программы)
    menu:
    int choice, back; 
    string surname;
    cout << "Выберите действие:\n\n";
    cout << "0 - Выход.\n";
    cout << "1 - Добавить новую запись.\n";
    cout << "2 - Удалить запись (по Ф.И.О. абонента).\n";
    cout << "3 - Изменить номер телефона (по Ф.И.О. абонента).\n";
    cout << "4 - Список клиентов, телефоны которых начинаются с двух заданных цифр.\n";
    cout << "5 - Вывод информации из исходного файла.\n";
    cout << "6 - Формирование нового файла (Ф.И.О. абонента, год установки телефона).\n";
    cout << "7 - Печать нового файла (Ф.И.О. абонента, год установки телефона).\n";
    cout << "\nВаш выбор: ";
    cin >> choice;
    cout << "\n";
    switch (choice) {
    case 0:
        exit(0);
        break;
    case 1:
        add_client(person);
        break;
    case 2:
        cout << "Введите Ф.И.О.: ";
        cin >> surname;
        del_client(surname);
        break;
    case 3:
        cout << "Введите Ф.И.О.: ";
        cin >> surname;
        cout << "\n";
        replace_client(surname);
        break;
    case 4:
        output_client();
        break;
    case 5:
        output_from_file(person);
        break;
    case 6:
        save_into_new_file();
        break;
    case 7:
        output_from_new_file(person);
        break;
    default:
        cout << "Пункт выбран неправильно!\n\n";
    }
    cout << "Вы хотите вернуться в меню?\n";
    cout << "1 - Да\n";
    cout << "2 - Нет\n";
    cout << "Ваш выбор: ";
    cin >> back;
    if (back == 1) {
        system("cls");
        goto menu;
    } else {
        exit(0);
    }
    system("pause");
    return 0;
}


Вернуться к обсуждению:
Телефонный справочник C++
2
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2019, 00:25
Готовые ответы и решения:

Телефонный справочник
Здравствуйте пытаюсь разобрать такую программу изкнижки Напишите программу, которая позволяет...

Телефонный справочник
Прога читает из файла, есть поиск по имени и по адресу. Никак не могу реализовать поиск по номеру....

телефонный справочник
создать программу телефонный справочник на 5 человек эти 5 человек вводятся с клавиатуры. помогие...

телефонный справочник
Написать программу, которая позволяет найти в телефонном справочнике (phone.txt) нужные сведения....

2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.09.2019, 00:25

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

Телефонный справочник
Всем привет! :) Задачка в двух словах такова. Надо сделать телефонный справочник, чтоб можно было...

телефонный справочник
Создать телефонный справочник для осуществления следующих операций: Добавление абонентов в...

Телефонный справочник.
#include &quot;stdio.h&quot; #include &quot;conio.h&quot; #define FNAME &quot;I:\\phone.txt\0&quot; void main() { char...

Телефонный справочник
Помогите пожалуйста написать программу &quot;Телефонный справочник&quot;, в которой есть два массива по 10...

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