编写一个可容纳1000人的通讯录(【结构体】静态通讯录的实现)

实现一个通讯录:

通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名,性别,年龄,电话,地址。

功能:

1.添加联系人信息

2.删除指定联系人的信息

3.查找指定联系人信息

4.修改指定联系人信息

5.显示所有联系人的信息

6.清空所有联系人

7.以名字排序所有联系人


contact.h文件

#ifndef __CONTACT_H_
#define __CONTACT_H_


#include <stdio.h>  
#include <string.h>  
#include <stdlib.h> 
#include <assert.h>


#define Max_people 1000      
#define Max_name 20          
#define Max_sex 5                  

#define Max_tele 20              
#define Max_adss 20           



typedef struct people
{
char name[Max_name];    //联系人姓名
char sex[Max_sex];            //联系人性别  
int age;                                  //联系人年龄   
char tele[Max_tele];            //联系人电话
char adss[Max_adss];        //联系人地址
}people;
typedef struct contact
{
int count;
    people list[Max_people];
}contact,*pCon;




void Initboard(pCon p);        //初始化结构体数组

void Add(pCon p);                //添加联系人
void show(pCon p);             //显示所有联系人
void Del(pCon p);                //删除指定联系人
void Modify(pCon p);          //修改指定联系人
void Find(pCon p);               //查找指定联系人
void Clear(pCon p);             //清空所有联系人
void sort(pCon p);                //按名字排序所有联系人



#endif




contact.c文件

#define _CRT_SECURE_NO_WARNINGS 1


#include "contacts.h"


int search(pCon p, char* tele)                              //查找
{
int i = 0;
for (i = 0; i < p->count; i++)
{
if (strcmp(tele, p->list[i].tele) == 0)
{
return i;
}
}
return -1;
}
void Initboard(pCon p)                                            //初始化结构体数组
{
assert(p);
memset(p->list, 0, sizeof(p->list));
p->count = 0;
}
void Add(pCon p)                                                             //添加联系人
{
if ((p -> count) == (Max_people))
{
printf("通讯录已满,无法继续添加.\n");              
return;
}
printf("请输入姓名:");
scanf("%s", &p->list[p->count].name);
printf("请输入性别:");
scanf("%s", &p->list[p->count].sex);
printf("请输入年龄:");
scanf("%d", &p->list[p->count].age);
printf("请输入电话号码:");
scanf("%s", &p->list[p->count].tele);
printf("请输入地址:");
scanf("%s", &p->list[p->count].adss);
p->count++;
}
void show(pCon p)                                                       //显示所有联系人
{
int i = 0;
printf("\t姓名\t性别\t年龄\t号码\t\t地址\n");                       
for (i = 0; i < p->count; i++)
{
printf("\t%s\t%s\t%d\t%s\t%s\n",
p->list[i].name,
p->list[i].sex,
p->list[i].age,
p->list[i].tele,
p->list[i].adss);
}
}


void Del(pCon p)                                                          //删除指定联系人
{
char tele[Max_tele];
printf("请输入您要删除的指定联系人的电话号码:");                
scanf("%s", tele);
int i = 0;
i = search(p , tele);
if (i == -1)
{
printf("通讯录中没有此联系人。\n");
}
else
{
for (; i < p->count - 1; i++)
{
p->list[i]= p->list[i + 1];
}
p->count--;
}
}
void Modify(pCon p)                                           //修改指定联系人
{
int i = 0;
char tele[Max_tele];
printf("请输入你要修改的联系人电话:");
scanf("%s", &tele);
i = search(p, tele);
printf("请输入需要修改的姓名:");
scanf("%s", p->list[i].name);
printf("请输入需要修改的性别");
scanf("%s", p->list[i].sex);
printf("请输入需要修改的年龄:");
scanf("%d", &p->list[i].age);
printf("请输入需要修改的号码:");
scanf("%s", p->list[i].tele);
printf("请输入需要修改的地址:");
scanf("%s", p->list[i].adss);
}
void Find(pCon p)                                                    //查找指定联系人
{
char tele[Max_tele];
printf("请输入需要查询的电话号码:");
scanf("%s", &tele);
int i = 0;
i=search(p, tele);
if (i == -1)
{
printf("通讯录中没有此人.\n");
}
else
{
printf("\t姓名\t性别\t年龄\t号码\t地址\n");
printf("\t%s\t%s\t%d\t%s\t%s\n", p->list[i].name, p->list[i].sex,p->list[i].age, p->list[i].tele, p->list[i].adss);
}
}
void Clear(pCon p)                                                   //清空所有联系人
{
p->count = 0;
printf("删除成功\n");
}
void sort(pCon p)                                                    //以名字排序所有联系人
{  
int i = 0;
int j = 0;
people tmp;
for (i = 0; i < p->count - 1; i++)
{
for (j = 0; j < p->count -1 - i; j++)
{
if (strcmp(p->list[j].name, p->list[j + 1].name) > 0)
{
tmp = p->list[j];
p->list[j] = p->list[j + 1];
p->list[j + 1] = tmp;
}
}
}
printf("排序完成\n");
}





test.c文件

#define _CRT_SECURE_NO_WARNINGS 1


#include "contacts.h"


void menu()
{
printf("*******************************************\n");
printf("*** 1.Add contact      2.Delete contact ***\n");
printf("*** 3.Find contact     4.Modify contact ***\n");
printf("*** 5.Show contact     6.Clear contact ***\n");
printf("*** 7.Sorting contact  0.Delete contact **\n");
printf("*******************************************\n");
}


int main()
{
contact con ;
int input = 0;
con.count = 0;
Initboard(&con);
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
Add(&con);
break;
case 2:
Del(&con);
break;
case 3:
Find(&con);
break;
case 4:
Modify(&con);
break;
case 5:
show(&con);
break;
case 6:
Clear(&con);
break;
case 7:
sort(&con);
break;
case 0:
return 0;
default:
printf("输入错误,请重新输入:\n");
}
} while (input);
system("pause");
return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值