zzyaizj
宁忽~
采纳率66.7%
2021-03-05 19:48

请大佬帮我测试一下这个程序好吗。。。我试了好多次都弄不了其他功能,是不是结构指针的问题啊啊啊啊啊啊啊

#include<iostream>
using namespace std;
const int Max = 1000;//通讯录容量最大为1000 
struct person
{
	//姓名
	string name;
	//性别
	string sex;
	//年龄
	int age;
	//联系电话
	string phone;
	//家庭住址
	string Address;
};
struct personArray
{
	struct person total[Max];

};
//添加联系人信息的函数
void Addperson(personArray *p,int *pNumber)
{
    int i=*pNumber;
	cout << "请输入姓名 ";
	cin >> p->total[i].name;
	cout << "请输入性别 ";
	cin >> p->total[i].sex;
	cout << "请输入年龄 ";
	cin >> p->total[i].age;
	cout << "请输入联系电话 ";
	cin >> p->total[i].phone;
	cout << "请输入家庭住址 ";
	cin >> p->total[i].Address;
	*pNumber++;
	
};
//显示联系人信息 
void showperson(personArray *p,int pNumber)
{
	for(int i=0;i<pNumber;i++)
	{
		cout<<"姓名: "<<p->total[i].name<<'\t'<<"性别: "<< p->total[i].sex<<'\t'<<"年龄: "<<p->total[i].age<<'\t'<<"联系电话: "<<p->total[i].phone<<'\t'<<"家庭住址: "<<p->total[i].Address; 
	}
}
//删除联系人信息
void deleteperson (personArray *p,int *pNumber)
{
	cout<<"请输入要删除的联系人的姓名: ";
	string name;
	cin>>name;
	for(int i=0;i<*pNumber;i++)
	{
		if(name==p->total[i].name)
		{
			for(int j=i;j<*pNumber-1;j++)
			{
				
				p->total[j]=p->total[j+1];
			}
		*pNumber--;
		cout<<"该联系人信息已删除。";
		return ;	
		}
	}
	cout<<"通讯录里没有这个联系人。";
}
//查找联系人信息 
void findperson(personArray *p,int pNumber)
{
	cout<<"请输入要查找的联系人的姓名: ";
	string name;
	cin>>name;
	for(int i=0;i<pNumber;i++) 
	{
		if(name==p->total[i].name)
		{
			cout<<"姓名 :"<<p->total[i].name<<'\t'<<"性别: "<<p->total[i].sex<<'\t'<<"年龄: "<<'\t'<<p->total[i].age<<'\t'<<"联系电话: "<<p->total[i].phone<<'\t'<< "家庭住址: "<<p->total[i].Address<<endl;
			return ;
		}
	}
	cout<<"系统未收录这个人的信息。"<<endl;
}
void changedata(personArray *p,int pNumber)
{
	cout<<"请输入要修改信息的联系人姓名: ";
	string name;
	cin>>name;
	for(int i=0;i<pNumber;i++)
	{
		if(p->total[i].name==name)
		{
			cout<<"现在更新该联系人的信息。";
			cout<<"姓名: ";
			cin>>p->total[i].name;
			cout<<endl;
			cout<< "性别: ";
			cin>>p->total[i].sex;
			cout<<endl;
			cout<<"年龄: ";
			cin>>p->total[i].age;
			cout<<endl;
			cout<<"联系电话: ";
			cin>>p->total[i].phone;
			cout<<endl;
			cout<<"家庭住址: ";
			cin>>p->total[i].Address;
			cout<<endl;
			return ;
		}
	} 
	cout<<"系统未收录该联系人的信息,无法修改。";
}
//清空联系人的信息
 void deleteperson(int * pNumber)
 {
 	cout<<"请谨慎该操作,是否要继续清空联系人信息。";
 	cout<<"1.确认    2.取消";
 	int i;
 	cin>>i;
 	if(i==1)
 	{
 		*pNumber=0;
 		return ;
	 }
	else
	return ;
 }
int main()
{
	personArray num1;
	cout << "欢迎使用通讯录系统\n ";
	cout << "1.添加联系人信息" << endl;
	cout << "2.显示联系人信息" << endl;
	cout << "3.删除联系人信息" << endl;
	cout << "4.查找联系人信息" << endl;
	cout << "5.修改联系人信息" << endl;
	cout << "6.清空联系人信息" << endl;
	cout << "0.退出通讯录系统" << endl;
	int choose = 0;
	int pNumber = 0;
	while (true)
	{
		cin >> choose;
		switch (choose)
		{
		case 1:
			if(pNumber<=Max)
			{
				Addperson(&num1,&pNumber);
				cout<<"录入信息成功 ";
			}
			else
			{
				cout<<"当前联系人达到上限,请清除部分联系人后再添加 ";
			}

			break;
		case 2:
			showperson(&num1,pNumber);
			break;
		case 3:
			deleteperson(&num1,&pNumber);
			break;
		case 4:
			findperson(&num1,pNumber);
			break;
		case 5:
			changedata(&num1,pNumber);
			break;
		case 6:
			deleteperson(&pNumber);
			break;
		case 0:
			return 0;
			break;
		default:
			cout << "现在暂时没有这个功能";
			break;
		}
	}
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • cson20193212002 Basesson 1月前

    1.<iostream>里cout和cin的<<和>>运算符没有关于string类型的运算,所以cin>><string>进行时,>>不知道怎么运算,就是不知道怎么把cin得到的流给string类型的变量。

    • 可以再引用#include<string>

    2.++与--运算和指针*运算放在一起,++与--会先运算,如*pNumber++;,这个会把pNumber+1,再取值,而不是先值,再把值+1

    • 可以写成(*pNumber)++

    3.在用cin为int类型的age赋值时,建议再加上cin.fail()判断,免得输入流读取失败时,程序进入死循环

    • cin_age:
      cin >> p->total[i].age;
      if( cin.fail())       //输入流读取是否失败
      {
          cin.clear();      //清除错误标识
          cin.sync();       //清除流数据
          goto cin_age;     //重新输入
      }
    点赞 评论 复制链接分享