qq_22651039 2014-10-28 11:09 采纳率: 0%
浏览 912

我编得通讯录创建联系人函数哪儿有问题?

#include
using namespace std;
struct contact
{
int ID;

char name[10];

char ch;

char phone[13];

char addr[31];

struct contact *next;

};
class contacts
{
public:
contacts(){front= new contact; front=NULL;}
void AddCon(int n);
~contacts();
void InsertCon();////插入联系人的基本信息
void FindCon(); ////查找联系人的基本信息
void AmendMessage();//修改联系人的基本信息
void DeleteMessage();//删除联系人的基本信息
void Con();
private:
contact * front;
};
void contacts::AddCon(int n)
{
system("CLS");
contact p= new contact;
cout<<"输入联系人信息:"< cout cin>>p->name;
cout<<"ID:"< cin>>p->ID;
cout<<"sex:"< cin>>p->ch;
cout<<"phone:"< cin>>p->phone;
cout<<"address:"< cin>>p->addr;
front=p;
for(int i=0;i< n-1;i++)
{
system("CLS");
cout<<"现在输入第"<<i+2<<"个联系人的信息"<<endl;
contact
q=new contact;
cout<<"name:"< cin>>q->name;
cout<<"ID:"< cin>>q->ID;
cout<<"sex:"< cin>>q->ch;
cout<<"phone:"< cin>>q->phone;
cout<<"address:"< cin>>q->addr;
p->next=q;
p=q;

}
p->next=NULL;

}
contacts::~contacts()
{

contact *p=front;
while(p)
{
    contact *q=new contact;
    q=p;
    p=p->next;
    delete q;
}

}
void contacts::InsertCon()

{
contact *p=new contact;
p=front;
while(p)
{
p=p->next;
};

if(p==NULL)
    cout<<"请先添加联系人"<<endl;
else 
    {
        contact *q=new contact;
        p->next=q;
        cout << "请依次被插入人的信息:姓名"<<"性别"<<"住址"<<"手机号"<<"学号"<< endl;
        cin >> q->name >> q->ch >> q->addr >> q->phone >> q->ID;
        q->next=NULL;
      }

}
void contacts::FindCon()
{
char a[20];
system("CLS");
/*if(front==NULL)
cout<<"请先添加联系人"< //else
//{
cout cin>>a;
contact *p=front;
while(p)
{
if(strcmp(p->name ,a)==0)
{
cout<<"结果如下"<<"name:"<name<<"ID:"<ID<<"sex:"<ch<<"phone:"<phone<<"address:"<addr< break;
}
else if(p->next!= NULL && p->name != a)
{
p = p->next ;
}
else
{
cout << "输入名字错误" << endl;

             }

        }
//}

}
void contacts::AmendMessage()
{

system("CLS");
if(front==NULL)
    cout<<"请先添加联系人"<<endl;
else 
    {
        int ID1;         
        char name1[10];  
        char ch1;   
        char phone1[13];  
        char addr1[31]; 
        int n;
        cout<<"输入要修改的名字"<<endl;
        cin>>name1;
        contact *p=front;
        while(p)
        {
            if(strcmp(p->name ,name1)==0)
            {
                cout<<"选择需要修改的内容:"<<endl;
                cout<<"1,性别 2,学号 3,电话 4,地址"<<endl;
                cin>>n;
                switch(n)
                {
                case 1:
                    cout<<"输入改变后的性别"<<endl;
                    cin>>ch1;
                    p->ch=ch1;   //char ch,ch1 strcpy(p->ch,ch1)为什么不行 必须是字符数组吗
                    cout<<"success"<<endl;
                    system("CLS");
                    break;
                case 2:
                    cout<<"输入改变后的学号"<<endl;
                    cin>>ID1;
                    p->ID=ID1;
                    cout<<"success"<<endl;
                    system("CLS");
                    break;
                case 3:
                    cout<<"输入改变后的电话"<<endl;
                    cin>>phone1;
                    strcpy(p->phone,phone1);
                    cout<<"success"<<endl;
                    system("CLS");
                    break;
                case 4:
                    cout<<"输入改变后的地址"<<endl;
                    cin>>addr1;
                    strcpy(p->addr, addr1);
                    cout<<"success"<<endl;
                    system("CLS");
                    break;
                default:
                    cout<<"wrong"<<endl;
                    break;
                }

                break;
            }
            else if(p->next!= NULL && p->name != name1)
            {
                 p = p->next ;
            }
            else
            {
                cout << "输入名字错误" << endl;

             }

        }
    }

}
void contacts::DeleteMessage()
{
system("CLS");
if(front==NULL)
cout<<"请先添加联系人"< else
{
char name2[10];
cout cin>>name2;
contact *p=front;
while(p)
{
if(strcmp(p->name ,name2)==0)
{
contact *q=p->next;
strcpy(p->addr,q->addr);//p->addr=q->addr;
p->ch=q->ch;
p->ID=q->ID;
strcpy(p->name,q->name);
strcpy(p->phone,q->phone);
p->next=q->next;
delete q;
break;
}
else if(p->next!= NULL && p->name != name2)
{
p = p->next ;
}
else
{
cout << "输入名字错误" << endl;

             }
        }
}

}
void contacts::Con()
{
int n;
do
{
cout<<" 通讯录 "< cout cout cout cout cout cout contacts a;
cin>>n;
if(n!=1&&n!=2&&n!=3&&n!=4&&n!=5&&n!=6)
{
cout<<"输入错误"< }
else
{
switch(n)
{
case 1:
int m;
do
{
cout cin>>m;

        }while(m<=0);
         a.AddCon(m);
         break;
    case 2:
        a.InsertCon();
        break;
    case 3:
        a.FindCon();
        break;
    case 4:
        a.AmendMessage();
        break;
    case 5:
        a.DeleteMessage();
        break;
    case 6:
        break;
    default:

    cout << "你输入错误,请重新选择!!!" << endl;
    break;



     }
}
}while(n !=6);

}
int main()

{
contacts b;
b.Con();
return 0;

}
为什么创建联系人之后,调用其他函数,都一直显示“请先添加联系人”?不知道怎么改,先谢谢大家了

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-05-27 00:12
    关注

    该回答引用ChatGPT-3.5,仅供参考,不保证完全正确

    在函数contacts::AddCon(int n)中,您出现了一些问题导致联系人无法正确添加到通讯录中。以下是需要更正的地方:

    1. contacts::AddCon(int n)函数中,使用了错误的语法来创建联系人对象。应该使用new运算符来分配动态内存并返回指针。修改代码如下:

      contact *p = new contact;
      
    2. 在添加第一个联系人后,您将front指针设置为新的联系人对象,但在之后的循环中,每次都将front设置为p,这将导致您丢失对第一个联系人的引用。您应该保留对第一个联系人的引用,并在循环结束后将其设置为front。修改代码如下:

      contact *p = front;
      for(int i = 0; i < n - 1; i++)
      {
       // ...
       p->next = q;
       p = q;
      }
      p->next = NULL;
      front = p;
      
    3. 在函数contacts::InsertCon()中,当插入联系人时,您将p设置为front,然后在循环中迭代,直到pNULL。这样,p将指向最后一个联系人的下一个位置,而不是最后一个联系人本身。您应该将循环的条件修改为p->next != NULL,并在循环结束后将p设置为最后一个联系人。修改代码如下:

      contact *p = front;
      while (p->next != NULL)
      {
       p = p->next;
      }
      // ...
      
    4. 在函数contacts::FindCon()中,您使用了cin来读取输入的字符串,但没有使用>>操作符将其存储到字符数组a中。修改代码如下:

      cout << "请输入要查找的名字:" << endl;
      cin >> a;
      

    通过对以上问题的修复,您的通讯录应该能够正确添加联系人并调用其他函数。希望这能帮助到您!

    评论

报告相同问题?

悬赏问题

  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键