实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址
提供方法:
1.添加联系人信息
2.删除指定联系人信息
3.查找指定联系人信息
4.修改指定联系人信息
5.显示所有联系人信息
6.清空所有联系人
7.以名字排序所有联系人
//main.c
#include "contact.h"
void menu()
{
printf("**************************************n");
printf("******** 1.添加 2.删除 ********n");
printf("******** 3.查找 4.修改 ********n");
printf("******** 5.显示 6.清空 ********n");
printf("******** 7.排序 0.退出 ********n");
printf("**************************************n");
}
//用枚举常量从0-7定义通讯录的功能
enum function
{
EXIT,
ADD,
DELETE,
SEARCH,
MODIFY,
PRINT,
CLEAR,
SORT
};
void test()
{
menu();
Contact contact_list;
initial_Contact(&contact_list);
int input = 0;
do
{
input = 0;
printf("请选择:n");
scanf("%d", &input);
switch (input)
{
case ADD:
add_Contact(&contact_list);
break;
case DELETE:
delete_Contact(&contact_list);
break;
case SEARCH:
search_Contact(&contact_list);
break;
case MODIFY:
modify_Contact(&contact_list);
break;
case PRINT:
print_Contact(&contact_list);
break;
case CLEAR:
initial_Contact(&contact_list);
printf("清空成功n");
break;
case SORT:
sort_Contact(&contact_list);
break;
case EXIT:
printf("退出通讯录n");
break;
default:
printf("输入错误,请重新输入:n");
break;
}
} while (input);
}
int main()
{
test();
return 0;
}
//contact.h #pragma once #include#include #include #include //定义类型 #define MAX 1000 #define NAME_MAX 20 #define SEX_MAX 5 #define TELEPHONE_MAX 12 #define ADDRESS_MAX 20 //联系人的信息 struct TheContact { char name[NAME_MAX]; char sex[SEX_MAX]; int age; char telephone[TELEPHONE_MAX]; char address[ADDRESS_MAX]; }; //通讯录 typedef struct ConTACT { struct TheContact contact[MAX]; int number; }Contact; //定义函数 //对通讯录进行初始化 void initial_Contact(Contact* ptr); //添加联系人 void add_Contact(Contact* ptr); //删除联系人 void delete_Contact(Contact* ptr); //显示联系人 void print_Contact(Contact* ptr); //查找联系人 void search_Contact(Contact* ptr); //修改联系人信息 void modify_Contact(Contact* ptr); //联系人排序 void sort_Contact(Contact* ptr);
//contact.c
#include "contact.h"
void initial_Contact(Contact* ptr)
{
assert(ptr);
memset(ptr->contact, 0, sizeof(ptr->contact));
ptr->number = 0;
}
void add_Contact(Contact* ptr)
{
assert(ptr);
printf("请输入姓名:n");
scanf("%s", &(ptr->contact[ptr->number].name));
printf("请输入性别:n");
scanf("%s", &(ptr->contact[ptr->number].sex));
printf("请输入年龄:n");
scanf("%d", &(ptr->contact[ptr->number].age));
printf("请输入电话:n");
scanf("%s", &(ptr->contact[ptr->number].telephone));
printf("请输入住址:n");
scanf("%s", &(ptr->contact[ptr->number].address));
ptr->number++;
printf("成功添加联系人n");
}
void delete_Contact(Contact* ptr)
{
assert(ptr);
char contact_name[NAME_MAX] = "0";
printf("请输入要删除联系人的姓名:n");
scanf("%s", contact_name);
for (int i = 0; i < ptr->number; i++)
{
if (!(strcmp(ptr->contact[i].name, contact_name)))
{
for (int j = i; j < ptr->number - 1; j++)
{
ptr->contact[j] = ptr->contact[j + 1];
}
ptr->number--;
printf("删除成功n");
}
else
{
printf("要删除的联系人不存在n");
return;
}
}
}
void print_Contact(Contact* ptr)
{
assert(ptr);
printf(" ");
printf("%-15s ", "姓名");
printf("%-5s ", "性别");
printf("%-5s ", "年龄");
printf("%-12s ", "电话");
printf("%-20s n", "住址");
for (int i = 0; i < ptr->number; i++)
{
printf("%-2d ", i + 1);
printf("%-15s ", &(ptr->contact[i].name));
printf("%-5s ", &(ptr->contact[i].sex));
printf("%-5d ", ptr->contact[i].age);
printf("%-12s ", &(ptr->contact[i].telephone));
printf("%-20s n", &(ptr->contact[i].address));
}
}
void search_Contact(Contact* ptr)
{
assert(ptr);
char contact_name[NAME_MAX] = "0";
printf("请输入要查找联系人的姓名:n");
scanf("%s", contact_name);
for (int i = 0; i < ptr->number; i++)
{
if (!(strcmp(ptr->contact[i].name, contact_name)))
{
printf(" ");
printf("%-15s ", "姓名");
printf("%-5s ", "性别");
printf("%-5s ", "年龄");
printf("%-12s ", "电话");
printf("%-20s n", "住址");
; printf("%-2d ", i + 1);
printf("%-15s ", &(ptr->contact[i].name));
printf("%-5s ", &(ptr->contact[i].sex));
printf("%-5d ", ptr->contact[i].age);
printf("%-12s ", &(ptr->contact[i].telephone));
printf("%-20s n", &(ptr->contact[i].address));
printf("查找联系人成功n");
}
else
{
printf("要查找的联系人不存在n");
return;
}
}
}
void modify_Contact(Contact* ptr)
{
assert(ptr);
char contact_name[NAME_MAX] = "0";
printf("请输入要修改联系人的姓名:n");
scanf("%s", contact_name);
for (int i = 0; i < ptr->number; i++)
{
if (!(strcmp(ptr->contact[i].name, contact_name)))
{
printf("请输入姓名:n");
scanf("%s", &(ptr->contact[i].name));
printf("请输入性别:n");
scanf("%s", &(ptr->contact[i].sex));
printf("请输入年龄:n");
scanf("%d", &(ptr->contact[i].age));
printf("请输入电话:n");
scanf("%s", &(ptr->contact[i].telephone));
printf("请输入住址:n");
scanf("%s", &(ptr->contact[i].address));
printf("修改成功n");
}
else
{
printf("要修改的联系人不存在n");
return;
}
}
}
int* cmp_name(const void* e1, const void* e2)
{
return strcmp(((struct TheContact*)e1)->name, ((struct TheContact*)e2)->name);
}
void sort_Contact(Contact* ptr)
{
qsort(ptr->contact, ptr->number, sizeof(ptr->contact[0]), cmp_name);
printf("排序成功n");
}



