通讯录管理系统C++

通讯录管理系统C++

今天写了一个通讯录管理系统,主要实现的***功能***有:

  1. 显示功能选项,让用户通过序号选择进入不同的功能(用switch实现)
  2. 显示功能和增删改查功能
  3. 清空通讯录
  4. 退出系统

整体思路:创建一个通讯录中人的结构体,再创建一个通讯录数组结构体。在main函数中用switch实现功能选择,并用一个子函数显示选项。然后每一个功能做一个子函数,用指针调用。
【注意】必须用指针调用,值调用不能改变主函数的内容。

代码如下:

#include<iostream>
using namespace std;
#include<string>
#define max 1000            //通讯录人数不超过1000

//通讯录中人的结构体
struct Phone {
	string name;
	string sex;
	int age;
	string number;
	string add;
};

// 通讯录结构体!!!!重要!!!!
struct Numberbooks {
	struct Phone nbook[max];  //通讯录数组
	int num=0;      //数组长度
};


//显示一下功能选项
void Show_Faction() {
	cout << "1添加联系人" << endl;
	cout << "2显示联系人" << endl;
	cout << "3删除联系人" << endl;
	cout << "4查找联系人" << endl;
	cout << "5修改联系人" << endl;
	cout << "6清空联系人" << endl;
	cout << "7退出通讯录系统" << endl << endl;

}

//添加联系人
void Add_Phone(struct Numberbooks *s) {
	//先判断能不能存;
	if (s->num > 1000)cout << "通讯录已满" << endl;

	else {
		int ag;
		string na, se, nu, ad;
		cout << "请输入姓名:";
		cin >> na;
		s->nbook[s->num].name = na;   //nb00k[]是数组元素,s->num是通讯录个数
		cout << "请输入性别:";
		cin >> se;
		s->nbook[s->num].sex = se;
		cout << "请输入年龄:";
		cin >> ag;
		s->nbook[s->num].age = ag;
		cout << "请输入电话号码:";
		cin >> nu;
		s->nbook[s->num].number = nu;
		cout << "请输入地址:";
		cin >> ad;
		s->nbook[s->num].add = ad;
		cout << "联系人已保存。" << endl;
		//通讯录个数加一
		s->num++;
		cout <<"通讯录个数为:"<< s->num << endl ;
		cout << "***********************"<<endl;           //为方便分辨显示的内容,加一行这个
	}
	//system("cls");    //清屏
}




//显示联系人
void Show_Phone(struct Numberbooks *s) {
	//cout << "通讯录个数为:" << s->num << endl;
	if ((s->num) == 0)cout << "列表为空!";
	else {
		cout << "联系人列表如下:" << endl;
		for (int i = 0;i <= s->num;i++) {
			cout << s->nbook[i].name << "\t" << s->nbook[i].age << "\t" << s->nbook[i].sex << "\t" << s->nbook[i].number << "\t" << s->nbook[i].add << endl;
		}
	}
	
	cout << "***********************"<<endl;
}


//按姓名删除联系人:找到联系人之后,后面的元素依次往前移位,
//覆盖前元素,最后将数组长度减一
void Delete_Phone(struct Numberbooks *s) {
	if ((s->num) == 0)cout << "列表为空!";
	else {
		int i;
		string N;
		cout << "请输入要删除的姓名:";
		cin >> N;
		for (i = 0;i < s->num;i++) {
			if (s->nbook[i].name == N) {
				for (int j = i;j < s->num;j++) {		//找到之后,往前覆盖			
						s->nbook[j] = s->nbook[j+1];						
				}
				s->num--;
				//cout << "通讯录个数为:" << s->num << endl;
				cout << "删除成功!" << endl<<endl;
			}
		}
		if (i > s->num)
			cout << "该联系人不存在!" << endl ;
	}
	cout << "***********************"<< endl;
}
//查找联系人:内容与删除联系人中的查找方法一样

void Select_Phone(struct Numberbooks *s) {
	int i;
	string N;
	cout << "请输入要查找的姓名:";
	cin >> N;
	for (i = 0;i < s->num;i++) {
		if (s->nbook[i].name == N) {          //找到了就显示信息
			cout << "联系人信息如下" << endl;
			cout << s->nbook[i].name << "\t" << s->nbook[i].age << "\t" << s->nbook[i].sex << "\t" << s->nbook[i].number << "\t" << s->nbook[i].add << endl;

		}
	}
	if (i > s->num)
		cout << "该联系人不存在!" << endl;
	cout << "***********************"<<endl;
}


//修改联系人
//(以修改联系人姓名为例,其他的方法一样):先查找,找到之后对应修改即可
void Alter_Phone(struct Numberbooks *s) {
	int i;
	string N;
	cout << "请输入原姓名:";
	cin >> N;
	for (i = 0;i < s->num;i++) {
		if (s->nbook[i].name == N) {         //找到啦
			string change;
			cout << "请输入新姓名:";
			cin >> change;
			s->nbook[i].name = change;
			cout << "修改成功!"<<endl;
		}
	}
	if (i > s->num)
		cout << "该联系人不存在!" << endl ;
	cout << "***********************" << endl;

}
//清空联系人
void Empty_Phone(struct Numberbooks *s) {
	//用户确定是否清空
	cout << "确定要清空联系人吗?“是”请按1,不是请按0"<<endl;
	int sure;
	cin >> sure;
	if (sure == 1) {
       s->num = 0;
	   cout << "通讯录已清空!"<<endl ;

	}
	cout << "***********************" << endl;
}


int main() {
	
	Numberbooks s;      //注意类型
	while (1) {
		Show_Faction();
		int n;
		cout << "请输入您选择的功能编号:";
		cin >> n;
		switch (n) {
		case 1:Add_Phone(&s);        //1对应添加联系人,注意地址传递才能修改
			break;
		case 2:Show_Phone(&s);        //2对应显示联系人
			break;
		case 3:Delete_Phone(&s);        //3对应删除联系人
			break;
		case 4:Select_Phone(&s);        //4对应查找联系人
			break;
		case 5:Alter_Phone(&s);        //5对应修改联系人
			break;
		case 6:Empty_Phone(&s);        //6对应清空联系人
			break;
		case 7:cout << "欢迎下次使用" << endl;     //7对应添加联系人
			return 0;
			break;
		default:
			break;
		}
	}
        
	
	return 0;
}

写了主要框架,有些细节可能没有考虑到。
主要思想已经在代码中注释了,如果有疑问评论区讨论哦

结果如下图:在这里插入图片描述
这里最后总是会有一个复数,没想明白为啥,知道的朋友请告诉我一声,谢啦~~

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值