一、通讯录实现要求:
实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人
二、基本思路:
根据题目的要求,我选择了用静态顺序表来实现这个通讯录。定义了两个结构体,一个是存储每个人信息的,另一个用来记录一个通讯录的信息(这个也可以不用,你可以定义一个结构体数组,然后记录它的下标也可以)。
1.存储每个人信息的结构体
typedef struct Person
{
char name[20]; //姓名
char sex[2]; //性别
int age; //年龄
char tele[15]; //电话
char address[25]; //地址
}Person;
2.存储通讯录的结构体
typedef struct Book
{
Person data[MAX_SIZE]; //存储每个人信息的结构体数组
size_t size; //当前已存储的人数
}Book;
利用size来标记数组中已存储的个数,方便判断通讯录是否已满和下标访问。
三、代码实现(c语言)
1.Address_Book.h
#pragma once
#include #include #define _CRT_SECURE_NO_WARNINGS 1
#define MAX_SIZE 1000
typedef struct Person
{
char name[20]; //姓名
char sex[2]; //性别
int age; //年龄
char tele[15]; //电话
char address[25]; //地址
}Person;
typedef struct Book
{
Person data[MAX_SIZE]; //存储每个人信息的结构体数组
size_t size; //当前已存储的人数
}Book;
void Insert(Book* pbook);
void Delete(Book* pbook);
int Search(const Book* pbook);
void Change(Book* pbook);
void Show(const Book* pbook);
void Clear(Book* pbook);
void SortByName(Book* pbook);
2.Address_Book.c
#include "Address_Book.h"
void Insert(Book* pbook) //1.添加联系人信息
{
if(pbook->size > MAX_SIZE)
{
printf("book is fulled!");
return;
}
printf("please enter name:\n");
scanf("%s",pbook->data[pbook->size].name);
printf("please enter sex:\n");
scanf("%s",pbook->data[pbook->size].sex);
printf("please enter age:\n");
scanf("%d",&pbook->data[pbook->size].age);
printf("please enter telephone:\n");
scanf("%s",pbook->data[pbook->size].tele);
printf("please enter adddress:\n");
scanf("%s",pbook->data[pbook->size].address);
pbook->size++;
}
void Delete(Book* pbook) //2.删除指定联系人
{
int ret = 0;
if(pbook->size == 0)
{
printf("book is empty");
return;
}
ret = Search(pbook);
if(ret != -1)
{
int del = 0;
printf("您确定要删除此人吗?删除请按1,取消请按0\n");
scanf("%d", &del);
if(del == 1)
{
int i = 0;
for(i = ret; i < pbook->size-1; i++)
{
pbook->data[i] = pbook->data[i+1];
}
pbook->size--;
printf("已删除\n");
}
}
}
int Search(const Book* pbook) //3.查找指定联系人信息
{
char name[20];
int i = 0;
printf("请输入人名:\n");
scanf("%s", name);
for(i = 0; isize; i++)
{
if(strcmp(name,pbook->data[i].name) == 0)
{
printf("name:%s sex:%s age:%d tele:%s adddress:%s\n",
pbook->data[i].name,pbook->data[i].sex,pbook->data[i].age,
pbook->data[i].tele,pbook->data[i].address);
return i;
}
}
printf("No find!\n");
return -1;
}
void Change(Book* pbook) //4.修改指定联系人信息
{
int change = Search(pbook);
if(change != -1)
{
printf("please enter name:\n");
scanf("%s",pbook->data[change].name);
printf("please enter sex:\n");
scanf("%s",pbook->data[change].sex);
printf("please enter age:\n");
scanf("%d",&pbook->data[change].age);
printf("please enter telephone:\n");
scanf("%s",pbook->data[change].tele);
printf("please enter adddress:\n");
scanf("%s",pbook->data[change].address);
printf("已修改");
}
}
void Show(const Book* pbook) //5.显示所有联系人信息
{
int i = 0;
if(pbook->size == 0)
{
printf("book is empty\n");
return;
}
for(i = 0; isize; i++)
{
printf("name:%s sex:%s age:%d tele:%s adddress:%s\n",
pbook->data[i].name,pbook->data[i].sex,pbook->data[i].age,
pbook->data[i].tele,pbook->data[i].address);
}
}
void Clear(Book* pbook) //6.清空所有联系人
{
pbook->size = 0;
}
void SortByName(Book* pbook) //7.以名字排序所有联系人
{
int i = 0;
for(i = 0; i < pbook->size-1; i++)
{
if(strcmp(pbook->data[i].name,pbook->data[i+1].name) > 0)
{
Person tmp;
strcpy(tmp.name,pbook->data[i].name);
strcpy(tmp.sex,pbook->data[i].sex);
tmp.age = pbook->data[i].age;
strcpy(tmp.tele,pbook->data[i].tele);
strcpy(tmp.address,pbook->data[i].address);
strcpy(pbook->data[i].name,pbook->data[i+1].name);
strcpy(pbook->data[i].sex,pbook->data[i+1].sex);
pbook->data[i].age = pbook->data[i+1].age;
strcpy(pbook->data[i].tele,pbook->data[i+1].tele);
strcpy(pbook->data[i].address,pbook->data[i+1].address);
strcpy(pbook->data[i+1].name,tmp.name);
strcpy(pbook->data[i+1].sex,tmp.sex);
pbook->data[i+1].age = tmp.age;
strcpy(pbook->data[i+1].tele,tmp.tele);
strcpy(pbook->data[i+1].address,tmp.address);
}
}
Show(pbook);
}
3.Test.c
#include #include #include "Address_Book.h"
void face() //界面 {
printf("************通讯录************\n");
printf("***1. 添加联系人信息\n");
printf("***2.删除指定联系人信息\n");
printf("***3.查找指定联系人信息\n");
printf("***4.修改指定联系人信息\n");
printf("***5.显示所有联系人信息\n");
printf("***6.清空所有联系人\n");
printf("***7.以名字排序所有联系人\n");
printf("***8. 退出通讯录");
printf("\n");
printf("请输入要操作的序号:");
}
int main()
{
Book book;
int ch;
book.size = 0;
while(1)
{
AAA:face();
scanf("%d",&ch);
system("cls");
switch(ch)
{
case 1:
Insert(&book);
break;
case 2:
Delete(&book);
break;
case 3:
Search(&book);
break;
case 4:
Change(&book);
break;
case 5:
Show(&book);
break;
case 6:
Clear(&book);
break;
case 7:
SortByName(&book);
break;
case 8:
exit(0);
default:
printf("输入有误,请重新输入:");
goto AAA;
break;
}
printf("\n");
}
system("pause");
return 0;
}
四、界面截图
以上就是通讯录的基本实现了,这里只实现了基本的功能,程序还不够完全,有些细节没有进行处理,希望能对大家有点帮助,没有处理的地方大家自己处理一下吧,我就偷个懒喽。