,,C语言实现简单的通讯录管理系统

,,C语言实现简单的通讯录管理系统

本文主要详细介绍了用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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: