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语言结构体实现简单通讯录管理系统

效果如图:

?代码及详情如下:


#include<stdio.h>
#include<string.h>
#include<stdlib.h>

/*通讯录管理
问题描述:利用线性表实现一个通讯录管理。
要求:
1)实现通信录的建立、增加、删除、修改、查询等功能 ;
2) 能够实现简单的菜单交互,即可以根据用户输入的命令,选择不同的操作;
3) 能够保存每次更新的数据;
4) 编写main()函数测试操作的正确性。*/

typedef struct people {//定义联系人结构体
	char name[20];//名字
	char tel[20];//电话
}P;
P num[100];//定义结构体数组,可以存100个联系人的信息
int i=0;//用于作联系人的序号,或者可以判断联系人个数是否到达了最大值

//函数声明
void menu();
void add();
void del();
void find();
void edit();
void print();

int main() {
	system("title 通讯录管理系统");
	int in;//选择值
	while (1) {
		menu();//菜单
		scanf("%d", &in);
		switch (in) {
		case 0:return;			//退出系统
		case 1:add(); break;	//添加联系人
		case 2:del(); break;	//删除联系人
		case 3:find(); break;	//查找联系人
		case 4:edit(); break;	//编辑联系人
		case 5:print(); break;	//打印通讯录
		default:printf("输入错误,请重新输入:\n"); break;
		}
	}
	return 0;
}
//菜单
void menu() {
	printf("================================\n");
	printf("\t通讯录管理系统\n");
	printf("\t 0.退出通讯录\n");
	printf("\t 1.添加联系人\n");
	printf("\t 2.删除联系人\n");
	printf("\t 3.查找联系人\n");
	printf("\t 4.修改联系人\n");
	printf("\t 5.查看通讯录\n");
	printf("================================\n");
	printf("请选择:");
}
//与用户交互、显示输出的话语(我这里是将函数里的输出语句都写在了一个函数里,通过调用来显示,让函数显得整洁一点)
void Printf(double m) {
	if (m == 0) printf("该通讯录已经装满了!\n");
	if (m == 0.1) printf("当前没有联系人!\n");
	if (m == 1.1) printf("请输入联系人的姓名:\n");
	if (m == 1.2) printf("请输入联系人的电话:\n");
	if (m == 1.3) printf("添加成功!是否继续添加 Y/N:\n");
	if (m == 2.1) printf("请输入要删除的联系人姓名:\n");
	if (m == 2.2) printf("确认删除以下信息?\n");
	if (m == 2.3) printf("1.确认 2.返回\n");
	if (m == 2.4) printf("删除成功!\n");
	if (m == 2.5) printf("没有找到该联系人!\n");
	if (m == 3.1) printf("请输入要查找的联系人姓名:\n");
	if (m == 3.2) printf("查找成功!\n");
	if (m == 3.3) printf("经查无此人!\n");
	if (m == 4.1) printf("请输入要修改的联系人姓名:\n");
	if (m == 4.2) printf("当前联系人信息为:\n");
	if (m == 4.3) printf("是否确认修改?Y/N:\n");
	if (m == 4.4) printf("请输入新的姓名:\n");
	if (m == 4.5) printf("请输入新的电话:\n");
	if (m == 4.6) printf("修改成功!当前联系人信息为:\n");
	if (m == 4.7) printf("没有该联系人!\n");
}
//判断字符串是否相等,用于查询、删除、编辑等操作
int my_strcmp(char name[],int j) {	//接收输入的名字与该结构体数组下标
	char* p1 = name;				//strcmp参数是指针,所以将他们用指针表示
	char* p2 = (char*)&num[j];
	if (strcmp(p1, p2) == 0) {		//strcmp相等就返回0
		return 0;
	}
	return 1;
}
//打印单个人的信息,用于删除和编辑操作
void print2(int j) {
	printf("序号\t姓名\t\t电话\n");
	printf("%2d\t%s\t\t%s\n", (j+1),num[j].name, num[j].tel);
}
//1.增加联系人
void add() {
	if (i > 100) {							//如果通讯录满了就不能在添加了
		Printf(0);							//警告提示
		return;
	}
	char chose;								//用于判断是否要继续添加
	while (1) {
		Printf(1.1);						//提示输入名字
		scanf("%s", &num[i].name);
		getchar();							//清除缓存区
		Printf(1.2);						//提示输入电话
		scanf("%s", &num[i].tel);
		getchar();							//清除缓冲区
		i++;								//添加一个联系人就加一
		Printf(1.3);						//提示是否继续添加
		scanf("%c", &chose);
		if (chose == 'y' || chose == 'Y') {	//选择y或Y就继续添加,其他值退出
			continue;						//结束本次循环,回到判断条件处
		}
		return;
	}
}
//删除的详细操作,将该联系人的信息变成后一个联系人,就算删除成功
void del2(int j) {
		for (j; j < i; j++) {
			num[j] = num[j + 1];
	}
}
//2.删除联系人
void del() {
	if (i == 0) {							//判断当前是否有联系人
		Printf(0.1);
		return;
	}
	char name[20];							//用来接收输入的要删除的联系人姓名
	int chose=0;							//用作判断
	Printf(2.1);							//删除的姓名
	scanf("%s", name);
	for (int j = 0; j < i; j++) {
		if (my_strcmp(name,j) == 0) {		//在数组里查找与输入名相同的元素
			Printf(2.2);					//提示当前联系人信息
			print2(j);						//显示当前的联系人信息
			Printf(2.3);					//提示是否确认删除
			scanf("%d", &chose);
			if (chose == 1) {
				del2(j);					//进行删除操作
				Printf(2.4);				//提示删除成功
				i--;						//联系人的个数要减一
				return;						
			}
		}
	}
	Printf(2.5);							//没有找到目标,提示没有此人
	return;
}
//3.查找
void find() {
	if (i == 0) {							//判断当前是否有联系人
		Printf(0.1);
		return;
	}
	Printf(3.1);							//提示输入查找姓名
	char name[20];							//接收姓名
	scanf("%s", name);
	for (int j = 0; j < i; j++) {
		if (my_strcmp(name,j) == 0) {		//查找与输入姓名相同的元素
			Printf(3.2);					//提示找到了目标联系人
			print2(j);						//显示该联系人的信息
			return;
		}
	}
	Printf(3.3);							//提示没有找到联系人
}
//4.修改
void edit() {
	if (i == 0) {							//判断当前是否有联系人
		Printf(0.1);
		return;
	}
	Printf(4.1);							//输入编辑姓名
	char name[20];							//接收姓名
	char chose;								//用于选择
	scanf("%s", name);
	getchar();								//清除缓存区
	for (int j = 0; j < i; j++) {
		if (my_strcmp(name, j) == 0) {		//查找与输入姓名相同的元素
			Printf(4.2);					//提示找到此人
			print2(j);						//输入此人信息
			Printf(4.3);					//提示是否确认编辑
			scanf("%c", &chose);			//输入选择
			if (chose == 'y' || chose == 'Y') {
				Printf(4.4);				//提示输入新姓名
				scanf("%s", &num[j].name);	//输入新姓名
				Printf(4.5);				//提示输入新电话
				scanf("%s", &num[j].tel);	//输入新电话
				Printf(4.6);				//提示编辑成功
				print2(j);					//显示新联系人信息
				return;
			}
		}
	}
	Printf(4.7);							//提示没有此人
}
//5.显示通讯录
void print() {
	if (i == 0) {							//判断当前是否有联系人
		Printf(0.1);
		return;
	}
	int j = 0;								//作数组下标,从第一个元素开始输出
	printf("序号\t姓名\t\t电话\n");
	printf("----\t----\t\t----\n");
	for (j = 0; j < i; j++) {
		printf("%2d\t%s\t\t%s\n", (j + 1), num[j].name, num[j].tel);
	}
}


欢迎指出问题。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 10:40:43  更:2021-09-10 10:41:33 
 
开发: 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/23 20:56:18-

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