C++通讯录(功能:增、删、查)

#include<iostream>
#include<string>
using namespace std;
#define MAX 1000
/*联系人结构体*/
struct Person
{
	string m_Name;
	int m_Age;
	int m_Sex;
	string m_Phone;
	string m_Address;
};
/*通讯录结构体*/
typedef struct Phones
{
	struct Person data;
	struct Phones *next;
	int length;
	int max_length;
} *Phone_ptr;
/*功能函数*/
Phone_ptr Head;
void showMenu();
void phone_init(Phone_ptr &L);
void insert_phone_number(Phone_ptr L);
void phone_print(Phone_ptr L);
bool phone_delete(Phone_ptr L);
void phone_search(Phone_ptr L);
/********************************
*函数名:main
*函数功能:通讯录的整体框架
*********************************/
int main()
{
	int a;
	bool flag;
	phone_init(Head);
	while (true)
	{
		system("cls");
		showMenu();
		cout << "请输入选项" << endl;
		cin >> a;

		switch (a)
		{
			case 1: //添加联系人
				insert_phone_number(Head);
				break;
			case 2: //显示联系人
				phone_print(Head);
				break;
			case 3: //删除联系人
			{
				flag = phone_delete(Head);
				if (flag)
				{
					cout << "删除成功" << endl;
				}
				else
				{
					cout << "删除失败" << endl;
				}
			}
				break;
			case 4: //查找联系人
				phone_search(Head);
				break;
			case 0: //退出通讯录
				cout << "欢迎下次使用\n";
				system("pause");
				return 0;
				break;
		}
		system("pause");
	}
	
	return 0;
}
/********************************
 *函数名:showMenu
 *函数功能:显示菜单
 ********************************/
void showMenu()
{
	cout << "***************************************" << endl;
	cout << "******** 1、添加联系人 ****************" << endl;
	cout << "******** 2、显示联系人 ****************" << endl;
	cout << "******** 3、删除联系人 ****************" << endl;
	cout << "******** 4、查找联系人 ****************" << endl;
	cout << "******** 0、退出通讯录 ****************" << endl;
}
/*******************************
*函数名:phone_init
*函数功能:通讯录初始化
********************************/
void phone_init(Phone_ptr &L)
{
	
	L = new struct Phones;
	L->length = 0;
	L->max_length = MAX;
	L->next = NULL;
}
/*******************************
*函数名:insert_phone_number
*函数功能:插入联系人信息
********************************/
void insert_phone_number(Phone_ptr L) 
{
	if (L == NULL)
	{
		cout << "false" << endl;
		return;
	}
	if (L->length <= L->max_length)
	{
		struct Phones *point = new struct Phones;
		cout << "请输入姓名: ";
		cin >> point->data.m_Name;
		cout << endl;

		cout << "请输入年龄: ";
		cin >> point->data.m_Age;
		cout << endl;

		cout << "请输入性别:1--男 2--女 ";
		cin >> point->data.m_Sex;
		cout << endl;

		cout << "请输入手机号码: ";
		cin >> point->data.m_Phone;
		cout << endl;

		cout << "请输入家庭住址: ";
		cin >> point->data.m_Address;
		cout << endl;
	
		point->next = L->next;
		L->next = point;
	}
	else
	{
		cout << "存储空间不足,请删除内容释放存储空间" << endl;
		return;
	}
}
/*******************************
*函数名:phone_print
*函数功能:打印通讯录
********************************/
void phone_print(Phone_ptr L)
{
	Phone_ptr sp = L->next;
	cout << "姓名\t" << "年龄\t" << "性别\t" << "手机号\t\t" << "家庭住址" << endl;
	while (sp != NULL)
	{
		cout << sp->data.m_Name << "\t" << sp->data.m_Age<<"\t" << sp->data.m_Sex<<"\t" << sp->data.m_Phone<<"\t"<<sp->data.m_Address << endl;
		sp=sp->next;
	}
}
/*******************************
*函数名称:phone_delete
*函数功能:删除指定联系人
********************************/
bool phone_delete(Phone_ptr L)
{
	if (L->next == NULL)
	{
		cout << "通讯录为空 ";
		return false;
	}
	else
	{
		string name;
		cout << "请输入要删除的联系人姓名: ";
		cin >> name;
		cout << endl;
		Phone_ptr temp = L->next;
		Phone_ptr ptr = L;
		while (temp != NULL)
		{
			if (temp->data.m_Name == name)
			{
				ptr->next = temp->next;
				return true;
			}
			else
			{
				ptr = ptr->next;
				temp = temp->next;
			}
		}
		return false;
	}
}
/*******************************
*函数名称:phone_search
*函数功能:查找指定联系人并打印
********************************/
void phone_search(Phone_ptr L)
{
	if (L->next == NULL)
	{
		cout << "通讯录为空 查找失败";
	}
	else
	{
		string name;
		int flag=0;
		cout << "请输入要查找联系人姓名: ";
		cin >> name;
		cout << endl;
		Phone_ptr temp = L->next;
		while (temp != NULL)
		{
			if (temp->data.m_Name == name)
			{
				cout << "姓名\t" << "年龄\t" << "性别\t" << "手机号\t\t" << "家庭住址" << endl;
				cout << temp->data.m_Name << "\t" << temp->data.m_Age << "\t" << temp->data.m_Sex \
					 << "\t" << temp->data.m_Phone << "\t" << temp->data.m_Address << endl;
				return;
			}
			else
			{
				temp = temp->next;
			}
		}
		if (temp == NULL && flag == 0)
		{
			cout << "联系人不存在" << endl;
			return;
		}
	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实训项目,满足以下要求 【要求】 (1)程序的主窗口如左图所示。 程序启动时,窗口左边的“姓名”列表框中显示了本软件中已保存的所有人员姓名,从中选择一个姓名,窗口左边的“详细信息”区域显示出此人的详细通讯录内容。 (2)窗口顶部“城市”和“性别”两个列表框中列出了可供选择的城市名称和姓名。使用这两个控件,可以筛选出感兴趣的内容。例如,在“城市”中选择“南京”,在性别中选择“男”,则在“姓名”列表框中只显示出程序所保存的住在南京的男性人员。选择“城市”和“性别”中的“全部”,则列出所有人员。 (3)单击“添加”按钮 ,弹出一个对话框。通过此对话框,可以添加新的通讯录条目。在添加新条目时,所在城市应从组合框中选择,若组合框中没有想要的城市,可以直接在组合框中键入。要求键入的新城市名能自动添加到“添加”对话框中“所在城市”组合框和主窗口中“城市”组合框的下拉列表中。 (4)在主窗口中点击“除”按钮 可以除当前显示的条目。 (5)加“保存”和“打开”按钮或菜单项,要求能够自动保存所做的添加和除操作。 (6)所有的数据保存在.txt文件中,并能读出。比如.txt文件的每一行保存一条记录。如:姓名|性别|生日…………【可选用CFile/CStdioFile类】 【提示】创建通讯类,包括姓名、性别、生日、所在城市、工作单位、办公电话、住宅电话等必要信息。
好的,下面是一个简单的通讯录管理程序的设计: ### 1. 定义联系人结构体 ```c++ struct Contact { string name; // 姓名 string phoneNum; // 电话号码 int age; // 年龄 string address; // 地址 }; ``` ### 2. 定义通讯录类 ```c++ class AddressBook { public: AddressBook(); // 构造函数 void addContact(); // 添加联系人 void deleteContact(); // 除联系人 void modifyContact(); // 修改联系人 void searchContact(); // 找联系人 void showAllContacts();// 显示所有联系人 void saveToFile(); // 保存到文件 void readFromFile(); // 从文件中读取 private: vector<Contact> contacts; // 联系人列表 string fileName; // 文件名 }; ``` ### 3. 实现通讯录类的方法 #### 3.1 构造函数 ```c++ AddressBook::AddressBook() { fileName = "contacts.txt"; readFromFile(); } ``` #### 3.2 添加联系人 ```c++ void AddressBook::addContact() { cout << "请输入姓名:"; string name; cin >> name; // 判断联系人是否已存在 for (auto c : contacts) { if (c.name == name) { cout << "联系人已存在!" << endl; return; } } cout << "请输入电话号码:"; string phoneNum; cin >> phoneNum; cout << "请输入年龄:"; int age; cin >> age; cout << "请输入地址:"; string address; cin >> address; Contact c = { name, phoneNum, age, address }; contacts.push_back(c); cout << "添加联系人成功!" << endl; } ``` #### 3.3 除联系人 ```c++ void AddressBook::deleteContact() { cout << "请输入要除的联系人姓名:"; string name; cin >> name; int index = -1; for (int i = 0; i < contacts.size(); i++) { if (contacts[i].name == name) { index = i; break; } } if (index == -1) { cout << "联系人不存在!" << endl; } else { contacts.erase(contacts.begin() + index); cout << "除联系人成功!" << endl; } } ``` #### 3.4 修改联系人 ```c++ void AddressBook::modifyContact() { cout << "请输入要修改的联系人姓名:"; string name; cin >> name; int index = -1; for (int i = 0; i < contacts.size(); i++) { if (contacts[i].name == name) { index = i; break; } } if (index == -1) { cout << "联系人不存在!" << endl; } else { cout << "请输入新的电话号码:"; string phoneNum; cin >> phoneNum; cout << "请输入新的年龄:"; int age; cin >> age; cout << "请输入新的地址:"; string address; cin >> address; Contact& c = contacts[index]; c.phoneNum = phoneNum; c.age = age; c.address = address; cout << "修改联系人成功!" << endl; } } ``` #### 3.5 找联系人 ```c++ void AddressBook::searchContact() { cout << "请输入要找的联系人姓名:"; string name; cin >> name; for (auto c : contacts) { if (c.name == name) { cout << "姓名:" << c.name << endl; cout << "电话号码:" << c.phoneNum << endl; cout << "年龄:" << c.age << endl; cout << "地址:" << c.address << endl; return; } } cout << "联系人不存在!" << endl; } ``` #### 3.6 显示所有联系人 ```c++ void AddressBook::showAllContacts() { if (contacts.empty()) { cout << "通讯录为空!" << endl; } else { cout << "通讯录列表:" << endl; for (auto c : contacts) { cout << "姓名:" << c.name << endl; cout << "电话号码:" << c.phoneNum << endl; cout << "年龄:" << c.age << endl; cout << "地址:" << c.address << endl; cout << endl; } } } ``` #### 3.7 保存到文件 ```c++ void AddressBook::saveToFile() { ofstream out(fileName); if (out.is_open()) { for (auto c : contacts) { out << c.name << " " << c.phoneNum << " " << c.age << " " << c.address << endl; } out.close(); cout << "保存到文件成功!" << endl; } else { cout << "无法打开文件!" << endl; } } ``` #### 3.8 从文件中读取 ```c++ void AddressBook::readFromFile() { ifstream in(fileName); if (in.is_open()) { while (!in.eof()) { Contact c; in >> c.name >> c.phoneNum >> c.age >> c.address; if (!c.name.empty()) { contacts.push_back(c); } } in.close(); cout << "从文件中读取成功!" << endl; } else { cout << "无法打开文件!" << endl; } } ``` ### 4. 用户界面 ```c++ int main() { AddressBook ab; while (true) { 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 << "请选择操作:"; int choice; cin >> choice; switch (choice) { case 0: cout << "退出成功!" << endl; return 0; case 1: ab.addContact(); break; case 2: ab.deleteContact(); break; case 3: ab.modifyContact(); break; case 4: ab.searchContact(); break; case 5: ab.showAllContacts(); break; case 6: ab.saveToFile(); break; default: cout << "无效操作!" << endl; break; } } return 0; } ``` 以上就是一个简单的通讯录管理程序的设计。你可以根据自己的需求进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值