通讯录动态实现
发布日期:2021-09-19 03:18:17 浏览次数:3 分类:技术文章

本文共 5007 字,大约阅读时间需要 16 分钟。

变量的存储可分为静态动态俩种方式,

静态存储:指在程序运行期间分配固定的存储空间,即在定义时就分定存储单元,并一直保持不变,直至程序结束。(全局变量)

动态存储:在程序执行过程中才分配存储单元, 使用完毕就立即释放。(形参)

contact.h

#ifndef __CONTACT_H__#define __CONTACT_H__#pragma warning(disable:4996)#include
#include
#include
#define NAME_MAX 20#define SEX_MAX 5#define TELE_MAX 12#define ADDR_MAX 25#define MAX 1000#define DEFAULT_SZ 3#define DEFAULT_INC 2typedef struct PerInfo{ char name[NAME_MAX]; int age; char sex[SEX_MAX]; char tele[TELE_MAX]; char addr[ADDR_MAX];}PerInfo;//typedef struct Contact//{// PerInfo data[MAX];// int size;// int capacity;//}Contact,*pcon;typedef struct Contact{ PerInfo *data; int size; int capacity;}Contact, *pcon;void InitContact(pcon pcon);void CheckContact(pcon pcon);void DestroyContact(pcon pcon);void AddContact(pcon pcon);//增void DisplayContact(pcon pcon);void DelContact(pcon pcon);//删int Find(pcon pcon,char *name);void SearchContact(pcon pcon);//查void ModifyContact(pcon pcon);//改void Sort(pcon pcon);void Clear(pcon pcon);#endif __CONTACT_H__
函数实现

contact.c

#include"contact.h"#pragma warning(disable:4996)void InitContact(pcon pcon){	pcon->size = 0;	pcon->capacity = DEFAULT_INC;	pcon->data = (PerInfo*)malloc(pcon->capacity*sizeof(PerInfo));	if (pcon->data == NULL)	{		memset(pcon->data, 0, pcon->capacity*sizeof(PerInfo));		exit(EXIT_FAILURE);	}}void CheckContact(pcon pcon){	PerInfo* tmp=0;	if (pcon->size == pcon->capacity)	{		realloc(pcon->data, pcon->capacity + DEFAULT_INC);		if (tmp == NULL)		{			;		}		else		{			pcon->data = tmp;		}		pcon->capacity += DEFAULT_INC;	}}void DestroyContact(pcon pcon){	if (pcon->data != NULL)	{		free(pcon->data);		pcon->data = NULL;	}}void AddContact(pcon pcon){	if (pcon->size >= MAX)	{		printf("the contact is full\n");		return;	}	printf("please enter name\n");	scanf("%s", pcon->data[pcon->size].name);	printf("please enter age\n");	scanf("%d",&( pcon->data[pcon->size].age));	printf("please enter sex\n");	scanf("%s", pcon->data[pcon->size].sex);	printf("please enter tele\n");	scanf("%s", pcon->data[pcon->size].tele);	printf("please enter addr\n");	scanf("%s", pcon->data[pcon->size].addr);	pcon->size++;	printf("success\n");}void DisplayContact(pcon pcon){	int i = 0;	for (i = 0; i < pcon->size; i++)	{		printf("name:%s\n", pcon->data[i].name);		printf("age:%d\n", pcon->data[i].age);		printf("sex:%s\n", pcon->data[i].sex);		printf("tele:%s\n", pcon->data[i].tele);		printf("addr:%s\n", pcon->data[i].addr);	}}int Find(pcon pcon, char *name){	int i = 0;	for (i = 0; i < pcon->size; i++)	{		if (strcmp(pcon->data[i].name, name) == 0)		{			return i;		}	}	return -1;}void DelContact(pcon pcon){	if (pcon->size == 0)	{		printf("the contact is empty");		return;	}	char name[NAME_MAX];	int j = 0;	printf("请输入要删除的名字\n");	scanf("%s", name);	int pos = Find(pcon, name);	if (pos == -1)	{		printf("找不到要删除的名字\n");		return;	}	for (j = pos; j < pcon->size; j++)	{		pcon->data[j] = pcon->data[j + 1];	}	pcon->size--;	printf("删除成功\n");}void SearchContact(pcon pcon){	char name[NAME_MAX] = {0};	int pos = 0;	printf("请输入要查找的姓名\n");	scanf("%s", &name);	pos = Find(pcon, name);	if (pos == -1)	{		printf("找不到要查找的姓名\n");		return;	}	else	{		printf("name:%s\n", pcon->data[pos].name);		printf("age:%d\n", pcon->data[pos].age);		printf("sex:%s\n", pcon->data[pos].sex);		printf("tele:%s\n", pcon->data[pos].tele);		printf("addr:%s\n", pcon->data[pos].addr);	}}void ModifyContact(pcon pcon){	char name[NAME_MAX] = { 0 };	int pos = 0;	printf("请输入要修改的姓名\n");	scanf("%s", &name);	pos = Find(pcon, name);	if (pos == -1)	{		printf("找不到要修改的姓名\n");		return;	}	else	{		printf("please enter name\n");		scanf("%s", pcon->data[pos].name);		printf("please enter age\n");		scanf("%d", &(pcon->data[pos].age));		printf("please enter sex\n");		scanf("%s", pcon->data[pos].sex);		printf("please enter tele\n");		scanf("%s", pcon->data[pos].tele);		printf("please enter addr\n");		scanf("%s", pcon->data[pos].addr);	}}void Sort(pcon pcon){	int i = 0;	int j = 0;	for (i = 0; i < pcon->size - 1; i++)	{		for (j = 0; j < pcon->size - 1 - i; j++)		{			if (strcmp(pcon->data[j].name, pcon->data[j + 1].name)>0)			{				PerInfo tmp = { 0 };				tmp = pcon->data[j];				pcon->data[j] = pcon->data[j + 1];				pcon->data[j + 1] = tmp;			}		}	}}void Clear(pcon pcon){	pcon->size = 0;}
测试部分

text.c

#pragma warning(disable:4996)#include"contact.h"void menu(){	printf("***************************\n");	printf("  1.Add            2.Del   \n");	printf("  3.Modify         4.Search\n");	printf("  5.Display        6.Sort  \n");	printf("  7.Clear          0.Exit  \n");} int main(){	Contact con;	int input = 0;	InitContact(&con);	do	{		menu();		printf("请选择>:\n");		scanf("%d", &input);		switch (input)		{		case 1:			AddContact(&con);			break;		case 2:			DelContact(&con);			break;		case 3:			ModifyContact(&con);			break;		case 4:			SearchContact(&con);			break;		case 5:			DisplayContact(&con);			break;		case 6:			Sort(&con);			break;		case 7:			Clear(&con);			break;		case 0:			break;		default:			break;		}	} while (input);	return 0;}

转载地址:https://blog.csdn.net/audience_fzn/article/details/76832208 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:模拟实现mymcpy,memmove,strncpy
下一篇:模拟实现strcpy,strcmp,strcat,strstr.strlen

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年03月21日 03时27分23秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java 减少内存_java中减少内存占用小技巧 2019-04-21
centos 7 mysql图形界面_centos7-vnstat图形界面搭建 2019-04-21
java 防渗透_「java、工程师工作经验怎么写」-看准网 2019-04-21
java中跳出当前循环怎么做_在java中,如何跳出当前的多重循环? 2019-04-21
java程序中执行maven_java – 将一个enviornment变量传递给Maven中的已执行进程 2019-04-21
java16下载_java lombok下载 2019-04-21
python 图像处理与识别书籍_Python图像处理之识别图像中的文字(实例讲解) 2019-04-21
java安全初始化_java安全编码指南之:声明和初始化 2019-04-21
java jstat gc_分析JVM GC及内存情况的方法 2019-04-21
php pclzip.lib.php,php使用pclzip类实现文件压缩的方法(附pclzip类下载地址) 2019-04-21
php dns更新,php_mzdns: 站群,大量域名 通过 dns 服务商 api 批量添加 ip 工具。你懂的~ 基于 mzphp2 框架。... 2019-04-21
jdk 1.8 java.policy,JDK1.8 导致系统报错:java.security.InvalidKeyException:illegal Key Size 2019-04-21
php linux权限,Linux权限详细介绍 2019-04-21
典型环节的matlab仿真分析,典型环节的MATLAB仿真.doc 2019-04-21
Php contenttype类型,各种类型文件的Content Type 2019-04-21
php使用redis持久化,redis如何持久化 2019-04-21
php7.1解压包安装,【Swoole】php7.1安装swoole扩展 2019-04-21
linux centos删除安装的包,CentOS yum认为已删除的软件包仍在安装中 2019-04-21
酒店管理系统c语言带注释,酒店管理系统--C语言版.pdf 2019-04-21
c语言 实现sizeof功能,C语言简单实现sizeof功能代码 2019-04-21