added solution for phonebook with file save and load
This commit is contained in:
parent
25f37a556c
commit
36502ffbaf
160
VL03-03-01/main.cc
Normal file
160
VL03-03-01/main.cc
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
typedef struct phonebook_entry {
|
||||||
|
std::string firstname;
|
||||||
|
std::string lastname;
|
||||||
|
std::string phone;
|
||||||
|
} phonebook_entry;
|
||||||
|
|
||||||
|
int showMenuSelection() {
|
||||||
|
std::cout << std::endl << std::endl;
|
||||||
|
std::cout << "-- Phonebook --" << std::endl;
|
||||||
|
std::cout << "\t 1 - New Entry" << std::endl;
|
||||||
|
std::cout << "\t 2 - Search" << std::endl;
|
||||||
|
std::cout << "\t 3 - Clear" << std::endl;
|
||||||
|
std::cout << "\t 4 - List" << std::endl;
|
||||||
|
std::cout << "\t 9 - Exit" << std::endl;
|
||||||
|
std::cout << std::endl << "Selection: ";
|
||||||
|
int selection;
|
||||||
|
std::cin >> selection;
|
||||||
|
return selection;
|
||||||
|
}
|
||||||
|
|
||||||
|
void clear(std::vector<phonebook_entry*> &phonebook) {
|
||||||
|
for (phonebook_entry* entry : phonebook) {
|
||||||
|
delete entry;
|
||||||
|
}
|
||||||
|
phonebook.clear();
|
||||||
|
phonebook.shrink_to_fit();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<phonebook_entry*> getPhonebookFromFile(std::string filename) {
|
||||||
|
std::ifstream file(filename);
|
||||||
|
std::string line;
|
||||||
|
int rownumber = 0;
|
||||||
|
std::vector<phonebook_entry*> phonebook;
|
||||||
|
phonebook_entry* entry;
|
||||||
|
|
||||||
|
if (file.is_open()) {
|
||||||
|
while (file >> line) {
|
||||||
|
switch (rownumber % 3) {
|
||||||
|
case 0:
|
||||||
|
entry = new phonebook_entry;
|
||||||
|
entry->firstname = line;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
entry->lastname = line;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
entry->phone = line;
|
||||||
|
phonebook.push_back(entry);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
rownumber++;
|
||||||
|
}
|
||||||
|
|
||||||
|
file.close();
|
||||||
|
} else {
|
||||||
|
std::cout << "Error opening file!" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
return phonebook;
|
||||||
|
}
|
||||||
|
|
||||||
|
void listPhonebook(std::vector<phonebook_entry*> &phonebook) {
|
||||||
|
for (phonebook_entry* entry : phonebook) {
|
||||||
|
std::cout << "Firstname: " << entry->firstname << std::endl;
|
||||||
|
std::cout << "Lastname: " << entry->lastname << std::endl;
|
||||||
|
std::cout << "Phone: " << entry->phone << std::endl;
|
||||||
|
std::cout << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::vector<phonebook_entry*> phonebook;
|
||||||
|
phonebook = getPhonebookFromFile("phonebook.txt");
|
||||||
|
|
||||||
|
while (int selection = showMenuSelection()) {
|
||||||
|
phonebook_entry* entry = new phonebook_entry;
|
||||||
|
|
||||||
|
switch (selection) {
|
||||||
|
case 1: {
|
||||||
|
std::cout << "-- New Entry (Phonebook) --" << std::endl;
|
||||||
|
std::cout << "Firstname: ";
|
||||||
|
std::cin >> entry->firstname;
|
||||||
|
std::cout << "Lastname: ";
|
||||||
|
std::cin >> entry->lastname;
|
||||||
|
std::cout << "Phone: ";
|
||||||
|
std::cin >> entry->phone;
|
||||||
|
phonebook.push_back(entry);
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case 2: {
|
||||||
|
std::cout << std::endl << std::endl;
|
||||||
|
std::cout << "-- Search (Phonebook) --" << std::endl;
|
||||||
|
std::cout << "Lastname: ";
|
||||||
|
std::string lastname;
|
||||||
|
std::cin >> lastname;
|
||||||
|
|
||||||
|
bool found = false;
|
||||||
|
|
||||||
|
std::cout << std::endl << std::endl;
|
||||||
|
std::cout << "-- Search Result --" << std::endl;
|
||||||
|
|
||||||
|
for (phonebook_entry* entry : phonebook) {
|
||||||
|
if (entry->lastname == lastname) {
|
||||||
|
std::cout << "Lastname: " << entry->firstname << std::endl;
|
||||||
|
std::cout << "Firstname: " << entry->lastname << std::endl;
|
||||||
|
std::cout << "Phone: " << entry->phone << std::endl;
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (found == false) {
|
||||||
|
std::cout << "No entry found!" << std::endl;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case 3: {
|
||||||
|
clear(phonebook);
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case 4: {
|
||||||
|
std::cout << std::endl << std::endl;
|
||||||
|
std::cout << "-- List --" << std::endl;
|
||||||
|
listPhonebook(phonebook);
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case 9: {
|
||||||
|
std::ofstream file("phonebook.txt");
|
||||||
|
|
||||||
|
if (file.is_open()) {
|
||||||
|
if (phonebook.empty() == false) {
|
||||||
|
for (phonebook_entry* entry : phonebook) {
|
||||||
|
file << entry->firstname << std::endl;
|
||||||
|
file << entry->lastname << std::endl;
|
||||||
|
file << entry->phone << std::endl;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
file.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
clear(phonebook);
|
||||||
|
return 0;
|
||||||
|
} break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
std::cout << std::endl << std::endl;
|
||||||
|
std::cout << "Unknown selection. Please try again!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
6
VL03-03-01/phonebook.txt
Normal file
6
VL03-03-01/phonebook.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
Mary
|
||||||
|
Johnson
|
||||||
|
714-895-2324
|
||||||
|
Christopher
|
||||||
|
Smith
|
||||||
|
205-448-1563
|
Loading…
Reference in New Issue
Block a user