怎么在C语言中利用结构体实现通讯录?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
程序如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct People
{
char name[20];
char sex[5];
int age;
char tel[15];
char addr[50];
}; //定义人的信息结构体(包含各种信息)
struct Contact
{
struct People person[1000]; //定义通讯录结构体
int n; //(包含人的信息的结构体和用户个数n)
};
typedef struct Contact * p;
void menu();
int add(p q); //p是一个结构体指针类型,q是一个指向struct Contact的一个指针
int delete(p q); //例如:typedef int * int 即 int *p ==> int p
int find(p q);
int modify(p q);
int show(p q);
int clear(p q); //函数的声明
void menu() //目录格式
{
printf("====================欢迎来到苏嵌154通讯录==================\n");
printf("----------------------1.添加联系人信息---------------------\n");
printf("----------------------2.删除指定联系人信息-----------------\n");
printf("----------------------3.查找指定联系人信息-----------------\n");
printf("----------------------4.修改指定联系人信息-----------------\n");
printf("----------------------5.显示所有联系人信息-----------------\n");
printf("----------------------6.清空所有联系人---------------------\n");
printf("----------------------0.谢谢使用---------------------------\n");
printf("====================欢迎来到苏嵌154通讯录==================\n");
}
int add(p q) //添加联系人
{
if((*q).n >= 1000)
{
printf("contact is full!\n");
return -1;
}
else
{
printf("输入姓名:\n");
scanf("%s",(*q).person[(*q).n].name);
printf("输入性别:\n");
scanf("%s",(*q).person[(*q).n].sex);
printf("输入年龄:\n");
scanf("%d",&(*q).person[(*q).n].age);
printf("输入电话:\n");
scanf("%s",(*q).person[(*q).n].tel);
printf("输入地址:\n");
scanf("%s",(*q).person[(*q).n].addr);
((*q).n)++;
}
return 0;
}
int delete(p q) //删除联系人
{
int ret = find(q); //调用查找函数并保存其值
if(ret != -1)
{
int i = 0;
i = ret; //这里要用另一个变量来保存输入的姓名
for(i = 0;i < (*q).n-1;i++)
{
(*q).person[i] = (*q).person[i+1]; //用后一个覆盖前边的,如果要删除的是最后一个不进行此步骤
}
(*q).n --; //直接减去最后一个即count--
}
return 0;
}
int find(p q) //查找联系人
{
int i = 0;
char ret[20]; //用另一个数组来保存姓名
printf("输入姓名:\n");
scanf("%s",ret);
while(i <= (*q).n)
{
if(strcmp(ret,(*q).person[i].name)== 0) //比较输入的姓名和通讯录中已有的姓名
{
printf("姓名\t性别\t年龄\t电话\t地址\4t\n"); //制表符来制作表头
printf("%s\t",(*q).person[i].name);
printf("%s\t",(*q).person[i].sex);
printf("%d\t",(*q).person[i].age);
printf("%s\t",(*q).person[i].tel);
printf("%s\4t\n",(*q).person[i].addr);
return i;
}
i++;
}
printf("你丫的我班没这个人\n");
return -1;
}
int modify(p q) //修改函数,首先找到如要修改的姓名,然后重新输入
{
int ret = find(q);
if(ret != -1)
{
printf("输入修改的姓名:\n");
scanf("%s",(*q).person[ret].name);
printf("输入修改的性别:\n");
scanf("%s",(*q).person[ret].sex);
printf("输入修改的年龄:\n");
scanf("%d",&((*q).person[ret].age));
printf("输入修改的电话:\n");
scanf("%s",(*q).person[ret].tel);
printf("输入修改的地址:\n");
scanf("%s",(*q).person[ret].addr);
}
else
{
printf("你丫的我班没这个人\n");
}
return 0;
}
int show(p q) //显示全部联系人
{
int i = 0;
printf("姓名\t性别\t年龄\t电话\t地址\4t\n");
for(i = 0;i < (*q).n;i++)
{
printf("%s\t",(*q).person[i].name);
printf("%s\t",(*q).person[i].sex);
printf("%d\t",(*q).person[i].age);
printf("%s\t",(*q).person[i].tel);
printf("%s\4t\n",(*q).person[i].addr);
}
printf("\n");
return 0;
}
int clear(p q) //清除所有人,直接让成员个数变为0
{
(*q).n = 0 ;
return 0;
}
int main()
{
int n=1;
struct Contact people; //调用通讯录结构体
people.n = 0; //初始化n
while(n)
{
menu();
printf("请选择你的骚操作:\n");
scanf("%d",&n);
switch(n) //switch case语句分支选择不同函数实现不同作用
{
case 1:
{
add(&people);
break;
}
case 2:
{
delete(&people);
break;
}
case 3:
{
find(&people);
break;
}
case 4:
{
modify(&people);
break;
}
case 5:
{
show(&people);
break;
}
case 6:
{
clear(&people);
break;
}
default:
{
return 0;
break;
}
}
}
return 0;
}
关于怎么在C语言中利用结构体实现通讯录问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。