c语言用顺序表制作通讯录,静态顺序表实现简单的通讯录

一、通讯录实现要求:

实现一个通讯录;

通讯录可以用来存储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;

}

四、界面截图

c语言用顺序表制作通讯录,静态顺序表实现简单的通讯录_第1张图片

以上就是通讯录的基本实现了,这里只实现了基本的功能,程序还不够完全,有些细节没有进行处理,希望能对大家有点帮助,没有处理的地方大家自己处理一下吧,我就偷个懒喽。

你可能感兴趣的:(c语言用顺序表制作通讯录)