C/C++
Создать файл ABONENT.dat, содержащий записи следующей структуры: ФИО абонента; его номер телефона. на языке си++
Создать файл ABONENT.dat, содержащий записи следующей структуры: ФИО абонента; его номер телефона. на языке си++. 2.программа должна выполнять следующую обработку файла: по ФИО абонента, введенной с клавиатуры, выводит его номер телефона. если такого абонента нет, выдать соответствующее сообщение на дисплей.
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;
struct Abonent {
string name;
string phone;
Abonent() = default;
Abonent(const string& name, const string& phone)
: name(name), phone(phone) {}
};
vector<Abonent> load(const string& path) {
ifstream inp(path);
vector<Abonent> phonebook;
if (inp.is_open()) {
int side = 0;
string line;
Abonent abonent;
while (getline(inp, line)) {
(++side & 1? abonent.name : abonent.phone) = line;
if (~side & 1) phonebook.emplace_back(abonent);
}
inp.close();
}
return phonebook;
}
int main() {
string path{"ABONENT.dat"};
auto phonebook = load(path);
if (phonebook.empty()) puts("The phone book is not loaded!");
else {
string name;
auto cmp = [&name](const Abonent& a) { return a.name == name; };
while (true) {
cout << "F.I.O.: ";
getline(cin, name);
auto pos = find_if(phonebook.begin(), phonebook.end(), cmp);
if (pos == phonebook.end()) puts("Abonent not found!");
else {
for (auto& it = pos; it != phonebook.end(); ++it) {
cout << "Phone: " << it->phone << '\n';
}
}
}
}
system("pause > nul");
}
P.S. Структура файла: нечётные строки содержат ФИО, чётные строки содержат номер телефона, пустых строк между записями файл не содержит. Если у абонента два номера телефона, то записанных пар { ФИО; номер } должно быть две. Программа будет работать корректно только с символами Латиницы. Файл ABONENT.dat должен находиться в каталоге проекта, либо рядом с исполняемым файлом программы. Поиск зависит от регистра символов и количества пробелов в строках с ФИО.
#include <string>
#include <fstream>
#include <vector>
using namespace std;
struct Abonent {
string name;
string phone;
Abonent() = default;
Abonent(const string& name, const string& phone)
: name(name), phone(phone) {}
};
vector<Abonent> load(const string& path) {
ifstream inp(path);
vector<Abonent> phonebook;
if (inp.is_open()) {
int side = 0;
string line;
Abonent abonent;
while (getline(inp, line)) {
(++side & 1? abonent.name : abonent.phone) = line;
if (~side & 1) phonebook.emplace_back(abonent);
}
inp.close();
}
return phonebook;
}
int main() {
string path{"ABONENT.dat"};
auto phonebook = load(path);
if (phonebook.empty()) puts("The phone book is not loaded!");
else {
string name;
auto cmp = [&name](const Abonent& a) { return a.name == name; };
while (true) {
cout << "F.I.O.: ";
getline(cin, name);
auto pos = find_if(phonebook.begin(), phonebook.end(), cmp);
if (pos == phonebook.end()) puts("Abonent not found!");
else {
for (auto& it = pos; it != phonebook.end(); ++it) {
cout << "Phone: " << it->phone << '\n';
}
}
}
}
system("pause > nul");
}
P.S. Структура файла: нечётные строки содержат ФИО, чётные строки содержат номер телефона, пустых строк между записями файл не содержит. Если у абонента два номера телефона, то записанных пар { ФИО; номер } должно быть две. Программа будет работать корректно только с символами Латиницы. Файл ABONENT.dat должен находиться в каталоге проекта, либо рядом с исполняемым файлом программы. Поиск зависит от регистра символов и количества пробелов в строках с ФИО.
Николай Гуляев
Отличный результат
Виктор Тарасов
можете, пожалауйста, помочь мне с вопрос в моем профиле, срочно нужна ваша помощь. Надо переписать небольшую часть кода на с++, заранее спасибо
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
const char filename[] = "ABONENT.dat";
string f,i,o, phone;
ofstream os;
os.open(filename);
if(os.is_open())
{
if(!os.fail())
{
string cont;
do
{
cout << "Введите ФИО и нажмите Enter: ";
cin >> f;
os << f;
os << ' ';
cin >> i;
os << i;
os << ' ';
cin >> o;
os << o;
os << '\t';
cout << "Введите номер телефона и нажмите Enter: ";
cin >> phone;
os << phone;
os << '\n';
cout << "Для продолжения введите \"ДА\": ";
cin >> cont;
} while(cont == "ДА");
}
os.close();
}
return 0;
}
// ****************************************************************************
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
const char filename [] = "ABONENT.dat";
string cont;
string f,i,o, phone;
do
{
cout << "Введите ФИО абонента и нажмите Enter: ";
cin >> f >> i >> o;
ifstream is;
is.open(filename);
if(is.is_open())
{
if(!is.fail())
{
bool find = false;
string f1,i1,o1;
while(!is.eof())
{
is >> f1;
is >> i1;
is >> o1;
is >> phone;
if(f == f1 && i == i1 && o == o1)
{
cout << phone << endl;
find = true;
break;
}
}
if(find == false)
{
cout << "ФИО не найдено." << endl;
}
}
is.close();
}
cout << "Чтобы продолжить поиск введите \"ДА\" и нажмите Enter: ";
cin >> cont;
} while(cont == "ДА");
return 0;
}
#include <string>
#include <fstream>
using namespace std;
int main()
{
const char filename[] = "ABONENT.dat";
string f,i,o, phone;
ofstream os;
os.open(filename);
if(os.is_open())
{
if(!os.fail())
{
string cont;
do
{
cout << "Введите ФИО и нажмите Enter: ";
cin >> f;
os << f;
os << ' ';
cin >> i;
os << i;
os << ' ';
cin >> o;
os << o;
os << '\t';
cout << "Введите номер телефона и нажмите Enter: ";
cin >> phone;
os << phone;
os << '\n';
cout << "Для продолжения введите \"ДА\": ";
cin >> cont;
} while(cont == "ДА");
}
os.close();
}
return 0;
}
// ****************************************************************************
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
const char filename [] = "ABONENT.dat";
string cont;
string f,i,o, phone;
do
{
cout << "Введите ФИО абонента и нажмите Enter: ";
cin >> f >> i >> o;
ifstream is;
is.open(filename);
if(is.is_open())
{
if(!is.fail())
{
bool find = false;
string f1,i1,o1;
while(!is.eof())
{
is >> f1;
is >> i1;
is >> o1;
is >> phone;
if(f == f1 && i == i1 && o == o1)
{
cout << phone << endl;
find = true;
break;
}
}
if(find == false)
{
cout << "ФИО не найдено." << endl;
}
}
is.close();
}
cout << "Чтобы продолжить поиск введите \"ДА\" и нажмите Enter: ";
cin >> cont;
} while(cont == "ДА");
return 0;
}
Курманбек Жанышбек Уулу
Во второй программе можно было сразу весь файл загрузить в память, а уже потом делать цикл с поиском.
Похожие вопросы
- Написать программу на C++. Дан массив записей, содержащий номера телефонов сотрудников учреждения
- Язык Си. Тема: структуры данных.
- Составьте программу удаления столбца, содержащего максимальный элемент матрицы A[N][N] НА ЯЗЫКЕ СИ
- Решить задачу на языке СИ
- Написать код на языке си
- Написать программу на языке Си
- Помогите с решением задачи на языке СИ
- Си!!! БЕЗ УКАЗАТЕЛЕЙ, ЯЗЫК СИ
- Упорядочить элементы массива по возрастанию на языке Си
- Помогите с задачей на языке СИ