简易通讯录系统(带头节点的单链表实现)

通讯录系统(无文件输入输出)

源程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct node //定义一个通讯录的结构
{
  char name[20];
  char phonenumber[11];
  char address[20];
  struct node *next;
}Hnode, *Hlink;

void create_node(Hlink *new_node)
{
  *new_node = (Hlink)malloc(sizeof(Hnode));
}

void create_list(Hlink *head)
{
  create_node(head);
  (*head)->next = NULL;
}

void insert_node_tail(Hlink head,Hlink new_node) //尾端插入节点
{
    Hlink p;
    p = head;
    while(p->next != NULL)
    {
        p = p->next;
    }
    p->next = new_node;
    new_node->next = NULL;
}

void mean() 
{
  printf("---------------------\n");
  printf("--按1输入联系人的信息--\n");
  printf("--按2查找联系人的信息--\n");
  printf("--按3修改联系人的信息--\n");
  printf("--按4删除联系人的信息--\n");
  printf("--按5显示联系人的信息--\n");
  printf("------按0退出系统------\n");
  printf("---------------------\n");
}

void add(Hlink head) //插入联系人
{
  system("CLS");
  Hlink new_node;
  create_node(&new_node);

  printf("请输入联系人的姓名:\n");
  scanf("%s", &new_node->name);
  printf("请输入联系人的电话:\n");
  scanf("%s", &new_node->phonenumber);
  printf("请输入联系人的地址:\n");
  scanf("%s", &new_node->address);

  insert_node_tail(head, new_node);
  printf("输入完成!\n");

}

void find(Hlink head) //查找联系人
{
  system("CLS");
  Hlink p;
  p = head;
  int mark = 0;
  char name[20];
  printf("请输入被查找人的姓名:\n");
  scanf("%s", name);

  while (p != NULL)
  {
    if (strcmp(name, p->name) == 0)
    {
      printf("联系人已找到,具体信息如下:\n");
      printf("姓名:%s\n", p->name);
      printf("电话:%s\n", p->phonenumber);
      printf("地址:%s\n", p->address);
      mark = 1;
    }
    p = p->next;
  }
  if (mark == 0)
  {
    printf("查无此人!\n");
  }
}

void change(Hlink head) //改变联系人信息
{
  system("CLS");
  Hlink p, q;
  p = q = head;
  int mark = 0;
  char name[20];
  printf("请输入被修改信息的人的姓名:\n");
  scanf("%s", name);

  while (p != NULL)
  {
    if (strcmp(name, p->name) == 0)
    {
      printf("联系人已找到,具体信息如下:\n");
      printf("姓名:%s\n", p->name);
      printf("电话:%s\n", p->phonenumber);
      printf("地址:%s\n", p->address);
      mark = 1;
      q = p;
    }
    p = p->next;
  }
  if (mark == 0)
  {
    printf("查无此人!请返回主菜单重新选择!\n");
  }
  else if (mark == 1)
  {
    printf("请输入联系人的新电话:\n");
    scanf("%s", &q->phonenumber);
    printf("请输入联系人的新地址:\n");
    scanf("%s", &q->address);
  }
}

void del(Hlink head) //删除联系人的信息
{
  system("CLS");
  Hlink p, q;
  p = head;
  q = head->next;
  char name[20];
  printf("请输入需要被删除的人的姓名:\n");
  scanf("%s", name);

  while (strcmp(q->name, name) != 0)
  {
    p = q;
    q = q->next;
  }
  p->next = q->next;
  printf("删除联系人成功!\n");
}


void show(Hlink head) //查看通讯录
{
  system("CLS");
  int num= 0;
  Hlink p = head->next;
  if (p == NULL)
  {
    printf("您的通讯录为空!\n");
  }
  else
  {
    printf("您的通讯录如下所示:\n");
    while (p != NULL)
    {
      num++;
      printf("联系人%d:\n", num);
      printf("姓名:%s\n", p->name);
      printf("电话:%s\n", p->phonenumber);
      printf("地址:%s\n", p->address);
      printf("__________________________\n");
      p = p->next;
    }
  }

}

int main()
{
  Hlink head;
  create_list(&head);
  int choose;
  printf("欢迎使用BK通讯录系统!\n");
mean:
  mean();
    printf("请按数字键选择相应的功能!\n");
    scanf("%d", &choose);
    switch(choose)
    {
      case 1:add(head);
      goto mean;

      case 2:find(head);
      goto mean;

      case 3:change(head);
      goto mean;

      case 4:del(head);
      goto mean;

      case 5:show(head);
      goto mean;

      case 0:
      printf("期待您的下次使用!\n");
      break;
  }
  return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值