#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct people {//定义联系人结构体
char name[20];
char address[100];
char QQ[20];
char EMAIL[20];
char tel[20];
char relation[20];
}P;
P num[100];//定义结构体数组,100个人
int i = 0;//联系人的序号
//调用函数声明
void menu();
void add();
void del();
void find();
void edit();
void print();
int main() {
system("title 通讯录管理系统");
int in;//输入选择按键
while (1) {
menu();//菜单
scanf("%d", &in);
switch (in) {
case 0:return 0; //退出系统
case 1:add(); break; //添加联系人
case 2:del(); break; //删除联系人
case 3:find(); break; //查找联系人
case 4:edit(); break; //编辑联系人
case 5:print(); break; //打印通讯录
default:printf("输入错误,请重新输入:\n"); break;
}
}
return 0;
}
//菜单
void menu() {
printf("================================\n");
printf("\t通讯录管理系统\n");
printf("\t 0.退出通讯录\n");
printf("\t 1.添加联系人\n");
printf("\t 2.删除联系人\n");
printf("\t 3.查找联系人\n");
printf("\t 4.修改联系人\n");
printf("\t 5.查看通讯录\n");
printf("================================\n");
printf("请选择:");
}
//判断字符串是否相等,用于查询、删除、编辑等操作
int my_strcmp(char name[], int j) { //接收输入的名字与该结构体数组下标
char* p1 = name; //strcmp参数是指针,所以将他们用指针表示
char* p2 = (char*)&num[j];
if (strcmp(p1, p2) == 0) { //strcmp相等就返回0
return 0;
}
return 1;
}
//打印单个人的信息方便显示
void print2(int j) {
printf("序号\t姓名\t\t电话\tQQ\tEMAIL\tAddress\tRelation\n");
printf("%2d\t%s\t\t%s\t%s\t%s\t%s\t%s\n", (j + 1), num[j].name, num[j].tel,num[j].QQ, num[j].EMAIL, num[j].address, num[j].relation);
}
//1.增加联系人
void add() {
if (i > 100) {
printf("该通讯录已经装满了!\n");
return;
}
char chose; //用于判断是否要继续添加Y/N
while (1) {
printf("请输入联系人的姓名:\n");
scanf("%s", &num[i].name);
getchar(); //清除缓存区!!!!
printf("请输入联系人的住址:\n");
scanf("%s", &num[i].address);
getchar();
printf("请输入联系人的qq:\n");
scanf("%s", &num[i].QQ);
getchar();
printf("请输入联系人的email:\n");
scanf("%s", &num[i].EMAIL);
getchar();
printf("请输入联系人的电话:\n");
scanf("%s", &num[i].tel);
getchar();
printf("请输入联系人的关系:\n");
scanf("%s", &num[i].relation);
getchar();
i++; //联系人加一
printf("添加成功!是否继续添加 Y/N:\n"); //提示用户是否继续添加
scanf("%c", &chose);
if (chose == 'y' || chose == 'Y') { //选择y或Y就继续添加,其他值退出
continue; //结束本次循环,回到判断条件处
}
return;
}
}
//删除联系人实际操作将后一个人信息替换钱一个人信息
void del2(int j) {
for (j; j < i; j++) {
num[j] = num[j + 1];
}
}
//2.删除联系人
void del() {
if (i == 0) { //判断当前是否有联系人
printf("当前没有联系人!\n");
return;
}
char name[20]; //用来接收输入的要删除的联系人姓名
int chose = 0; //用作判断
printf("请输入要删除的联系人姓名:\n");
scanf("%s", name);
for (int j = 0; j < i; j++) {
if (my_strcmp(name, j) == 0) { //在数组里查找与输入名相同的元素
printf("确认删除以下信息?\n");
print2(j); //显示当前的联系人信息
printf("1.确认 2.返回\n"); //提示是否确认删除
scanf("%d", &chose);
if (chose == 1) {
del2(j); //进行删除操作
printf("删除成功!\n"); //提示删除成功
i--; //联系人的个数减一
return;
}
}
}
printf("没有找到该联系人!\n"); //如果没有找到目标,显示没有此人
return;
}
//3.查找
void find() {
if (i == 0) { //判断当前是否有联系人
printf("当前没有联系人!\n");
return;
}
printf("请输入要查找的联系人姓名:\n"); //提示输入查找姓名
char name[20]; //接收姓名
scanf("%s", name);
for (int j = 0; j < i; j++) {
if (my_strcmp(name, j) == 0) { //查找与输入姓名相同的元素
printf("查找成功!\n"); //提示找到了目标联系人
print2(j); //显示该联系人的信息
return;
}
}
printf("经查无此人!\n"); //提示没有找到联系人
}
//4.修改
void edit() {
if (i == 0) { //判断当前是否有联系人
printf("当前没有联系人!\n");
return;
}
printf("请输入编辑人姓名"); //输入编辑姓名
char name[20]; //接收姓名
char chose; //用于选择
scanf("%s", name);
getchar(); //清除缓存区
for (int j = 0; j < i; j++) {
if (my_strcmp(name, j) == 0) { //查找与输入姓名相同的元素
printf("找到此联系人"); //提示找到此人
print2(j); //输入此人信息
printf("是否继续编译"); //提示是否确认编辑
scanf("%c", &chose); //输入选择
if (chose == 'y' || chose == 'Y') {
printf("请输入新联系人的姓名:\n");
scanf("%s", &num[j].name);
printf("请输入新联系人的住址:\n");
scanf("%s", &num[j].address);
printf("请输入新联系人的qq:\n");
scanf("%s", &num[j].QQ);
printf("请输入新联系人的email:\n");
scanf("%s", &num[j].EMAIL);
printf("请输入新联系人的电话:\n");
scanf("%s", &num[j].tel);
printf("请输入新联系人的联系:\n");
scanf("%s", &num[j].relation);
printf("修改成功");
print2(j); //显示新联系人信息
return;
}
}
}
printf("没有此联系人"); //提示没有此人
}
//显示通讯录
void print() {
if (i == 0) { //判断当前是否有联系人
printf("当前没有联系人!\n");
return;
}
int j = 0; //从第一个元素开始输出联系人
printf("序号\t姓名\t\t电话\tQQ\tEMAIL\tAddress\tRelation\n");
printf("----\t----\t\t----\n");
for (j = 0; j < i; j++) {
printf("%2d\t%s\t\t%s\t%s\t%s\t%s\t%s\n", (j + 1), num[j].name, num[j].tel, num[j].QQ, num[j].EMAIL, num[j].address, num[j].relation);
}
}