C++ 通讯录系统(不储存为文件)

 偷偷拿来记录一下萌新的cs路——day15 历时15天,边上课边写作业边敲代码,至此终于补完大一程序设计进度= =呜呜呜 呜呜呜 呜哇哇哇哇哇

用C++模拟一个通讯录,能且仅能存储1000个人的信息;

每个人的信息包括:姓名、电话、性别(提示输入正确性别)、住址、年龄(提示输入正确年龄);

功能包括:

  1. 添加联系人
  2. 显示联系人
  3. 删除联系人
  4. 查找联系人
  5. 修改联系人
  6. 清空联系人

 choices.h

#include<iostream>
using namespace std;

void showMenu();
struct person;
struct addressbooks;
void addPerson(addressbooks* abs); //注意顺序!
void showPerson(addressbooks* abs);
int scanPerson(addressbooks* abs, string name);
void deletePerson(addressbooks* abs);
void findPerson(addressbooks* abs);
void modifyPerson(addressbooks* abs);
void clearPerson(addressbooks* abs);
void quitMenu();

 choices.cpp

#include"choices.h"
#define max 1000

void showMenu() {
	cout << "***************" << endl;
	cout << "1、添加联系人" << endl;
	cout << "2、显示联系人" << endl;
	cout << "3、删除联系人" << endl;
	cout << "4、查找联系人" << endl;
	cout << "5、修改联系人" << endl;
	cout << "6、清空联系人" << endl;
	cout << "0、退出通讯录" << endl;
	cout << endl;
	cout << endl;
	cout << "       * *    " << endl;
	cout << "        |     " << endl;
	cout << "       / \\    " << endl;
	cout << "***************" << endl;
}

struct person { //人员结构体
	string name;
	short sex; //1男2女
	short age;
	string phoneNumber;
	string address;
};

struct addressbooks { //通讯录结构体
	struct person personArr[max];
	int num; //当前通讯录人数
};

void addPerson(addressbooks* abs) {
	if (abs->num == max) { //判断人数
		cout << "人数已满,添加失败" << endl;
		return;
	}
	else {
		string name;
		cout << "请输入姓名:" << endl;
		cin >> name;
		abs->personArr[abs->num].name = name;

		short sex;
		cout << "请输入性别(男1女2):" << endl;
		while (1) {
			cin >> sex;
			if (sex == 1 || sex == 2) { //防输错装置
				abs->personArr[abs->num].sex = sex;
				break;
			}
			cout << "请输入1或2:" << endl;
		}
		
		short age;
		cout << "请输入年龄:" << endl;
		while (1) {
			cin >> age;
			if (age >= 0 && age <= 150) {
				abs->personArr[abs->num].age = age;
				break;
			}
			cout << "请输入正确年龄:" << endl;
		}

		string phoneNumber;
		cout << "请输入电话:" << endl;
		cin >> phoneNumber;
		abs->personArr[abs->num].phoneNumber = phoneNumber;

		string address;
		cout << "请输入地址:" << endl;
		cin >> address;
		abs->personArr[abs->num].address = address;

		abs->num++;

		cout << "添加联系人成功 ^-^ 按任意键返回菜单" << endl;
		system("pause"); //按任意键继续
		system("cls"); //清屏
	}
}

void showPerson(addressbooks* abs) {
	if (abs->num == 0) {
		cout << "记录为空,请添加联系人" << endl;
	}
	else {
		for (int i = 0; i < abs->num; i++) {
			cout << endl;
			cout << "姓名:" << abs->personArr[i].name << "\t";
			/*if (abs->personArr[i].sex == 1) {
				cout << "性别:男" << "\t";
			}
			else if (abs->personArr[i].sex == 2) {
				cout << "性别:女" << "\t";
			}*/
			cout << "性别:" << (abs->personArr[i].sex == 1 ? "男" : "女") << "\t"; //三目运算符输出男女
			cout << "年龄:" << abs->personArr[i].age << "\t";
			cout << "电话:" << abs->personArr[i].phoneNumber << "\t";
			cout << "地址:" << abs->personArr[i].address << "\t";
			cout << endl;
		}
	}
	cout << "已显示所有联系人 ^-^ 按任意键返回菜单" << endl;
	system("pause"); //按任意键继续
	system("cls"); //清屏
}

int scanPerson(addressbooks* abs, string name) { //遍历人名,比对是否一致
	for (int i = 0; i < abs->num; i++) {
		if (abs->personArr[i].name == name) {
			return i; //找到,返回人名
		}
	}
	return -1; //未找到,返回-1
}

void deletePerson(addressbooks* abs) {
	string name;
	cout << "请输入联系人姓名" << endl;
	cin >> name; //先判断联系人是否存在
	int result = scanPerson(abs, name);
	if (result != -1) {
		for (int i = result; i < abs->num; i++) {
			abs->personArr[i] = abs->personArr[i + 1]; //数据前移
		}
		abs->num--; //更新通讯录人数
		cout << "删除成功 ^-^ 按任意键返回菜单" << endl;
	}
	else {
		cout << "查无此人 ^-^ 按任意键返回菜单" << endl;
	}
	system("pause"); //按任意键继续
	system("cls"); //清屏
}

void findPerson(addressbooks* abs) {
	string name;
	cout << "请输入联系人姓名" << endl;
	cin >> name;
	int result = scanPerson(abs, name);
	if (result != -1) {
		cout << endl;
		cout << "姓名:" << abs->personArr[result].name << "\t";
		cout << "性别:" << (abs->personArr[result].sex == 1 ? "男" : "女") << "\t"; //三目运算符判断男女
		cout << "年龄:" << abs->personArr[result].age << "\t";
		cout << "电话:" << abs->personArr[result].phoneNumber << "\t";
		cout << "地址:" << abs->personArr[result].address << "\t";
		cout << endl;
	}
	else {
		cout << "查无此人 ^-^ 按任意键返回菜单" << endl;
	}
	system("pause"); //按任意键继续
	system("cls"); //清屏
}

void modifyPerson(addressbooks* abs) {
	string name;
	cout << "请输入联系人姓名" << endl;
	cin >> name;
	int result = scanPerson(abs, name);
	if (result != -1) {
		string name;
		cout << "请输入姓名:" << endl;
		cin >> name;
		abs->personArr[result].name = name;

		short sex;
		cout << "请输入性别(男1女2):" << endl;
		while (1) {
			cin >> sex;
			if (sex == 1 || sex == 2) { //防输错装置
				abs->personArr[result].sex = sex;
				break;
			}
			cout << "请输入1或2:" << endl;
		}

		short age;
		cout << "请输入年龄:" << endl;
		while (1) {
			cin >> age;
			if (age >= 0 && age <= 150) {
				abs->personArr[result].age = age;
				break;
			}
			cout << "请输入正确年龄:" << endl;
		}

		string phoneNumber;
		cout << "请输入电话:" << endl;
		cin >> phoneNumber;
		abs->personArr[result].phoneNumber = phoneNumber;

		string address;
		cout << "请输入地址:" << endl;
		cin >> address;
		abs->personArr[result].address = address;

		cout << "修改成功 ^-^ 按任意键返回菜单" << endl;
	}
	else {
		cout << "查无此人 ^-^ 按任意键返回菜单" << endl;
	}
	system("pause"); //按任意键继续
	system("cls"); //清屏
}

void clearPerson(addressbooks* abs) {
	abs->num = 0;
	cout << "通讯录已清空 ^-^ 按任意键返回菜单" <<endl;
	system("pause");
	system("cls");
}

void quitMenu() {
	cout << "欢迎下次使用 ^-^" << endl;
	system("pause");
	//return 0;
}

 main.cpp

#include<iostream>
#include<string>
#include"choices.h"
using namespace std;
#define max 1000 //宏常量定义最大人数

struct person { //人员结构体
	string name;
	short sex; //1男2女
	short age;
	string phoneNumber;
	string address;
};

struct addressbooks { //通讯录结构体
	struct person personArr[max];
	int num; //当前通讯录人数
};


int main() {
	//struct addressbooks;
	addressbooks abs; //c++自上而下编译,故struct须放在main前,否则报错
	abs.num = 0;

	while (1) {
		showMenu();

		int select = 0;
		cin >> select;
		switch (select) {
		case 1: //1、添加联系人
			addPerson(&abs); //指针修饰实参
			break;
		case 2: //2、显示联系人
			showPerson(&abs);
			break;
		case 3: //3、删除联系人
			deletePerson(&abs);
			break;
		case 4:  //4、查找联系人
			findPerson(&abs);
			break;
		case 5: //5、修改联系人
			modifyPerson(&abs);
			break;
		case 6: //6、清空联系人
			clearPerson(&abs);
			break;
		case 0: //0、退出通讯录
			quitMenu();
			return 0;
			break;
		default:
			break;

		}
	}
	system("pause"); 
	return 0;
}

运行结果示例 

 以后学了更多知识还会回来更新的!有误之处恳请大佬们指正,提前感谢!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值