目录
添加联系人、删除联系人、查找联系人、修改联系人、进行排序、清空通讯录等。
一 通讯录的基本组成
1 个人的消息 姓名、年龄、性别、地址、电话等。
typedef struct person
{
char name[20];
int age;
char sex[5];
char address[30];
char telephone[20];
}person;
2 通讯录一共可以装下多个联系人。
typedef struct contact
{
person per[MAX];
int num;
}contact;
3 通讯录的基本功能:
添加联系人、删除联系人、查找联系人、修改联系人、进行排序、清空通讯录等。
void menu()
{
printf("**********************************\n");
printf("*******1.add 2.delet*******\n");
printf("*******3.serch 4.modify******\n");
printf("*******5.shown 6.sort********\n");
printf("*******7.clear 0.exit********\n");
printf("**********************************\n");
}
本文删除联系人与排序均使用了字符串函数,分别为memmove和qsort函数,使用库函数节省了不少时间,今后在解决问题的时候可以是库函数的话可以多使用。
二 实现代码
1 test.c 测试
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
void menu()
{
printf("**********************************\n");
printf("*******1.add 2.delet*******\n");
printf("*******3.serch 4.modify******\n");
printf("*******5.shown 6.sort********\n");
printf("*******7.clear 0.exit********\n");
printf("**********************************\n");
}
int main()
{
int input;
contact con;
Init_contact(&con);
do
{
menu();
printf("请输入你具体的操作:>\n");
scanf("%d", &input);
switch (input)
{
case 1:
Add_person(&con);
break;
case 2:
Delete_person(&con);
break;
case 3:
Serch_person(&con);
break;
case 4:
Modify_person(&con);
break;
case 5:
Shown_person(&con);
break;
case 6:
Sort_person(&con);
break;
case 7:
{
printf("请输入YES,确认清除:>\n");
char str[10];
scanf("%s", str);
if (strcmp(str, "YES") == 0)
{
Clear_person(&con);
printf("清除成功\n");
}
else
{
printf("已停止清除\n");
break;
}
break;
}
case 0:
printf("退出程序\n");
return 0;
break;
default :
printf("输入错误,请重新输入\n");
break;
}
system("pause");
system("cls");
} while (input);
return 0;
}
system("pause")与system("cls");对屏幕进行清屏,可以使其看起来更简洁。
2 contact.c 函数功能的实现
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
int compar(const char* c1, const char* c2)
{
return strcmp((*(person*)c1).name, (*(person*)c2).name);
}
void Init_contact(contact* con)
{
con->num = 0;
memset(con->per, 0, sizeof(con->per));//初始化person数组中的内容
}
//添加联系人
void Add_person(contact* con)
{
assert(con);
if (con->num == MAX - 1)
{
printf("通讯录已满\n");
return;
}
printf("请输入添加联系人的姓名\n");
scanf("%s", con->per[con->num].name);
printf("请输入添加联系人的年龄\n");
scanf("%d", &(con->per[con->num].age));
printf("请输入添加联系人的性别\n");
scanf("%s", con->per[con->num].sex);
printf("请输入添加联系人的地址\n");
scanf("%s", con->per[con->num].address);
printf("请输入添加联系人的电话\n");
scanf("%s", con->per[con->num].telephone);
con->num++;
}
//显示联系人
void Shown_person(const contact* con)
{
assert(con);
printf("姓名\t年龄\t性别\t地址\t电话\n");
for (int i = 0; i < con->num; i++)
{
printf("%s\t%d\t%s\t%s\t%s\t\n", con->per[i].name, con->per[i].age, con->per[i].sex, con->per[i].address, con->per[i].telephone);
}
}
//查找联系人
int Serch_person(const contact* con)
{
assert(con);
char name[20];
printf("请输入联系人姓名\n");
scanf("%s", name);
for (int i = 0; i <=con->num; i++)
{
if (strcmp(name, con->per[i].name) == 0)
{
printf("该联系人存在\n");
return i;
}
}
return -1;
}
void Delete_person(contact* con)
{
assert(con);
if (con->num == 0)
{
printf("当前通讯录为空,无法删除\n");
return;
}
int ret = Serch_person(con);
if (ret == -1)
{
printf("查无此人\n");
}
else
{
memmove(con->per + ret, con->per+ ret + 1, sizeof(person) * (con->num - ret-1)); //使用库函数进行移动
printf("删除成功\n");
con->num--;
}
}
void Modify_person(contact* con)
{
assert(con);
int ret = Serch_person(con);
if (ret == -1)
{
printf("查无此人\n");
}
else
{
printf("请输入添加联系人的姓名\n");
scanf("%s", con->per[ret].name);
printf("请输入添加联系人的年龄\n");
scanf("%d", &(con->per[ret].age));
printf("请输入添加联系人的性别\n");
scanf("%s", con->per[ret].sex);
printf("请输入添加联系人的地址\n");
scanf("%s", con->per[ret].address);
printf("请输入添加联系人的电话\n");
scanf("%s", con->per[ret].telephone);
}
}
void Sort_person(const contact *con)
{
printf("开始排序\n");
qsort(con->per, con->num, sizeof(con->per[0]), compar);
}
void Clear_person(contact* con)
{
if (con->num == 0)
{
printf("联系人为空\n");
return;
}
else
{
Init_contact(con);
}
}
3 contact.h 函数声明部分
#include<stdio.h>
#include<string.h>
#include<assert.h>
#define MAX 100
typedef struct person
{
char name[20];
int age;
char sex[5];
char address[30];
char telephone[20];
}person;
typedef struct contact
{
person per[MAX];
int num;
}contact;
//初始化通讯录
void Init_contact(contact* con);
//添加联系人
void Add_person(contact* con);
//显示联系人
void Shown_person(const contact* con);
//查找联系人
int Serch_person(const contact* con);
//删除联系人
void Delete_person(contact* con);
//修改联系人
void Modify_person(contact* con);
//排序
void Sort_person(const contact* con);
//清除联系人
void Clear_person(contact* con);