C语言——通讯录系统
实现效果如图:
模块如下:
通讯录系统主菜单功能选择
1、添加联系人信息
2、查找联系人信息
3、修改联系人信息
4、删除联系人信息
5、显示全部联系人信息
6、退出通讯录系统
7、释放链表
代码如下:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
//联系人信息
typedef struct _Person
{
char name[10];
char phone[20];
char addr[20];
}Person;
//联系人节点
typedef struct _Node
{
Person P;
struct _Node* next;
}Node;
Node* HeadNode = NULL;
//主界面
void Menu()
{
printf("-------------通讯录主菜单功能:----------------\n"
"1.添加联系人信息.\n2.查找联系人信息.\n"
"3.修改联系人信息.\n4.删除联系人信息.\n"
"5.显示联系人信息.\n6.退出通讯录系统.\n"
"7.释放链表.\n");
}
//添加联系人
void AddContact()
{
Node* ANode = (Node*)malloc(sizeof(Node));
ANode->next = NULL;
printf("\n\n\n\t\t\t\t-------------请添加新的联系人信息-----------\n");
printf("\t\t\t\t请输入联系人的姓名:");
scanf("%s", ANode->P.name);
printf("\t\t\t\t请输入联系人的号码:");
scanf("%s", ANode->P.phone);
printf("\t\t\t\t请输入联系人的地址:");
scanf("%s", ANode->P.addr);
//头插法连接链表
if (HeadNode == NULL)
{
HeadNode = ANode;
}
else
{
ANode->next = HeadNode;
HeadNode = ANode;
}
printf("添加成功.\n");
return 1;
}
//搜索联系人
void SearchContact(Node* pNode)
{
Node* SNode = pNode;
char Name[10] = "";
printf("\n\n\t\t\t\t-------------请输入您要查找的联系人姓名------------\n");
printf("\t\t\t\t请输入联系人的姓名:");
scanf("%s",Name);
while (SNode != NULL)
{
if (strcmp(SNode->P.name, Name) !=0)
{
SNode = SNode->next;
continue;
}
else
{
printf("\t\t\t\t联系人:%s\n\t\t\t\t电话号码:%s\n\t\t\t\t地址:%s\n", SNode->P.name, SNode->P.phone, SNode->P.addr);
return 1;
}
}
printf("\t\t\t\t抱歉,找不到该联系人.\n");
return 1;
}
//修改联系人
void ChangeContact(Node* pNode)
{
Node* CNode = pNode;
char Name[10] = "";
printf("\n\n\t\t\t\t-------------请输入您要查找的联系人姓名------------\n");
printf("\t\t\t\t请输入联系人的姓名:");
scanf("%s", Name);
while (CNode != NULL)
{
if (strcmp(CNode->P.name, Name) != 0)
{
CNode = CNode->next;
continue;
}
else
{
printf("\n\n\n\t\t\t\t-------------请修改该联系人的信息-----------\n");
printf("\t\t\t\t联系人的姓名:");
scanf("%s", CNode->P.name);
printf("\t\t\t\t联系人的号码:");
scanf("%s", CNode->P.phone);
printf("\t\t\t\t联系人的地址:");
scanf("%s", CNode->P.addr);
return 1;
}
}
printf("\t\t\t\t抱歉,找不到该联系人.\n");
return 1;
}
//删除联系人
int DeleteContact(Node* pNode)
{
//1、判断链表是否存在
if (pNode == NULL)//不存在
{
printf("\n\n\t\t\t\t当前目录不存在联系人.\n");
return pNode;
}
char name[32] = "";
printf("\t\t\t\t------------------请输入您要删除的联系人--------------------\n");
printf("\t\t\t\t请输入联系人的姓名:");
scanf("%s", name);
//2、寻找删除点
Node* firstNode = pNode, * secondNode = pNode;
while (strcmp(firstNode->P.name, name) != 0 && firstNode->next != NULL)
{
secondNode = firstNode;
firstNode = firstNode->next;
}
//3、找到删除点
if (strcmp(firstNode->P.name, name) == 0)//找到删除点
{
//4、判断删除的位置
if (firstNode == pNode)//删除头结点
{
pNode = firstNode->next;
free(firstNode);
}
else//中部 或 尾部节点
{
firstNode->next = firstNode->next;
free(firstNode);
}
printf("删除成功");
return pNode;
}
else//没找到删除点
{
printf("未找到该联系人.");
}
return pNode;
}
//显示联系人
void PrintContact(Node* pNode)
{
Node* PNode = pNode;
printf("\t\t\t\t------------------所有联系人信息如下--------------------\n");
while (PNode != NULL)
{
printf("\t\t\t\t联系人\t\t电话号码\t地址\n");
printf("\t\t\t\t%s\t\t%s\t\t%s\n", PNode->P.name, PNode->P.phone, PNode->P.addr);
PNode = PNode->next;
}
return 1;
}
//释放链表
int FreeContact(Node* pNode)
{
if (pNode == NULL)
{
printf("当前链表无结点.\n");
return pNode;
}
else
{
Node* pb = pNode;
while (pb != NULL)
{
pNode = pb->next;
free(pb);
pb = pNode;
}
printf("释放成功.\n");
return pNode;
}
return pNode;
}
int main()
{
system("color b0");
while (1)
{
Menu();
int choose = _getch();
switch (choose)
{
case '1':
AddContact();//添加联系人信息
break;
case '2':
SearchContact(HeadNode);//查找联系人信息
break;
case '3':
ChangeContact(HeadNode);//修改联系人信息
break;
case '4':
HeadNode=DeleteContact(HeadNode); //删除联系人信息
break;
case '5':
PrintContact(HeadNode);//显示联系人信息
break;
case '6':
exit(0);//退出通讯录系统
case '7':
HeadNode=FreeContact(HeadNode);//释放链表
break;
}
system("pause");
system("cls");
}
return 0;
}
还没有评论,来说两句吧...