Initial state

This commit is contained in:
Kolan Sh 2021-03-25 22:59:37 +03:00
commit 2c9cb71004
8 changed files with 700 additions and 0 deletions

6
Debug/myFile.txt Normal file
View File

@ -0,0 +1,6 @@
Pavel Antonov +78005553535
Anton Pavkin +79374237500
Pavel Antonov +78005553535
Anton Pavkin +79374237500
Ivan Lalala 331547
Sash Huiasha 2021

274
phoebook/CBookItems.cpp Normal file
View File

@ -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<int>& 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;
}
}

81
phoebook/CBookItems.h Normal file
View File

@ -0,0 +1,81 @@
/**
* Класс "CBookItems" представляет собой сущность телефонного справочника
* Он хранит в себе все номера, имена и фамилии абонентов, занесённых в справочник
* Может менять и возвращать данные отдельного абонента, занесённого в справочник
* Может сортировать абонентов по фамилии или по имени
* Может производить поиск абонентов по фамилии, имени и номеру
* Может сохранять данные абонентов телефонного справочника в файл
* Может загружать данные абонентов телефонного справочника из файла
*/
#pragma once
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
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<int>& nNumOfDesirvedItems);
//===============================================================================
/**
*Сохраняет данные абонентов телефонной книги
*/
int SaveItems(string sNameOfFile);
//===============================================================================
/**
*Загружает данные абонентов телефонной книги
*/
int LoadItems(string sNameOfFile);
};

220
phoebook/CConsoleUI.cpp Normal file
View File

@ -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<int> 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");
}

97
phoebook/CConsoleUI.h Normal file
View File

@ -0,0 +1,97 @@
/*
* Класс "CConsoleUI" прелставляет собой реализацию пользовательского интерфейса под консоль
*/
#pragma once
#include <iostream>
#include <string>
#include <vector>
#include "CBookItems.h"
using namespace std;
class CConsoleUI
{
private:
string _sUserCommand;
vector<string> _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);
};

8
phoebook/Headers.h Normal file
View File

@ -0,0 +1,8 @@
#pragma once
#include<iostream>
#include "CBookItems.h"
#include "CConsoleUI.h"
#define FST_NAME 0
#define LST_NAME 1
#define PHN_NUMBER 2

3
phoebook/myFile.txt Normal file
View File

@ -0,0 +1,3 @@
Anton Pavkin +79374237500
Anton Pavkin +79374237500
Luap Pupa pupazalupu

11
phoebook/phoebook.cpp Normal file
View File

@ -0,0 +1,11 @@
#include "Headers.h"
using namespace std;
int main()
{
setlocale(LC_ALL, "Rus");
CBookItems CPhoneBook;
CConsoleUI CNewUI;
CNewUI.SetConsoleUI(CPhoneBook);
}