Задание:
Автоматизировать телефонную книгу абонентов.
Данный проект имеет разделение пользователей: на администратора и пользователя.
Администратор может:
- Загрузка данных из файла.
- Вывод записей.
- Удаление одной или всех записей.
- Поиск записи.
- Редактирование записи.
- Запись в файл.
- Изменение пароля.
Пользователь может:
- Просмотр записей.
- Поиск записи.
Содержимое проекта:

Для данной задачи лучше всего подходят текстовые файлы. Во время своей работы, программа оперирует структурами которые ввиду своей простоты без проблем записываются и считываются из текстового файла.
Для объединения данных внутри программы используется контейнер std::list из стандартной библиотеки
Пример кода:
// Ф-ция редактирования существующей записи
void editAbonentV(list<AbonentStruct> &abonentList)
{
system("Cls");
std::string TEXT;
cin.ignore();
int iInvNomer = 0, iEditChoose = 0, iPosition = 0, iBuffer = 0;
bool bInvNomer = false;
//Проверка на пустоту
if (abonentList.empty())
{
cout << "Элементов не обнаружено!!!" << endl;
return;
}
//Ввод инвентарного номера
//Цикл который выполниться минимум 1 раз
do
{
cout << "Введите инв.номер: ";
getline(cin, TEXT);
try
{
//Конверт данных в число
iBuffer = std::stoi(TEXT);
}
catch(...)
{
cout << "Неправильный формат инвентарного номера!!! Попробуйте еще!!!" << endl;
//tmp->position = 0;
iBuffer = -2;
}
if (iBuffer != -2 && iBuffer < 0)
{
cout << "Неправильный формат инвентарного номера!!! Попробуйте еще!!!" << endl;
}
}
while(iBuffer < 0);
iInvNomer = iBuffer;
iBuffer = 0;
//Организовываем цикл по листу структур
for ( list<AbonentStruct>::iterator iter = abonentList.begin(); iter != abonentList.end(); iter++)
{
//Если в структуре имеется нужные нам значения, то сразу печатаем
if ((*iter).iPosition == iInvNomer)
{
cout << "Инв. номер: ";
cout << (*iter).iPosition << endl;
cout << "Фамилия абонента: ";
cout << (*iter).sSecondName<< endl;
cout << "Имя абонента: ";
cout << (*iter).sFirstName << endl;
cout << "Отчество абонента: ";;
cout << (*iter).sThirdName << endl;
cout << "Год установки телефона: ";
cout << (*iter).iYearOfInstall << endl;
cout << "Страна абонента: ";
cout << (*iter).sCountry << endl;
cout << "Адрес абонента: ";
cout << (*iter).sAddress << endl;
cout << "\n";
bInvNomer = true;
break;
}
else
{
bInvNomer = false;
}
}
//Если не нашло записи
if (bInvNomer == false)
{
cout << "Записи с таким инвентарным номером не обнаружено!!!" << endl;
system("pause");
return;
}
//Зацикленное меню редактирования выбранной записи
do
{
cout << "Выберите поле для редактирования: " << endl;
cout << "1. Фамилия абонента" << endl;
cout << "2. Имя абонента" << endl;
cout << "3. Отчество абонента" << endl;
cout << "4. Год установки телефона" << endl;
cout << "5. Страна абонента" << endl;
cout << "6. Адрес абонента" << endl;
cout << "0. Выйти из фунции редактирования записи" << endl;
cin >> iEditChoose;
//Создаем временную переменную
AbonentStruct *abonStr = new AbonentStruct;
cin.ignore();
switch(iEditChoose)
{
//Редактирование имени
case 1:
cout << "Введите новое значение Фамилии: ";
getline(cin, TEXT);
//Организовываем цикл по листу структур
for ( list<AbonentStruct>::iterator iter = abonentList.begin(); iter != abonentList.end(); iter++)
{
//Если в структуре есть запись с таким инвентарным номер, то заменяем фио сотрудник новым значением
if ((*iter).iPosition == iInvNomer)
{
(*iter).sSecondName = TEXT;
break;
}
}
cout << "Данные Фамилии изменены!!!" << endl << endl;
break;
//Редактирование года поездки
case 2:
cout << "Введите новое значение Имени: ";
getline(cin, TEXT);
//Организовываем цикл по листу структур
for ( list<AbonentStruct>::iterator iter = abonentList.begin(); iter != abonentList.end(); iter++)
{
//Если в структуре есть запись с таким инвентарным номер, то заменяем фио сотрудник новым значением
if ((*iter).iPosition == iInvNomer)
{
(*iter).sFirstName = TEXT;
break;
}
}
cout << "Данные Имени изменены!!!" << endl << endl;
break;
//Редактирование месяца
case 3:
cout << "Введите новое значение Отчества: ";
getline(cin, TEXT);
//Организовываем цикл по листу структур
for ( list<AbonentStruct>::iterator iter = abonentList.begin(); iter != abonentList.end(); iter++)
{
//Если в структуре есть запись с таким инвентарным номер, то заменяем фио сотрудник новым значением
if ((*iter).iPosition == iInvNomer)
{
(*iter).sThirdName = TEXT;
break;
}
}
cout << "Данные Отчества изменены!!!" << endl << endl;
break;
//Редактирование количества дней поездки
case 4:
//Ввод года установки телефона
//Цикл который выполниться минимум 1 раз
do
{
cout << "Введите новое значение Года установки телефона: ";
getline(cin, TEXT);
try
{
//Конверт данных в число
iBuffer = std::stoi(TEXT);
}
catch(...)
{
cout << "Неправильный формат года!!! Попробуйте еще!!!" << endl;
//tmp->position = 0;
iBuffer = -2;
}
if (iBuffer != -2 && iBuffer < 0)
{
cout << "Неправильный формат года!!! Попробуйте еще!!!" << endl;
}
}
while(iBuffer < 0);
//Организовываем цикл по листу структур
for ( list<AbonentStruct>::iterator iter = abonentList.begin(); iter != abonentList.end(); iter++)
{
//Если в структуре есть запись с таким инвентарным номер, то заменяем фио сотрудник новым значением
if ((*iter).iPosition == iInvNomer)
{
(*iter).iYearOfInstall = iBuffer;
break;
}
}
iBuffer = 0;
cout << "Данные Года установки телефона изменены!!!" << endl << endl;
break;
//Редактирование города
case 5:
cout << "Введите новое значение Страны абонента: ";
getline(cin, TEXT);
//Организовываем цикл по листу структур
for ( list<AbonentStruct>::iterator iter = abonentList.begin(); iter != abonentList.end(); iter++)
{
//Если в структуре есть запись с таким инвентарным номер, то заменяем фио сотрудник новым значением
if ((*iter).iPosition == iInvNomer)
{
(*iter).sCountry = TEXT;
break;
}
}
cout << "Данные Страны изменены!!!" << endl << endl;
break;
//Редактирование суммы выделенной на поездку
case 6:
cout << "Введите новое значение Адреса абонента: ";
getline(cin, TEXT);
//Организовываем цикл по листу структур
for ( list<AbonentStruct>::iterator iter = abonentList.begin(); iter != abonentList.end(); iter++)
{
//Если в структуре есть запись с таким инвентарным номер, то заменяем фио сотрудник новым значением
if ((*iter).iPosition == iInvNomer)
{
(*iter).sAddress = TEXT;
break;
}
}
cout << "Данные Адреса изменены!!!" << endl << endl;
break;
//Выход из блока switch
case 0:
break;
default:
cerr << "Ошибка! Попробуйте снова!" << endl;
}
//Цикл замены значения
}
while(iEditChoose != 0);
}
Содержание архива
- Исходный код на C++ для Visual Studio
Телеграм
-