您的位置:首页 > 编程语言 > C语言/C++

利用C语言结构体实现通讯录

2019-02-09 00:11 405 查看

本文实例为大家分享了C语言结构体实现通讯录的具体代码,供大家参考,具体内容如下

用来存储1000个人的信息的通讯录,每个人的信息包括:

姓名、性别、年龄、电话、住址

程序如下:

#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;
}

这样就实现了一个简单的通讯录。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: