为了账号安全,请及时绑定邮箱和手机立即绑定

老师布置的作业

是根据提示用户输入姓名和联系电话来找到链表中位置进行删除吗

void deleteperson(List *pList)
{
	Node node;
	Person person;
	cout<<"你要删除的联系人姓名和联系电话:";
	cin>>person.name>>person.phone;
	node.data = person;
	int i = pList->LocateElem(&node);
	pList->ListDelete(i,&node); 
}


正在回答

8 回答

先找到联系人位置在删除,自己写的,仅供参考

void deletePerson(List<Node> *pl,Node *temp)
{
   Node node;
   cout << "请输入姓名:" << endl;
   cin >> node.data.name;
   cout << "请输入电话:" << endl;
   cin >> node.data.phone;
   int locate = pl->LocateElem(&node);//先查找联系人的位置
   if(locate == -1)
   {
       cout << "没找到此联系人" << endl;
       return;
   }
   pl->ListDelete(locate,temp);//删除联系人
   cout << "成功删除联系人" << endl;
}

3 回复 有任何疑惑可以回复我~
#1

mypollyanna 提问者

非常感谢!
2016-08-29 回复 有任何疑惑可以回复我~


void deleteperson(List*pList)

{

Node node;

cout << "删除全部请按 <1> -- 删除指定姓名请按 <2>--删除指定号码请按<3>" <<endl;

int num= 0;

int flag = 0;

cin >> num;

switch (num)

{

case 1:

pList->ClearList(); break;

case 2:

cout << "请输入姓名:";

cin >> node.data.name;

case 3:

cout << "请输入电话:";

cin >> node.data.phone;

flag = pList->LocateElem(&node);

if (flag == -1)

{

cout << "通讯录无此联系人,请重新输入!" << endl;

break;

}

else

{

pList->ListDelete(flag, &node);

break;

}

default:

break;

}

}

另外在LocateElem中改变一下

int List::LocateElem(Node *pNode)

{

 Node*currentNode=m_pList;

 int count=0;

 while(currentNode->next!=NULL)

{

 currentNode=currentNode->next;

 if(currentNode->data.name==pNode->data.name||currentNode->data.phone==pNode->data.phone)

 {return count;}

 count++;

}

 return -1;

}

这样就可以实现不论你输入电话或者号码任意一个条件都可以删除对应的全部信息

0 回复 有任何疑惑可以回复我~

void deletePerson(List *plist)//删除联系人 方法2

{

cout<<"是否删除所有联系人输入1"<<endl;

int  order;

cin>>order;

if (order==1)

{

plist->ClearList();

cout<<"所有联系人已经删除"<<endl;

else

{

int sequenceNumber;

cout<<"请输入序号 : ";

cin>>sequenceNumber; 

sequenceNumber<1||sequenceNumber>plist->ListLength()?cout<<"此联系人不存在"<<endl:cout<<"此联系人已经删除"<<endl;

Node node;

plist->ListDelete(sequenceNumber-1,&node);

}

}


void List::ListTraverse()

{

Node *currentNode=m_pList;

for(int k=0;k<m_iLength;k++)

{

currentNode=currentNode->next;

cout<<"sequence Number  "<<k+1<<" : ";

currentNode->printNode();

}


}


0 回复 有任何疑惑可以回复我~
void deletenum(List *list)
{
 string name;
 int i;
 cout<<"请输入你要删除的联系人:"<<endl;
 cin>>name;
 Node node;
 Node node1;
 node.data.m_sName=name;
 i=list->LocateElem(&node);
 list->ListDelete(i,&node1);
 if(node1.data.m_sName==name)
 {
  cout<<"删除成功"<<endl; 
  } 
  list->ListTraverse();
}

修改一下LocateElem函数:

int List::LocateElem(Node *pNode)
  {
    Node *currentNode=m_iPlist;
    int count=0;
  while(currentNode->next!=NULL)
  {
   currentNode=currentNode->next;
   if(currentNode->data.m_sName==pNode->data.m_sName)
   {
    return count;
   }
   count++;
  }
  return -1;
   
  }

通过名字删除,个人想法,欢迎各位学友交流指正。

0 回复 有任何疑惑可以回复我~
#1

化身孤岛的鲸i

既然是通过名字删除,那么就考虑下重名的问题吧。重名出现的话,显示出所有找到的信息,然后让操作者选择删除哪个。
2018-12-24 回复 有任何疑惑可以回复我~
void DeleteContacts()//删除联系人
{
	p->ListTraverse();
	cout << "请输入需要删除的联系人序号:";
	Node<MailList> DeleteContacts;
	int number;
	cin >> number;
	p->ListDelete(number, &DeleteContacts);
	if (p->ListDelete(number, &DeleteContacts) == true)
	{
		cout << "\n删除成功\n"<< endl;
	}
	else
	{
		cout << "\n删除失败\n"<<endl;
	}
}

先遍历,我在遍历的时候,修改了一下,能够看到每个联系人的序号

只需要输入对应的序号就可以删除联系人,在删除操作上简化了


istream &operator >> (istream &input, MailList &maillist)//运算符重载
{
	input >> maillist.name /*>> maillist.city >> maillist.age >> maillist.tel*/;
	return input;
}
void SearchContacts()//搜索联系人
{
	p->ListTraverse();
	cout << "请输入联系人的姓名,年龄,城市,手机号:\n";
	Node<MailList> SearchContacts;
	int number=0;
	cin >> SearchContacts.data;
	p->GetElem(p->LocateElem(&SearchContacts),&SearchContacts);
	if(p->GetElem(p->LocateElem(&SearchContacts), &SearchContacts)==true)
	{
		cout <<"搜索成功\n\n"
		<<"搜索到第"<< p->GetElem(p->LocateElem(&SearchContacts), &SearchContacts) <<"号的联系人信息如下\n"
		<< "姓名:"<< SearchContacts.data.name << "\n"
		<< "城市:" <<  SearchContacts.data.city << "\n"
		<< "年龄:" << SearchContacts.data.age << "\n"
		<< "手机:" << SearchContacts.data.tel << "\n\n";
	}
	else
	{
		cout << "\n未搜索到相关联系人\n\n";
	}
}

同时也衍生出搜索联系人的问题,对cin>>的运算符进行了重载,靠联系人的姓名来搜索,不过暂时还没解决只输入姓名,年龄,城市,手机号其中的一项来进行搜索的问题,望大神指点迷津

0 回复 有任何疑惑可以回复我~
#1

宝慕林3490596

不好意思 <<"搜索到第"<< p->GetElem(p->LocateElem(&SearchContacts), &SearchContacts) <<"号的联系人信息如下\n" 应该改成 <<"搜索到第"<< p->LocateElem(&SearchContacts) <<"号的联系人信息如下\n" 不然只要有联系人就都会显示搜索到第一号的联系人信息如下
2017-02-21 回复 有任何疑惑可以回复我~

void deletePerson(List*pList)
{
   char str;
   Node node;
   Person person;
   cout<<"请输入姓名: ";
   cin>>person.name;
   cout<<"请输入电话: ";
   cin>>person.phone;
   node.data=person;
   node.data=person;

   int count = pList->LocateElem(&node);
   if(count==-1)
   {
       cout<<"没有该联系人"<<endl;
       return;
   }
   else
   {
       cout<<"确定要删除此人?"<<endl;
       cin>>str;
       switch (str) {
       case 'y':
           pList->ListDelete(count,&node);
           cout<<"联系人已删除";
           cout<<"------------"<<endl;
           pList->ListTraverse();
           break;
       case 'n':
           return pList->ListTraverse();
           break;
       default:
           break;
       }

   }
}

0 回复 有任何疑惑可以回复我~

void deletePerson(List*pList)
{
   char str;
   Node node;
   Person person;
   cout<<"请输入姓名: ";
   cin>>person.name;
   cout<<"请输入电话: ";
   cin>>person.phone;
   node.data=person;
   node.data=person;
   int count = pList->LocateElem(&node);
   if(count==-1)
   {
       cout<<"没有该联系人"<<endl;
       return;
   }
   else
   {
       cout<<"确定要删除此人?"<<endl;
       cin>>str;
       switch (str) {
       case 'y':
           pList->ListDelete(locate,&node);
           cout<<"联系人已删除";
           cout<<"------------"<<endl;
           pList->ListTraverse();
           break;
       default:
           break;
       }
   }
}



0 回复 有任何疑惑可以回复我~
#1

慕粉1021362272

这个有点问题,忘记加上否的情况,在下面给出。还有如果只给出姓名,或者给出电话直接定位到某个联系人的情况没有考虑进来,欢迎各位学友们交流指正。
2016-12-06 回复 有任何疑惑可以回复我~

void removePeron(List *plist)

{

Node node;

cout << "删除全部请按 <1> -- 删除指定姓名请按 <2>" <<endl;

int num= 0;

int flag = 0;

cin >> num;

switch (num)

{

case 1:

plist->ClearList(); break;

case 2:

cout << "请输入姓名:";

cin >> node.data.name;

cout << "请输入电话:";

cin >> node.data.phone;

flag = plist->LocateElem(&node);

if (flag == -1)

{

cout << "通讯录无此联系人,请重新输入!" << endl;

break;

}

else

{

plist->ListDelete(flag, &node);

break;

}

default:

break;

}


}

仅供参考 删除必须要同时输入 姓名和 电话 这样显得有点多此一举啊。不知道哪位大神可以改进。

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

老师布置的作业

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号