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语言实现通讯录静态版本与动态版本

一、静态版本

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"

void menu()
{
	printf("*****************************\n");
	printf("*****************************\n");
	printf("***  1.添加       2.删除  ***\n");
	printf("***  3.显示       4.修改  ***\n");
	printf("***  5.查找       0.退出  ***\n");
	printf("*****************************\n");
	printf("*****************************\n");

}
enum option
{
	EXIT,
	ADD,
	DELETE,
	SHOW,
	MODIFY,
	SEARCH
};
int main()
{
	int input = 0;
	struct Contact con;
	Initcontact(&con);
	do {
		menu();	
		printf("请输入:");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			Addcontact(&con);
			break;
		case DELETE:
			Delecontact(&con);
			break;
		case SHOW:
			Showcontact(&con);
			break;
		case MODIFY:
			Modicontact(&con);
			break;
		case SEARCH:
			Searcontact(&con);
			break;
		case EXIT:
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (input);
	return 0;
}

contact.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
#define MAX 1000
void Initcontact(struct Contact* pc)
{
	pc->sz = 0;
	memset(pc->data, 0, sizeof(pc->data));
}
void Addcontact(struct Contact* pc)
{
	if (MAX == pc->sz)
	{
		printf("通讯录已满\n");
		return;
	}
	else
	{
		printf("请输入姓名:");
		scanf("%s", pc->data[pc->sz].name);
		printf("请输入年龄:");
		scanf("%d", &(pc->data[pc->sz].age));
		printf("请输入性别:");
		scanf("%s", pc->data[pc->sz].sex);
		printf("请输入电话号码:");
		scanf("%s", pc->data[pc->sz].tele);
		printf("请输入地址:");
		scanf("%s", pc->data[pc->sz].addr);
	}
	pc->sz++;
	printf("添加成功\n");
	printf("\n");
}
void Showcontact(struct Contact* pc)
{
	printf("%-15s\t%-5s\t%-5s\t%-15s\t%-20s\n", "姓名", "年龄", "性别", "电话号码", "地址");
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-15s\t%-5d\t%-5s\t%-15s\t%-20s\n",
			pc->data[i].name,
			pc->data[i].age,
			pc->data[i].sex,
			pc->data[i].tele,
			pc->data[i].addr);
	}
	printf("\n");

}
int Throucontact(const struct Contact* pc,char* name)
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		if (strcmp(pc->data[i].name,name)==0)
		{
			return i;
		}
	}
	return -1;
}
void Delecontact(struct Contact* pc)
{
	printf("请输入要删除联系人的姓名:");
	char name[NAME_MAX] = {0};
	scanf("%s", name);
	int ret = Throucontact(pc, name);
	if (0 == pc->sz)
	{
		printf("当前无联系人,无法删除\n");
	}
	else if (ret == -1)
	{
		printf("通讯录中无此联系人\n");
	}
	else
	{
		int i = 0;
		for (i = ret; i < pc->sz - 1; i++)
		{
			pc->data[i] = pc->data[i + 1];
		}
		pc->sz--;
		printf("删除成功\n");
		printf("\n");
	}
}
void Searcontact(struct Contact* pc)
{
	printf("请输入要查找联系人的姓名:");
	char name[NAME_MAX] = { 0 };
	scanf("%s", name);
	int ret = Throucontact(pc, name);
	if (ret == -1)
	{
		printf("通讯录中无此联系人\n");
	}
	else
	{
		printf("%-15s\t%-5s\t%-5s\t%-15s\t%-20s\n", "姓名", "年龄", "性别", "电话号码", "地址");
		printf("%-15s\t%-5d\t%-5s\t%-15s\t%-20s\n",
			pc->data[ret].name,
			pc->data[ret].age,
			pc->data[ret].sex,
			pc->data[ret].tele,
			pc->data[ret].addr);
	}
	printf("\n");
}
void Modicontact(struct Contact* pc)
{
	printf("请输入要修改联系人的姓名:");
	char name[NAME_MAX] = { 0 };
	scanf("%s", name);
	int ret = Throucontact(pc, name);
	if (ret == -1)
	{
		printf("通讯录中无此联系人\n");
	}
	else
	{
		printf("请输入修改后的姓名:");
		scanf("%s", pc->data[ret].name);
		printf("请输入修改后的年龄:");
		scanf("%d", &(pc->data[ret].age));
		printf("请输入修改后的性别:");
		scanf("%s", pc->data[ret].sex);
		printf("请输入修改后的电话号码:");
		scanf("%s", pc->data[ret].tele);
		printf("请输入修改后的地址:");
		scanf("%s", pc->data[ret].addr);
	}
	printf("修改成功\n");
	printf("\n");
}

contact.h

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#define MAX 1000
#define NAME_MAX 20
#define SEX_MAX 5
#define TELE_MAX 15
#define ADDR_MAX 30
void Initcontact(struct Contact* pc);
struct PeoInfo
{
	char name[NAME_MAX];
	int age;
	char sex[SEX_MAX];
	char tele[TELE_MAX];
	char addr[ADDR_MAX];
};
struct Contact
{
	struct PeoInfo data[MAX];
	int sz;
};

//?
void Addcontact(struct Contact* pc);
void Showcontact(struct Contact* pc);
void Delecontact(struct Contact* pc);
void Searcontact(struct Contact* pc);
void Modicontact(struct Contact* pc);

二、动态版本

#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"

void menu()
{
	printf("*****************************\n");
	printf("*****************************\n");
	printf("***  1.添加       2.删除  ***\n");
	printf("***  3.显示       4.修改  ***\n");
	printf("***  5.查找       0.退出  ***\n");
	printf("*****************************\n");
	printf("*****************************\n");

}
enum option
{
	EXIT,
	ADD,
	DELETE,
	SHOW,
	MODIFY,
	SEARCH
};
int main()
{
	int input = 0;
	struct Contact con;
	Initcontact(&con);
	do {
		menu();
		printf("请输入:");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			Addcontact(&con);
			break;
		case DELETE:
			Delecontact(&con);
			break;
		case SHOW:
			Showcontact(&con);
			break;
		case MODIFY:
			Modicontact(&con);
			break;
		case SEARCH:
			Searcontact(&con);
			break;
		case EXIT:
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (input);
	return 0;
}

contact.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
#define MAX 1000
#define DEFAULT_SZ 3

void Initcontact(struct Contact* pc)
{
	pc->sz = 0;
	pc->data=(struct PeoInfo*)malloc(DEFAULT_SZ*sizeof(struct PeoInfo));
	pc->capacity = DEFAULT_SZ;
}
void Addcontact(struct Contact* pc)
{
	if (pc->sz == pc->capacity)
	{
		struct PeoInfo* ptr = (struct PeoInfo*)realloc(pc->data, (pc->capacity + 2) * sizeof(struct PeoInfo));
		if (ptr != NULL)
		{
			pc->data = ptr;
			pc->capacity += 2;

			printf("增容成功\n");
		}
		else
		{
			return;
		}
	}
	else
	{
		printf("请输入姓名:");
		scanf("%s", pc->data[pc->sz].name);
		printf("请输入年龄:");
		scanf("%d", &(pc->data[pc->sz].age));
		printf("请输入性别:");
		scanf("%s", pc->data[pc->sz].sex);
		printf("请输入电话号码:");
		scanf("%s", pc->data[pc->sz].tele);
		printf("请输入地址:");
		scanf("%s", pc->data[pc->sz].addr);
	}
	pc->sz++;
	printf("添加成功\n");
	printf("\n");
}
void Showcontact(struct Contact* pc)
{
	printf("%-15s\t%-5s\t%-5s\t%-15s\t%-20s\n", "姓名", "年龄", "性别", "电话号码", "地址");
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-15s\t%-5d\t%-5s\t%-15s\t%-20s\n",
			pc->data[i].name,
			pc->data[i].age,
			pc->data[i].sex,
			pc->data[i].tele,
			pc->data[i].addr);
	}
	printf("\n");

}
void DestroyContact(struct Contact* pc)
{
	free(pc->data);
	pc->data = NULL;
	pc->capacity = 0;
	pc->sz = 0;
}
int Throucontact(const struct Contact* pc, char* name)
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		if (strcmp(pc->data[i].name, name) == 0)
		{
			return i;
		}
	}
	return -1;
}
void Delecontact(struct Contact* pc)
{
	printf("请输入要删除联系人的姓名:");
	char name[NAME_MAX] = { 0 };
	scanf("%s", name);
	int ret = Throucontact(pc, name);
	if (0 == pc->sz)
	{
		printf("当前无联系人,无法删除\n");
	}
	else if (ret == -1)
	{
		printf("通讯录中无此联系人\n");
	}
	else
	{
		int i = 0;
		for (i = ret; i < pc->sz - 1; i++)
		{
			pc->data[i] = pc->data[i + 1];
		}
		pc->sz--;
		printf("删除成功\n");
		printf("\n");
	}
}
void Searcontact(struct Contact* pc)
{
	printf("请输入要查找联系人的姓名:");
	char name[NAME_MAX] = { 0 };
	scanf("%s", name);
	int ret = Throucontact(pc, name);
	if (ret == -1)
	{
		printf("通讯录中无此联系人\n");
	}
	else
	{
		printf("%-15s\t%-5s\t%-5s\t%-15s\t%-20s\n", "姓名", "年龄", "性别", "电话号码", "地址");
		printf("%-15s\t%-5d\t%-5s\t%-15s\t%-20s\n",
			pc->data[ret].name,
			pc->data[ret].age,
			pc->data[ret].sex,
			pc->data[ret].tele,
			pc->data[ret].addr);
	}
	printf("\n");
}
void Modicontact(struct Contact* pc)
{
	printf("请输入要修改联系人的姓名:");
	char name[NAME_MAX] = { 0 };
	scanf("%s", name);
	int ret = Throucontact(pc, name);
	if (ret == -1)
	{
		printf("通讯录中无此联系人\n");
	}
	else
	{
		printf("请输入修改后的姓名:");
		scanf("%s", pc->data[ret].name);
		printf("请输入修改后的年龄:");
		scanf("%d", &(pc->data[ret].age));
		printf("请输入修改后的性别:");
		scanf("%s", pc->data[ret].sex);
		printf("请输入修改后的电话号码:");
		scanf("%s", pc->data[ret].tele);
		printf("请输入修改后的地址:");
		scanf("%s", pc->data[ret].addr);
	}
	printf("修改成功\n");
	printf("\n");
}

contact.h

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 1000
#define NAME_MAX 20
#define SEX_MAX 5
#define TELE_MAX 15
#define ADDR_MAX 30
void Initcontact(struct Contact* pc);
struct PeoInfo
{
	char name[NAME_MAX];
	int age;
	char sex[SEX_MAX];
	char tele[TELE_MAX];
	char addr[ADDR_MAX];
};
struct Contact
{
	struct PeoInfo data[MAX];
	int sz;
	int capacity;
};

//添加联系人
void Addcontact(struct Contact* pc);
void Showcontact(struct Contact* pc);
void Delecontact(struct Contact* pc);
void Searcontact(struct Contact* pc);
void Modicontact(struct Contact* pc);

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

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