设计一个地址簿
功能自定义(如输入、输出、查找、排序等功能),
至少需要有输入、输出(需重载提取运算符 >>和插入运算符<<)和查找功能。
程序要求记录联系人的姓名,地址,电话号码,生日等信息。
数据成员至少有一个是指针类型,如姓名或地址是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*
[解决办法]
#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; } }}