Задание:
Автоматизировать телефонную книгу абонентов.
Данный проект имеет разделение пользователей: на администратора и пользователя.
Администратор может:
- Загрузка данных из файла.
- Вывод записей.
- Удаление одной или всех записей.
- Поиск записи.
- Редактирование записи.
- Запись в файл.
- Изменение пароля.
Пользователь может:
- Просмотр записей.
- Поиск записи.
Содержимое проекта:
Для данной задачи лучше всего подходят текстовые файлы. Во время своей работы, программа оперирует структурами которые ввиду своей простоты без проблем записываются и считываются из текстового файла.
Для объединения данных внутри программы используется контейнер 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
Zicise