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++实现俄罗斯方块小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • C++ sqlite3数据库配置使用教程

    C++ sqlite3数据库配置使用教程

    SQLite 是一种嵌入式的关系型数据库管理系统,它是一个开源项目,已经被广泛应用于各种应用程序和操作系统中,这篇文章主要介绍了C++ sqlite3数据库配置使用,需要的朋友可以参考下
    2023-08-08
  • C语言中的结构体的入门学习教程

    C语言中的结构体的入门学习教程

    这篇文章主要介绍了C语言中的结构体的入门学习教程,以struct语句定义的结构体是C语言编程中的重要基础,需要的朋友可以参考下
    2015-12-12
  • C++中的策略模式浅析

    C++中的策略模式浅析

    策略模式属于C++设计模式中行为模式之一,该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。本文将通过示例详细讲解这一模式,需要的可以参考一下
    2023-02-02
  • C++实现从输入中读取字符串

    C++实现从输入中读取字符串

    这篇文章主要介绍了C++实现从输入中读取字符串的实现思路和具体代码,非常的简单实用,有需要的小伙伴可以参考下
    2016-05-05
  • C语言读取data.json文件并存入MySQL数据库小案例(推荐)

    C语言读取data.json文件并存入MySQL数据库小案例(推荐)

    本文介绍如何使用C语言结合cJSON库读取JSON文件,并将数据存储到MySQL数据库中,示例代码包括创建MySQL表的SQL语句和C语言代码,以及如何编译和运行程序,确保已安装必要的库以支持程序运行
    2024-10-10
  • C++使用alsa库实现播放声音文件

    C++使用alsa库实现播放声音文件

    这篇文章主要为大家详细介绍了Linux系统上C++如何使用alsa库播放声音文件,文中示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-04-04
  • c++使用Easyx图形库实现飞机大战

    c++使用Easyx图形库实现飞机大战

    本文详细讲解了c++使用Easyx图形库实现飞机大战,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • 教你Visual Studio 2022如何新建一个C语言工程(图文详解)

    教你Visual Studio 2022如何新建一个C语言工程(图文详解)

    这篇文章主要介绍了Visual Studio 2022如何新建一个C语言工程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • QT中QDockWidget控件的使用小结

    QT中QDockWidget控件的使用小结

    QDockWidget类提供了一个小部件,可以停靠在QMainWindow中,也可以作为桌面上的顶级窗口浮动,本文主要介绍了QT中QDockWidget控件的使用小结,感兴趣的可以了解一下
    2024-01-01

最新评论