本文主要详细介绍了用C语言实现的通讯录管理系统。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
本文分享用C语言实现通讯录管理系统的具体代码,供大家参考。具体内容如下
要实现一个通讯录管理系统,我们需要结构、指针、文件操作、动态管理等等。
效果展示:
实现思路
地址簿中的联系人包括姓名、年龄、性别、电话号码和地址,因此可以定义一个PeoInfo结构来存储这些信息。
同时由于通讯录需要记录当前大小,方便我们扩展通讯录realloc,所以需要定义通讯录结构Contact来保存这些信息,其中可以嵌套一个PeoInfo类型的指针。
定义结构后,您可以添加、删除和检查已定义的结构。可以先用malloc初始化通讯录结构,然后完成添加、删除、搜索、修改、保存、排序、清除等一系列功能。
保存时需要使用文件指针将数据保存到一个文件中,所以开头需要在当前目录下有一个对应的文件。
同时,在初始化过程中,文件中的数据也要读入我们的结构指针所指向的内容。
使用contact.txt文件在此处保存信息:
为了方便起见,我们将函数声明、函数实现和游戏实现放在三个不同的文件中:
contact.h内容
#杂注一次
# includestdio.h
#includestring.h
#includestdlib.h
#includeerrno.h
#define MAX_NAME 10//名称的大小
#定义MAX_SEX 5//性别大小
#定义MAX_TELE 15//手机尺寸
#定义最大_ADDR 30//地址大小
#define DEFAULT_SZ 3 //地址簿的默认大小
枚举选项
{
退出,
添加,
德尔,
搜索,
修改,
秀,
排序,
保存,
清楚的
};
结构PeoInfo
{
char NAME[MAX _ NAME];
int age
char SEX[MAX _ SEX];
char TELE[MAX _ TELE];
char addr[MAX _ ADDR];
};
//通讯簿类型
结构接触
{
struct PeoInfo*数据;//存储信息
int大小;//记录现有元素的数量。
int容量;//当前通讯簿的最大容量
};
//初始化通讯簿
void init Contact(struct Contact * PS);
//添加通讯簿内容
void add Contact(struct Contact * PS);
//打印通讯簿信息
void show Contact(const struct Contact * PS);
//删除通讯簿信息
void del Contact(struct Contact * PS);
//查找通讯簿信息
void search Contact(const struct Contact * PS);
//修改指定的联系人
void modify Contact(struct Contact * PS);
//按名称排序
void sort Contact(struct Contact * PS);
//释放动态打开的内存
void destroy Contact(struct Contact * PS);
//保存通讯簿
void save Contact(struct Contact * PS);
//将文件中的信息加载到通讯簿中
void load Contact(struct Contact * PS);
//清空通讯簿
void clear Contact(struct Contact * PS);
这个文件主要包括结构的创建和各种函数的声明。
contact.c内容
#包含“contact.h”
void InitContact(结构接触* ps)
{
PS-data=(struct peo info *)malloc(DEFAULT _ SZ * sizeof(struct peo info));
if (ps-data==NULL)
{
Printf('空间开发失败');
返回;
}
PS-size=0;
PS-capacity=DEFAULT _ SZ;
//将文件中存储的信息加载到通讯录中。
load contact(PS);
}
void CheckCapacity(结构触点* ps)
{
如果(ps-size==ps-capacity)
{
struct peo info * ptr=(struct peo info *)realloc(PS-data,(PS-capacity 5)* sizeof(struct peo info));
如果(ptr!=空)
{
PS-data=ptr;
PS-容量=5;
}
}
}
void LoadContact(结构触点* ps)
{
struct peo info tmp={ 0 };
FILE* pfRead=fopen('contact.txt ',' Rb ');
if (pfRead==NULL)
{
Printf('文件不存在:%s\n ',strerror(errno));
返回;
}
//读取文件
while (fread(tmp,sizeof(struct PeoInfo),1,pfRead))
{
检查容量(PS);
PS-data[PS-size]=tmp;
PS-size;
}
fclose(pfRead);
pfRead=NULL
}
void AddContact(结构触点* ps)
{
//检测当前通讯录的容量,如果满了则增容
检查容量(PS);
printf('请输入名字-');
scanf('%s ',ps-data[ps-size].姓名);
printf('请输入年龄-');
scanf('%d ',(ps-data[ps-size]).年龄));
printf('请输入性别-');
scanf('%s ',ps-data[ps-size].性);
printf('请输入电话-');
scanf('%s ',ps-data[ps-size].tele);
printf('请输入地址-');
scanf('%s ',ps-data[ps-size].addr);
PS-size;
printf('添加成功\ n’);
}
void show Contact(const struct Contact * PS)
{
如果(ps-size==0)
{
printf('通讯录为空\ n’);
}
其他
{
int I=0;
printf(' %-10s \ t %-4s \ t %-5s \ t %-12s \ t %-20s \ n ','名字', '年龄', '性别', '电话', '地址');
{
for(I=0;I PS-size;i )//打印每个通讯录元素
{
printf(' %-10s \ t %-4d \ t %-5s \ t %-12s \ t %-20s \ n ',
ps-data[i].名称ps-data[i].年龄ps-data[i].性,
ps-data[i].电话ps-data[i].addr);
}
}
}
}
//查找联系人位置
int find by NAME(const struct Contact * PS,char name[MAX_NAME])
{
//查找要删除人的位置
int I=0;
for(I=0;I PS-size;我)
{
if (0==strcmp(ps-data[i]).名字,名字))
{
返回我;//找到返回下标
}
}
return-1;//找不到返回-1
}
无效DelContact(结构触点* ps)
{
char NAME[MAX _ NAME];
printf('请输入要删除人的名字:-');
scanf('%s ',名称);
//查找要删除人的位置
int pos=FindByName(ps,name);//找到返回名字所在的下标,找不到返回-1
if (pos==-1)
{
printf('联系人不存在\ n’);
}
其他
{
//删除
int j=0;
for(j=pos;j PS-size-1;j)
{
PS-data[j]=PS-data[j 1];
}
PS-size-;
printf('删除成功\ n’);
}
}
无效搜索联系人(构造联系人* PS)
{
char NAME[MAX _ NAME];
printf('请输入要查找人的名字:-');
scanf('%s ',名称);
int pos=FindByName(ps,name);//找到返回名字所在的下标,找不到返回-1
if (pos==-1)
{
printf('联系人不存在\ n’);
}
其他
{
printf(' %-10s \ t %-4s \ t %-5s \ t %-12s \ t %-20s \ n ','名字', '年龄', '性别', '电话', '地址');
printf(' %-10s \ t %-4d \ t %-5s \ t %-12s \ t %-20s \ n ',
PS-数据[位置]。名称,ps数据[位置]。年龄,ps数据[位置]。性,
PS-数据[位置]。电话ps数据[位置].addr);
}
}
void ModifyContact(结构接触* ps)
{
char NAME[MAX _ NAME];
printf('请输入要修改人的名字:-');
scanf('%s ',名称);
int pos=FindByName(ps,name);//找到返回名字所在的下标,找不到返回-1
if (pos==-1)
{
printf('联系人不存在\ n’);
}
其他
{
printf('请输入名字-');
scanf('%s ',ps-data[pos].姓名);
printf('请输入年龄-');
scanf('%d ',(ps-data[pos].年龄));
printf('请输入性别-');
scanf('%s ',ps-data[pos].性);
printf('请输入电话-');
scanf('%s ',ps-data[pos].tele);
printf('请输入地址-');
scanf('%s ',ps-data[pos].addr);
printf('修改完成\ n’);
}
}
void SortContact(结构接触* ps)
{
for(int I=0;I PS-size-1;我)
{
for(int j=0;j PS-size-I-1;j)
{
if (strcmp(ps-data[j].名称ps-data[j 1].姓名)0)
{
struct peo info tmp=PS-data[j];
PS-data[j]=PS-data[j 1];
PS-data[j 1]=tmp;
}
}
}
printf('按姓名排序成功\ n’);
}
//释放动态开辟的空间
void DestroyContact(结构触点* ps)
{
免费(PS-data);
PS-data=NULL;
}
void保存联系人(结构触点* ps)
{
FILE * pf write=fopen(' contact。txt ',' WB ');
if (pfWrite==NULL)
{
printf('%s\n ',strerror(errno));
返回;
}
//将通讯录的信息写入文件
int I=0;
for(I=0;I PS-size;我)
{
fwrite((ps-data[i]),sizeof(struct PeoInfo),1,pf write);
}
printf('保存成功\ n’);
fclose(pf写);
pfWrite=NULL
}
void ClearContact(结构触点* ps)
{
printf('确定要清空通讯录吗?是/否:");
char ch
getchar();//清空缓存区里面的\n
scanf('%c ',ch);
if (ch=='Y' || ch=='y ')
{
PS-size=0;
memset(ps-data,0,sizeof(PS-data));
printf('清空成功\ n’);
}
其他
{
printf('取消清空\ n’);
}
}
在这个文件中我们将声明的函数进行了定义,用到的方法都比较简单。
test.c内容
#包含"联系人. h "
无效菜单()
{
printf(' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ');
printf('****1 .添加联系人2.删除联系人* * * * * * * * * * * * * \ n’);
printf('****3 .查找联系人4.修改联系人* * * * * * * * * * * * * \ n’);
printf('****5 .展示所有联系人6.按姓名排序联系人* * * * * * * * \ n’);
printf('****7 .保存通讯录8.清空通讯录* * * * * * * * * * * * * \ n’);
printf('**************0 .退出通讯录* * * * * * * * * * * * * * * * * * * * * * * * * \ n’);
printf(' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ');
}
int main()
{
int input=0;
//创建通讯录
int size=0;
结构接触孔;//con是通讯录
//初始化通讯录
初始化联系人(con);
做
{
menu();
printf('请选择-');
scanf('%d ',输入);
开关(输入)
{
案例添加:
添加联系人(con);
系统("暂停");
系统(“cls”);
打破;
案例编号:
del联系人(con);
系统("暂停");
系统(“cls”);
打破;
案例搜索:
搜索联系人(con);
系统("暂停");
系统(“cls”);
打破;
案例修改:
修改联系人(con);
系统("暂停");
系统(“cls”);
打破;
案例展示:
显示联系人(con);
系统("暂停");
系统(“cls”);
打破;
案例排序:
排序联系人(con);
系统("暂停");
系统(“cls”);
打破;
案例保存:
保存联系人(con);
系统("暂停");
系统(“cls”);
打破;
案件清楚:
清除联系人(con);
系统("暂停");
系统(“cls”);
打破;
案例出口:
保存联系人(con);
//释放动态开辟的内存
破坏联系(con);
打破;
默认值:
printf('选择错误\ n’);
打破;
}
}而(输入);
}
在这个文件中将对菜单进行打印,同时进行函数的调用。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。