Address Book Application... (here's what I have done so far..)

Please support our C++ advertiser: Intel Parallel Studio Home
Reply

Join Date: Mar 2004
Posts: 5
Reputation: forgotten is an unknown quantity at this point 
Solved Threads: 0
forgotten forgotten is offline Offline
Newbie Poster

Address Book Application... (here's what I have done so far..)

 
0
  #1
Mar 29th, 2004
This what I have done so far... (to cscgal and inscissor) As you can probably tell I have't done C++ for long; only a few weeks now so please point out any mistakes that I have made. Here is some evidence to prove that I have tried, even though it isn't perfect, I am pleased with it because it is one of my first proper programs... Due to the fact that I have demonstrated that I have done some of the code (And by the way, I didn't pay anyone to write it for me from rentacoder.com even though if I need to have something coded that is beyond my cababilities, I will use that website so thanks for the link inscissor!)

I have had a few problems with this application ... For instance, I know that I have to include the 'string.h' library file but whenever I try and compile the code, I get an error saying that the file/directory can not be found. Any help with this?

I also need to add three other classes - an application class which can be used as the entry-point into the application: CApplication, Two derived classes to split the information about the 'individual' into details about themselves like their name and event dates for example; and another class to gather information about their business, if they have one like, for example, their company name.

The code that I have put 'debug' by obviously means that it needs debugging when something happens during the program that shouldn't. I am mentioning this because that code is ok, even though it needs correcting - its to show that flaws of this application i.e what it can and can't do.

As you might have realised... this code won't actually work - don't worry! its not supposed to! I just have to demonstrate that I can use classes and be able to handle data. Unfortuanately, because of this, I don't know if the seperate parts of it work so if someone can tell me if they think it looks ok, I will be grateful!

#include "string.h"
#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include "utility.h"
////////////////////////////////////////////////////////////////////////////

Abook::Abook()
:MaxRecSize(200)
{
table.num=1;
table.name=15; // (refer to number 1)
table.address=23;
table.phone=14;
table.email=19;
}
//////////////////////////////////////////////////////////////////////////////
bool Abook::SetAbook(String filenameArg, bool create)

{
filename=filenameArg+".pbk";
cout<<"filename: "<<filename<<endl;//debug
if(file.is_open())
file.close();

if(create==true)
file.open(filename.c_str(), ios::in|ios::out);
else
{
file.open(filename.c_str(), ios::in|ios::out|ios::nocreate);
if(file.fail())
return(false);
}

numEntries=NumRecords(); //(Number 4)

cout<<"numentrinit"<<numEntries<<endl;//debug

return(true);
}
//////////////////////////////////////////////////////////////////////////////
Entry Abook::InputEntry()
{
cout<<"Enter name: ";
cin.ignore(1, '\n');
getline(cin, entry.name);
cout<<"Enter adress: ";
getline(cin, entry.adress);
cout<<"Enter phone number: ";
getline(cin, entry.phone);
cout<<"Enter email adress: ";
getline(cin, entry.email);
return(entry);
}
//////////////////////////////////////////////////////////////////////////////
void Abook::SaveEntry(Entry p, int recNum)
{
cout<<"numentrb4save"<<numEntries<<endl;//debug
if(recNum==-1) //-1 is the default param
recNum=(numEntries);
cout<<"Byte saved at: "<<(recNum*MaxRecSize)<<endl;

file.seekp(recNum*MaxRecSize);
cout<<"Tell p b4: "<<file.tellp()<<endl;//debug
file<<p.name<<endl;
file<<p.adress<<endl;
file<<p.phone<<endl;
file<<p.email<<endl;
cout<<"Tell p after: "<<file.tellp()<<endl;//debug
numEntries+=1;
cout<<"numentr after save"<<numEntries<<endl;
}
//////////////////////////////////////////////////////////////////////////////
void Abook::AddEntry()
{
SaveEntry(InputEntry());
}
//////////////////////////////////////////////////////////////////////////////
int Abook::FindEntry(String name)
{
String tempName; // int j;
for(int i=0; i<numEntries; i++)
{
if(GetEntry(i).name==name)
return(i);
else
{
if((i%(numEntries/1))==0)
cout<<".";

}
}
cout<<"Name not found, try again.\n";
return(-1);
}
//////////////////////////////////////////////////////////////////////////////
Entry Abook::GetEntry(int recNum)
{

file.seekg(recNum*MaxRecSize);

getline(file, entry.name);
getline(file, entry.adress);
getline(file, entry.phone);
getline(file, entry.email);

return(entry);
}
//////////////////////////////////////////////////////////////////////////////
void Abook::EditEntry(int recNum, Entry e)
{
cout<<"NumEntr b4 edit: "<<numEntries<<endl;
SaveEntry(e, recNum);//recNum*MaxRecSize
numEntries--;
cout<<"NumEntr after edit: "<<numEntries<<endl;
}
//////////////////////////////////////////////////////////////////////////////
int Abook::GetLastEntryNum()
{
return(numEntries);
}
//////////////////////////////////////////////////////////////////////////////
void Abook::DisplayEntry(int recNum)
{
Entry entry=GetEntry(recNum);

//MakeHeader("Entry # ", 2); // (Number 5)
/*cout<<"Entry # "<<recNum<<endl;
cout<<"==========\n";
cout<<endl<<endl;
SglUnderline("Name");
cout<<endl<<entry.name<<endl<<endl;
SglUnderline("Address", 1);
cout<<endl<<'\t'<<entry.adress<<endl<<endl;
SglUnderline("Phone number", 2);
cout<<endl<<"\t\t"<<entry.phone<<endl<<endl;
SglUnderline("Email", 3);
cout<<endl<<"\t\t\t"<<entry.email<<endl<<endl;*/
cout.setf(ios::left);

int nameWid=30;
int phoneWid=30;

cout<<"\t\tEntry # "<<recNum<<endl;
cout<<"\t ===========\n\n";

cout.width(nameWid);
cout<<"Name";
cout<<"Address\n";
cout.width(nameWid);
cout<<"====";
cout<<"=======\n";
cout.width(nameWid);
cout<<entry.name;
cout<<entry.adress<<endl;

cout<<endl<<endl;

cout.width(phoneWid);
cout<<"Phone";
cout<<"Email\n";
cout.width(phoneWid);
cout<<"=====";
cout<<"=====\n";
cout.width(phoneWid);
cout<<entry.phone;
cout<<entry.email<<endl;

}
//////////////////////////////////////////////////////////////////////////////
void Abook::DisplayAll()
{
Entry entry;

char major=char(205), minor=char(196), vert=char(179), connector=char(197); //table's characters
char farLeft=char(195), farRight=char(180), topLeft=char(218), topRight=char(191);
char botLeft=char(192), botRight=char(217), top=char(194), bot=char(193);
char majorLeft=char(198), majorRight=char(181);
//advanced chars
char majorConnector=char(216);
//char major='=', minor='-', vert='|', connector='+'; //table's characters
int numWid=1, nameWid=15, addressWid=23, phoneWid=14, emailWid=19; //table widths
int j=0;

cout.setf(ios::left);
//Overliner to header
cout<<topLeft;
for(j=0; j<table.num; j++)
cout<<minor;
cout<<top;
for(j=0; j<table.name; j++)
cout<<minor;
cout<<top;
for(j=0; j<table.address; j++)
cout<<minor;
cout<<top;
for(j=0; j<table.phone; j++)
cout<<minor;
cout<<top;
for(j=0; j<table.email; j++)
cout<<minor;
cout<<topRight;
cout<<endl;

//header to table
cout<<vert;
cout.width(table.num); cout<<"#";
cout<<vert;
cout.width(table.name); cout<<"Name";
cout<<vert;
cout.width(table.address); cout<<"Adress";
cout<<vert;
cout.width(table.phone); cout<<"Phone";
cout<<vert;
cout.width(table.email); cout<<"E-mail";
cout<<vert<<endl;

//underliner to header
cout<<majorLeft;
for(j=0; j<table.num; j++)
cout<<major;
cout<<majorConnector;
for(j=0; j<table.name; j++)
cout<<major;
cout<<majorConnector;
for(j=0; j<table.address; j++)
cout<<major;
cout<<majorConnector;
for(j=0; j<table.phone; j++)
cout<<major;
cout<<majorConnector;
for(j=0; j<table.email; j++)
cout<<major;
cout<<majorRight;
cout<<endl;


//Display entries
for(int i=0; i<numEntries; i++)
{
entry=GetEntry(i);
entry=TruncateEntry(entry); //Makes the entry fit into the table widths
cout<<vert;
cout.width(table.num); cout<<i;
cout<<vert;
cout.width(table.name); cout<<entry.name;
cout<<vert;
cout.width(table.address); cout<<entry.adress;
cout<<vert;
cout.width(table.phone); cout<<entry.phone;
cout<<vert;
cout.width(table.email); cout<<entry.email;
cout<<vert<<endl;

//underliner
if(i==numEntries-1)
{
connector=bot;
farLeft=botLeft;
farRight=botRight;
}
cout<<farLeft;
for(j=0; j<table.num; j++)
cout<<minor;
cout<<connector;
for(j=0; j<table.name; j++)
cout<<minor;
cout<<connector;
for(j=0; j<table.address; j++)
cout<<minor;
cout<<connector;
for(j=0; j<table.phone; j++)
cout<<minor;
cout<<connector;
for(j=0; j<table.email; j++)
cout<<minor;
cout<<farRight;
cout<<endl;
}
cout.unsetf(ios::left);

}
//////////////////////////////////////////////////////////////////////////////
void Abook::DeleteEntry(int recNum)
{
int l=0;
int curSpot=0; //current save spot
String tempName=filename+".tmp";

ofstream newf(tempName.c_str());
for(l=0; l<numEntries; l++)
{
if(l!=recNum)
{
newf.seekp(curSpot*MaxRecSize);
newf<<GetEntry(l).name<<endl;
newf<<GetEntry(l).adress<<endl;
newf<<GetEntry(l).phone<<endl;
newf<<GetEntry(l).email<<endl;
curSpot++;
}
}
newf.close();
file.close();
remove(filename.c_str());
rename(tempName.c_str(), filename.c_str());
SetAbook(filename.substr(0, filename.length()-4), false);
}
//////////////////////////////////////////////////////////////////////////////
long Abook::NumRecords()
{
file.seekg(0, ios::end);
cout<<"tellg: "<<file.tellg()<<endl;//debug
if(file.tellg()==0)
return(0);
else
{//th4 debug
cout<<"Result tellg: "<<(1+file.tellg()/MaxRecSize)<<endl;//debug
return(1+file.tellg()/MaxRecSize);
}//th4 debug
}
//////////////////////////////////////////////////////////////////////////////
Entry Abook::TruncateEntry(Entry e)
{
if(e.name.length()>table.name) //if entries name is greater than the name-column
//width for the table
e.name=e.name.substr(0, (table.name-2))+".."; //cut down to 2 minus available
//width, add a ".." to end

if(e.adress.length()>table.address) //same for rest
e.adress=e.adress.substr(0, (table.address-2))+"..";
if(e.phone.length()>table.phone)
e.phone=e.phone.substr(0, (table.phone-2))+"..";
if(e.email.length()>table.email)
e.email=e.email.substr(0, (table.email-2))+"..";
return(e);//debug
}
Last edited by forgotten; Mar 29th, 2004 at 9:09 pm. Reason: Smilies kept appearing the code so I will disable them.
Reply With Quote Quick reply to this message  
Join Date: Mar 2004
Posts: 219
Reputation: BountyX is an unknown quantity at this point 
Solved Threads: 7
BountyX's Avatar
BountyX BountyX is offline Offline
Code Guru

Re: Address Book Application... (here's what I have done so far..)

 
0
  #2
Mar 29th, 2004
had a few problems with this application ... For instance, I know that I have to include the 'string.h' library file but whenever I try and compile the code, I get an error saying that the file/directory can not be found. Any help with this?
#include <string> or #include <string.h> forget which one is newer. The quotes mean that string.h is in the directory as the progrram the <>'s mean that its a standard library file. String is a standard so <> would be used.

most of the flaged errors in your code point to undeclared variables.

tell me how the string things goes and psot back
A Hacker's Mind:
"I thought what I'd do was, I'd pretend I was one of those deaf-mutes..." - J.D.Salinger
Reply With Quote Quick reply to this message  
Join Date: Feb 2002
Posts: 12,043
Reputation: cscgal is a glorious beacon of light cscgal is a glorious beacon of light cscgal is a glorious beacon of light cscgal is a glorious beacon of light cscgal is a glorious beacon of light cscgal is a glorious beacon of light 
Solved Threads: 128
Administrator
Staff Writer
cscgal's Avatar
cscgal cscgal is offline Offline
The Queen of DaniWeb

Re: Address Book Application... (here's what I have done so far..)

 
0
  #3
Mar 30th, 2004
I'm pretty sure that string.h is depreciated.
Dani the Computer Science Gal
Follow my Twitter feed! twitter.com/DaniWeb
And if you're interested in Internet marketing there is twitter.com/DaniWebAds
Reply With Quote Quick reply to this message  
Join Date: Mar 2004
Posts: 5
Reputation: forgotten is an unknown quantity at this point 
Solved Threads: 0
forgotten forgotten is offline Offline
Newbie Poster

Re: Address Book Application... (here's what I have done so far..)

 
0
  #4
Mar 30th, 2004
Ok, I have tried putting the <> symbols around the string.h (<string.h> whith the #include before of course) and that shows up fine now but now utility.h shows up as the only error. I tried <utility.h>, <utility> and "utility" and none of them work. Infact the ones where I put <> around made the program show up 19 more errors! Any help with that?
To cscgal - I know what the word, depreciated means but I am not sure what you mean by saying that string.h is depreciated. Any help with that?

Thanks for your help to both of your help in advance. I am handing it in today so I am thanking you incase you don't respond back to replay, for the previous help that you gave me... Regards... Ben.
Reply With Quote Quick reply to this message  
Join Date: Mar 2004
Posts: 219
Reputation: BountyX is an unknown quantity at this point 
Solved Threads: 7
BountyX's Avatar
BountyX BountyX is offline Offline
Code Guru

Re: Address Book Application... (here's what I have done so far..)

 
0
  #5
Mar 31st, 2004
"depricated" means it is an older version (when used like that), i think

as for utility.h I think it is a personal library so you need to locate the file and make sure its in the same directory as your main cpp file.
A Hacker's Mind:
"I thought what I'd do was, I'd pretend I was one of those deaf-mutes..." - J.D.Salinger
Reply With Quote Quick reply to this message  
Join Date: Mar 2004
Posts: 8
Reputation: Aaerox is an unknown quantity at this point 
Solved Threads: 1
Aaerox Aaerox is offline Offline
Newbie Poster

Re: Address Book Application... (here's what I have done so far..)

 
0
  #6
Mar 31st, 2004
deprecated means obsolete.
Reply With Quote Quick reply to this message  
Join Date: Mar 2004
Posts: 5
Reputation: Creator is an unknown quantity at this point 
Solved Threads: 0
Creator Creator is offline Offline
Newbie Poster

Re: Address Book Application... (here's what I have done so far..)

 
0
  #7
Apr 6th, 2004
<string.h> is the original C string header file. But as you are programming this in C++ you want to use <string>.

As for utility, that's a custom header file (that I'm assuming you wrote?) and therefore you should know where it is. Find it, put it in the same directory as your source code file, and at the top of the source code file be sure to have #include "utility.h" not #include <utility.h>. Also, it is traditional to name your C++ header's .hpp not .h.

The errors you are receiving are probably from the fact that you are not including the correct header. If the utility header is supposed to contain the declaration of the class Abook, you won't get very far without picking the correct header file.
Reply With Quote Quick reply to this message  
Join Date: Mar 2004
Posts: 219
Reputation: BountyX is an unknown quantity at this point 
Solved Threads: 7
BountyX's Avatar
BountyX BountyX is offline Offline
Code Guru

Re: Address Book Application... (here's what I have done so far..)

 
0
  #8
Apr 6th, 2004
yeah im a old C techie so sometimes I lean toward C and not C++ and forget where the line is drawn.
A Hacker's Mind:
"I thought what I'd do was, I'd pretend I was one of those deaf-mutes..." - J.D.Salinger
Reply With Quote Quick reply to this message  
Reply

This thread is more than three months old.
Perhaps start a new thread instead?
Message:


Thread Tools Search this Thread



About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC