hi
I have a project due this Monday to make an address book. need some help with that.I have some code with me but it is not working. please help me if you can. i have attached a copy of the same and given description below.
program description:
develop a program for an address book.single entry in an address book is called a contact, which can have any of the following fields,
1. first name 2. last name 3. nickname 4. email1 5. email2 7. phone1 8. phone2 9. address 10.website 11.birthday 12.notes
a contact must have at least one of the first four fields to be valid.in the address book the user should be able to
1.add a contact
2.display all contacts sorted by a chosen field
3.display details of a single contact
4.remove a contact
5.find all contacts matching a keyword in a given field
6.modify a contact
7.export the address book to csv format file
8.exit the program
when the program is executed it takes a single command line argument:the name of the input file from which it reads an address book. all the modifications should be saved to the same original file on exit.

-----------------------main menu---------------------
[a] add
[b] display sorted by
[c] display details of contact
[d] remove contact
[e] modify contact
[f] export to csv format
[g] exit

the code I have is not working. please help.here is the code

#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <sstream>

using namespace std;

struct Person
{
string name;
string addr;
string phone;
string email;
};

const int MAX_SIZE = 8; // max number of contacts

// functin prototypes
void addData(Person list[], int& size);
void dispData(const Person list[], int size); 
void delData (const Person list[], int size);
void saveFile(const Person list[], int size);
void openFile(Person list[], int& size);
char getMenuResponse(); 
int main(int argc, char *argv[])
{
Person contactList[MAX_SIZE];
int numOfRecs = 0;
bool run = true;
do
{
cout << "Address Book - " << numOfRecs << " Number of Contacts" << endl;
switch ( getMenuResponse() ) 
{
case 'A': addData(contactList, numOfRecs); break;
case 'D': dispData(contactList, numOfRecs); break;
case 'T': delData(contactList, numOfRecs); break;
case 'O': openFile(contactList, numOfRecs); break;
case 'S': saveFile(contactList, numOfRecs); break;
case 'Q': run = false; break;
default : cout << "That is NOT a valid choice" << endl;
}
} while (run);
cout << endl << "Program Terminated" << endl;

// system("PAUSE"); // Commented out so the program exits upon request
return EXIT_SUCCESS;
}

void addData(Person list[], int& size)
{
Person tmp; // declare a temp contact that we will load before putting in the array
char response;
char str[256]; // needed for cin.getline; we are going to use a char array
if (size < MAX_SIZE) {
system("cls");
cout << "Enter Contact Information" << endl << endl;
cout << "Name: ";
// Get up to 256 characters from the keyboard including white space.
// Stop reading if encounter the \n first. If there's any chance of 
// more than 256 characters you will have to clean up cin with
// cin.ignore before the next input.
cin.getline(str, 256, '\n'); // for char arrays; different from the other getline
tmp.name = str;
cout << endl;
cout << "Address: ";
cin.getline(str, 256, '\n');
tmp.addr = str;
cout << endl;
cout << "Phone Number: ";
cin.getline(str, 256, '\n');
tmp.phone = str;
cout << endl;
cout << "E-mail Address: ";
cin.getline(str, 256, '\n');
tmp.email = str;
cout << endl;
// see if this record should be added to the array
cout << "Add Contact to Address Book? (y/n) ";
cin >> response;
if (toupper(response) == 'Y') 
list[size++] = tmp;
} else {
cout << "Sorry, Address Book is currently full." << endl;
system("pause");
}
system("cls");
}

void dispData(const Person list[], int size)
{
system("cls");

if(size < 1) {
cout << "Nothing to display" << endl;
} else {
cout << "Contacts :" << endl << endl;
cout << fixed << setprecision(2); 
cout << "Contact Name Address Phone No. Email" << endl;
cout << "*******************************************" << endl;

cout << left; 
for (int i = 0; i < size; i++) {
cout << setw(10) << list[i].name << right
<< setw(10) << list[i].addr<<right
<< setw(10) << list[i].phone<<left
<< setw(15) << list[i].email<<left<<endl;
}

cout << "********************************************" << endl;
cout << right << setw(3) << size;
cout << " Contacts"<< endl;
}

system("PAUSE");
system("cls");
}

void delData(const Person list[],int size) {
vector<Person> :: iterator vItr = Contact.begin();
while (vItr != Contact.end() )
{
if (vItr->Name == Name)
{
vItr = Contact.erase (vItr);
break;
}
else
vItr++;
}

// Save records to disc
void saveFile(const Person list[], int size) {
string fileName;
ofstream outfi;
cout<<"Enter file name: ";
getline(cin,fileName);
outfi.open(fileName.c_str());

// to make sure the file stream is open before doing IO
if (!outfi.fail()) { 
system("cls"); 
cout << "Saving Address Book to the disc ";

for(int i = 0; i < size; i++) {
outfi << list[i].name << ';' 
<< list[i].addr<< ';';
// Start a new line after all but the last record
// Simplifies reading the file as EOF is at end of last line
if (i < size-1) outfi << endl;
}
cout << endl << size << " Address Book written to the disc." << endl;
outfi.close();
system("PAUSE");
system("cls");
} 
else {
cout << "ERROR: problem with file" << endl;
system("PAUSE");
system("cls");
}
}

// Open file and load array
void openFile(Person list[], int& size)
{
ifstream infi("AddressBook.txt");
string str;
stringstream strstrm;

// make sure the file stream is open before doing IO
if (!infi.fail()) { 

system("cls");
cout << "Reading Address Book from the disc ";

size = 0; // overwrite any existing records
while(!infi.eof() && size < MAX_SIZE) {
// get and store the name
getline(infi, str, ';'); 
list[size].name = str;

// get, convert and store the quantity
getline(infi, str, ';');
strstrm.str(""); strstrm.clear(); // empty and clear the stringstream
strstrm << str; 
strstrm >> list[size].addr;

}
cout << endl << size << " Contacts read from the disc." << endl;


system("PAUSE");
system("cls");
}
else { // something went wrong with opening the file
cout << "ERROR: problem with file" << endl;
system("PAUSE");
system("cls");
}

}

char getMenuResponse()
// Task: Put the menu on screen and get a response
// Accepts: Nothing
// Returns: The users response
// Modifies: Nothing
// NOTE: Characters are far more intuitive at the command
// line than numbers; avoid using numbers.
{
char response;
cout << endl << "Make your selection" << endl
<< "(A)dd contact, (D)isplay contact0, (O)pen File, (S)ave File, (Q)uit" << endl
<< "> ";
cin >> response;
cin.ignore(256, '\n'); 
// clean-up up to 256 chars including the delimiter specified (\n, the endl) 
// OR stop when the \n is encountered after removing it.
return toupper(response);
// note the use of toupper, why?
}

Edited 3 Years Ago by Dani: Formatting fixed

the code I have is not working. please help.here is the code

Can you possibly be less vague?
1) What's "not working" about it?
2) Where's the formatting so we can actually read and follow the code?

When asking a question, don't be vague. Be detailed. With examples and explanations. And use formatting...

please dont bother with the program. its just something I got on the net. I thought it might help you understand... the whole project is listed in the attachment in the original post. I am reattaching it for your perusal.

i would sugesst you to start from the scratch.do not copy code from the internet.
project is a perfect way to build th foundation.

You could use classes to handle contact data.
Also you could use linked lists, vectors or such to store those.
Finally you still didn't explained what you really want, what's the problem and how should we help?

This article has been dead for over six months. Start a new discussion instead.