怎样用C写通讯录管理系统
努力进阶的小码农
- 代码如下
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 10
typedef struct link
{
char name[10];//用来存名字
char number[11];//用来存号码
struct link*prior;//前驱
struct link*next;//后继
}LINK,*PLINK;
void insertNode(PLINK head,char name[MAXSIZE],char number[12])//输入信息
{
PLINK temp = (PLINK)malloc(sizeof(LINK));
strcpy(temp->name,name);
strcpy(temp->number,number);//申请的结点存储数据
/*尾插法*/
PLINK p = head->prior;
temp->prior = p;//双循环的连接方法
temp->next = head;
p->next = temp;
head->prior = temp;
}
void DisPlay(PLINK head)//展示
{
PLINK p = head->next;
printf(">姓名\t电话号码\n");
while (p != head)
{
printf("%s\t",p->name);
puts(p->number);
p = p->next;
}
}
void search(PLINK head, char name[])//查找
{
char str1[10];//用来遍历所有人名字时存放的地方
char str2[10];//用来存放输入搜索人的字符数组
PLINK p = head;
p = p->next;
strcpy(str2, name);
int flag;
while (p != head)
{
flag = 0;
strcpy(str1,p->name);
if (strcmp(str1, str2) == 0)//找到后显示信息
{
flag = 1;
printf(">你搜寻的人的号码为:\n");
puts(p->number);
break;
}
p = p->next;
}
if (flag == 0)
{
printf(">对不起,你换没有存此联系人的号码。\n");
}
}
void delet(PLINK head, char name[])//删除信息
{
PLINK p = head->next;
while (p != head)
{
if (strcmp(p->name, name) == 0)
{
p->prior->next = p->next;
p->next->prior = p->prior;
printf("你要删除的号码已删除\n");
}
p = p->next;
}
}
int main()
{
PLINK head = (PLINK)malloc(sizeof(LINK));
head->prior = head;
head->next = head;//构成循环链表
for (int i = 0; i < 3; i++)
{
char str1[10];
char number[12];//字符串的结尾有\0,所以要12位
printf("请输入客户的姓名和电话\n");
gets(str1);
gets(number);
insertNode(head,str1,number);
}
printf(">该设备上登记的联系人信息如下:\n");
DisPlay(head);
char str2[10];
printf(">请输入要查询的人的名字:");
gets(str2);
search(head, str2);
char str4[4];
char str5[4] = "yes";
printf(">请问你是否有需要删除的对象:");
gets(str4);
if (strcmp(str5, str4) == 0)
{
char str3[10];
printf(">请输入你要删除的对象:");
gets(str3);
delet(head, str3);
}
return 0;
}
运行结果如下
每天多一点努力,未来才可期.加油持续更新。