C语言编程内存分配通讯录静态实现示例代码教程

 更新时间:2021年10月22日 10:36:56   作者:lc_29503203  
这篇文章主要为大家介绍了C语言编程实现静态的通讯录示例代码教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

实现一个通讯录:

通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址

提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人

首先我们采用顺序表的方式来实现一个通讯录,顺序表就是一种静态的模式。但是呢,静态的方式存在着一些明显的弊端,比如说:(1)信息少了存在空间浪费现象,信息多了存在空间不足的现象;(2)无法对信息进行保存,没有实用性.所以呢,后期会提供动态方式和文件的方式。    

为了结构清晰我使用了三个文件来进行封装,Contact.h封装结构体以及函数的声明,test.c封装主函数,Contact.c用来封装函数的算法。

下来进行代码实现:

Contact.h

#define _CRT_SECURE_NO_WARNINGS 1
#ifndef __CONTACT_H__             //防止重定义
#define __CONTACT_H__
#include <stdio.h>
#include <string.h>
#include<stdlib.h> 
enum OP
{
	EXIT,
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	DISPLAY,
	SORT,
	CLEAR
};
#define NAME_MAX 20
#define SEX_MAX 5
#define TELE_MAX 12
#define ADDR_MAX 25
#define MAX 1000
typedef struct PerInfo
{
	char name[NAME_MAX];
	int age;
	char sex[SEX_MAX];
	char tele[TELE_MAX];
	char addr[ADDR_MAX];
}PeoInfo; 
typedef struct Contact
{
	PeoInfo data[MAX];
	int size;
}Contact,*Pcon;
void init_contact(Pcon pcon);
void _add_contact(Pcon pcon);
void _display_contact(Pcon pcon);
void _del_contact(Pcon pcon);
void _search_contact(Pcon pcon);
void _modify_contact(Pcon pcon);
void _sort_contact(Pcon pcon);
void _clear_contact(Pcon pcon); 
#endif 

Test.c

#include "Contact.h"
void menu()
{
	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 = 1;
	init_contact(&con);
	while(input)
	{
		menu();
		printf("请选择>:");
		scanf("%d",&input);
		switch(input)
		{
		case ADD:
			_add_contact(&con);
			break;
		case DEL:
			_del_contact(&con);
			break;
		case SEARCH:
			_search_contact(&con);
			break;
		case MODIFY:
			_modify_contact(&con);
			break;
		case DISPLAY:
			_display_contact(&con);
			break;
		case SORT:
			_sort_contact(&con);
			break;
		case CLEAR:
			_clear_contact(&con);
			break;
		case EXIT:
			break;
		default:
			printf("选择错误\n");
			break;
		}
	}
	return 0;
}

Contact.c

#include"Contact.h"
void init_contact(Pcon pcon)                                     //进行初始化
{   
	memset(pcon->data, 0, MAX*sizeof(PeoInfo));
	pcon->size = 0;
}
static int find(Pcon pcon,char arr[])                             //由于在修改,删除,查询的地方都需要查找通讯录的元素,所以对find进行封装
{
	int i=0;
	for(i=0;i<pcon->size;i++)
	{
	    if(strcmp(pcon->data[i].name,arr)==0)
			return i;
	}
	return -1;
}
 void _add_contact(Pcon pcon)
 {
	 if(pcon->size<MAX)
	 {
		 printf("准备添加一个新成员!\n");
		 printf("请输入姓名:");
		 scanf("%s",pcon->data[pcon->size].name);
		 printf("请输入性别:");
		 scanf("%s",pcon->data[pcon->size].sex);
		 printf("请输入年龄:");
		 scanf("%d",&(pcon->data[pcon->size].age));
		 printf("请输入住址:");
		 scanf("%s",pcon->data[pcon->size].addr);
		 printf("请输入联系人电话:");
		 scanf("%s",pcon->data[pcon->size].tele);
		 printf("添加成功!\n");
		 (pcon->size)++;                                      //每添加一个人,通讯录总人数得加1
	 }
	 else
	 {
		 printf("通讯录已经满了!\n");
	 }
 } 
void _display_contact(Pcon pcon)
{
   int i=0;
   printf("%s\t%s\t%s\t%s\t%s\n","name","sex","age","tele","addr");
   for(i=0;i<pcon->size;i++)
   {
	   printf("%s\t%s\t%d\t%s\t%s\n",pcon->data[i].name,
		  pcon->data[i].sex,pcon->data[i].age,pcon->data[i].tele,pcon->data[i].addr);
   }
}
void _del_contact(Pcon pcon)
{
	int ret=0;
	char name[NAME_MAX]={0};
	if(pcon->size==0)
	{
		printf("当前通讯录为空!\n");
		return;
	}
	else
	{
		printf("请输入要删除人的姓名:\n");
		scanf("%s",name);
		ret=find(pcon,name);
		if(ret!=-1)
		{
			pcon->data[ret]=pcon->data[(pcon->size)-1];      
			pcon->size--;                                    //删除的方法是将数组中最后一个成员移到要删除的成员位置上
                        printf("删除成功!\n");
		}
		else
		{
			printf("未找到要删除的对象!\n");
		}
 
	}
 
}
void _search_contact(Pcon pcon)
{
	int ret=0;
	char name[NAME_MAX]={0};
	printf("请输入要查找的人的姓名:\n");
	scanf("%s",name);
	ret=find(pcon,name);
	if(ret!=-1)
	{
	   printf("%s\t%s\t%d\t%s\t%s\t",pcon->data[ret].name,
	   pcon->data[ret].sex,pcon->data[ret].age,pcon->data[ret].tele,
	   pcon->data[ret].addr);
	}
	else
		printf("未找到所要查找的人!\n");
}
void _modify_contact(Pcon pcon)  
{  
    int select=0;  
    int ret=0;  
    char modify[20]={0};  
    int year=0;  
    char name[NAME_MAX]={0};  
    printf("请输入要修改的人的姓名:\n");  
    scanf("%s",name);  
    ret=find(pcon,name);  
    if(ret!=-1)  
    {  
	printf("1.name\n 2.sex\n 3.age\n 4.tele\n 5addr\n"); 
        printf("请输入要修改的项:");  
        scanf("%d",&select);   
        switch(select)  
        {  
        case 1:
	    printf("请输入新的名字:");
            scanf("%s",modify);  
            strcpy(pcon->data[ret].name,modify);  
            printf("修改成功!\n");  
            break;  
        case 2:
	    printf("请输入新的性别:");
            scanf("%s",modify);  
            strcpy(pcon->data[ret].sex,modify);  
            printf("修改成功!\n");  
            break;  
        case 3: 
	    printf("请输入新的电话号:");
            scanf("%s",modify);  
            strcpy(pcon->data[ret].tele,modify);  
            printf("修改成功!\n");  
            break;  
        case 4: 
	    printf("请输入新的地址:");
            scanf("%s",modify);  
            strcpy(pcon->data[ret].addr,modify);  
            printf("修改成功!\n");  
            break;  
        case 5:  
            printf("请输入新的年龄:");
            scanf("%s",year);  
            pcon->data[ret].age=year;  
            printf("修改成功!\n");  
            break;  
        default:  
            printf("修改失败!\n");  
            break;  
        }     
    }  
    else  
    {  
        printf("未找到所要修改的人!\n");  
    }  
}  
void _sort_contact(Pcon pcon)
{
	PeoInfo tmp={0};
	int i=0;
	int j=0;
	int flag=0;        //表示有序
	for(i=1;i<(pcon->size)-1;i++)
	{
		flag=0;
		for(j=1;j<(pcon->size)-i-1;j++)
		{
			if(strcmp((pcon->data[j].name),(pcon->data[j+1].name))>0)
 
                          tmp=pcon->data[j];
			  pcon->data[j]=pcon->data[j+1];
			  pcon->data[j+1]=tmp;
			  flag=1;
		}
		if(flag==0)
			break;
	}
 
}
void _clear_contact(Pcon pcon)
{
	pcon->size=0;
	printf("通讯录已清空!\n");
}

以上就是C语言编程内存分配通讯录静态实现示例代码教程的详细内容,更多关于C语言实现静态通讯录的资料请关注脚本之家其它相关文章!

相关文章

  • C语言实现统计字符串单词数

    C语言实现统计字符串单词数

    这篇文章主要介绍了C语言实现统计字符串单词数,代码非常的简洁,有需要的小伙伴快来参考下。
    2015-03-03
  • C/C++中不定参数的使用详解

    C/C++中不定参数的使用详解

    这篇文章主要为大家详细介绍了C/C++中不定参数的使用的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • C语言 数据结构中栈的实现代码

    C语言 数据结构中栈的实现代码

    这篇文章主要介绍了C语言 数据结构中栈的实现代码的相关资料,需要的朋友可以参考下
    2016-10-10
  • C++实现大整数乘法(字符串乘法)

    C++实现大整数乘法(字符串乘法)

    这篇文章主要为大家详细介绍了C++实现大整数乘法、字符串乘法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • C++字符串输入缓冲区机制详解

    C++字符串输入缓冲区机制详解

    缓冲区是用来存放流中的数据,本文详细的介绍了C++字符串输入缓冲区机制,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-10-10
  • C语言中的数据整除判断问题

    C语言中的数据整除判断问题

    这篇文章主要介绍了C语言中的数据整除判断问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • C语言实现进制转换函数的实例详解

    C语言实现进制转换函数的实例详解

    这篇文章主要介绍了C语言实现进制转换函数的实例详解的相关资料,这里提供实现实例帮助大家实现改功能,需要的朋友可以参考下
    2017-08-08
  • C/C++ 监控磁盘与目录操作的示例

    C/C++ 监控磁盘与目录操作的示例

    这篇文章主要介绍了C/C++ 监控磁盘与目录操作的示例,帮助大家更好的理解和学习C/C++编程,感兴趣的朋友可以了解下
    2020-10-10
  • 浅谈C++ 基类指针和子类指针的相互赋值

    浅谈C++ 基类指针和子类指针的相互赋值

    下面小编就为大家带来一篇浅谈C++ 基类指针和子类指针的相互赋值。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • C++实现顺序排序算法简单示例代码

    C++实现顺序排序算法简单示例代码

    这篇文章主要介绍了C++实现顺序排序算法简单示例代码,对于学过C++的朋友一定不会陌生,现在重温一下这个算法,需要的朋友可以参考下
    2014-08-08

最新评论