#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<string.h>
#include<stdbool.h>
#define MAX_LEN 100
char group[10][20] = { "家人","新人","无","无" ,"无" ,"无" ,"无" ,"无" ,"无" ,"无" };
typedef struct Person
{
char name[MAX_LEN];//姓名
int grou[10];//分组号,可以存十个
char iphone[MAX_LEN][MAX_LEN];//电话
int time[MAX_LEN];//时间
char thing[MAX_LEN][MAX_LEN];//事件
char address[MAX_LEN][MAX_LEN];//地址
struct Person* next;
}person;
void group_add()
{
char p[20];
printf("请输入要添加的分组名:");
scanf("%s", p);
for (int i = 0; i < 10; i++)
{
if (!strcmp(group[i], p))
{
printf("分组重复!!\n");
return;
}
}
for (int i = 0; i < 10; i++)
{
if (!strcmp(group[i], "无"))
{
snprintf(group[i], 20, p);
printf("添加成功\n");
return;
}
}
printf("添加分组达到上限,请删除一些分组后再添加!!\n");
}
void group_xiu()
{
char p[20];
printf("请输入要修改的分组名:");
scanf("%s", p);
char p1[20];
printf("请输入新的分组名:");
scanf("%s", p1);
for (int i = 0; i < 10; i++)
{
if (!strcmp(group[i], p))
{
snprintf(group[i], 20, p1);
printf("修改成功\n");
return;
}
}
printf("没有找到该分组!!\n");
}
void group_del()
{
char p[20];
printf("请输入要删除的分组名:");
scanf("%s", p);
for (int i = 0; i < 10; i++)
{
if (!strcmp(group[i], p))
{
snprintf(group[i], 20, "无");
printf("删除成功\n");
return;
}
}
printf("没有找到该分组!!\n");
}
void menu_group()//分组管理
{
int k = 0;
while (1)
{
printf("***********分组管理***************\n");
printf(" 1 添加分组\n");
printf(" 2 修改分组\n");
printf(" 3 删除分组\n");
printf(" 0 退出分组管理\n");
scanf("%d", &k);
switch (k)
{
case 1:
system("cls");
group_add();
Sleep(3000);
system("cls");
break;
case 2:
system("cls");
group_xiu();
Sleep(3000);
system("cls");
break;
case 3:
system("cls");
group_del();
Sleep(3000);
system("cls");
break;
case 0:
system("cls");
return;
break;
default:
system("cls");
printf("输入错误请重新输入!!!\n");
Sleep(3000);
system("cls");
break;
}
}
}
person* person_init()
{
int i = 0;
person* l = (person*)malloc(sizeof(person));
snprintf(l->name, MAX_LEN, "");
for (i = 0; i < 10; i++)
{
l->grou[i] = 666;
}
for (i = 0; i < MAX_LEN; i++)
{
snprintf(l->iphone[i], MAX_LEN, "");
snprintf(l->thing[i], MAX_LEN, "");
snprintf(l->address[i], MAX_LEN, "");
l->time[i] = 0;
}
l->next = NULL;
return l;
}
void person_add(person* ptr)
{
int i = 0;
int flag = 1;
person* l = (person*)malloc(sizeof(person));
printf("请输入姓名:");
scanf("%s", l->name);
for (i = 0; i < 10; i++)
{
if (flag)
{
printf("请输入分组号:");
scanf("%d", &l->grou[i]);
printf("继续输入请输入 1,否则请输入0\n");
scanf("%d", &flag);
}
else
{
l->grou[i] = 666;
}
}
flag = 1;
for (i = 0; i < MAX_LEN; i++)
{
if (flag)
{
printf("请输入电话号码:");
scanf("%s", l->iphone[i]);
printf("继续输入请输入 1,否则请输入0\n");
scanf("%d", &flag);
}
else
{
snprintf(l->iphone[i], MAX_LEN, "");
}
}
flag = 1;
for (i = 0; i < MAX_LEN; i++)
{
if (flag)
{
printf("请输入地址:");
scanf("%s", l->address[i]);
printf("继续输入请输入 1,否则请输入0\n");
scanf("%d", &flag);
}
else
{
snprintf(l->address[i], MAX_LEN, "");
}
}
for (i = 0; i < MAX_LEN; i++)
{
snprintf(l->thing[i], MAX_LEN, "");
l->time[i] = 0;
}
l->next = NULL;
person* pt = ptr;
while (pt->next)
{
pt = pt->next;
}
pt->next = l;
printf("添加完成\n");
}
void person_del(person* l)
{
char name[10];
printf("请输入姓名:");
scanf("%s", name);
person* ptr = l;
while (ptr->next)
{
if (!strcmp(name, ptr->next->name))
{
ptr->next = ptr->next->next;
printf("删除成功\n");
}
ptr = ptr->next;
}
printf("没有找到该联系人\n");
}
void person_xiu(person* l)
{
char name[10];
int i = 0;
int flag = 1;
int a=0;
printf("请输入姓名:");
scanf("%s", name);
person* ptr = l->next;
while (ptr)
{
if (!strcmp(name, ptr->name))
{
a=1;
scanf("%s", ptr->name);
for (i = 0; i < 10; i++)
{
if (flag)
{
printf("请输入分组号:");
scanf("%d", &ptr->grou[i]);
printf("继续输入请输入 1,否则请输入0\n");
scanf("%d", &flag);
}
}
flag = 1;
for (i = 0; i < MAX_LEN; i++)
{
if (flag)
{
printf("请输入电话号码:");
scanf("%s", ptr->iphone[i]);
printf("继续输入请输入 1,否则请输入0\n");
scanf("%d", &flag);
}
}
flag = 1;
for (i = 0; i < MAX_LEN; i++)
{
if (flag)
{
printf("请输入地址:");
scanf("%s", ptr->address[i]);
printf("继续输入请输入 1,否则请输入0\n");
scanf("%d", &flag);
}
}
printf("修改成功\n");
}
ptr = ptr->next;
}
if(a==0){printf("没有找到该联系人\n");}
return;
}
void person_find(bool flag, person* l)//1 打印全部, 2 按姓名查询
{
person* ptr = l->next;
int i = 0;
char na[MAX_LEN] = "";
if (flag)
{
while (ptr)
{
printf("姓名:%s", ptr->name);
printf(" 电话:");
for (i = 0; i < MAX_LEN; i++)
{
if (strcmp(ptr->iphone[i], ""))
{
printf("%s ", ptr->iphone[i]);
}
}
printf(" 地址:");
for (i = 0; i < MAX_LEN; i++)
{
if (strcmp(ptr->address[i], ""))
{
printf("%s ", ptr->address[i]);
}
}
printf(" 分组:");
for (i = 0; i < 10; i++)
{
if (ptr->grou[i] != 666)
{
printf("%s ", group[ptr->grou[i] - 1]);
}
}
ptr = ptr->next;
printf("\n");
}
}
else
{
printf("请输入要查询的名字:");
scanf("%s", na);
while (ptr)
{
if (!strcmp(na, ptr->name))
{
printf("姓名:%s", ptr->name);
printf(" 电话:");
for (i = 0; i < MAX_LEN; i++)
{
if (strcmp(ptr->iphone[i], ""))
{
printf("%s ", ptr->iphone[i]);
}
}
printf(" 地址:");
for (i = 0; i < MAX_LEN; i++)
{
if (strcmp(ptr->address[i], ""))
{
printf("%s ", ptr->address[i]);
}
}
printf(" 分组:");
for (i = 0; i < 10; i++)
{
if (ptr->grou[i] != 666)
{
printf("%s ", group[ptr->grou[i] - 1]);
}
}
ptr = ptr->next;
printf("\n");
}
}
}
}
void menu_person(person* l)
{
int k = 0;
while (1)
{
printf("***************联系人管理***************\n");
printf(" 1 添加联系人\n");
printf(" 2 修改联系人\n");
printf(" 3 删除联系人\n");
printf(" 4 查询联系人\n");
printf(" 5 打印所有联系人\n");
printf(" 0 退出\n");
scanf("%d", &k);
switch (k)
{
case 1:
system("cls");
person_add(l);
Sleep(3000);
system("cls");
break;
case 2:
system("cls");
person_xiu(l);
Sleep(3000);
system("cls");
break;
case 3:
system("cls");
person_del(l);
Sleep(3000);
system("cls");
break;
case 4:
system("cls");
person_find(false, l);
Sleep(3000);
system("cls");
break;
case 5:
system("cls");
person_find(true, l);
Sleep(3000);
system("cls");
break;
case 0:
system("cls");
main_meun();
break;
default:
printf("输入错误请重新输入!!!\n");
Sleep(3000);
system("cls");
break;
}
}
}
void thing_add(person* l)
{
person* ptr=l;
while(ptr!=NULL)
{ptr=ptr->next;}
int i=0;
char na[MAX_LEN] = "";
if(ptr==NULL)
{
while(1){
person* a=(person*)malloc(sizeof(person));
printf("请输入时间:");
scanf("%d",&a->time[i]);
printf("请输入事件:");
if (!strcmp("",a->thing[i]))
{
scanf("%s",a->thing[i]);
}
printf("添加成功!!\n");
l->next=a;
a->next=NULL;
printf("输入1继续,输入0退出\n");
int asd;
scanf("%d",&asd);
if(asd==0)
{
break;
}
i++;
}
}
else{
while(1){
person* a=(person*)malloc(sizeof(person));
printf("请输入时间:\n");
scanf("%d",&a->time[i]);
printf("请输入事件:\n");
scanf("%s",a->thing[i]);
ptr->next=a;
a->next=NULL;
printf("添加成功!!\n");
printf("输入1继续,输入0退出");
int asd;
scanf("%d",&asd);
if(asd==0)
{
break;
}
i++;
}
}return;
}
void thing_find(person* l)
{
person* ptr=l->next;
int i=0;
char na[MAX_LEN] = "";
if(ptr==NULL)
{
printf("没有信息");
Sleep(2000);
return;
}
while(ptr)
{
printf(" 时间:");
for (i=0;i<MAX_LEN;i++)
{
if(ptr->time[i]!=0)
{
printf("%d ",ptr->time[i]);
}
else{break;}
}
printf(" 事件:");
for (i=0;i<10;i++)
{
if (!strcmp(ptr->thing[i], ""))
{
printf("%s ",ptr->thing[i]);
}
else{break;}
}
ptr=ptr->next;
printf("\n");
}
}
void menu_thing(person* l)
{
int k = 0;
while (1)
{
printf("***************联系人通信管理***************\n");
printf(" 1 添加联系人通信信息\n");
printf(" 2 查看联系人通信信息\n");
printf(" 3 退出\n");
printf("请输入:");
scanf("%d", &k);
switch (k)
{
case 1:
system("cls");
thing_add(l);
Sleep(3000);
system("cls");
break;
case 2:
system("cls");
thing_find(l);
Sleep(3000);
system("cls");
break;
case 3:
system("cls");
return;
break;
default:
system("cls");
printf("输入错误请重新输入!!!\n");
Sleep(3000);
system("cls");
break;
}
}
}
void main_meun()
{
person* l = person_init();
int k = 0;
while (1)
{
printf("********************通讯录*******************\n");
printf("*******1 分组管理******\n");
printf("*******2 联系人管理******\n");
printf("*******3 通信事件管理******\n");
printf("*******4 退出******\n");
printf("请输入:");
scanf("%d", &k);
switch (k)
{
case 1:
system("cls");
menu_group();
system("cls");
break;
case 2:
system("cls");
menu_person(l);
system("cls");
break;
case 3:
system("cls");
menu_thing(l);
system("cls");
break;
case 4:
return 0;
break;
default:
system("cls");
printf("输入错误请重新输入!!!\n");
Sleep(2000);
system("cls");
break;
}
}
}
int main()
{
main_meun();
return 0;
}
麻烦大家看一下第三个通讯事件管理进入后通过1,输入一些数据后,再用第二个查看时显示不了数据了