通讯录管理系统

发布时间 2023-04-17 19:36:15作者: _夸夸

这段代码是对c语言的复习,也是复习之前学过的链表

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<Windows.h>
void ShowMenu()
{
puts("****************************");
puts("***欢迎使用通讯录管理系统***");
puts("******-----------------*****");
puts("* 1.添加新建联系人 *");
puts("* 2.显示已有联系人 *");
puts("* 3.删除已有联系人 *");
puts("* 4.查找已有联系人 *");
puts("* 5.修改已有联系人 *");
puts("* 6.清空已有联系人 *");
puts("* 0.退出联系人系统 *");
puts("****************************");

}
typedef struct link
{
char name[10];
char sex[3];
char phone[15];
char house[30];
struct link *next;

}link;
link *Deletenew(link *head)
{
char a[10];
printf("请输入您要删除的联系人的名字:\n");
scanf("%s", a);
fflush(stdin);
link *p = head, *pr = NULL;
if (head == NULL)
{
printf("没有联系人哦~\n");
exit(0);
}
while (strcmp(p->name, a)&&p!=NULL)
{
pr = p;
p = p->next;
}
if (p != NULL)
{
pr->next = p->next;
free(p);
}
else
{
printf("没有找到该联系人!\n");
}

}
void givenew(link *p)
{
printf("请输入姓名:\n");//给新建的联系人赋值
scanf("%s", p->name);
fflush(stdin);
puts("请输入性别");
puts("1--男 0--女");
int sex1;
do
{
scanf("%d", &sex1);
fflush(stdin);
if (sex1 == 1)
{
strcpy(p->sex, "男");
}
else if (sex1 == 0)
{
strcpy(p->sex, "女");
}
else
{
printf("请重新输入!\n");
}
} while (sex1 != 1 && sex1 != 0);
printf("请输入其联系电话:\n");
scanf("%s", p->phone);
fflush(stdin);
printf("请输入其家庭住址:\n");
scanf("%s", p->house);
}

link *addnew(link *head)
{
link *p, *pr=head;
p = (link *)malloc(sizeof(link));
if (p == NULL)
{
printf("没有足够的储存空间!");
exit(0);
}
if (head == NULL)
{
head = p;
}
else
{
while (pr->next != NULL) pr = pr->next;
pr->next = p;
}
givenew(p);
p->next = NULL;
return head;
}
void show(link *head)
{
link *p = head; int i = 0;
while (p != NULL)
{
i++;
printf("%d.%s\t%s\t%s\t%s\t\n", i, p->name, p->sex, p->phone, p->house);
p = p->next;
}

}
void DeleteM(link *head)
{
link *p = NULL, *pr = head;
while (pr!=NULL)
{
p = pr;
pr = pr->next;
free(p);
}

}
link *find(link *head)
{
link *p = head;
char a[10];
printf("请输入您要查找的联系人:\n");
scanf("%s", a);
if (head == NULL)
{
printf("没有联系人哦~\n");
exit(0);
}
while (strcmp(p->name, a) && p != NULL)
{
p = p->next;
}
if (p == NULL)
{
printf("没有找到该联系人!\n");
exit(0);
}
else
{
return p;
}
}
void fix(link *head)
{
link *p = head;
char a[10];
printf("请输入您要修改的联系人:\n");
scanf("%s", a);
if (head == NULL)
{
printf("没有联系人哦~\n");
exit(0);
}
while (strcmp(p->name, a) && p != NULL)
{
p = p->next;
}
if (p == NULL)
{
printf("没有找到该联系人!\n");
exit(0);
}
else
{
printf("请输入您要修改的内容:1.名字 2.性别 3.电话 4.住址:\n");
int b; scanf("%d", &b);
switch (b)
{
case 1:printf("请输入修改后的名字:\n");
scanf("%s", p->name);
break;
case 2:printf("请输入修改后的性别:1.男 0.女");
int c;
do
{
scanf("%d", &c);
if (c == 1) strcpy(p->sex, "男");
else if (c == 0) strcpy(p->sex, "女");
else printf("请重新输入!");
} while (c != 1 && c != 0);
break;
case 3:printf("请输入修改后的电话:\n");
scanf("%s", p->phone);
break;
case 4:printf("请输入修改后的住址:\n");
scanf("%s", p->house);
break;

}
}

}

int main()
{
link *head = NULL;
while (1)
{
system("cls");
//head=addnew(head);
//show(head);
ShowMenu();
int choose;
scanf("%d", &choose);
switch (choose)
{
case 0:
printf("欢迎下次使用!\n");
DeleteM(head);
return 0;
case 1:
head = addnew(head);
printf("已完成当前操作,即将返回主页面!\n");
system("pause");
break;
case 2:
show(head);
printf("已完成当前操作,即将返回主页面!\n");
system("pause");
break;
case 3:
Deletenew(head);
show(head);
printf("已完成当前操作,即将返回主页面!\n");
system("pause");
break;
case 4:
{
link *pn = NULL;
pn = find(head);
printf("%s\t%s\t%s\t%s\t\n", pn->name, pn->sex, pn->phone, pn->house);
printf("已完成当前操作,即将返回主页面!\n");
system("pause");
break;
}
case 5:
fix(head);
show(head);
printf("已完成当前操作,即将返回主页面!\n");
system("pause");
break;
case 6:
printf("这样做会造成无法找回的联系人,您确定这么做吗?(Y/N)\n");
char c; scanf(" %c", &c);
if (c == 'y' || c == 'Y')
{
DeleteM(head);
head = NULL;
}
else
{
continue;
}
printf("已完成当前操作,即将返回主页面!\n");
system("pause");
}

}
DeleteM(head);
}