一个简单的通讯录程序
AddressBook.h
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
#include<assert.h>
#include<string.h>
#define MAX_SIZE 1000
struct people
{
char name[20];//姓名
char sex[5];//性别
char age[5];//年龄
char tel[11];//电话
char address[50];//住址
};
typedef struct LinkMan
{
struct people peo[MAX_SIZE];
size_t size;
}linkman;
void AddressBookInit(linkman* Plink);
void AddInformation(linkman* Plink);
void DeleteInformation(linkman* Plink);
void FindInformation(linkman* Plink);
void AmendInformation(linkman* Plink);
void ShowInformation(linkman* Plink);
void EmptyInformation(linkman* Plink);
void NameSort(linkman* Plink);
AddressBook.c
#include"addressbook.h"
//初始化通讯录
void AddressBookInit(linkman* Plink)
{
assert(Plink);
memset(Plink->peo, 0, MAX_SIZE*sizeof(struct people));
Plink->size = 0;
}
//添加联系人信息
void AddInformation(linkman* Plink)
{
assert(Plink);
printf("=====%s=====\n", __FUNCTION__);
if(Plink->size == MAX_SIZE)
{
printf("通讯录已满\n");
return;
}
else
{
printf("\n请输入联系人信息=>\n");
printf("姓名:");
scanf("%s", Plink->peo[Plink->size].name);
printf("性别:");
scanf("%s", Plink->peo[Plink->size].sex);
printf("年龄:");
scanf("%s", Plink->peo[Plink->size].age);
printf("电话:");
scanf("%s", Plink->peo[Plink->size].tel);
printf("地址:");
scanf("%s", Plink->peo[Plink->size].address);
Plink->size++;
}
}
//删除指定联系人信息
void DeleteInformation(linkman* Plink)
{
printf("=====%s=====\n", __FUNCTION__);
assert(Plink);
char name[20];
printf("请输入要删除的联系人姓名=>");
scanf("%s", &name);
int flag = 0;
size_t i = 0;
for(; i<Plink->size; i++)
{
if(strcmp(Plink->peo[i].name, name) == 0)
{
flag = 1;
//printf("下标为[%d]\n", i);
printf("姓名:%s\n", Plink->peo[i].name);
printf("性别:%s\n", Plink->peo[i].sex);
printf("年龄:%s\n", Plink->peo[i].age);
printf("电话:%s\n", Plink->peo[i].tel);
printf("地址:%s\n", Plink->peo[i].address);
}
else if(flag != 1)
{
printf("此人不存在\n");
return;
}
}
char flag3;
printf("确认要删除吗?[y/n] => ");
scanf("%s", &flag3);
if(flag == 'y')
{
if(i == 0)
{
Plink->size--;
}
else
{
for(size_t j=i; j<Plink->size; j++)
{
Plink->peo[j] = Plink->peo[j+1];
}
}
Plink->size--;
printf("删除成功\n");
}
else
printf("没有删除\n");
}
//查找指定联系人信息
void FindInformation(linkman* Plink)
{
printf("=====%s=====\n", __FUNCTION__);
assert(Plink);
char name[20];
printf("请输入要查找的联系人姓名=>");
scanf("%s", &name);
size_t k = 0;
int flag2 = 0;
for(; k<=Plink->size; k++)
{
if(strcmp(Plink->peo[k].name, name) == 0)
{
flag2 = 1;
//printf("下标为[%d]\n", i);
printf("姓名:%s\n", Plink->peo[k].name);
printf("性别:%s\n", Plink->peo[k].sex);
printf("年龄:%s\n", Plink->peo[k].age);
printf("电话:%s\n", Plink->peo[k].tel);
printf("地址:%s\n", Plink->peo[k].address);
return;
}
else if(flag2 != 1)
{
printf("此人不存在\n");
return;
}
}
}
//修改指定联系人信息
void AmendInformation(linkman* Plink)
{
printf("=====%s=====\n", __FUNCTION__);
assert(Plink);
if(Plink->size == 0)
{
printf("联系人列表为空\n");
return;
}
char name[20];
printf("请输入要修改的联系人姓名=>");
scanf("%s", &name);
int flag1 = 0;
size_t l = 0;
for(; l<Plink->size; l++)
{
if(strcmp(Plink->peo[l].name, name) == 0)
{
flag1 = 1;
//printf("下标为[%d]\n", i);
printf("姓名:%s\n", Plink->peo[l].name);
printf("性别:%s\n", Plink->peo[l].sex);
printf("年龄:%s\n", Plink->peo[l].age);
printf("电话:%s\n", Plink->peo[l].tel);
printf("地址:%s\n", Plink->peo[l].address);
}
else if(flag1 != 1)
{
printf("此人不存在\n");
return;
}
}
printf("请修改=>\n");
printf("姓名:");
scanf("%s", Plink->peo[l].name);
printf("性别:");
scanf("%s", Plink->peo[l].sex);
printf("年龄:");
scanf("%s", Plink->peo[l].age);
printf("电话:");
scanf("%s", Plink->peo[l].tel);
printf("地址:");
scanf("%s", Plink->peo[l].address);
/*
//char information[6];
//char changeInformation[20];
//printf("请输入要修改的内容=>");
//scanf("%s", &information);
//if(strcmp(information, "姓名") == 0)
{
printf("请修改=>");
scanf("%s", Plink->peo[l].name);
//strcpy(Plink->peo[i].name, changeInformation);
printf("修改成功\n");
}
if(strcmp(information, "性别") == 0)
{
printf("请修改=>");
scanf("%s", &changeInformation);
strcpy(Plink->peo[l].sex, changeInformation);
printf("修改成功\n");
}
if(strcmp(information, "年龄") == 0)
{
printf("请修改=>");
scanf("%s", &changeInformation);
strcpy(Plink->peo[l].age, changeInformation);
printf("修改成功\n");
}
if(strcmp(information, "电话") == 0)
{
printf("请修改=>");
scanf("%s", &changeInformation);
strcpy(Plink->peo[l].tel, changeInformation);
printf("修改成功\n");
}
if(strcmp(information, "地址") == 0)
{
printf("请修改=>");
scanf("%s", &changeInformation);
strcpy(Plink->peo[l].address, changeInformation);
printf("修改成功\n");
}*/
}
//显示所有联系人信息
void ShowInformation(linkman* Plink)
{
printf("=====%s=====\n", __FUNCTION__);
assert(Plink);
if(Plink->size == 0)
{
printf("联系人列表为空\n");
return;
}
printf("姓名 性别 年龄 电话 地址\n");
for(size_t m=0; m<Plink->size; m++)
{
printf("%-6s ",Plink->peo[m].name);
printf("%-6s ",Plink->peo[m].sex);
printf("%-6s ",Plink->peo[m].age);
printf("%-6s ",Plink->peo[m].tel);
printf("%-6s ",Plink->peo[m].address);
printf("\n");
}
}
//清空所有联系人
void EmptyInformation(linkman* Plink)
{
printf("=====%s=====\n", __FUNCTION__);
assert(Plink);
if(Plink->size == 0)
{
printf("联系人列表已经为空\n");
return;
}
else
{
Plink->size = 0;
printf("清空成功\n");
}
}
//以联系人姓名排序所有联系人
void NameSort(linkman* Plink)
{
printf("=====%s=====\n", __FUNCTION__);
assert(Plink);
if(Plink->size == 0)
{
printf("联系人列表为空\n");
return;
}
for(size_t n=0; n<Plink->size; n++)
{
for(size_t o=0; o<Plink->size-n-1; o++)
{
if(strcmp(Plink->peo[o].name, Plink->peo[o+1].name) > 0)
{
struct people tmp = Plink->peo[o];
Plink->peo[o] = Plink->peo[o+1];
Plink->peo[o+1] = tmp;
}
}
}
ShowInformation(Plink);
}
main.c
#include"addressbook.h"
int main()
{
linkman MyLinkMan;
AddressBookInit(&MyLinkMan);
/*
AddInformation(&MyLinkMan);
DeleteInformation(&MyLinkMan);
FindInformation(&MyLinkMan);
AmendInformation(&MyLinkMan);
*/
while(1)
{
int n = 0;
printf("===================================\n");
printf("1:添加 2:删除 3:查找 4:修改\n");
printf("5:显示 6:清空 7:排序 0:退出\n");
printf("===================================\n");
printf("请输入=>");
scanf("%d", &n);
if(n>=0 && n<=7)
{
switch(n)
{
case 1:AddInformation(&MyLinkMan);//添加
break;
case 2:DeleteInformation(&MyLinkMan);//删除
break;
case 3:FindInformation(&MyLinkMan);//查找
break;
case 4:AmendInformation(&MyLinkMan);//修改
break;
case 5:ShowInformation(&MyLinkMan);//显示
break;
case 6:EmptyInformation(&MyLinkMan);//清空
break;
case 7:NameSort(&MyLinkMan);//排序
break;
case 0:printf("再见!\n");
exit(1);
}
}
else
{
printf("输入有误,请重输\n");
continue;
}
}
return 0;
}