读书人

设计一个地址簿,该怎么处理

发布时间: 2012-05-22 18:18:54 作者: rapoo

设计一个地址簿
功能自定义(如输入、输出、查找、排序等功能),
至少需要有输入、输出(需重载提取运算符 >>和插入运算符<<)和查找功能。
程序要求记录联系人的姓名,地址,电话号码,生日等信息。
数据成员至少有一个是指针类型,如姓名或地址是char *类型。
必须在类中定义和实现构造函数、析构函数和拷贝构造函数;并在主程序中调用上这些函数。


[code=C/C++][/code]
#include <iostream>
using namespace std;
class addressbook
{
public:
char *name;
char *address;
int telenum;
double birthday;

addressbook()
{
name=NULL;
address=NULL;
telenum=0;
birthday=0.0;
}
~addressbook()
{
cout<<name<<address<<telenum<<birthday<<endl;
}
addressbook(addressbook &a)
{
name=a.name;
address=a.address;
telenum=a.telenum;
birthday=a.birthday;
}
friend ostream &operator<<(ostream &output,addressbook &ad);
friend istream &operator>>(istream &input,addressbook &ad);
};
ostream &operator<<(ostream &output,addressbook &ad)
{
output<<ad.name<<ad.address<<ad.telenum<<ad.birthday<<endl;
return output;
}
istream &operator>>(istream &input,addressbook &ad)
{
input>>ad.name>>ad.address>>ad.telenum>>ad.birthday;
return input;
}
void main()
{ int n,i=0,j=0;
bool flag=1;
while(flag)
{
cout<<"-------------------------------------"<<endl;
cout<<"1、输入新成员 2、查找并输出 3、退出"<<endl;
cout<<"-------------------------------------"<<endl;
int m;
cin>>m;
switch(m)
{
case 1:
cout<<"请输入要增加的成员数:";
cin>>n;
addressbook *p;
p=new addressbook[n];
cout<<"请分别输入每个成员的信息:";
for(i;i<n;i++)
cin>>p[i].name>>p[i].address>>p[i].telenum>>p[i].birthday;
break;
case 2:
char *name1;
cout<<"请输入名字:";
cin>>name1;
for(j;j<n;j++)
{
if(p[j].name==name1)
cout<<"用户的资料信息:"<<p[j].name<<" "<<p[j].address<<" "<<p[j].telenum<<" "<<p[j].birthday<<endl;
}
break;
case 3:
flag=0;
break;
}
}
}



菜鸟我写了上面这段代码,调试没错误,可以运行,但输入每个类的对象的数据成员后,就弹出一个框 提示“地址簿.exe已停止工作”。。。求问大侠,我的代码是哪里错了,该如何改进

[解决办法]
F9设断点,F5调试,F10单步调试
[解决办法]
addressbook(addressbook &a)
{
name=a.name;
address=a.address;
telenum=a.telenum;
birthday=a.birthday;
}

char *name;
char *address;
这两个成员变量没有分配空间

cin>>p[i].name>>p[i].address>>p[i].telenum>>p[i].birthday;

没有分配空间直接cin肯定会出错的。

你可以用 new char[n] 申请, 在析构中释放
或者直接用string替换char*

[解决办法]

C/C++ code
#include <iostream>using namespace std;class addressbook{public:    char *name;    char *address;    int telenum;    double birthday;    addressbook()    {        name=new char[30];        address=new char[50];        telenum=0;        birthday=0.0;    }    ~addressbook()    {        cout<<name<<address<<telenum<<birthday<<endl;        delete []name;        delete []address;    }    addressbook(const addressbook &a)    {        strcpy(name,a.name);        strcpy(address,a.address);        telenum=a.telenum;        birthday=a.birthday;    }    friend ostream &operator<<(ostream &output,addressbook &ad);    friend istream &operator>>(istream &input,addressbook &ad);    };ostream &operator<<(ostream &output,addressbook &ad){    output<<ad.name<<ad.address<<ad.telenum<<ad.birthday<<endl;    return output;}istream &operator>>(istream &input,addressbook &ad){    input>>ad.name>>ad.address>>ad.telenum>>ad.birthday;    return input;}void main(){        int n,i=0,j=0;    bool flag=1;    while(flag)    {        cout<<"-------------------------------------"<<endl;        cout<<"1、输入新成员 2、查找并输出 3、退出"<<endl;        cout<<"-------------------------------------"<<endl;        int m;        cin>>m;        addressbook *p;        switch(m)        {        case 1:            cout<<"请输入要增加的成员数:";            cin>>n;            p=new addressbook[n];            cout<<"请分别输入每个成员的信息,姓名、地址、电话、生日:";            for(i;i<n;i++)                cin>>p[i].name>>p[i].address>>p[i].telenum>>p[i].birthday;            break;        case 2:            char *name1;            name1=new char[30];            cout<<"请输入名字:";            cin>>name1;            for(j;j<n;j++)            {                if(strcmp(p[j].name,name1)==0)                    cout<<"用户的资料信息:"<<p[j].name<<" "<<p[j].address<<" "<<p[j].telenum<<" "<<p[j].birthday<<endl;                else if(n==j-1&&strcmp(name1,p[j].name)!=0)                    cout<<"该用户不存在!"<<endl;            }            break;        case 3:            flag=0;            break;        }    }} 

读书人网 >C++

热点推荐