用C语言实现一个简单通讯录
文章目录
通过对c语言基础的学习实现一个简单的通讯录,里面的功能包括,对联系人信息的增删改查,展示和对通讯录里面的信息进行排序的简单功能。
我会创建三个文件,依次是:主文件,头文件,以及头文件对应的c语言文件来实现相应函数的功能,对于具体函数的书写都放在c语言文件中进行实现
1.在主文件中创建菜单函数并调用
#include <stdio.h>
void menu()
{
printf("***************************************\n");
printf("****** 1.add 2.del *******\n");
printf("****** 3.modify 4.search *******\n");
printf("****** 5.show 6.sort *******\n");
printf("****** 0.exit *******\n");
printf("***************************************\n");
}
int main()
{
int input = 0;
do{
menu();
printf("请输入你的选择:\n");
scanf("%d",&input);
switch(input)
{
case:1:
printf("添加联系人!\n");
break;
case 2:
printf("删除联系人!\n");
break;
case 3:
printf("修改联系人信息!\n");
break;
case 4:
printf("查找联系人!\n");
cbreak;
case 5:
printf("展示联系人信息!\n");
break;
case 6:
printf("对联系人信息进行排序!\n");
braek;
case 0:
printf("退出!\n");
break;
default:
printf("没有这个选项,请重新选择!\n");
}
}while(input)
return 0;
}
若是在visual studio 2022软件中使用,还需在开头添加:
_CRT_SECURE_NO_WARNINGS
_CRT_SECURE_NO_WARNINGS
是一个预处理器宏定义,用于在编译使用微软 Visual Studio 编译器的 C 或 C++ 程序时,禁用对某些安全功能的限制。
2.在头文件中创建联系人信息结构体和通讯录结构体,用来存储信息,并在主文件中创建通讯录并进行初始化
创建相应的结构体用来存储信息
typedef struct PeoInfo
{
char name[20];
int age;
char gender[10];
char tel[12];
char address[30];
}PeoInfo;
typedef struct Contact
{
PeoInfo data[100];//用来存储100个联系人的信息
int count;//用来记录通讯录中有多少人
}Contact;
在主文件中创建通讯录变量用来存储联系人信息并进行初始化
//创建通讯录
Contact con;
InitContact(&con);
初始化通讯录函数的书写
//初始化通讯录
void InitContact(Contact* con)
{
assert(con);//防止传入的参数为空指针引发的错误
con->count = 0;
memset(con->data,0,sizeof(con->data));
}
3.实现添加联系人功能
//添加联系人信息
void addContact(Contact* con)
{
assert(con);
//首先进行判断,如果通讯录中,引进添加满了100个联系人,则不能再进行添加联系人
if(con->count == 100)
{
printf("添加失败,通讯录已经满了,请删除一部分后再进行添加!\n");
return;
}
//代码运行到这,表示可以添加联系人信息
//让用户输入联系人的相关信息,并进行添加
printf("请添加联系人的信息!\n");
printf("请输入联系人姓名:\n");
scanf("%s",con->data[con->count].name);
printf("请输入联系人的年龄:\n");
scanf("%d", &(con->data[con->count].age));
printf("请输入联系人的性别:\n");
scanf("%s", con->data[con->count].gender);
printf("请输入联系人的电话号码:\n");
scanf("%s", con->data[con->count].tel);
printf("请输入联系人的地址:\n");
scanf("%s", con->data[con->count].add);
/*
也可以使用指针简化代码,这样输入
PeoInfo *p = &con->data[con->count]; // 使用指针简化代码
printf("添加联系人信息!\n");
printf("请输入联系人的姓名:\n");
scanf("%s", p->name);
printf("请输入联系人的年龄:\n");
scanf("%d", &(p->age));
printf("请输入联系人的性别:\n");
scanf("%s", p->gender);
printf("请输入联系人的电话号码:\n");
scanf("%s", p->tel);
printf("请输入联系人的地址:\n");
scanf("%s", p->add);
*/
printf("添加成功!\n");
//最后结果+1表示通讯录中添加了一位联系人信息
con->count++;
}
4.为了验证添加功能是否正确,在这里,我们先写展示通讯录的函数
//展示通讯录信息
void showContact(Contact *con)
{
assert(con);
if(con->count == 0)
{
printf("通讯录中没有信息可展示,请先添加!\n");
return;
}
printf("展示通讯录!\n");
printf("%-20s\t%-5d\t%-10s\t%-12s\t%-30s\n","姓名","年龄","性别","电话号码","地址");
//遍历通讯录,将里面的信息输出出来
for(int i=0; i<con->count; i++)
{
PeoInfo p = con->data[i];
printf("%-20s\t%-5d\t%-10s\t%-12s\t%-30s\n",
p.name,p.age,p.gender,p.tel,p.address);
}
}
5.实现删除联系人功能
在删除联系人之前需要先判断,该联系人是否存在
//通过姓名来判断联系人是否存在,存在则返回该联系人在通讯录中的索引位置,否则返回-1
int findByName(Contact *con, char name[])
{
assert(con);
//遍历通讯录
for(int i=0; i<con->count; i++)
{
PeoInfo p = con->data[i];
if(strcmp(p.name,name) == 0)
{
return i;
}
}
return -1;
}
实现删除功能
void delContact(Contact *con)
{
assert(con);
if(con->count == 0)
{
printf("没有联系人可供删除!\n");
return;
}
printf("删除联系人!\n");
char name[20];
printf("请输入你要删除的联系人的姓名:\n");
scanf("%s",name);
int res = findByName(con,name);
if(res == -1)
{
printf("该联系人不存在!\n");
}
//代码执行到这表示联系人存在
//需要将该位置之后的联系人往前存,并将count--
for(int i=res; i<con->count-1; i++)
{
con->data[i] = con->data[i+1];
}
con->count--;
printf("删除成功!\n");
}
6.实现修改联系人信息的功能
void modifyContact(Contact *con)
{
assert(con);
if(con->count == 0)
{
printf("没有可供修改信息的联系人!\n");
return;
}
char name[20];
printf("请输入要修改信息的联系人姓名:\n");
scanf("%s",name);
//想要修改联系人信息,首先需要判断联系人是否存在
int res = findByName(con,name);
id(res == -1)
{
printf("该联系人信息不存在,无法修改!\n");
return;
}
//代码执行到这表示联系人存在,可以修改信息!
PeoInfo *p = con->data[res];
printf("请输入姓名:\n");
scanf("%s",p->name);
printf("请输入年龄:\n");
scanf("%d",%(p->age));
printf("请输入性别:\n");
scanf("%S",p->gender);
printf("请输入电话号码:\n");
scanf("%S",p->tel);
printf("请输入地址:\n");
scanf("%S",p->address);
printf("修改联系人信息成功!\n");
}
7.实现查找联系人信息功能
void searchContact(Contact *con)
{
assert(con);
if(con->count == 0)
{
printf("没有可供查找的联系人!\n");
return;
}
char name[20];
printf("请输入要查找的联系人:\n");
scanf("%s",name);
int res = findByName(con,res);
if(res == -1)
{
printf("该联系人不存在!\n");
return;
}
PeoInfo p = con->data[res];
printf("查找成功!\n");
printf("%S的信息为:\n",name);
printf("年龄:\n",p->age);
printf("性别:\n",p->gender);
printf("电话号码:\n",p->tel);
printf("地址:\n",p->address);
}
8.实现排序功能
通过联系人的年龄进行排序(用的是冒泡排序的方法)
void sort(Contact *con)
{
assert(con);
if(con -> count == 0)
{
printf("没有联系人需要排序,请添加后再来!\n");
return;
}
//遍历通讯录,进行排序
printf("开始排序!\n");
for(int i=0; i< con->count-1; i++)
{
//定义一个变量用来记录是否进行了数据交换
int flag = 1;
for(int j=0; j<con->count-1-i; j++)
{
if(con->data[j].age > con->data[j+1].age)
{
PeoInfo p = con->data[j];
con->data[j] = con->data[j+1];
con->data[j+1] = p;
flag = 0;
}
}
if(flag)
{
break;
}
}
printf("排序成功!\n");
}
完整代码:
完整代码请点击或访问https://gitee.com/lanlee0216/mail-list.git