实现一个通讯录;
通讯录可以用来存储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 <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
//定义类型
#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");
}