首先对于通讯录的功能:
1.增加联系人
2.清空联系人
3.删除联系人
4.对联系人排序
5.输出联系人
6.查找联系人
7.修改联系人信息
接下来实现通讯录:
第一步:address.h是头文件,里面包含了所有要用到的函数,以及头文件
代码如下:
#pragma once
//确保头文件被引用一次,但是可移植性差
//最好用#ifndef #defiene #endif 可移植性高
//#ifndef __ADDRESS_H__ //防止头文件被多次定义,该头文件是 address.h
//#define __ADDRESS_H__
//检测X86是否被宏定义,如果没有的话在编译输出窗口输出X86 not define
//#ifndef X86
//
//#pragma message("X86 not define")
//
//#endif
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#define MAXSIZE 1000
enum INPUT //定义一个枚举类型
{
A, //枚举常量
ENTER,
EMPTY,
DELETE,
SORT,
SHOW,
SEARCH,
REVISE, //修改信息
EXIT
};
typedef struct LinkMan
{
char name[20];
char sex[4];
int age;
char tel[15];
char addr[50];
}LinkMan;
typedef struct LinkManCount
{
LinkMan contact[MAXSIZE];//可以存放MAXSIZE个人的通讯录
int sz;//记录当前存了几个联系人
}LMCount, *pLMCount;
void init_linkman(pLMCount my_addr);
void enter_linkman(pLMCount my_addr);
void show_linkman(pLMCount my_addr);
void delete_linkman(pLMCount my_addr);
void empty_linkman(pLMCount my_addr);
void sort_linkman(pLMCount my_addr);
void search_linkman(pLMCount my_addr);
void revise_linkman(pLMCount my_addr);
//#endif //__ADDRESS_H__
2.对于通讯录各种功能的实现,放在address.h源文件下
代码如下:
#include "address.h"
//初始化通讯录
void init_linkman(pLMCount my_addr)
{
memset(my_addr->contact, 0, sizeof(my_addr->contact));
my_addr->sz = 0;//开始通讯录里面没有联系人
}
//添加联系人
void enter_linkman(pLMCount my_addr)
{
printf("请输入联系人姓名:>");
scanf("%s", my_addr->contact[my_addr->sz].name);
printf("请输入联系人的性别:>");
scanf("%s", my_addr->contact[my_addr->sz].sex);
printf("请输入联系人的年龄:>");
scanf("%d", &my_addr->contact[my_addr->sz].age);
printf("请输入联系人的电话:>");
scanf("%s", my_addr->contact[my_addr->sz].tel);
printf("请输入联系人的地址:>");
scanf("%s", my_addr->contact[my_addr->sz].addr);
my_addr->sz++;//添加完了之后要对计数器进行自增操作
}
//清空通讯录
void empty_linkman(pLMCount my_addr)
{
memset(my_addr->contact, 0, sizeof(my_addr->contact));//将通讯录数组内容全部置0
my_addr->sz = 0;//将通讯录里储存的人数置0
}
//查找联系人
int find_name(pLMCount my_addr, char delete_name[])
{
int i = 0;
for (i = 0; i < my_addr->sz; i++)
{
if (!strcmp(my_addr->contact[i].name, delete_name))
{
return i;//返回与要删除的名字相同的下标
}
}
return -1;//没有找到返回-1
}
//删除通讯录的信息
void delete_linkman(pLMCount my_addr)
{
int i = 0;
char delete_name[20] = "0";
int ret = 0;
//按名字删除联系人信息
printf("输入你要删除联系人的名字:>");
scanf("%s", delete_name);
//查找联系人
ret = find_name(my_addr, delete_name);
//删除该联系人
if (ret != -1)
{
for (i = ret; i < my_addr->sz - 1; i++)
{
my_addr->contact[i] = my_addr->contact[i + 1];
}
my_addr->sz--;
}
printf("删除结束\n");
}
//对联系人进行排序
void sort_linkman(pLMCount my_addr)
{
//对姓名进行排序
int i = 0;
int j = 0;
for (i = 0; i < my_addr->sz - 1; i++)
{
for (j = 0; j < my_addr->sz - 1 - i; j++)
{
if (strcmp(my_addr->contact[j].name, my_addr->contact[j + 1].name) > 0)
{
LinkMan tmp = my_addr->contact[j];
my_addr->contact[j] = my_addr->contact[j + 1];
my_addr->contact[j + 1] = tmp;
}
}
}
printf("排序结束\n");
}
//展示通讯录
void show_linkman(pLMCount my_addr)
{
int i = 0;
assert(my_addr != NULL);//条件为假,表示通讯录是0个人
printf("\t姓名\t\t性别\t\t年龄\t\t电话\t\t地址\n");
for (i = 0; i < my_addr->sz; i++)
{
//加-表示左对齐
printf("\t%-s\t\t", my_addr->contact[i].name);
printf("%-s\t\t", my_addr->contact[i].sex);
printf("%-d\t\t", my_addr->contact[i].age);
printf("%-s\t\t", my_addr->contact[i].tel);
printf("%-s\n", my_addr->contact[i].addr);
}
}
//查找一个联系人并且输出
void search_linkman(pLMCount my_addr)
{
int ret = 0;
char search_name[20] = "0";
printf("请输入你要查找的联系人的名字:>");
scanf("%s", search_name);
ret = find_name(my_addr, search_name);
if (ret != -1)
{
printf("name\tsex\tage\ttel\taddr\n");
printf("\t%-s\t\t%-s\t\t%-d\t\t%-s\t\t%-s\n", my_addr->contact[ret].name,
my_addr->contact[ret].sex,
my_addr->contact[ret].age,
my_addr->contact[ret].tel,
my_addr->contact[ret].addr);
}
printf("查找结束\n");
}
//修改联系人信息
void revise_linkman(pLMCount my_addr)
{
int ret = 0;
char revise_name[20] = "0";
printf("请输入你要修改的联系人的名字:>");
scanf("%s", revise_name);
ret = find_name(my_addr, revise_name);
printf("请输入联系人姓名:>");
scanf("%s", my_addr->contact[ret].name);
printf("请输入联系人的性别:>");
scanf("%s", my_addr->contact[ret].sex);
printf("请输入联系人的年龄:>");
scanf("%d", &my_addr->contact[ret].age);
printf("请输入联系人的电话:>");
scanf("%s", my_addr->contact[ret].tel);
printf("请输入联系人的地址:>");
scanf("%s", my_addr->contact[ret].addr);
printf("修改结束\n");
}
3.对于通讯录的测试代码放在test.h中
代码如下:
#include "address.h"
void menu()
{
printf("****** ADDRESS LIST *****\n");
printf("****** 1.enter 2.empty *****\n");
printf("****** 3.delete 4.sort *****\n");
printf("****** 5.show 6.search *****\n");
printf("****** 7.revise 8.exit *****\n");
printf("***********************************\n");
}
int main()
{
LMCount addr;
pLMCount my_addr = &addr;
init_linkman(my_addr);//初始化通讯录
int input = 0;
do
{
menu();
printf("请选择操作>");
scanf("%d", &input);
switch (input)
{
case ENTER:
enter_linkman(my_addr);
break;
case EMPTY:
empty_linkman(my_addr);
break;
case DELETE:
delete_linkman(my_addr);
break;
case SORT:
sort_linkman(my_addr);
break;
case SHOW:
show_linkman(my_addr);
break;
case SEARCH:
search_linkman(my_addr);
break;
case REVISE:
revise_linkman(my_addr);
break;
case EXIT:
exit(0);
break;
default:
printf("Choose is error,please again choose.\n");
break;
}
} while (input);
return 0;
}
以上就是静态通讯录的实现。如有不会可以私聊我哦!