diff --git a/lesson_1/PhoneBook.txt b/lesson_1/PhoneBook.txt new file mode 100644 index 0000000..f042824 --- /dev/null +++ b/lesson_1/PhoneBook.txt @@ -0,0 +1,20 @@ +Ilin Petr Artemovich 7 17 4559767 +Zaitsev Zakhar Artemovich 125 44 4164751 +Dubinin Aleksei Mikhailovich 7 473 7449054 +Solovev Artur Mikhailovich 4 940 2556793 +Gerasimov Miroslav Stanislavovich 7 367 7508887 +Makeev Marat 77 4521 8880876 999 +Solovev Ivan Vladimirovich 7 273 5699819 5543 +Egorov Savelii Stanislavovich 77 4521 8880876 99 +Sokolov Arsenii 93 163 1992257 16 +Davydov Filipp Grigorevich 7 247 1377660 +Morozov Vladimir Mikhailovich 37 2290 5613649 +Orekhov Matvei Petrovich 81 8281 7420182 2 +Titova Natalia 93 163 1992257 9 +Markelov Dmitrii Vadimovich 19 7576 5734416 2 +Kozlovskii Artem Daniilovich 81 8281 7420182 1 +Kuznetsov Kirill Kirillovich 7 17 8346563 +Mironova Margarita Aleksandrovna 7 273 5699819 5542 +Kotov Vasilii Eliseevich 7 367 7508888 +Ivanov Daniil Maksimovich 7 366 7508887 +Aleksandrov Georgii 493 7637 6114861 diff --git a/lesson_1/main.cpp b/lesson_1/main.cpp new file mode 100644 index 0000000..2e3602f --- /dev/null +++ b/lesson_1/main.cpp @@ -0,0 +1,151 @@ +/* + * main.cpp + * + * Created on: 22 сент. 2021 г. + * Author: alexander + */ +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +struct Person +{ + string firstname; + string lastname; + optional patronymic = nullopt; +}; + +ostream& operator<<(ostream &out, const Person &p) +{ + out << p.firstname << ' ' << p.lastname << ' ' << p.patronymic.value_or(""); + + return out; +} + +bool operator<(const Person &p1, const Person &p2) +{ + string patr1 = p1.patronymic.value_or(""); + string patr2 = p2.patronymic.value_or(""); + + return tie(p1.firstname, p1.lastname, patr1) + < tie(p2.firstname, p2.lastname, patr2); +} + +bool operator==(const Person &p1, const Person &p2) +{ + string patr1 = p1.patronymic.value_or(""); + string patr2 = p2.patronymic.value_or(""); + + return tie(p1.firstname, p1.lastname, patr1) + == tie(p2.firstname, p2.lastname, patr2); +} + +struct PhoneNumber +{ + int country_code; + int city_code; + string number; + optional additional_number = nullopt; +}; + +ostream& operator<<(ostream &out, const PhoneNumber &p) +{ + out << '+' << p.country_code << '(' << p.city_code << ')' << p.number; + + if (p.additional_number.has_value()) + { + out << ' ' << p.additional_number.value(); + } + + return out; +} + +using perPhone = vector>; + +class PhoneBook +{ +private: + perPhone m_data; +public: + PhoneBook(ifstream &file) + { + if (!file) + { + cout << "Не удаётся открыть файл!" << endl; + exit(-1); + } + + while (file) + { + string s; + + getline(file, s, '\n'); + + stringstream str; + str << s; + + pair entry; + + for (int i = 0; str; ++i) + { + switch (i) + { + case 0: + str >> entry.first.firstname; + break; + case 1: + str >> entry.first.lastname; + break; + case 2: + str >> s; + entry.first.patronymic = s; + break; + case 3: + str >> entry.second.country_code; + break; + case 4: + str >> entry.second.city_code; + break; + case 5: + str >> entry.second.number; + break; + case 6: + int num; + str >> num; + entry.second.additional_number = num; + break; + } + } + + m_data.push_back(entry); + } + } + + friend ostream& operator<<(ostream &out, const PhoneBook &pb); +}; + +ostream& operator<<(ostream &out, const PhoneBook &pb) +{ + for (const auto& [first, second] : pb.m_data) + { + out << first << ' ' << second << endl; + } + + return out; +} + +int main() +{ + ifstream file("PhoneBook.txt"); + PhoneBook book(file); + cout << book; + + return 0; +}