实现简易通讯录管理系统

1、系统需求

通讯录是一个可以记录亲人、好友信息的工具。

本教程主要利用C++来实现一个通讯录管理系统

系统中需要实现的功能如下:

  • 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人

  • 显示联系人:显示通讯录中所有联系人信息

  • 删除联系人:按照姓名进行删除指定联系人

  • 查找联系人:按照姓名查看指定联系人信息

  • 修改联系人:按照姓名重新修改指定联系人

  • 清空联系人:清空通讯录中所有信息

  • 退出通讯录:退出当前使用的通讯录

 本次通过三块文件来进行实现:

1.   通讯录管理系统.h   来对函数以及结构体进行声明;

2.   通讯录管理系统.cpp  实现主函数;

3.   func.cpp  对需要用到的功能函数进行封装。

2、菜单功能

功能描述: 用户选择功能的界面

菜单界面效果如下图:

步骤:

  • 封装函数显示该界面 如 void Menu()

  • 在main函数中调用封装好的函数

代码:

void Menu()
{
	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;
}
int main()
{
	Menu();
	system("pause");
	return 0;
}

3、退出功能

功能描述:退出通讯录系统

思路:根据用户不同的选择,进入不同的功能,可以选择switch分支结构,将整个架构进行搭建

当用户选择0时候,执行退出,选择其他先不做操作,也不会退出程序

代码:

int main()
{
	int select = 0;
	while (1)
	{
		Menu();
		cout << "请选择功能:";
		cin >> select;
		switch (select)
		{
		case 1://添加联系人
			break;
		case 2://显示联系人
			break;
		case 3://删除联系人
			break;
		case 4://查找联系人
			break;
		case 5://修改联系人
			break;
		case 6://清空联系人
			break;
		case 0://退出通讯录
			cout << "欢迎下次继续使用" << endl;
			system("pause");
			return 0;
		default:
			cout << "选择错误,请重新选择" << endl;
			break;
		}
	}
	system("pause");
	return 0;
}

效果图:

4、添加联系人

功能描述:

实现添加联系人功能,联系人上限为1000人,联系人信息包括(姓名、性别、年龄、联系电话、家庭住址)

添加联系人实现步骤:

  • 设计联系人结构体

  • 设计通讯录结构体

  • main函数中创建通讯录

  • 封装添加联系人函数

  • 测试添加联系人功能

4.1 设计联系人结构体

联系人信息包括:姓名、性别、年龄、联系电话、家庭住址

设计如下:

struct Person
{
	string m_name;//姓名
	int m_gender;//性别
	int m_age;//年龄
	string m_phone;//联系方式
	string m_addr;//家庭住址
};

4.2 设计通讯录结构体

设计时候可以在通讯录结构体中,维护一个容量为1000的存放联系人的数组,并记录当前通讯录中联系人数量

设计如下

#define Max 1000 //最大人数

struct Contact
{
	struct Person arr_p[Max];//通讯录中保存联系人的数组
	int size_p;//通讯录中人员人数
};

4.3 main函数中创建通讯录

添加联系人函数封装好后,在main函数中创建一个通讯录变量,这个就是我们需要一直维护的通讯录

void Initiate(struct Contact* contact)//初始化
{
	contact->size_p = 0;
}

mian函数起始位置添加:

	//创建通讯录
	Contact m_contact;
	//初始化通讯录中人数
	Initiate(&m_contact);

4.4 封装添加联系人函数

思路:添加联系人前先判断通讯录是否已满,如果满了就不再添加,未满情况将新联系人信息逐个加入到通讯录

添加联系人代码:

void Add_contact_person(struct Contact* contact)
{
	if (contact->size_p == Max)//判断通讯录是否已满
	{
		cout << "通讯录已满" << endl;
		return;
	}
	else//通讯录未满的情况下进行添加联系人
	{
		string name, phone, addr;
		int age, gender;
//姓名
		cout << "请输入姓名:" << endl;
		cin >> name;
		contact->arr_p[contact->size_p].m_name = name;
//性别
		cout << "请输入性别:" << endl;
		cout << "1. 男" << endl;
		cout << "2. 女" << endl;
		while (1)
		{
			cin >> gender;
			if (gender == 1 || gender == 2)
			{
				contact->arr_p[contact->size_p].m_gender = gender;
				break;
			}
			cout << "输入错误,请重新输入" << endl;
		}
//年龄
		cout << "请输入年龄:" << endl;
		cin >> age;
		contact->arr_p[contact->size_p].m_age = age;
//联系方式
		cout << "请输入电话:" << endl;
		cin >> phone;
		contact->arr_p[contact->size_p].m_phone = phone;
//家庭住址
		cout << "请输入地址:" << endl;
		cin >> addr;
		contact->arr_p[contact->size_p].m_addr = addr;
//更新通讯录中联系人人数
		contact->size_p++;
		cout << "添加成功!" << endl;
		system("pause");
		system("cls");
	}
}

4.5 测试添加联系人功能

选择界面中,如果玩家选择了1,代表添加联系人,我们可以测试下该功能

在switch case 语句中,case1里添加:

		case 1://添加联系人
			Add_contact_person(&m_contact);
			break;

测试效果如图:

5、显示联系人

功能描述:显示通讯录中已有的联系人信息

显示联系人实现步骤:

  • 封装显示联系人函数

  • 测试显示联系人功能

6.1 封装显示联系人函数

思路:判断如果当前通讯录中没有人员,就提示记录为空,人数大于0,显示通讯录中信息

显示联系人代码:

void Show_contact_person(struct Contact* contact)
{
	if (contact->size_p == 0)
		cout << "通讯录为空" << endl;
	else
	{
		for (int i = 0; i < contact->size_p; i++)
		{
			string gender_s;
			if (contact->arr_p[i].m_gender == 1)
				gender_s = "男";
			else
				gender_s = "女";
			cout << "No." << i + 1 
                    << "\t姓名: " << contact->arr_p[i].m_name
				    << "\t性别: " << gender_s 
                    << "\t年龄: " << contact->arr_p[i].m_age
				    << "\t电话: " << contact->arr_p[i].m_phone 
                    << "\t地址: " << contact->arr_p[i].m_addr << endl;
		}
	}
	system("pause");
	system("cls");
}

5.2 测试显示联系人功能

在switch case语句中,case 2 里添加

		case 2://显示联系人
			Show_contact_person(&m_contact);
			break;

测试效果如图:

6、删除联系人

功能描述:按照姓名进行删除指定联系人

删除联系人实现步骤:

  • 封装检测联系人是否存在

  • 封装删除联系人函数

  • 测试删除联系人功能

6.1 封装检测联系人是否存在

设计思路:

删除联系人前,我们需要先判断用户输入的联系人是否存在,如果存在删除,不存在提示用户没有要删除的联系人

因此我们可以把检测联系人是否存在封装成一个函数中,如果存在,返回联系人在通讯录中的位置,不存在返回-1

检测联系人是否存在代码:

//判断是否存在查询的人员,存在返回在数组中索引位置,不存在返回-1
int Check_isexist(string name, struct Contact* contact)
{
	for (int i = 0; i < contact->size_p; i++)
	{
		if (!name.compare(contact->arr_p[i].m_name))
		{
			return i;
		}
	}
	return -1;
}

6.2 封装删除联系人函数

根据用户输入的联系人判断该通讯录中是否有此人

查找到进行删除,并提示删除成功

查不到提示查无此人。

//3、删除指定联系人信息
void Delete_contact_person(struct Contact* contact)
{
	string name;
	cout << "请输入要删除的联系人姓名:";
	cin >> name;
	int ret = Check_isexist(name, contact);
	if (ret == -1)
	{
		cout << "查无此人" << endl;
	}
	else
	{
		for (int i = ret; i < contact->size_p; i++)
		{
			contact->arr_p[i] = contact->arr_p[i + 1];
		}
		contact->size_p--;
		cout << "删除成功!" << endl;
	}
	system("pause");
	system("cls");
}

6.3 测试删除联系人功能

在switch case 语句中,case3里添加:

		case 3://删除联系人
			Delete_contact_person(&m_contact);
			break;

测试效果如图:

存在情况:

不存在情况:

7、查找联系人

功能描述:按照姓名查看指定联系人信息

查找联系人实现步骤

  • 封装查找联系人函数

  • 测试查找指定联系人

7.1 封装查找联系人函数

实现思路:判断用户指定的联系人是否存在,如果存在显示信息,不存在则提示查无此人。

查找联系人代码:

//4、查找指定联系人信息
void Find_contact_person(struct Contact* contact)
{
	string name;
	cout << "请输入要查找的联系人姓名: ";
	cin >> name;
	int ret = Check_isexist(name, contact);
	if (ret == -1)
	{
		cout << "查无此人" << endl;
	}
	else
	{
		string gender_s;
		if (contact->arr_p[ret].m_gender == 1)
			gender_s = "男";
		else
			gender_s = "女";
		cout << "姓名: " << contact->arr_p[ret].m_name
			<< "\t性别: " << gender_s 
            << "\t年龄: " << contact->arr_p[ret].m_age
			<< "\t电话: " << contact->arr_p[ret].m_phone 
            << "\t地址: " << contact->arr_p[ret].m_addr << endl;
	}
	system("pause");
	system("cls");
}

7.2 测试查找指定联系人

在switch case 语句中,case4里添加:

		case 4://查找联系人
			Find_contact_person(&m_contact);
			break;

测试效果如图

存在情况:

不存在情况:

8、修改联系人

功能描述:按照姓名重新修改指定联系人

修改联系人实现步骤

  • 封装修改联系人函数

  • 测试修改联系人功能

8.1 封装修改联系人函数

实现思路:查找用户输入的联系人,如果查找成功进行修改操作,查找失败提示查无此人

修改联系人代码:

//5、修改指定联系人信息
void Change_contact_person(struct Contact* contact)
{
	string name;
	cout << "请输入要修改的联系人姓名:";
	cin >> name;
	int ret = Check_isexist(name, contact);
	if (ret == -1)
	{
		cout << "查无此人" << endl;
	}
	else
	{
		string phone, addr;
		int age, gender;
//姓名
		cout << "请输入姓名:" << endl;
		cin >> name;
		contact->arr_p[ret].m_name = name;
//性别
		cout << "请输入性别:" << endl;
		cout << "1. 男" << endl;
		cout << "2. 女" << endl;
		while (1)
		{
			cin >> gender;
			if (gender == 1 || gender == 2)
			{
				contact->arr_p[ret].m_gender = gender;
				break;
			}
			cout << "输入错误,请重新输入" << endl;
		}
//年龄
		cout << "请输入年龄:" << endl;
		cin >> age;
		contact->arr_p[ret].m_age = age;
//联系方式
		cout << "请输入电话:" << endl;
		cin >> phone;
		contact->arr_p[ret].m_phone = phone;
//家庭住址
		cout << "请输入地址:" << endl;
		cin >> addr;
		contact->arr_p[ret].m_addr = addr;
		cout << "修改成功!";
	}
	system("pause");
	system("cls");
}

8.2 测试修改联系人功能

在switch case 语句中,case 5里添加:

		case 5://修改联系人
			Change_contact_person(&m_contact);
			break;

测试效果如图:

查不到指定联系人情况:

查找到联系人,并修改成功:

再次查看通讯录,确认修改完毕

9、清空联系人

功能描述:清空通讯录中所有信息

清空联系人实现步骤

  • 封装清空联系人函数

  • 测试清空联系人

9.1 封装清空联系人函数

实现思路: 将通讯录所有联系人信息清除掉,只要将通讯录记录的联系人数量置为0,做逻辑清空即可。

清空联系人代码:

//6、清空所有联系人
void Clean_contact_person(struct Contact* contact)
{
	contact->size_p = 0;
	cout << "通讯录已清空!" << endl;
	system("pause");
	system("cls");
}

9.2 测试清空联系人

在switch case 语句中,case 6 里添加:

		case 6://清空联系人
			Clean_contact_person(&m_contact);
			break;

测试效果如图:

清空通讯录

再次查看信息,显示记录为空

至此,通讯录管理系统完成!

下面是完整代码:

通讯录管理系统.h : 

#pragma once

#include <iostream>
#include <string>

using namespace std;

struct Person
{
	string m_name;
	int m_gender;
	int m_age;
	string m_phone;
	string m_addr;
};

#define Max 1000

struct Contact
{
	struct Person arr_p[Max];
	int size_p;
};

void Initiate(struct Contact* contact);
void Add_contact_person(struct Contact* contact);
void Show_contact_person(struct Contact* contact);
void Delete_contact_person(struct Contact* contact);
void Find_contact_person(struct Contact* contact);
void Change_contact_person(struct Contact* contact);
void Clean_contact_person(struct Contact* contact);

通讯录管理系统.cpp :

#include "通讯录管理系统.h"

void Menu()
{
	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;
}
int main()
{
	Contact m_contact;
	Initiate(&m_contact);
	int select = 0;
	while (1)
	{
		Menu();
		cout << "请选择功能:";
		cin >> select;
		switch (select)
		{
		case 1://添加联系人
			Add_contact_person(&m_contact);
			break;
		case 2://显示联系人
			Show_contact_person(&m_contact);
			break;
		case 3://删除联系人
			Delete_contact_person(&m_contact);
			break;
		case 4://查找联系人
			Find_contact_person(&m_contact);
			break;
		case 5://修改联系人
			Change_contact_person(&m_contact);
			break;
		case 6://清空联系人
			Clean_contact_person(&m_contact);
			break;
		case 0://退出通讯录
			cout << "欢迎下次继续使用" << endl;
			system("pause");
			return 0;
		default:
			cout << "选择错误,请重新选择" << endl;
			break;
		}
	}
	system("pause");
	return 0;
}

func.cpp :

#include "通讯录管理系统.h"

void Initiate(struct Contact* contact)
{
	contact->size_p = 0;
}

void Add_contact_person(struct Contact* contact)
{
	if (contact->size_p == Max)
	{
		cout << "通讯录已满" << endl;
		return;
	}
	else
	{
		string name, phone, addr;
		int age, gender;
		cout << "请输入姓名:" << endl;
		cin >> name;
		contact->arr_p[contact->size_p].m_name = name;
		cout << "请输入性别:" << endl;
		cout << "1. 男" << endl;
		cout << "2. 女" << endl;
		while (1)
		{
			cin >> gender;
			if (gender == 1 || gender == 2)
			{
				contact->arr_p[contact->size_p].m_gender = gender;
				break;
			}
			cout << "输入错误,请重新输入" << endl;
		}
		cout << "请输入年龄:" << endl;
		cin >> age;
		contact->arr_p[contact->size_p].m_age = age;
		cout << "请输入电话:" << endl;
		cin >> phone;
		contact->arr_p[contact->size_p].m_phone = phone;
		cout << "请输入地址:" << endl;
		cin >> addr;
		contact->arr_p[contact->size_p].m_addr = addr;
		contact->size_p++;
		cout << "添加成功!" << endl;
		system("pause");
		system("cls");
	}
}


void Show_contact_person(struct Contact* contact)
{
	if (contact->size_p == 0)
		cout << "通讯录为空" << endl;
	else
	{
		for (int i = 0; i < contact->size_p; i++)
		{
			string gender_s;
			if (contact->arr_p[i].m_gender == 1)
				gender_s = "男";
			else
				gender_s = "女";
			cout << "No." << i + 1 << "\t姓名: " << contact->arr_p[i].m_name
				<< "\t性别: " << gender_s << "\t年龄: " << contact->arr_p[i].m_age
				<< "\t电话: " << contact->arr_p[i].m_phone << "\t地址: " << contact->arr_p[i].m_addr << endl;
		}
	}
	system("pause");
	system("cls");
}

int Check_isexist(string name, struct Contact* contact)
{
	for (int i = 0; i < contact->size_p; i++)
	{
		if (!name.compare(contact->arr_p[i].m_name))
		{
			return i;
		}
	}
	return -1;
}


void Delete_contact_person(struct Contact* contact)
{
	string name;
	cout << "请输入要删除的联系人姓名:";
	cin >> name;
	int ret = Check_isexist(name, contact);
	if (ret == -1)
	{
		cout << "查无此人" << endl;
	}
	else
	{
		for (int i = ret; i < contact->size_p; i++)
		{
			contact->arr_p[i] = contact->arr_p[i + 1];
		}
		contact->size_p--;
		cout << "删除成功!" << endl;
	}
	system("pause");
	system("cls");
}

void Find_contact_person(struct Contact* contact)
{
	string name;
	cout << "请输入要查找的联系人姓名: ";
	cin >> name;
	int ret = Check_isexist(name, contact);
	if (ret == -1)
	{
		cout << "查无此人" << endl;
	}
	else
	{
		string gender_s;
		if (contact->arr_p[ret].m_gender == 1)
			gender_s = "男";
		else
			gender_s = "女";
		cout << "姓名: " << contact->arr_p[ret].m_name
			<< "\t性别: " << gender_s << "\t年龄: " << contact->arr_p[ret].m_age
			<< "\t电话: " << contact->arr_p[ret].m_phone << "\t地址: " << contact->arr_p[ret].m_addr << endl;
	}
	system("pause");
	system("cls");
}

void Change_contact_person(struct Contact* contact)
{
	string name;
	cout << "请输入要修改的联系人姓名:";
	cin >> name;
	int ret = Check_isexist(name, contact);
	if (ret == -1)
	{
		cout << "查无此人" << endl;
	}
	else
	{
		string phone, addr;
		int age, gender;
		cout << "请输入姓名:" << endl;
		cin >> name;
		contact->arr_p[ret].m_name = name;
		cout << "请输入性别:" << endl;
		cout << "1. 男" << endl;
		cout << "2. 女" << endl;
		while (1)
		{
			cin >> gender;
			if (gender == 1 || gender == 2)
			{
				contact->arr_p[ret].m_gender = gender;
				break;
			}
			cout << "输入错误,请重新输入" << endl;
		}
		cout << "请输入年龄:" << endl;
		cin >> age;
		contact->arr_p[ret].m_age = age;
		cout << "请输入电话:" << endl;
		cin >> phone;
		contact->arr_p[ret].m_phone = phone;
		cout << "请输入地址:" << endl;
		cin >> addr;
		contact->arr_p[ret].m_addr = addr;
		cout << "修改成功!";
	}
	system("pause");
	system("cls");
}

void Clean_contact_person(struct Contact* contact)
{
	contact->size_p = 0;
	cout << "通讯录已清空!" << endl;
	system("pause");
	system("cls");
}

  • 39
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于模块的简易通讯录管理系统的代码示例: input_module.py: ```python def input_contact_info(): name = input("请输入联系人姓名:") phone = input("请输入联系人电话:") email = input("请输入联系人邮箱:") return (name, phone, email) ``` output_module.py: ```python def output_contact_info(contact): print("联系人姓名:", contact[0]) print("联系人电话:", contact[1]) print("联系人邮箱:", contact[2]) ``` data_module.py: ```python import sqlite3 def create_table(): conn = sqlite3.connect("contacts.db") cursor = conn.cursor() cursor.execute("CREATE TABLE IF NOT EXISTS contacts (name TEXT, phone TEXT, email TEXT)") conn.commit() conn.close() def add_contact(contact): conn = sqlite3.connect("contacts.db") cursor = conn.cursor() cursor.execute("INSERT INTO contacts VALUES (?, ?, ?)", contact) conn.commit() conn.close() def delete_contact(name): conn = sqlite3.connect("contacts.db") cursor = conn.cursor() cursor.execute("DELETE FROM contacts WHERE name=?", (name,)) conn.commit() conn.close() def update_contact(contact): conn = sqlite3.connect("contacts.db") cursor = conn.cursor() cursor.execute("UPDATE contacts SET phone=?, email=? WHERE name=?", contact) conn.commit() conn.close() def search_contact(name): conn = sqlite3.connect("contacts.db") cursor = conn.cursor() cursor.execute("SELECT * FROM contacts WHERE name=?", (name,)) result = cursor.fetchone() conn.close() if result: return result else: return None def get_all_contacts(): conn = sqlite3.connect("contacts.db") cursor = conn.cursor() cursor.execute("SELECT * FROM contacts") results = cursor.fetchall() conn.close() return results ``` logic_module.py: ```python import input_module import output_module import data_module def add_contact(): contact = input_module.input_contact_info() data_module.add_contact(contact) def delete_contact(): name = input("请输入要删除联系人的姓名:") data_module.delete_contact(name) def update_contact(): name = input("请输入要修改联系人的姓名:") contact = input_module.input_contact_info() contact = (contact[1], contact[2], contact[0]) data_module.update_contact(contact) def search_contact(): name = input("请输入要查找联系人的姓名:") contact = data_module.search_contact(name) if contact: output_module.output_contact_info(contact) else: print("未找到联系人信息") def show_all_contacts(): contacts = data_module.get_all_contacts() for contact in contacts: output_module.output_contact_info(contact) ``` 通过上述四个模块的组合,我们可以实现一个简单通讯录管理系统,具有增删改查和查看所有联系人等功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值