引言
通讯录是C语言中非常简单且实用的小项目,涉及C语言中很多基础知识,能够独立写出通讯录这个小项目,证明自身对C语言知识有了一定的掌握。今天来探讨通讯录三种版本的实现
一、静态版通讯录
contact.h
pragma once 是防止头文件在程序运行时在内存的反复调用
string.h 头文件是调用字符串函数
stdio.h 就不必多说了
assert.h 头文件是在引用assert函数,防止一些指针为NULL,影响程序运行
enum 是用来枚举出通信录八大主功能,增加代码可读性和规范性
在contact.h里面直接将contact.c中大量出现的变量进行定义,之后遇到这些变量就不用重复定义了,提高代码效率
创建一个结构体,存放联系人信息
再创建一个结构体
data [MAX] 是一个能存放1000个Ploinfo(也就是上一个结构体)信息的数组
sz是用来纪录联系人个数
#pragma once
#include<string.h>
#include<stdio.h>
#include<assert.h>
//类型的声明
enum Option
{
EXIT,
ADD,
DEL,
SEARCH,
MODIFY,
PRINT,
CLEAR,
SORT
};
#define MAX 1000
#define NAME_MAX 20
#define SEX_MAX 5
#define ADDR_MAX 30
#define TELE_MAX 12
typedef struct Ploinfo
{
char name[NAME_MAX]; //姓名
char sex[SEX_MAX]; //性别
int age; //年龄
char addr[ADDR_MAX]; //地址
char tele[TELE_MAX]; //电话号码
}Ploinfo;
typedef struct Contact
{
struct Ploinfo data[MAX]; //存放联系人的数组
int sz; //统计联系人的个数
}Contact;
//函数的声明
//contact 初始化
void InitContact(Contact* pc);
//Contact 增加联系人的信息
void AddContact(Contact* pc);
//Contact 打印联系人的信息
void PrintContact(const Contact* pc);//只是打印,不会改变Contact里面的数据,所以可以const来修饰
//Contact 删除指定联系人
void DelContact(Contact* pc);
//Contact 查找指定联系人
void SearchContact(Contact* pc);
//Contact 修改指定联系人信息
void ModifyContact(Contact* pc);
//Contact 通讯录信息排序
void sortContact(Contact* pc);
//Contact 通讯录信息清空
void ClearContact(Contact* pc);
contact.h
contact.h是我们自主创建的头文件,里面包含了我们运行contact.c需要的所有头文件和变量
在contact.c开头只需要引用这一个contact.h头文件就行了
InitContact函数是用来初始化通讯录的,在添加联系人信息之前,需要把data和sz全都初始化为0
assert是防止pc为NULL
memset是字符串函数,这里的作用是把data [MAX] 里面的空间全部设置为0
AddContact函数是用来添加联系人信息的
在添加之前需确认通讯录空间是否足够,如果不够是无法添加的