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

Posted 肥学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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等学习资料还有有有趣好玩的编程项目,更有难寻的各种资源。反正看看也不亏。

以上是关于C++通讯录最新版期末不挂科系列的主要内容,如果未能解决你的问题,请参考以下文章

Python0基础(下)——期末不挂科

离散数学期末不挂科复习笔记

一起啃西瓜书机器学习-期末复习(不挂科)

离散数学期末不挂科复习笔记

高等数学期末不挂科复习笔记

数据结构期末不挂科笔记