bang 改一下
//2007.11.28
//创建一个电话簿
//telephone.h
#ifndef telephone_h
#define telephone_h
class telephone_box{
typedef struct lnode{
char name[10];
long number;
struct lnode *next;
};
struct lnode *l,*p,*q;
char name1[10];
public:
void creat_telephone_list(int num);
int telephone_list_inser(int &num);
int detele_telephone_number(int &num);
void display_telephone_list(int num);
void find_telephone_number(int num);
int amend_telephone_list(int num);
};
#endif
//telephone.cpp
#include <iostream.h>
#include "telephone.h"
//#include "iostd.h"
#include "string.h"
#define ok 1
#define error o
#define NULL 0
void telephone_box::creat_telephone_list(int num)
{ int j;
l=new struct lnode;
if (!l) cout<<"it is ";
l->next=NULL;
for(j=num;j>=1;--j){
p=new struct lnode;
p->next=l->next;
l->next=p;
cout<<"输入姓名:";
cin>>p->name;
cout<<"输入号码";
cin>>p->number;
}
}
int telephone_box::telephone_list_inser(int &num)
{
int j=1;
p=l;
q=new lnode;
while (p&&j<=num)
{p=p->next;
++j;}
q->next=p->next;
p->next=q;
cout<<"输入名字:";
cin>>q->name;
cout<<"输入电话号码:";
cin>>q->number;
++num;
return ok;
}
int telephone_box::detele_telephone_number(int &num)
{ int j=1;
l=new struct lnode;
if (!l) cout<<"it is ";
l->next=NULL;
p=new lnode;
p=l;
cout<<"输入删除的名字:";
cin>>name1;
while (p->name!=name1)
p=p->next;
if (p->name==name1)
{q=p;
p=l;
while (!(p->next->next==q))
p=p->next;
p->next=q->next;
delete(q);
return ok;
}
return 0;}
void telephone_box::display_telephone_list(int num)
{
int j=1;
// l=new struct lnode;
// if (!l) cout<<"it is ";
// l->next=NULL;
p=l;
for (j;j<=num;++j)
{p=p->next;
cout<<"姓名:"<<p->name<<" "<<"电话号码:"<<p->number<<endl;
}
}
int telephone_box::amend_telephone_list(int num){
//int j;
int number;
p=l;
cout<<"输入要修改的名字:";
cin>>name1;
while (p->name!=name1)
p=p->next;
cout<<"输入修改的号码:";
cin>>number;
p->number=number;
return ok;
}
void telephone_box::find_telephone_number(int num)
{
int j=1;
l=new struct lnode;
if (!l) cout<<"it is ";
l->next=NULL;
p=new struct lnode;
p=l;
cout<<"输入姓名:";
cin>>name1;
while (!(p->name==name1))
{p=p->next;++j;
if (j>num)
{cout<<"不存在这个人。";
break;
}
}
cout<<"电话号码为:"<<p->number;
}
#include "telephone.h"
#include "iostream.h"
void main(){
telephone_box tb;
int number_person;
cout<<"输入初始人数:";
cin>>number_person;
tb.creat_telephone_list(number_person);
tb.display_telephone_list(number_person);
cout<<tb.detele_telephone_number(number_person)<<endl;
tb.display_telephone_list(number_person);
cout<<tb.telephone_list_inser(number_person)<<endl;
tb.display_telephone_list(number_person);
//cout<<tb.amend_telephone_list(number_person)<<endl;
tb.display_telephone_list(number_person);
tb.find_telephone_number(number_person);
}
[解决办法]
尝试修改了一部份,最后还是放弃了,有太多无法解释的错误,如
p=new lnode;
p=l;
还有遍历链表时应检查 p->next==NULL 看是否已到尽头了
我建议你参考一下数据结构的书的代码