/** * Класс "CBookItems" представляет собой сущность телефонного справочника * Он хранит в себе все номера, имена и фамилии абонентов, занесённых в справочник * Может менять и возвращать данные отдельного абонента, занесённого в справочник * Может сортировать абонентов по фамилии или по имени * Может производить поиск абонентов по фамилии, имени и номеру * Может сохранять данные абонентов телефонного справочника в файл * Может загружать данные абонентов телефонного справочника из файла */ #pragma once #include #include #include #include using namespace std; class CBookItems { public: template class BaseBookItem { protected: T _sFirstName; T _sLastName; T _sPhoneNumber1; T _sPhoneNumber2; public: BaseBookItem() { } virtual ~BaseBookItem() { } virtual const string to_string() const = 0; }; class BookItem : BaseBookItem { public: BookItem() { } virtual ~BookItem() { } //=============================================================================== /** *Переопределяет операторы вывода/вывода */ friend std::ostream& operator<<(std::ostream& s, const BookItem& item); friend std::istream& operator>>(std::istream& s, BookItem& item); friend CBookItems; const string to_string() const; }; vector _aItems; public: //=============================================================================== /** *Создаёт элемент телефонного справочника и задаёт его значение */ void CreateNewItem(string sFirstName, string sLastName, string sPhoneNumber1); //=============================================================================== /** *Создаёт элемент телефонного справочника и задаёт его значение (2 телефона) */ void CreateNewItem(string sFirstName, string sLastName, string sPhoneNumber1, string sPhoneNumber2); //=============================================================================== /** *Меняет значение заданного элемента телефонного справочника */ int SetNewValueToItem(string sFirstName, string sLastName, string sPhoneNumber1, int nNumOfItem); //=============================================================================== /** *Меняет значение заданного элемента телефонного справочника (2 телефона) */ int SetNewValueToItem(string sFirstName, string sLastName, string sPhoneNumber1, string sPhoneNumber2, int nNumOfItem); //=============================================================================== /** *Возвращает данные элемента телефонного справочника */ int GetItem(int nNumOfItem, string& sFirstName, string& sLastName, string& sPhoneNumber1); //=============================================================================== /** *Возвращает данные элемента телефонного справочника (2 телефона) */ int GetItem(int nNumOfItem, string& sFirstName, string& sLastName, string& sPhoneNumber1, string& sPhoneNumber2); //=============================================================================== /** *Возвращает элемент телефонного справочника */ const BookItem& GetItem(int nNumOfItem); //=============================================================================== /** *Возвращает количество элементов в телефонном справочнике */ int GetSize(); //=============================================================================== /** *Сортирует абонентов в справочнике по именам или фамилии */ int SortItems(int nSortingType); //=============================================================================== /** *Ищет абонентов по имени, фамилии или по номеру телефона */ int FindItem(string sDesiredValue, int nSortingType, vector& nNumOfDesirvedItems); //=============================================================================== /** *Сохраняет данные абонентов телефонной книги */ int SaveItems(string sNameOfFile); //=============================================================================== /** *Загружает данные абонентов телефонной книги */ int LoadItems(string sNameOfFile); };