C++通讯录最新版期末不挂科系列

简单说一下

此次没有什么华丽的外表,就是用c++来写的简单的通讯录管理系统,是在上次结构体联系总结之后写的,因为有一点python和Java的基础,在学完基础语法后也是很快写出来了。有需要的小伙伴可以看看或者说指导指导,谢谢了

效果演示

请添加图片描述

源码

部分源码展示

主菜单

void menu() {
	cout << "\n\n*****************主菜单************************" << endl;
	cout << "****************当前通讯录人数" <<pernum<<"****************"<< endl;
	cout << "******  1.添加联系人信息" << endl;
	cout << "******  2.显示所有联系人" << endl;
	cout << "******  3.删除联系人信息" << endl;
	cout << "******  4.查找联系人信息" << endl;
	cout << "******  5.修改联系人信息" << endl;
	cout << "******  6.清空所有联系人" << endl;
	cout << "******  7.退出" << endl;
}

防止不按规定输入函数

//确认用来防止不按照提示输入
void confirm(int* flag) {
	cout << "是否确认删除(按1确定0取消):" << endl;

	while (1) {//判定是否为合法输入
		cin >> *flag;
		if (*flag == 1 || *flag == 0) {
			break;
		}
		cout << "输入错误,请继续输入(按1确定0取消):" << endl;
	}
}

添加联系人

//添加联系人
void addPerson(P* perArr ) {
	P p;
	//cin.get();
	cout << "请输入姓名:";
	getline(cin,p.name);
	cout << "请输入性别:";
	getline(cin,p.sex);
	cout << "请输入手机号:";
	getline(cin, p.phone);
	cout << "请输入家庭地址:";
	getline(cin,p.address);
	perArr[pernum] = p;
	pernum++;
	cout<<"添加成功!"<<endl;
}

删除联系人

//删除联系人

void deletePerson(P* perArr) {
	string tempName;
	int i,flag;
	cout << "请输入要删除的联系人的姓名:" << endl;
	getline(cin, tempName);
	i=isExit(perArr, tempName);
	if (i >=0) {//如果查到了
		cout << "该联系人信息为:" << endl;
		cout << "姓名:" << perArr[i].name << "\t性别:" << perArr[i].sex << "\t手机号:" << perArr[i].phone << "\t家庭住址:" << perArr[i].address << endl;
		confirm(&flag);
		if (flag == 1) {
			for (int j = i; j < pernum-1; j++) {
				perArr[j] = perArr[j +1];
			}
			pernum--;
			cout << "删除成功!" << endl;
		}
		
	}
	else {
		error();
	}
	
}

修改联系人信息

//修改联系人
void updataPer(P* perArr) {
	string tempName;
	int i, flag;
	cout << "请输入要修改的联系人姓名:" << endl;
	getline(cin, tempName);
	i = isExit(perArr, tempName);
	cout << "要查找的联系人信息为:" << endl;
	cout << "姓名:" << perArr[i].name << "\t性别:" << perArr[i].sex << "\t手机号:" << perArr[i].phone << "\t家庭住址:" << perArr[i].address << endl;
	confirm(&flag);
	
	if (i >=0&&flag==1) {
		cout << "请重新输入该联系人信息" << endl;
		P p;
		//cin.get();
		cout << "请输入姓名:";
		getline(cin, p.name);
		cout << "请输入性别:";
		getline(cin, p.sex);
		cout << "请输入手机号:";
		getline(cin, p.phone);
		cout << "请输入家庭地址:";
		getline(cin, p.address);
		perArr[i] = p;
		cout << "修改成功!" << endl;
	}
	else {
		error();
	}
}

途中解决的问题

while陷入死循环跳过cin的问题

cin 该对象控制从标准输入中以字节流形式进行的提取。构造对象后,调用cin.tie()返回&cout。

因为cin是一个输入流,当要求给一个整型赋值的时候,输入的类型可能与该整型不匹配,导致缓存溢出。如果输入的过多了,那么,那些输入除了一部分赋值给变量以外还有剩余的字节,这些剩余的输入将残留在输入缓存中,就会导致在下面需要输入的时候不再接受输入,而直接从缓存中获得。

解决办法是两个

  • 一个清除cin缓存区。
//清除输入缓冲区的当前行 
 cin.ignore(numeric_limits<std::streamsize>::max(),'\n');
//清除输入缓冲区里所有内容 
 cin.ignore(numeric_limits<std::streamsize>::max()); 
//清除一个字符
  cin.ignore()
  • 另一个是把cin换成getline这样可以来接收string类型的数据就不会出现溢出了。

点击直接资料领取

源码可在下方获取
这里有python,Java等学习资料还有有有趣好玩的编程项目,更有难寻的各种资源。反正看看也不亏。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肥学

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值