通讯录的功能
通讯录的功能有添加、删除、搜索、修改、排序以及打印。
void menu()
{
printf("\n");
printf("*** 1.add 2.delete ***\n");
printf("*** 3.search 4.modify ***\n");
printf("*** 5.sort 6.print ***\n");
printf("*** 0.exit ***\n");
printf("\n");
}
通讯录结构体的定义
通讯录需储存某人的姓名、性别、年龄、电话以及地址,并且能够存放很多人的信息
typedef struct peoinfo
{
char name[name_max];
char sex[sex_max];
int age;
char tele[tele_max];
char addr[addr_max];
}peoinfo;
typedef struct contact
{
peoinfo data[data_max];
int sz;
}contact;
#define name_max 20
#define sex_max 10
#define tele_max 20
#define addr_max 20
#define data_max 1000
程序流程的模板
根据菜单提示的信息输入相对应的数字,通过switch语句进而对通讯录进行操作
enum option
{
exit, //0
add, //1
delete, //2
search, //3
modify, //4
sort, //5
print //6
};
void test()
{
int input;
contact con;
initinfo(&con);
menu();
do
{
scanf("%d", &input);
switch(input)
{
case exit:
return;
break;
case add:
addinfo(&con);
break;
case delete:
deleteinfo(&con);
break;
case search:
searchinfo(&con);
break;
case modify:
modifyinfo(&con);
break;
case sort:
sort_by_name(&con);
break;
case print:
printinfo(&con);
break;
default:
printf("输入错误\n");
break;
}
} while (input);
}
int main()
{
test();
return 0;
}
通讯录联系人的添加
void addinfo(contact* pc)
{
if (pc->sz >= 1000)
{
printf("通讯录已满\n");
return;
}
printf("请输入姓名:");
scanf("%s", pc->data[pc->sz].name);
printf("请输入性别:");
scanf("%s", pc->data[pc->sz].sex);
printf("请输入年龄:");
scanf("%d", &(pc->data[pc->sz].age));
printf("请输入电话:");
scanf("%s", pc->data[pc->sz].tele);
printf("请输入地址:");
scanf("%s", pc->data[pc->sz].addr);
pc->sz++;
printf("添加成功\n");
}
通讯录联系人的删除
void deleteinfo(contact* pc)
{
char deletename[20];
printf("请输入想删除人的姓名:");
scanf("%s", &deletename);
for (int i = 0; i < pc->sz; i++)
{
if (strcmp(deletename, (pc->data[i].name)) == 0)
{
memset(&(pc->data[i]), 0, sizeof(pc->data[i]));
for (i; i < pc->sz-1; i++)
{
pc->data[i] = pc->data[i + 1];
}
pc->sz--;
printf("删除成功\n");
return;
}
}
printf("信息不存在\n");
}
通讯录联系人的修改
void modifyinfo(contact* pc)
{
char modifyname[20];
printf("请输入修改人姓名:");
scanf("%s", modifyname);
for (int i = 0; i < pc->sz; i++)
{
if (strcmp(modifyname, (pc->data[i].name)) == 0)
{
printf("请输入姓名:");
scanf("%s", pc->data[i].name);
printf("请输入性别:");
scanf("%s", pc->data[i].sex);
printf("请输入年龄:");
scanf("%d", &(pc->data[i].age));
printf("请输入电话:");
scanf("%s", pc->data[i].tele);
printf("请输入地址:");
scanf("%s", pc->data[i].addr);
printf("修改成功\n");
return;
}
}
printf("没找到\n");
}
通讯录联系人的查找
void searchinfo(contact* pc)
{
char searchname[20];
printf("请输入想搜索姓名:");
scanf("%s",searchname);
for (int i = 0; i < pc->sz; i++)
{
if (strcmp(searchname, (pc->data[i].name)) == 0)
{
printf("找到了\n");
printf("%-20s %-5s %-5d %-12s %-30s\n", pc->data[i].name, pc->data[i].sex, pc->data[i].age, pc->data[i].tele, pc->data[i].addr);
}
else
{
printf("没找到\n");
}
}
}
通讯录联系人的排序(根据名字)
void sort_by_name(contact* pc)
{
for (int i = 0; i < pc->sz; i++)
{
for (int j = 0; j < pc->sz - 1; j++)
{
if (strcmp(pc->data[j].name, pc->data[j + 1].name) > 0)
{
peoinfo tmp[1];
tmp[0] = pc->data[j];
pc->data[j] = pc->data[j + 1];
pc->data[j + 1] = tmp[0];
}
}
}
printf("排序成功\n");
}
头文件的内容
#include<stdio.h>
#include<string.h>
#include<assert.h>
#define name_max 20
#define sex_max 10
#define tele_max 20
#define addr_max 20
#define data_max 1000
enum option
{
exit, //0
add, //1
delete, //2
search, //3
modify, //4
sort, //5
print //6
};
typedef struct peoinfo
{
char name[name_max];
char sex[sex_max];
int age;
char tele[tele_max];
char addr[addr_max];
}peoinfo;
typedef struct contact
{
peoinfo data[data_max];
int sz;
}contact;
void menu();
void addinfo( contact* pc);
void initinfo(contact* pc);
void printinfo(contact* pc);
void deleteinfo(contact* pc);
void searchinfo(contact* pc);
void modifyinfo(contact* pc);
void sort_by_name(contact* pc);