commit 2c9cb710049a882f38bfe519a361b245c33a3df0 Author: Kolan Sh Date: Thu Mar 25 22:59:37 2021 +0300 Initial state diff --git a/Debug/myFile.txt b/Debug/myFile.txt new file mode 100644 index 0000000..6c07182 --- /dev/null +++ b/Debug/myFile.txt @@ -0,0 +1,6 @@ +Pavel Antonov +78005553535 +Anton Pavkin +79374237500 +Pavel Antonov +78005553535 +Anton Pavkin +79374237500 +Ivan Lalala 331547 +Sash Huiasha 2021 diff --git a/phoebook/CBookItems.cpp b/phoebook/CBookItems.cpp new file mode 100644 index 0000000..cc4a15f --- /dev/null +++ b/phoebook/CBookItems.cpp @@ -0,0 +1,274 @@ +#include "CBookItems.h" + + +void CBookItems::CreateNewItem(string sFirstName, string sLastName, string sPhoneNumber) +{ + _BookItem* spaceItem = new _BookItem; + spaceItem->_sFirstName = sFirstName; + spaceItem->_sLastName = sLastName; + spaceItem->_sPhoneNumber = sPhoneNumber; + + _aItems.push_back(*spaceItem); + + //delete spaceItem; +} + +int CBookItems::SetNewValueToItem(string sFirstName, string sLastName, string sPhoneNumber, int nNumOfItem) +{ + nNumOfItem--; + if (!(nNumOfItem > _aItems.size())) + { + for (int i = 0; i < _aItems.size(); i++) + { + if (nNumOfItem == i) + { + _BookItem spaceItem; + spaceItem._sFirstName = sFirstName; + spaceItem._sLastName = sLastName; + spaceItem._sPhoneNumber = sPhoneNumber; + + _aItems.at(nNumOfItem) = spaceItem; + return 0; + } + } + } + else + { + return 1; + } +} + +int CBookItems::GetItem(int nNumOfItem, string& sFirstName, string& sLastName, string& sPhoneNumber) +{ + if (!(nNumOfItem > _aItems.size())) + { + sFirstName = _aItems.at(nNumOfItem)._sFirstName; + sLastName = _aItems.at(nNumOfItem)._sLastName; + sPhoneNumber = _aItems.at(nNumOfItem)._sPhoneNumber; + return 0; + } + else + { + return 1; + } +} + +int CBookItems::GetSize() +{ + return _aItems.size(); +} + +int CBookItems::SortItems(int nSortingType) +{ + if (nSortingType == 0) + { + CBookItems spaceItem; + for (int i = 0; i < _aItems.size(); i++) + { + for (int j = i; j < _aItems.size(); j++) + { + if (_aItems.at(i)._sFirstName[0] > _aItems.at(j)._sFirstName[0]) + { + string sFirstName = ""; + string sLastName = ""; + string sPhoneNumber = ""; + + sFirstName = _aItems.at(i)._sFirstName; + sLastName = _aItems.at(i)._sLastName; + sPhoneNumber = _aItems.at(i)._sPhoneNumber; + + _aItems.at(i)._sFirstName = _aItems.at(j)._sFirstName; + _aItems.at(i)._sLastName = _aItems.at(j)._sLastName; + _aItems.at(i)._sPhoneNumber = _aItems.at(j)._sPhoneNumber; + + _aItems.at(j)._sFirstName = sFirstName; + _aItems.at(j)._sLastName = sLastName; + _aItems.at(j)._sPhoneNumber = sPhoneNumber; + } + } + } + return 0; + } + else if (nSortingType == 1) + { + CBookItems spaceItem; + for (int i = 0; i < _aItems.size(); i++) + { + for (int j = i; j < _aItems.size(); j++) + { + if (_aItems.at(i)._sLastName[0] > _aItems.at(j)._sLastName[0]) + { + string sFirstName = ""; + string sLastName = ""; + string sPhoneNumber = ""; + + sFirstName = _aItems.at(i)._sFirstName; + sLastName = _aItems.at(i)._sLastName; + sPhoneNumber = _aItems.at(i)._sPhoneNumber; + + _aItems.at(i)._sFirstName = _aItems.at(j)._sFirstName; + _aItems.at(i)._sLastName = _aItems.at(j)._sLastName; + _aItems.at(i)._sPhoneNumber = _aItems.at(j)._sPhoneNumber; + + _aItems.at(j)._sFirstName = sFirstName; + _aItems.at(j)._sLastName = sLastName; + _aItems.at(j)._sPhoneNumber = sPhoneNumber; + } + } + } + return 0; + } + else + { + return 1; + } +} + +int CBookItems::FindItem(string sDesiredValue, int nSortingType, vector& nNumOfDesirvedItems) +{ + nSortingType--; + bool bCheckRightValue = false; + if (nSortingType == 0) + { + for (int i = 0; i < _aItems.size(); i++) + { + for (int j = 0; j < sDesiredValue.size() & j < _aItems.at(i)._sFirstName.size(); j++) + { + if (sDesiredValue[j] == _aItems.at(i)._sFirstName[j]) + { + bCheckRightValue = true; + } + else + { + bCheckRightValue = false; + } + } + + if (bCheckRightValue == true) + { + nNumOfDesirvedItems.push_back(i); + } + } + return 0; + } + else if (nSortingType == 1) + { + for (int i = 0; i < _aItems.size(); i++) + { + for (int j = 0; j < sDesiredValue.size() & j < _aItems.at(i)._sLastName.size(); j++) + { + if (sDesiredValue[j] == _aItems.at(i)._sLastName[j]) + { + bCheckRightValue = true; + } + else + { + bCheckRightValue = false; + } + } + + if (bCheckRightValue == true) + { + nNumOfDesirvedItems.push_back(i); + } + } + return 0; + } + else if (nSortingType == 2) + { + for (int i = 0; i < _aItems.size(); i++) + { + for (int j = 0; j < sDesiredValue.size() & j < _aItems.at(i)._sPhoneNumber.size(); j++) + { + if (sDesiredValue[j] == _aItems.at(i)._sPhoneNumber[j]) + { + bCheckRightValue = true; + } + else + { + bCheckRightValue = false; + } + } + + if (bCheckRightValue == true) + { + nNumOfDesirvedItems.push_back(i); + } + } + return 0; + } + else + { + return 1; + } + +} + +int CBookItems::SaveItems(string sNameOfFile) +{ + ofstream fSave; + fSave.open(sNameOfFile); + + if (!fSave.is_open()) + { + fSave.close(); + return 1; + } + else + { + for (int i = 0; i < _aItems.size(); i++) + { + fSave << _aItems.at(i)._sFirstName << " " << _aItems.at(i)._sLastName << " " << _aItems.at(i)._sPhoneNumber << " " << endl; + } + fSave.close(); + return 0; + } +} + +int CBookItems::LoadItems(string sNameOfFile) +{ + _aItems.clear(); + ifstream fLoad; + fLoad.open(sNameOfFile); + + if (!fLoad.is_open()) + { + fLoad.close(); + return 1; + } + else + { + string sFirstName = "", sLastName = "", sPhoneNum = ""; + string sItemData = ""; + while (getline(fLoad, sItemData)) + { + int j = 0, k = 0; + while (sItemData.at(j) != ' ') + { + sFirstName += sItemData[j]; + j++, k++; + } + k = 0; + j++; + while (sItemData.at(j) != ' ') + { + sLastName += sItemData[j]; + j++, k++; + } + k = 0; + j++; + while (j < sItemData.size()) + { + sPhoneNum += sItemData[j]; + j++, k++; + } + + CreateNewItem(sFirstName, sLastName, sPhoneNum); + sFirstName = "", sLastName = "", sPhoneNum = "", sItemData = ""; + } + fLoad.close(); + return 0; + } + + +} \ No newline at end of file diff --git a/phoebook/CBookItems.h b/phoebook/CBookItems.h new file mode 100644 index 0000000..1874e8d --- /dev/null +++ b/phoebook/CBookItems.h @@ -0,0 +1,81 @@ +/** +* Класс "CBookItems" представляет собой сущность телефонного справочника +* Он хранит в себе все номера, имена и фамилии абонентов, занесённых в справочник +* Может менять и возвращать данные отдельного абонента, занесённого в справочник +* Может сортировать абонентов по фамилии или по имени +* Может производить поиск абонентов по фамилии, имени и номеру +* Может сохранять данные абонентов телефонного справочника в файл +* Может загружать данные абонентов телефонного справочника из файла +*/ + +#pragma once +#include +#include +#include +#include + +using namespace std; + + +class CBookItems +{ +private: + struct _BookItem + { + string _sFirstName; + string _sLastName; + string _sPhoneNumber; + }; + + vector<_BookItem> _aItems; + +public: + + //=============================================================================== + /** + *Создаёт элемент телефонного справочника и задаёт его значение + */ + void CreateNewItem(string sFirstName, string sLastName, string sPhoneNumber); + + //=============================================================================== + /** + *Меняет значение заданного элемента телефонного справочника + */ + int SetNewValueToItem(string sFirstName, string sLastName, string sPhoneNumber, int nNumOfItem); + + //=============================================================================== + /** + *Возвращает данные элемента телефонного справочника + */ + int GetItem(int nNumOfItem, string& sFirstName, string& sLastName, string& sPhoneNumber); + + //=============================================================================== + /** + *Возвращает количество элементов в телефонном справочнике + */ + int GetSize(); + + //=============================================================================== + /** + *Сортирует абонентов в справочнике по именам или фамилии + */ + int SortItems(int nSortingType); + + //=============================================================================== + /** + *Ищет абонентов по имени, фамилии или по номеру телефона + */ + int FindItem(string sDesiredValue, int nSortingType, vector& nNumOfDesirvedItems); + + //=============================================================================== + /** + *Сохраняет данные абонентов телефонной книги + */ + int SaveItems(string sNameOfFile); + + //=============================================================================== + /** + *Загружает данные абонентов телефонной книги + */ + int LoadItems(string sNameOfFile); +}; \ No newline at end of file diff --git a/phoebook/CConsoleUI.cpp b/phoebook/CConsoleUI.cpp new file mode 100644 index 0000000..e9b90f8 --- /dev/null +++ b/phoebook/CConsoleUI.cpp @@ -0,0 +1,220 @@ +#include "CConsoleUI.h" + +void CConsoleUI::StartUsingUI(CBookItems& CPhoneBook) +{ + LoadPhoneBook(CPhoneBook); + bExit = false; + _aUserCommandList.push_back("help"); + _aUserCommandList.push_back("SHW_PHNBOOK"); + _aUserCommandList.push_back("CNG_ITEM"); + _aUserCommandList.push_back("SRT_ITEMS"); + _aUserCommandList.push_back("FND_ITEM"); + _aUserCommandList.push_back("CRT_ITEM"); + _aUserCommandList.push_back("SAVE_ITEMS"); + _aUserCommandList.push_back("EXIT"); + _aUserCommandList.push_back("LOAD_ITEMS"); + +} + +void CConsoleUI::PrintPhoneBook(CBookItems& CPhoneBook) +{ + if (CPhoneBook.GetSize() >= 1) + { + for (int i = 0; i < CPhoneBook.GetSize(); i++) + { + string sFName = " "; + string sLName = " "; + string sNum = " "; + + CPhoneBook.GetItem(i, sFName, sLName, sNum); + cout << 1 + i << ". " << sFName << " " << sLName << ": " << sNum << endl; + } + } + else + { + cout << "Ваша телефонная книга пуста" << endl; + } + +} + +void CConsoleUI::ChangeSomeItem(CBookItems& CPhoneBook) +{ + int nNumOfElement = 0; + string sFName; + string sLName; + string sNum; + + cout << "Введите номер элемента: "; + cin >> nNumOfElement; + cout << "Введите имя, фамилию и номер абонента:" << endl; + cout << "Имя: "; + cin >> sFName; + cout << "Фамилия: "; + cin >> sLName; + cout << "Номер: "; + cin >> sNum; + CPhoneBook.SetNewValueToItem(sFName, sLName, sNum, nNumOfElement); +} + +void CConsoleUI::SortItems(CBookItems& CPhoneBook) +{ + int nSortingType = 0; + cout << "Введите номер типа сортировки:" << endl; + cout << "1. По Имени" << endl; + cout << "2. По Фамилии" << endl; + cout << "3. По Номеру" << endl; + cin >> nSortingType; + nSortingType--; + int error = CPhoneBook.SortItems(nSortingType); + if (error == 1) + { + cout << "Ошибка: команда введена неверно!" << endl; + } +} + +void CConsoleUI::FindItem(CBookItems& CPhoneBook) +{ + string sValueNeed = ""; + vector nNumOfDesirvedItems; + int nSortingType = 0; + cout << "Введите номер типа поиска:" << endl; + cout << "1. По Имени" << endl; + cout << "2. По Фамилии" << endl; + cout << "3. По Номеру" << endl; + cin >> nSortingType; + cout << "Введите имя/фамилию/телефон абонента: "; + cin >> sValueNeed; + + CPhoneBook.FindItem(sValueNeed, nSortingType, nNumOfDesirvedItems); + + for (int i = 0; i < nNumOfDesirvedItems.size(); i++) + { + string sFName = " "; + string sLName = " "; + string sNum = " "; + + CPhoneBook.GetItem(nNumOfDesirvedItems.at(i), sFName, sLName, sNum); + cout << 1 + i << ". " << sFName << " " << sLName << ": " << sNum << endl; + } +} + +void CConsoleUI::CreateNewItem(CBookItems& CPhoneBook) +{ + string sFName; + string sLName; + string sNum; + + cout << "Введите имя, фамилию и номер абонента:" << endl; + cout << "Имя: "; + cin >> sFName; + cout << "Фамилия: "; + cin >> sLName; + cout << "Номер: "; + cin >> sNum; + + CPhoneBook.CreateNewItem(sFName, sLName, sNum); +} + +void CConsoleUI::Help() +{ + cout << "Перечисленные ниже команды" << endl << "Помогают взаимодействовать пользователю со справочником: " << endl; + cout << "EXIT- закрыть программу" << endl; + cout << "SHW_PHNBOOK- показать справочник" << endl; + cout << "CNG_ITEM- изменить данные абонента" << endl; + cout << "SRT_ITEMS- сортировка абонентов" << endl; + cout << "FND_ITEM- поиск абонентов" << endl; + cout << "CRT_ITEM- создание нового аонента" << endl; + cout << "SAVE_ITEMS- сохранение данных пользователей" << endl; + cout << "LOAD_ITEMS- загрузка данных пользователей" << endl; +} + +void CConsoleUI::MakeSomeAcion(CBookItems& CPhoneBook) +{ + cout << "Введите комманду для взаимодействия с телефонным справочником" << endl << "(Введите 'help' для отображения команд): "; + cin >> _sUserCommand; + system("cls"); + for (int i = 0; i < _aUserCommandList.size(); i++) + { + if (_sUserCommand == _aUserCommandList.at(i)) + { + switch (i) + { + case 0: + Help(); + break; + case 1: + PrintPhoneBook(CPhoneBook); + break; + case 2: + ChangeSomeItem(CPhoneBook); + PrintPhoneBook(CPhoneBook); + break; + case 3: + SortItems(CPhoneBook); + PrintPhoneBook(CPhoneBook); + break; + case 4: + FindItem(CPhoneBook); + break; + case 5: + CreateNewItem(CPhoneBook); + PrintPhoneBook(CPhoneBook); + break; + case 6: + SavePhoneBook(CPhoneBook); + PrintPhoneBook(CPhoneBook); + break; + case 7: + CloseProgramm(); + break; + case 8: + LoadPhoneBook(CPhoneBook); + PrintPhoneBook(CPhoneBook); + break; + default: + cout << "Неверно введена команда" << endl; + break; + } + } + } +} + +void CConsoleUI::SavePhoneBook(CBookItems& CPhoneBook) +{ + if (CPhoneBook.SaveItems("myFile.txt") == 1) + { + cout << "Ошибка открытия файла" << endl; + } + else + { + cout << "Файл успешно открыт" << endl; + } +} + +void CConsoleUI::LoadPhoneBook(CBookItems& CPhoneBook) +{ + if (CPhoneBook.LoadItems("myFile.txt") == 1) + { + cout << "Ошибка доступа к файлу" << endl; + } + else + { + cout << "Данные успешно загружены" << endl; + } +} + +void CConsoleUI::CloseProgramm() +{ + bExit = true; +} + +void CConsoleUI::SetConsoleUI(CBookItems& CPhoneBook) +{ + StartUsingUI(CPhoneBook); + setlocale(LC_ALL, "Rus"); + while (!bExit) + { + MakeSomeAcion(CPhoneBook); + } + system("cls"); +} diff --git a/phoebook/CConsoleUI.h b/phoebook/CConsoleUI.h new file mode 100644 index 0000000..e59a85c --- /dev/null +++ b/phoebook/CConsoleUI.h @@ -0,0 +1,97 @@ +/* +* Класс "CConsoleUI" прелставляет собой реализацию пользовательского интерфейса под консоль +*/ + +#pragma once +#include +#include +#include + +#include "CBookItems.h" + +using namespace std; + + +class CConsoleUI +{ +private: + string _sUserCommand; + + vector _aUserCommandList; + + bool bExit; + + //=============================================================================== + /** + *Осуществляет стартовые настройки консоли + */ + void StartUsingUI(CBookItems& CPhoneBook); + + //=============================================================================== + /** + *Выводит данные абонентов телефонного справочника + */ + void PrintPhoneBook(CBookItems& CPhoneBook); + + //=============================================================================== + /** + *Изменяет данные абонента телефонного справочника + */ + void ChangeSomeItem(CBookItems& CPhoneBook); + + //=============================================================================== + /** + *Сортирует данные абонентов телефонного справочника + */ + void SortItems(CBookItems& CPhoneBook); + + //=============================================================================== + /** + *Осуществляет поиск абонентов телефонного справочника + */ + void FindItem(CBookItems& CPhoneBook); + + //=============================================================================== + /** + *Создаёт нового абонента телефонного справочника + */ + void CreateNewItem(CBookItems& CPhoneBook); + + //=============================================================================== + /** + *Помощь в использовании UI + */ + void Help(); + + //=============================================================================== + /** + *Диологовое окно работы с данными телефонного справочника + */ + void MakeSomeAcion(CBookItems& CPhoneBook); + + //=============================================================================== + /** + *Сохранение данных телефонного справочника + */ + void SavePhoneBook(CBookItems& CPhoneBook); + + //=============================================================================== + /** + *Загрузка данных телефонного справочника + */ + void LoadPhoneBook(CBookItems& CPhoneBook); + + //=============================================================================== + /** + *Закрытие программы + */ + void CloseProgramm(); + +public: + + //=============================================================================== + /** + *Создаёт пользовательский интерфейс + */ + void SetConsoleUI(CBookItems& CPhoneBook); +}; diff --git a/phoebook/Headers.h b/phoebook/Headers.h new file mode 100644 index 0000000..e077db4 --- /dev/null +++ b/phoebook/Headers.h @@ -0,0 +1,8 @@ +#pragma once +#include +#include "CBookItems.h" +#include "CConsoleUI.h" + +#define FST_NAME 0 +#define LST_NAME 1 +#define PHN_NUMBER 2 \ No newline at end of file diff --git a/phoebook/myFile.txt b/phoebook/myFile.txt new file mode 100644 index 0000000..7443720 --- /dev/null +++ b/phoebook/myFile.txt @@ -0,0 +1,3 @@ +Anton Pavkin +79374237500 +Anton Pavkin +79374237500 +Luap Pupa pupazalupu diff --git a/phoebook/phoebook.cpp b/phoebook/phoebook.cpp new file mode 100644 index 0000000..3362027 --- /dev/null +++ b/phoebook/phoebook.cpp @@ -0,0 +1,11 @@ +п»ї#include "Headers.h" + +using namespace std; + +int main() +{ + setlocale(LC_ALL, "Rus"); + CBookItems CPhoneBook; + CConsoleUI CNewUI; + CNewUI.SetConsoleUI(CPhoneBook); +}