首先,为了减少通讯录项目的工程量,这里要引用前一篇文章完成的顺序表的基本功能
这里将代码放到这里,方便查找
typedef struct SeqList
{
SLDataType* a;
int size; // 有效数据个数
int capacity; // 空间容量
}SL;
void SLInit(SL* ps);
void SLDestroy(SL* ps);
void SLPrint(SL* ps);
//扩容
void SLCheckCapacity(SL* ps);
//头部插入删除 / 尾部插入删除
void SLPushBack(SL* ps, SLDataType x);
void SLPopBack(SL* ps);
void SLPushFront(SL* ps, SLDataType x);
void SLPopFront(SL* ps);
//指定位置之前插入/删除数据
void SLInsert(SL* ps, int pos, SLDataType x);
void SLErase(SL* ps, int pos);
int SLFind(SL* ps, SLDataType x);
首先需要创建一个通讯录的结构体,为了方便修改结构体变量的长度,这里选择使用#define
#define NAME_MAX 100
#define SEX_MAX 4
#define TEL_MAX 11
#define ADDR_MAX 100
typedef struct PersonInfo
{
char name[NAME_MAX];
int age;
char sex[SEX_MAX];
char tel[TEL_MAX];
char addr[ADDR_MAX];
}PeoInfo;
typedef PeoInfo SLDataType;
注意,该代码因该放到头文件的最前面,
//前置声明
struct SeqList;
typedef struct SeqList contact;
//初始化通讯录
void InitContact(contact* con);
//添加通讯录数据
void AddContact(contact* con);
//删除通讯录数据
void DelContact(contact* con);
//展示通讯录数据
void ShowContact(contact* con);
//查找通讯录数据
void FindContact(contact* con);
//修改通讯录数据
void ModifyContact(contact* con);
//销毁通讯录数据
void DestroyContact(contact* con);
void InitContact(contact* con)
{
SLInit(con);
}
void DestroyContact(contact* con)
{
SLDestroy(con);
}
void AddContact(contact* con)
{
PeoInfo info;
printf("请输入姓名");
scanf("%s", info.name);
printf("请输入年龄");
scanf("%d", info.age);
printf("请输入性别");
scanf("%s", info.sex);
printf("请输入电话");
scanf("%s", info.tel);
printf("请输入地址");
scanf("%s", info.addr);
SLPushBack(con,info);
}
为了删除联系人,首先需要找到需要删除的联系人,因此可以构造函数查找联系人
int FindName(contact* con,char name[])
{
for (int i = 0; i < con->size; i++)
{
if (strcmp(con->a[i].name, name) == 0)
{
//找到了
return i;
}
return -1;
}
}
找到联系人后才可以进行删除
void DelContact(contact* con)
{
printf("请输入删除的姓名");
char name[NAME_MAX];
cin >> name;
int findIndex = FindName(con, name);
if (findIndex < 0)
cout << "不存在该联系人";
//执行删除操作
SLErase(con, findIndex);
printf("删除成功");
}
void ShowContact(contact* con)
{
for (int i = 0; i < con->size; i++)
{
printf("%s %s %d %s %s",
con->a[i].name,
con->a[i].sex,
con->a[i].age,
con->a[i].tel,
con->a[i].addr
);
}
}
void ModifyContact(contact* con)
{
printf("请输入要修改的姓名");
char name[NAME_MAX];
cin >> name;
int findIndex = FindName(con, name);
if (findIndex < 0)
{
cout << "不存在该联系人";
return;
}
printf("请输入姓名");
scanf("%s", con->a[findIndex].name);
printf("请输入年龄");
scanf("%d", con->a[findIndex].age);
printf("请输入性别");
scanf("%s", con->a[findIndex].sex);
printf("请输入电话");
scanf("%s", con->a[findIndex].tel);
printf("请输入地址");
scanf("%s", con->a[findIndex].addr);
printf("修改成功");
}
void FindContact(contact* con)
{
char name[NAME_MAX];
printf("请输入姓名");
cin >> name;
int findIndex = FindName(con, name);
if (findIndex < 0)
{
printf("该联系人不存在");
return;
}
printf("%s %s %d %s %s",
con->a[findIndex].name,
con->a[findIndex].sex,
con->a[findIndex].age,
con->a[findIndex].tel,
con->a[findIndex].addr
);
}