本文的通讯录管理系统主要通过结构体数组实现,功能较单一,仅供学习和参考
#include
#include
#include
#include
typedef struct MailList //构建联系人的信息结构体
{
char name[20];
char telnum[20];
char location[40];
char Email[40];
char birthday[20];
}list;
typedef struct contact //定义信息结构数组和通讯录当前人数封装成一个新的结构体
{
list person[100];
int num;
}contact;
void welcome(); //主菜单界面
void initMail(contact* p); //初始化结构数组
int FindMail(contact* p,const char *findName); //在实现联系人的修改等操作时查找联系人位置的函数
void InputMail(contact*p); //录入新的联系人信息
void ShowMail(contact* p); //显示所有联系人信息
void ModifyMail(contact* p); //修改联系人信息
void DelMail(contact* p); //删除联系人信息
void CheckMail(contact* p); //查询联系人信息
int main()
{
contact NewAdd;
initMail(&NewAdd);
FILE* fp = fopen("MailList.txt", "r");
if (fp != NULL)
{
fread(&NewAdd, sizeof(contact), 1, fp);
fclose(fp);
}
else
{
printf("没有文件信息,跳过读取\n");
}
while (1) //将功能列表放入一个死循环中,实现打开一次程序可进行多次指令
{
welcome();
char x = _getch(); //从键盘输入一个值赋给字符x
switch (x) //判断x的值实现功能列表
{
case'a':InputMail(&NewAdd);
break;
case'b':ShowMail(&NewAdd);
break;
case'c':ModifyMail(&NewAdd);
break;
case'd':DelMail(&NewAdd);
break;
case'e':CheckMail(&NewAdd);
break;
case 'f':
fp = fopen("MailList.txt", "w");
if (fp != NULL)
{
fwrite(&NewAdd, sizeof(contact), 1, fp);
fclose(fp);
}
printf("保存成功!\n");
break;
case'g':
return 0;
break;
default:
printf("输入指令有误,请重新输入\n");
break;
}
system("pause"); //实现完一次功能后 暂停系统
system("cls"); //清空控制台 进入下一次的功能选择
}
}
void welcome() //菜单界面
{
printf("*****************************************\n");
printf("*\t\t通讯录\t\t\t*\n");
printf("*****************************************\n");
printf("*\t\t请选择功能列表\t\t*\n");
printf("*****************************************\n");
printf("*\t\ta.通讯录信息录入\t*\n");
printf("*\t\tb.通讯录信息显示\t*\n");
printf("*\t\tc.通讯录信息修改\t*\n");
printf("*\t\td.通讯录信息删除\t*\n");
printf("*\t\te.通讯录信息查询\t*\n");
printf("*\t\tf.通讯录信息保存\t*\n");
printf("*\t\tg.退出系统\t\t*\n");
printf("*****************************************\n");
}
void initMail(contact* p) //初始化结构体数组
{
p->num = 0; //清零联系人人数
}
int FindMail(contact* p,const char *findName)
{
int i = 0;
for (int i = 0; i < p->num; i++)
{
if (strcmp(p->person[i].name, findName) == 0)
return i; //找到需要实现操作的联系人后返回他的数组下标
}
return -1; //没有这个人则返回-1
}
void InputMail(contact*p)
{
if (p->num >= 100) //结构体的数组长度决定了通讯录的最大存储人数
{
printf("通讯录已满,无法录入\n");
return;
}
printf("*****************************************\n");
printf("输入联系人姓名\n");
scanf("%s", p->person[p->num].name);
printf("*****************************************\n");
printf("输入联系人电话\n");
scanf("%s", p->person[p->num].telnum);
printf("*****************************************\n");
printf("输入联系人地址\n");
scanf("%s", p->person[p->num].location);
printf("*****************************************\n");
printf("输入联系人邮件地址\n");
scanf("%s", p->person[p->num].Email);
printf("*****************************************\n");
printf("输入联系人生日\n");
scanf("%s", p->person[p->num].birthday);
p->num++;
}
void ShowMail(contact* p)
{
system("cls");
for (int i = 0; i < p->num; i++)
{
printf("%s %s %s %s %s\n", p->person[i].name, p->person[i].telnum, p->person[i].location, p->person[i].Email, p->person[i].birthday);
}
}
void ModifyMail(contact* p)
{
system("cls");
printf("请输入要修改联系人的姓名\n");
char ModifyName[20]={0};
int position = 0;
scanf("%s", ModifyName);
position = FindMail(p,ModifyName);
if (position != -1)
{
printf("*****************************************\n");
printf("输入联系人姓名\n");
scanf("%s", p->person[position].name);
printf("*****************************************\n");
printf("输入联系人电话\n");
scanf("%s", p->person[position].telnum);
printf("*****************************************\n");
printf("输入联系人地址\n");
scanf("%s", p->person[position].location);
printf("*****************************************\n");
printf("输入联系人邮件地址\n");
scanf("%s", p->person[position].Email);
printf("*****************************************\n");
printf("输入联系人生日\n");
scanf("%s", p->person[position].birthday);
}
else
{
printf("查无此人!\n");
return;
}
}
void DelMail(contact* p)
{
system("cls");
int i = 0; int position = 0;
printf("请输入要删除联系人的姓名\n");
char DelName[20] = { 0 };
scanf("%s", DelName);
position = FindMail(p, DelName);
if (position != -1)
{
for (i = position; i < p->num; i++) //找到要删除的人的位置后,这个位置之后的每一个数组向前覆盖,实现删除
{
p->person[i] = p->person[i + 1];
}
printf("删除成功\n");
p->num--;
}
else
{
printf("查无此人");
return;
}
}
void CheckMail(contact* p)
{
system("cls");
printf("请输入要查找联系人的姓名\n");
char CheckName[20] = { 0 };
int position = 0;
scanf("%s", CheckName);
position = FindMail(p, CheckName);
if (position != -1)
{
printf("%s %s %s %s %s\n", p->person[position].name, p->person[position].telnum, p->person[position].location, p->person[position].Email, p->person[position].birthday);
}
else
{
printf("查无此人!\n");
return;
}
}