IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++通讯录实现 -> 正文阅读

[C++知识库]c++通讯录实现

//通讯录       
//通讯录联系人信息通过数据文件读写,程序结束保存
// 通讯录中能够存放1000人的信息,每个人的信息包括:
//名字+年龄+性别+电话+地址。通讯录中能够增加人的
//信息;删除指定人的信息;修改指定人的信息;查找
//指定人的信息;排序通讯录信息 
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
#define Inimax 50 //通讯录初始化可存储联系人数
struct personinfor
{
	char name[10];
	char sex[5];
	int age;
	char telenumber[20];
	char addr[20];
};
struct contact
{
	personinfor *data;//指向动态开辟空间,用以存储联系人信息
	int count;//记录当前通讯录的人数
	int capacity;//记录当前通讯录的最大容量
};
void menu()
{
	cout << "***************************"<<endl;
	cout << "******1.增加联系人信息*****"<<endl;
	cout << "******2.删除联系人信息*****"<<endl;
	cout << "******3.查找联系人信息*****"<<endl;
	cout << "******4.修改联系人信息*****"<<endl;
	cout << "******5.显示通讯录信息*****"<<endl;
	cout << "**********0.退出***********"<<endl;
	cout << "***************************"<<endl;
}
void Initcontact(contact&percontact)//初始化通讯录
{
	percontact.data=new personinfor[Inimax];
	if (percontact.data == NULL)
	{
		perror("出错:");
		return;
	}
	percontact.count = 0;
	percontact.capacity = Inimax;
	FILE* p = fopen("contact.dat", "r");
	if (p == NULL)
	{
		perror("出错:");
		return;
	}
	personinfor temp = { 0 };
	while (fread(&temp, sizeof(personinfor), 1, p))//加载数据文件
	{
		if (percontact.count == percontact.capacity)//扩容
		{
			personinfor* ndata = (personinfor*)realloc(percontact.data, 
				(percontact.capacity+1)* sizeof(percontact) * Inimax);
			if (ndata != NULL)
			{
				percontact.data = ndata;
				percontact.capacity += Inimax;
			}
			else
			{
				perror("加载文件出错:");
				return;
			}
		}
		percontact.data[percontact.count] = temp;
		percontact.count++;
	}
}
void Addpercontact(contact&percontact)//增加联系人信息
{
	if (percontact.count == percontact.capacity)//扩容
	{
		personinfor* ndata = (personinfor*)realloc(percontact.data,
			(percontact.capacity + 1) * sizeof(percontact) * Inimax);
		if (ndata != NULL)
		{
			percontact.data = ndata;
			percontact.capacity += Inimax;
			cout << "扩容成功" << endl;
		}
		else
		{
			perror("出错:");
			cout << "增加联系人失败" << endl;
			return;
		}
	}
	cout << "请输入名字:";
	cin >> percontact.data[percontact.count].name;
	cout << "请输入性别:";
	cin >> percontact.data[percontact.count].sex;
	cout << "请输入年龄:";
	cin >> percontact.data[percontact.count].age;
	cout << "请输入电话:";
	cin >> percontact.data[percontact.count].telenumber;
	cout << "请输入地址:";
	cin >> percontact.data[percontact.count].addr;
	percontact.count++;
	cout << "联系人信息增加成功"<<endl;
}
void Delpercontact(contact& percontact)//删除联系人信息
{
	if (percontact.count == 0)
	{
		cout << "通讯录为空1,无需删除" << endl;
		return;
	}
	char delname[20];
	cout << "请输入所要删除联系人名字:";
	cin >> delname;
	int i;
	for (i = 0;i < percontact.count;)
	{
		if (strcmp(percontact.data[i].name,delname)==0)
		{
			cout << "目标删除的联系人存在,进行删除" << endl;
			int j;
			for (j = i; j < percontact.count - 1;j++)
				percontact.data[j] = percontact.data[j + 1];
			percontact.count--;
			cout << "删除成功" << endl;
			break;
		}
		i++;
	}
	if (i == percontact.count+1)
		cout << "目标删除联系人未查询到,通讯录未有相关信息存储" << endl;
}
void Searchpercontact(contact& percontact)//查询联系人信息
{
	char searname[20];
	cout << "请输入所要查询的联系人名字:";
	cin >> searname;
	int i;
	for (i = 0;i < percontact.count;)
	{
		if (strcmp(percontact.data[i].name,searname)==0)
		{
			cout << "目标联系人已查询到" << endl;
			cout << setiosflags(ios::left) << setw(8) << "名字" <<
				setw(5) << "性别" << setw(5) << "年龄" << setw(12) <<
				"电话" << setw(9) << "地址" << endl;
			cout << setiosflags(ios::left) << setw(8) <<
				percontact.data[i].name << setw(5) << percontact.data[i].sex
				<< setw(5) << percontact.data[i].age << setw(12) <<
				percontact.data[i].telenumber << setw(9) << percontact.data[i].addr
				<< endl;
			break;
		}
		i++;
	}
	if (i == percontact.count+1)
		cout << "目标联系人未查询到,通讯录未有相关信息存储" << endl;
}
void Modifpercontact(contact& percontact)//修改联系人信息
{
	char modifname[20];
	cout << "请输入所要修改信息的联系人姓名";
	cin >> modifname;
	int i = 0;
	for (i = 0;i < percontact.count;i++)
	{
		if (strcmp(percontact.data[i].name, modifname) == 0)
		{
			cout << "所要修改信息的联系人存在,请输入你所要修改的信息项目:" << endl;
			cout << "   *****1.性别***2.年龄***3.电话***4.地址*****" << endl;
			int j = 0;
			cin >> j;
			switch (j)
			{
			case 1:
				cout << "性别修改项目确定,输入修改信息:" << endl;
				cin>> percontact.data[i].sex;
				break;
			case 2:
				cout << "年龄修改项目确定,输入修改信息:" << endl;
				cin >> percontact.data[i].age;
				break;
			case 3:
				cout << "电话修改项目确定,输入修改信息:" << endl;
				cin >> percontact.data[i].telenumber;
				break;
			case 4:
				cout << "地址修改项目确定,输入修改信息:" << endl;
				cin >> percontact.data[i].addr;
				break;
			default:
				cout << "无该选项,请重新选择" << endl;
				break;
			}
		}
	}
}
void Printpercontact(const contact& percontact)//显示通讯录信息
{
	cout << setiosflags(ios::left) << setw(8) << "名字" <<
		setw(5) << "性别" << setw(5) << "年龄" << setw(12) <<
		"电话" << setw(9) << "地址" << endl;
	int i = 0;
	for(i=0;i<percontact.count;i++)
		cout << setiosflags(ios::left) << setw(8) <<
		percontact.data[i].name <<setw(5) <<percontact.data[i].sex
		<< setw(5) << percontact.data[i].age << setw(12) <<
		percontact.data[i].telenumber<< setw(9) <<percontact.data[i].addr 
		<< endl;
}
void Exitpercontact(contact& percontact)//退出保存通讯录
{
	FILE* p = fopen("contact.dat", "w");
	if (p == NULL)
	{
		perror("出错:");
			return;
	}
	int i = 0;
	for (i = 0;i < percontact.count;i++)
		fwrite(percontact.data + i, sizeof(personinfor), 1, p);//保存到数据文件
	fclose(p);
	p = NULL;
}
int main()
{
	int input = 0;
	contact percontact;
	Initcontact(percontact);//初始化通讯录
	do
	{
		menu();
		cout << "请选择: ";
		cin >> input;
		switch (input)
		{
		case 1://增加联系人信息
			Addpercontact(percontact);
			break;
		case 2://删除联系人信息
			Delpercontact(percontact);
				break;
		case 3://查找联系人信息
			Searchpercontact(percontact);
			break;
		case 4://修改联系人信息
			Modifpercontact(percontact);
			break;
		case 5://显示通讯录信息
			Printpercontact(percontact);
			break;
		case 0://退出保存通讯录信息
			Exitpercontact(percontact);
			break;
		default:
			cout << "无该选项,请重新选择";
		}
	} while (input);
	return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:12:28  更:2022-02-26 11:15:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:07:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码