lesson_1 #1

Open
alexander wants to merge 3 commits from lesson_1 into master
Owner

Имеется база сотрудников и номеров их телефонов. Требуется написать соответствующие структуры для хранения данных, и заполнить контейнер записями из базы. Затем необходимо реализовать методы обработки данных, а также вывести на экран всю необходимую информацию.
Важно! Имена переменным, классам и функциям давайте осознанные, состоящие из слов на английском языке.

  1. Создайте структуру Person с 3 полями: фамилия, имя, отчество. Поле отчество должно быть опционального типа, т.к. не у всех людей есть отчество. Перегрузите оператор вывода данных для этой структуры. Также перегрузите операторы < и == (используйте tie).

  2. Создайте структуру PhoneNumber с 4 полями:

  • код страны (целое число)
  • код города (целое число)
  • номер (строка)
  • добавочный номер (целое число, опциональный тип)
    Для этой структуры перегрузите оператор вывода. Необходимо, чтобы номер телефона выводился в формате: +7(911)1234567 12, где 7 – это номер страны, 911 – номер города, 1234567 – номер, 12 – добавочный номер. Если добавочного номера нет, то его выводить не надо.
  1. Создайте класс PhoneBook, который будет в контейнере хранить пары: Человек – Номер телефона. Конструктор этого класса должен принимать параметр типа ifstream – поток данных, полученных из файла. В теле конструктора происходит считывание данных из файла и заполнение контейнера. Класс PhoneBook должен содержать перегруженный оператор вывода, для вывода всех данных из контейнера в консоль.
    В классе PhoneBook реализуйте метод SortByName, который должен сортировать элементы контейнера по фамилии людей в алфавитном порядке. Если фамилии будут одинаковыми, то сортировка должна выполняться по именам, если имена будут одинаковы, то сортировка производится по отчествам. Используйте алгоритмическую функцию sort.
    Реализуйте метод SortByPhone, который должен сортировать элементы контейнера по номерам телефонов. Используйте алгоритмическую функцию sort.
    Реализуйте метод GetPhoneNumber, который принимает фамилию человека, а возвращает кортеж из строки и PhoneNumber. Строка должна быть пустой, если найден ровно один человек с заданном фамилией в списке. Если не найден ни один человек с заданной фамилией, то в строке должна быть запись «not found», если было найдено больше одного человека, то в строке должно быть «found more than 1». Для прохода по элементам контейнера используйте алгоритмическую функцию for_each.
    Реализуйте метод ChangePhoneNumber, который принимает человека и новый номер телефона и, если находит заданного человека в контейнере, то меняет его номер телефона на новый, иначе ничего не делает. Используйте алгоритмическую функцию find_if.

Результат:

           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
------SortByPhone-------
        Solovev       Artur     Mikhailovich   +4(940)2556793
           Ilin        Petr       Artemovich   +7(17)4559767
      Kuznetsov      Kirill      Kirillovich   +7(17)8346563
        Davydov      Filipp      Grigorevich   +7(247)1377660
       Mironova   Margarita    Aleksandrovna   +7(273)5699819 5542
        Solovev        Ivan    Vladimirovich   +7(273)5699819 5543
         Ivanov      Daniil      Maksimovich   +7(366)7508887
      Gerasimov    Miroslav   Stanislavovich   +7(367)7508887
          Kotov     Vasilii       Eliseevich   +7(367)7508888
        Dubinin     Aleksei     Mikhailovich   +7(473)7449054
       Markelov     Dmitrii       Vadimovich   +19(7576)5734416 2
        Morozov    Vladimir     Mikhailovich   +37(2290)5613649
         Egorov     Savelii   Stanislavovich   +77(4521)8880876 99
         Makeev       Marat                    +77(4521)8880876 999
     Kozlovskii       Artem      Daniilovich   +81(8281)7420182 1
        Orekhov      Matvei        Petrovich   +81(8281)7420182 2
         Titova     Natalia                    +93(163)1992257 9
        Sokolov     Arsenii                    +93(163)1992257 16
        Zaitsev      Zakhar       Artemovich   +125(44)4164751
    Aleksandrov     Georgii                    +493(7637)6114861
------SortByName--------
    Aleksandrov     Georgii                    +493(7637)6114861
        Davydov      Filipp      Grigorevich   +7(247)1377660
        Dubinin     Aleksei     Mikhailovich   +7(473)7449054
         Egorov     Savelii   Stanislavovich   +77(4521)8880876 99
      Gerasimov    Miroslav   Stanislavovich   +7(367)7508887
           Ilin        Petr       Artemovich   +7(17)4559767
         Ivanov      Daniil      Maksimovich   +7(366)7508887
          Kotov     Vasilii       Eliseevich   +7(367)7508888
     Kozlovskii       Artem      Daniilovich   +81(8281)7420182 1
      Kuznetsov      Kirill      Kirillovich   +7(17)8346563
         Makeev       Marat                    +77(4521)8880876 999
       Markelov     Dmitrii       Vadimovich   +19(7576)5734416 2
       Mironova   Margarita    Aleksandrovna   +7(273)5699819 5542
        Morozov    Vladimir     Mikhailovich   +37(2290)5613649
        Orekhov      Matvei        Petrovich   +81(8281)7420182 2
        Sokolov     Arsenii                    +93(163)1992257 16
        Solovev       Artur     Mikhailovich   +4(940)2556793
        Solovev        Ivan    Vladimirovich   +7(273)5699819 5543
         Titova     Natalia                    +93(163)1992257 9
        Zaitsev      Zakhar       Artemovich   +125(44)4164751
-----GetPhoneNumber-----
Ivanov	  +7(366)7508887
Petrov	not found
----ChangePhoneNumber----
    Aleksandrov     Georgii                    +493(7637)6114861
        Davydov      Filipp      Grigorevich   +7(247)1377660
        Dubinin     Aleksei     Mikhailovich   +7(473)7449054
         Egorov     Savelii   Stanislavovich   +77(4521)8880876 99
      Gerasimov    Miroslav   Stanislavovich   +7(367)7508887
           Ilin        Petr       Artemovich   +7(17)4559767
         Ivanov      Daniil      Maksimovich   +7(366)7508887
          Kotov     Vasilii       Eliseevich   +7(123)15344458
     Kozlovskii       Artem      Daniilovich   +81(8281)7420182 1
      Kuznetsov      Kirill      Kirillovich   +7(17)8346563
         Makeev       Marat                    +77(4521)8880876 999
       Markelov     Dmitrii       Vadimovich   +19(7576)5734416 2
       Mironova   Margarita    Aleksandrovna   +7(273)5699819 5542
        Morozov    Vladimir     Mikhailovich   +37(2290)5613649
        Orekhov      Matvei        Petrovich   +81(8281)7420182 2
        Sokolov     Arsenii                    +93(163)1992257 16
        Solovev       Artur     Mikhailovich   +4(940)2556793
        Solovev        Ivan    Vladimirovich   +7(273)5699819 5543
         Titova     Natalia                    +93(163)1992257 9
        Zaitsev      Zakhar       Artemovich   +125(44)4164751
Имеется база сотрудников и номеров их телефонов. Требуется написать соответствующие структуры для хранения данных, и заполнить контейнер записями из базы. Затем необходимо реализовать методы обработки данных, а также вывести на экран всю необходимую информацию. Важно! Имена переменным, классам и функциям давайте осознанные, состоящие из слов на английском языке. 1. Создайте структуру Person с 3 полями: фамилия, имя, отчество. Поле отчество должно быть опционального типа, т.к. не у всех людей есть отчество. Перегрузите оператор вывода данных для этой структуры. Также перегрузите операторы < и == (используйте tie). 2. Создайте структуру PhoneNumber с 4 полями: * код страны (целое число) * код города (целое число) * номер (строка) * добавочный номер (целое число, опциональный тип) Для этой структуры перегрузите оператор вывода. Необходимо, чтобы номер телефона выводился в формате: +7(911)1234567 12, где 7 – это номер страны, 911 – номер города, 1234567 – номер, 12 – добавочный номер. Если добавочного номера нет, то его выводить не надо. 3. Создайте класс PhoneBook, который будет в контейнере хранить пары: Человек – Номер телефона. Конструктор этого класса должен принимать параметр типа ifstream – поток данных, полученных из файла. В теле конструктора происходит считывание данных из файла и заполнение контейнера. Класс PhoneBook должен содержать перегруженный оператор вывода, для вывода всех данных из контейнера в консоль. В классе PhoneBook реализуйте метод SortByName, который должен сортировать элементы контейнера по фамилии людей в алфавитном порядке. Если фамилии будут одинаковыми, то сортировка должна выполняться по именам, если имена будут одинаковы, то сортировка производится по отчествам. Используйте алгоритмическую функцию sort. Реализуйте метод SortByPhone, который должен сортировать элементы контейнера по номерам телефонов. Используйте алгоритмическую функцию sort. Реализуйте метод GetPhoneNumber, который принимает фамилию человека, а возвращает кортеж из строки и PhoneNumber. Строка должна быть пустой, если найден ровно один человек с заданном фамилией в списке. Если не найден ни один человек с заданной фамилией, то в строке должна быть запись «not found», если было найдено больше одного человека, то в строке должно быть «found more than 1». Для прохода по элементам контейнера используйте алгоритмическую функцию for_each. Реализуйте метод ChangePhoneNumber, который принимает человека и новый номер телефона и, если находит заданного человека в контейнере, то меняет его номер телефона на новый, иначе ничего не делает. Используйте алгоритмическую функцию find_if. Результат: ``` 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 ------SortByPhone------- Solovev Artur Mikhailovich +4(940)2556793 Ilin Petr Artemovich +7(17)4559767 Kuznetsov Kirill Kirillovich +7(17)8346563 Davydov Filipp Grigorevich +7(247)1377660 Mironova Margarita Aleksandrovna +7(273)5699819 5542 Solovev Ivan Vladimirovich +7(273)5699819 5543 Ivanov Daniil Maksimovich +7(366)7508887 Gerasimov Miroslav Stanislavovich +7(367)7508887 Kotov Vasilii Eliseevich +7(367)7508888 Dubinin Aleksei Mikhailovich +7(473)7449054 Markelov Dmitrii Vadimovich +19(7576)5734416 2 Morozov Vladimir Mikhailovich +37(2290)5613649 Egorov Savelii Stanislavovich +77(4521)8880876 99 Makeev Marat +77(4521)8880876 999 Kozlovskii Artem Daniilovich +81(8281)7420182 1 Orekhov Matvei Petrovich +81(8281)7420182 2 Titova Natalia +93(163)1992257 9 Sokolov Arsenii +93(163)1992257 16 Zaitsev Zakhar Artemovich +125(44)4164751 Aleksandrov Georgii +493(7637)6114861 ------SortByName-------- Aleksandrov Georgii +493(7637)6114861 Davydov Filipp Grigorevich +7(247)1377660 Dubinin Aleksei Mikhailovich +7(473)7449054 Egorov Savelii Stanislavovich +77(4521)8880876 99 Gerasimov Miroslav Stanislavovich +7(367)7508887 Ilin Petr Artemovich +7(17)4559767 Ivanov Daniil Maksimovich +7(366)7508887 Kotov Vasilii Eliseevich +7(367)7508888 Kozlovskii Artem Daniilovich +81(8281)7420182 1 Kuznetsov Kirill Kirillovich +7(17)8346563 Makeev Marat +77(4521)8880876 999 Markelov Dmitrii Vadimovich +19(7576)5734416 2 Mironova Margarita Aleksandrovna +7(273)5699819 5542 Morozov Vladimir Mikhailovich +37(2290)5613649 Orekhov Matvei Petrovich +81(8281)7420182 2 Sokolov Arsenii +93(163)1992257 16 Solovev Artur Mikhailovich +4(940)2556793 Solovev Ivan Vladimirovich +7(273)5699819 5543 Titova Natalia +93(163)1992257 9 Zaitsev Zakhar Artemovich +125(44)4164751 -----GetPhoneNumber----- Ivanov +7(366)7508887 Petrov not found ----ChangePhoneNumber---- Aleksandrov Georgii +493(7637)6114861 Davydov Filipp Grigorevich +7(247)1377660 Dubinin Aleksei Mikhailovich +7(473)7449054 Egorov Savelii Stanislavovich +77(4521)8880876 99 Gerasimov Miroslav Stanislavovich +7(367)7508887 Ilin Petr Artemovich +7(17)4559767 Ivanov Daniil Maksimovich +7(366)7508887 Kotov Vasilii Eliseevich +7(123)15344458 Kozlovskii Artem Daniilovich +81(8281)7420182 1 Kuznetsov Kirill Kirillovich +7(17)8346563 Makeev Marat +77(4521)8880876 999 Markelov Dmitrii Vadimovich +19(7576)5734416 2 Mironova Margarita Aleksandrovna +7(273)5699819 5542 Morozov Vladimir Mikhailovich +37(2290)5613649 Orekhov Matvei Petrovich +81(8281)7420182 2 Sokolov Arsenii +93(163)1992257 16 Solovev Artur Mikhailovich +4(940)2556793 Solovev Ivan Vladimirovich +7(273)5699819 5543 Titova Natalia +93(163)1992257 9 Zaitsev Zakhar Artemovich +125(44)4164751 ```
alexander added 2 commits 2021-09-24 19:45:35 +00:00
alexander added 1 commit 2021-09-28 22:53:05 +00:00
This pull request can be merged automatically.
You are not authorized to merge this pull request.
You can also view command line instructions.

Step 1:

From your project repository, check out a new branch and test the changes.
git checkout -b lesson_1 master
git pull origin lesson_1

Step 2:

Merge the changes and update on Gitea.
git checkout master
git merge --no-ff lesson_1
git push origin master
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: alexander/geekbrains_cpp_difficult_moments#1
No description provided.