#pragma once
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define Max 100
#define Max_name 20
#define Max_sex 5
#define Max_tele 12
#define Max_addr 30
typedef struct PeaInfo
{
char name[Max_name];
int age;
char sex[Max_sex];
char tele[Max_tele];
char addr[Max_addr];
}PeoInfo;
typedef struct Contact
{
PeoInfo data[Max];
int size;
}Contact;
//初始化
void InitContact(Contact* pc);
//增加联系人
void AddContact(Contact* pc);
//删除联系人
void DelContact(Contact* pc);
//查找联系人
void SearchContact(const Contact* pc);
//打印联系人
void ShowContact(const Contact* pc);
//修改联系人
void ModifyContact(Contact* pc);
//排序联系人
void SortContact(Contact* pc);
//销毁通讯录
void DestroyContact(Contact* pc);
enum Option
{
EXIT,//0
ADD,//1
DEL,//2
SEARCH,//3
MODIFY,//4
SHOW,//5
SORT,//6
};
void meun()
{
printf("***********************\n");
printf("***1.ADD 2.DEL ***\n");
printf("***3.SEARCH 4.MODIFY***\n");
printf("***5.SHOW 6.SORT ***\n");
printf("*** 0.EXIT ***\n");
printf("***********************\n");
printf("请选择:");
}
void test()
{
Contact c = { 0 };
InitContact(&c);
int input = 0;
do
{
meun();
scanf("%d",&input);
switch (input)
{
case ADD:AddContact(&c);
break;
case DEL:DelContact(&c);
break;
case SEARCH:SearchContact(&c);
break;
case SHOW:ShowContact(&c);
break;
case SORT:SortContact(&c);
break;
case MODIFY:ModifyContact(&c);
break;
case EXIT:printf("程序退出\n"); DestroyContact(&c);
break;
default:printf("无该选项\n");
break;
}
} while (input);
}
int main()
{
test();
return 0;
}
//初始化
void InitContact(Contact*pc)
{
pc->size = 0;
memset(pc->data,0,sizeof(PeoInfo));
}
//增加联系人
void AddContact(Contact* pc)
{
if (pc->data == Max)
{
printf("人员已满,无法增加\n");
return;
}
printf("请输入联系人的姓名:");
scanf("%s",pc->data[pc->size].name);
printf("请输入联系人的年龄:");
scanf("%d", &(pc->data[pc->size].age));
printf("请输入联系人的性别:");
scanf("%s", pc->data[pc->size].sex);
printf("请输入联系人的电话:");
scanf("%s", pc->data[pc->size].tele);
printf("请输入联系人的地址:");
scanf("%s", pc->data[pc->size].addr);
pc->size++;
}
//通过名字查找
static int FindByName(Contact* pc,char name[])
{
int i = 0;
for (i = 0; i < pc->size; i++)
{
if (strcmp(pc->data[i].name, name) == 0)
{
return i;
}
}
return -1;
}
//删除联系人
void DelContact(Contact* pc)
{
if (pc->size == 0)
{
printf("联系人为空\n");
return;
}
char name[Max_name] = { 0 };
printf("请输入要删除的人的姓名:");
scanf("%s", name);
int pos = FindByName(pc,name);
if (pos == -1)
{
printf("该人不存在\n");
return;
}
for (int i = pos; i < pc->size - 1; i++)
{
pc->data[i] = pc->data[i + 1];
}
pc->size--;
}
//查找联系人
void SearchContact(const Contact* pc)
{
char name[Max_name] = { 0 };
printf("请输入要查找的人的姓名:");
scanf("%s", name);
int pos = FindByName(pc, name);
if (pos == -1)
{
printf("该人不存在\n");
return;
}
printf("%-20s %-5s %-4s %-11s %-30s\n","姓名","性别","年龄","电话","地址");
printf("%-20s %-5s %-4d %-11s %-30s\n",
pc->data[pos].name,
pc->data[pos].sex,
pc->data[pos].age,
pc->data[pos].tele,
pc->data[pos].addr );
}
//打印联系人
void ShowContact(const Contact* pc)
{
printf("%-20s %-5s %-4s %-11s %-30s\n", "姓名", "性别", "年龄", "电话", "地址");
for (int i = 0; i < pc->size; i++)
{
printf("%-20s %-5s %-4d %-11s %-30s\n",
pc->data[i].name,
pc->data[i].sex,
pc->data[i].age,
pc->data[i].tele,
pc->data[i].addr);
}
}
//修改联系人
void ModifyContact(Contact* pc)
{
char name[Max_name] = { 0 };
printf("请输入要修改的人的姓名:");
scanf("%s", name);
int pos = FindByName(pc, name);
if (pos == -1)
{
printf("该人不存在\n");
return;
}
printf("请输入联系人的姓名:");
scanf("%s", pc->data[pos].name);
printf("请输入联系人的年龄:");
scanf("%d", &(pc->data[pos].age));
printf("请输入联系人的性别:");
scanf("%s", pc->data[pos].sex);
printf("请输入联系人的电话:");
scanf("%s", pc->data[pos].tele);
printf("请输入联系人的地址:");
scanf("%s", pc->data[pos].addr);
}
int cmp(const void*e1,const void*e2)
{
return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name);
}
//排序联系人
void SortContact(Contact* pc)
{
qsort(pc->data,pc->size,sizeof(PeoInfo),cmp);
}
//销毁通讯录
void DestroyContact(Contact* pc)
{
pc->size = 0;
}
简易版通讯录
最新推荐文章于 2025-07-09 20:08:09 发布