C语言基于单链表实现通讯录功能

 更新时间:2021年05月31日 15:54:05   作者:::..::…::  
这篇文章主要为大家详细介绍了C语言基于单链表实现通讯录功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言基于单链表实现通讯录功能的具体代码,供大家参考,具体内容如下

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma warning(disable:4996);//解决VS报严重性代码错误
typedef struct LNode
{
 char name[20];
 double ph_number;
 struct LNode* next;
}LinkNode;

//创建通讯录 
LNode* CreateList(LNode*& L)
{
 LNode* s, * r;
 int n;
 L = (LNode*)malloc(sizeof(LNode));
 r = L;

 printf("请输入要创建联系人的个数:");
 scanf("%d", &n);
 printf("\n");

 for (int i = 0; i < n; i++)
 {
  s = (LNode*)malloc(sizeof(LNode));

  printf("请输入第%d个联系人的姓名,电话:\n", i + 1);
  scanf("%s%lf", &s->name, &s->ph_number);
  printf("\n");

  r->next = s;
  r = s;
 }
 r->next = NULL;
 return L;
}

//添加联系人 
void ListInsert(LNode*& L)
{
 LNode* new_s, * r = L;
 while (r->next != NULL)
 {
  r = r->next;
 }
 new_s = (LNode*)malloc(sizeof(LNode));

 printf("请输入要添加的联系人的姓名,电话:\n");
 scanf("%s%lf", &new_s->name, &new_s->ph_number);
 printf("\n");

 r->next = new_s;
 r = new_s;
 r->next = NULL;
}

//查找联系人 
bool Locate(LNode*& L)
{
 LNode* p = L->next;
 char name_[20];

 printf("请输入要查找的联系人的姓名:\n");
 scanf("%s", &name_);
 printf("\n");

 while (p != NULL && strcmp(p->name, name_) != 0)//注意判断条件
 {
  p = p->next;
 }
 if (p == NULL) return false;
 else return true;
}

//修改联系人 
bool ModifyList(LNode*& L)
{
 LNode* p = L;
 char name_[20];
 double ph_number_;

 printf("请输入要修改的联系人的姓名:\n");
 scanf("%s", name_);
 printf("\n");

 while (p != NULL && strcmp(p->name, name_) != 0)//注意判断条件
 {
  p = p->next;
 }
 if (p == NULL) return false;
 else {
  printf("请输入修改后的电话号码为:\n");
  scanf("%lf", &ph_number_);
  printf("\n");
  p->ph_number = ph_number_;
  return true;
 }
}

//删除联系人 
bool ListDelete(LNode*& L)
{
 LNode* p = L->next, * q = L;
 char name_[20];

 printf("请输入要删除联系人的姓名:\n");
 scanf("%s", name_);
 printf("\n");

 while (p != NULL && strcmp(p->name, name_) != 0)//注意判断条件
 {
  p = p->next;
  q = q->next;
 }
 if (p == NULL)
  return false;
 else {
  q->next = q->next->next;
  free(p);
  return true;
 }
}

//加载通讯录 
void DispList(LNode* L)
{
 int i = 0;
 LNode* p = L->next;
 while (p != NULL)
 {
  printf("姓名:%s  电话:%.0lf\n", p->name, p->ph_number);
  p = p->next;
  i++;
 }
}

int main()
{
 printf("*****************************************\n");
 printf("*                                       *\n");
 printf("*            1:添加联系人              *\n");
 printf("*                                       *\n");
 printf("*            2: 查找联系人              *\n");
 printf("*                                       *\n");
 printf("*            3: 修改联系人              *\n");
 printf("*                                       *\n");
 printf("*            4: 删除联系人              *\n");
 printf("*                                       *\n");
 printf("*            5: 加载通讯录              *\n");
 printf("*                                       *\n");
 printf("*****************************************\n");
 printf("\n");

 LNode* L = CreateList(L);
 int operand;
 printf("\n");
 for (int i = 0; i < 5; i++)
 {
  printf("请输入您要执行操作的操作数:\n");
  scanf("%d", &operand);
  switch (operand)
  {
  case 1:
   ListInsert(L);
   break;
  case 2:
   if (Locate(L) == 1) {
    printf("找到该联系人\n");
    printf("\n");
    break;
   }
   else {
    printf("未找到改联系人\n");
    printf("\n");
    break;
   }
  case 3:
   if (ModifyList(L) == 1) {
    printf("修改成功\n");
    printf("\n");
    break;
   }
   else {
    printf("修改失败\n");
    printf("\n");
    break;
   }
  case 4:
   if (ListDelete(L) == 1) {
    printf("删除成功\n");
    printf("\n");
    break;
   }
   else {
    printf("删除失败\n");
    printf("\n");
    break;
   }
  case 5:
   DispList(L);
   break;
  default:
   printf("ERROR!!!\n");
  }
 }
 return 0;
}

运行截图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 详解C语言中freopen()函数和fclose()函数的用法

    详解C语言中freopen()函数和fclose()函数的用法

    这篇文章主要介绍了详解C语言中freopen()函数和fclose()函数的用法,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • C语言 柔性数组的使用详解

    C语言 柔性数组的使用详解

    柔性数组(Flexible Array)是引入的一个新特性,它允许你在定义结构体时创建一个空数组,而这个数组的大小可以在程序运行的过程中根据你的需求进行更改特别注意的一点是:这个空数组必须声明为结构体的最后一个成员,并且还要求这样的结构体至少包含一个其他类型的成员
    2022-03-03
  • c++ 子类构造函数初始化及父类构造初始化的使用

    c++ 子类构造函数初始化及父类构造初始化的使用

    这篇文章主要介绍了c++ 子类构造函数初始化及父类构造初始化的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • C语言基础双指针移除元素解法

    C语言基础双指针移除元素解法

    这篇文章介绍了C语言基础双指针移除元素的解法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • C语言中魔性的float浮点数精度问题

    C语言中魔性的float浮点数精度问题

    这篇文章主要介绍了魔性的float浮点数精度问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • C语言单链表版学生信息管理系统

    C语言单链表版学生信息管理系统

    这篇文章主要为大家详细介绍了C语言单链表版学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • C++中的拷贝构造详解

    C++中的拷贝构造详解

    这篇文章主要为大家介绍了C++中的拷贝构造,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • 实现一个内存池管理的类方法

    实现一个内存池管理的类方法

    下面小编就为大家带来一篇实现一个内存池管理的类方法。小编觉得挺不错的现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 聊聊c++数组名称和sizeof的问题

    聊聊c++数组名称和sizeof的问题

    这篇文章主要介绍了c++数组名称和sizeof,介绍了一维数组名称的用途及二维数组数组名,通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-01-01
  • 详解C++编程中类的成员变量和成员函数的相关知识

    详解C++编程中类的成员变量和成员函数的相关知识

    这篇文章主要介绍了C++编程中类的成员变量和成员函数的相关知识,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09

最新评论