C语言单链表实现通讯录管理系统

 更新时间:2021年5月31日 15:00  点击:1711

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

本人前几天刚刚自学了单链表,趁热打铁,赶紧写一个小小的项目练练手。

单链表的实现在本人之前的博客中有:C语言编写一个链表

通讯录管理系统

保存人的信息有: 
名字   name
电话   telephone
性别   sex
年龄   age

用一个结构体来装这些信息:

struct infor{
 char name[20];
 int age;
 char sex[8];
 char telephone[16];
};

实现功能有:

增加联系人
删除联系人
修改联系人
寻找联系人
显示联系人

首先建立链表的基本功能创建头链表,创建节点,插入节点

struct addre* Creathead(){                        //创建头链表
 struct addre *headnode = (struct addre*)malloc(sizeof(struct addre));
 if (headnode == NULL){
  printf("malloc error\n");
 }
 headnode->next = NULL;
 return headnode;

}

struct addre* Creatlist(struct infor *list){      //创建节点
 struct addre *node = (struct addre*)malloc(sizeof(struct addre));
 if (node == NULL){
  printf("malloc error\n");
 }
 node->next = NULL;
 node->people.age = list->age;
 strcpy(node->people.name, list->name);
 strcpy(node->people.sex, list->sex);
 strcpy(node->people.telephone, list->telephone);

 return node;
}

void Addlist(struct addre *headnode,struct infor *list){ //插入节点
 struct addre *t = headnode;
 while (t->next != NULL){
  t = t->next;
 }
 struct addre *nodelist = Creatlist(list);
 t->next = nodelist;
 nodelist->next = NULL;
}

然后在实现通讯录的功能

void Addpeople(struct addre* node){                     //添加人的信息
 struct infor *a=malloc(sizeof(struct infor));       // 创建动态信息结构体指针
 if (a == NULL){
  printf("malloc error\n");
 }
 printf("请输入名字\n");
 scanf("%s", a->name);
 printf("请输入年龄\n");
 scanf("%d", &a->age);
 printf("请输入性别\n");
 scanf("%s", a->sex);
 printf("请输入电话号码\n");
 scanf("%s", a->telephone);
 Addlist(node, a);                        //用尾插法插入该人信息
 printf("添加成功!\n");
}
void Deletepeople(struct addre *node){                //删除人的信息
 char *str = malloc(sizeof(char)* 10);
 if (str == NULL){                                 //通过名字寻找
  printf("malloc error\n");
 }
 printf("请输入要删除人的姓名\n");
 scanf("%s", str);
 struct addre *strat = node;
 struct addre *end = node->next;
 int flag = 0;                                    //判断是否找到 0为未找到,1 找到
 while (end){                    //判断end的  不然会越界
  if (strcmp(end->people.name, str) == 0){
   flag = 1;
   break;
  }
  node = node->next;                           //到下一个链表
  strat = node;                               //一个指向前面 一个指向后面,删除将end删除,前面那个直接指向end的指向
  end = node->next;
 }
 if (flag){
  strat->next = end->next;
  printf("删除成功\n");
  free(end);
 }
 else{
  printf("没找到!\n");
 }
}

void Modifyinfor(struct addre *node){              //修改人的信息
 char *str = malloc(sizeof(char)* 10);          //通过名字寻找
 if (str == NULL){
  printf("malloc error\n");
 }
 printf("请输入要修改人的姓名\n");
 scanf("%s", str);
 int flag = 0;
 while (node){
  if (strcmp(node->people.name, str) == 0){
   flag = 1;
   break;
  }
  node = node->next;
 }
 if (flag){
  printf("请重新输入该人信息\n");
  printf("请输入名字\n");
  scanf("%s", node->people.name);
  printf("请输入年龄\n");
  scanf("%d", &node->people.age);
  printf("请输入性别\n");
  scanf("%s", node->people.sex);
  printf("请输入电话号码\n");
  scanf("%s", node->people.telephone);
  printf("修改成功\n");
 }
 else{
  printf("没找到\n");
 }
}
void Foundpeople(struct addre *node){                //找到某人的信息并打印出来
 char *str = malloc(sizeof(char)* 10);            //通过名字寻找
 if (str == NULL){
  printf("malloc error\n");
 }
 printf("请输入要查找人的姓名\n");
 scanf("%s", str);
 int flag = 0;
 while (node){
  if (strcmp(node->people.name, str) == 0){
   flag = 1;
   break;
  }
  node = node->next;
 }
 if (flag){
  printf("name\tage\tsex\ttelephone\n");
  printf("%s\t", node->people.name);
  printf("%d\t", node->people.age);
  printf("%s\t", node->people.sex);
  printf("%s\t", node->people.telephone);
 }
 else{
  printf("没找到!\n");
 }
}

void Display(struct addre *node){
 struct addre *pmove = node->next; //要从头节点的下一个节点显示信息
 printf("name\tage\tsex\ttelephone\n");
 while (pmove){
  printf("%s\t%d\t%s\t%s\n", pmove->people.name, pmove->people.age, pmove->people.sex, pmove->people.telephone);
  pmove = pmove->next;
 }
}

其它代码

菜单:

void Menu(){
 printf("+-----------------+\n");
 printf("+-1.add   2.delet-+\n");
 printf("+-3.modify 4.seek-+\n");
 printf("+-5.display6.exit-+\n");
 printf("+-----------------+\n");
 printf("Please Enter Your Select\n");
}

本人使用的时多文件的方式上面的代码都在函数定义的源文件里实现

main函数的源文件代码:

#include"addressbank.h"

/***********************
信息:
名字   name
年龄   age
电话   telephone
性别   sex
功能:
 增加
 删除
 修改
 寻找
 打印
 显示
***********************/
int main(){
 struct addre* node = Creathead();
 int quit = 0;
 while (!quit){
  
  Menu();
  int select = 0;
  scanf("%d", &select);
  switch (select){
  case 1:
   Addpeople(node);
   break;
  case 2:
   Deletepeople(node);
   break;
  case 3:
   Modifyinfor(node);
   break;
  case 4:
   Foundpeople(node);
   break;
  case 5:
   Display(node);
   break;
  case 6:
   quit = 1;
   break;
  default:
   printf("Enter Error!\n");
   break;
  }
 }
 system("pause");
 return 0;
}

声明的头文件:

#ifndef __ADDRESSBANK_H__
#define __ADDRESSBANK_H__

#include<stdio.h>
#include<string.h>
struct infor{//信息结构体
 char name[20];
 int age;
 char sex[8];
 char telephone[16];
};
struct addre{ //链表
 struct infor people;
 struct addre *next;
};
//功能函数
extern void Menu();
extern void Addpeople(struct addre *node);
extern void Deletepeople(struct addre *node);
extern void Modifyinfor(struct addre *node);
extern void Foundpeople(struct addre *node);
extern void Display(struct addre *node);
//下面未链表函数
extern struct addre* Creatlist(struct infor *list);
extern struct addre* Creathead();
extern void Addlist(struct addre *headnode, struct infor *list);

#endif

代码可直接复制使用,如有不足请提出,后续修改谢谢

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

[!--infotagslink--]

相关文章

  • C语言实现放烟花的程序

    这篇文章主要为大家详细介绍了C语言实现放烟花的程序,有音乐播放,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-23
  • C语言中的字符(char)详细讲解

    本篇文章主要介绍C语言中char的知识,并附有代码实例,以便大家在学习的时候更好的理解,有需要的可以看一下...2020-04-25
  • 详解如何将c语言文件打包成exe可执行程序

    这篇文章主要介绍了详解如何将c语言文件打包成exe可执行程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-25
  • python实现学生通讯录管理系统

    这篇文章主要为大家详细介绍了python实现学生通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-25
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
  • C语言中计算正弦的相关函数总结

    这篇文章主要介绍了C语言中计算正弦的相关函数总结,包括正弦和双曲线正弦以及反正弦的函数,需要的朋友可以参考下...2020-04-25
  • 详解C语言中的rename()函数和remove()函数的使用方法

    这篇文章主要介绍了详解C语言中的rename()函数和remove()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25
  • C语言中求和、计算平均值、方差和标准差的实例

    这篇文章主要介绍了C语言中求和、计算平均值、方差和标准差的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-10
  • C语言的基本语法详解

    本篇文章主要讲解C语言 基本语法,这里提供简单的示例和代码来详细讲解C语言的基本语法,开始学习C语言的朋友可以看一下,希望能够给你带来帮助...2021-09-18
  • 护卫神 主机管理系统使用说明(MSSQL管理)

    护卫神·主机管理系统该版本支持在Windows Server 200320082012,含32位和64位,直接开设配置WEB站、FTP站,以及SQL Server和MySQL,是您开设和管理虚拟主机的绝好帮手。但是对于新用户可能在使用上有一些困难,因此请仔细阅读如下说明文档...2016-01-27
  • C语言中send()函数和sendto()函数的使用方法

    这篇文章主要介绍了C语言中send()函数和sendto()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25
  • C语言实现从文件读入一个3*3数组,并计算每行的平均值

    今天小编就为大家分享一篇C语言实现从文件读入一个3*3数组,并计算每行的平均值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
  • 使用C语言操作文件的基本函数整理

    这篇文章主要介绍了使用C语言操作文件的基本函数整理,包括创建和打开以及关闭文件的操作方法,需要的朋友可以参考下...2020-04-25
  • C语言中memcpy 函数的用法详解

    这篇文章主要介绍了C语言中memcpy 函数的用法详解的相关资料,需要的朋友可以参考下...2020-04-25
  • C语言中查找字符在字符串中出现的位置的方法

    这篇文章主要介绍了C语言中查找字符在字符串中出现的位置的方法,分别是strchr()函数和strrchr()函数的使用,需要的朋友可以参考下...2020-04-25
  • C语言菜鸟基础教程之a++与++a

    很多同学在学习c语言的时候是不是会碰到a++和++a都有甚么作用啊。今天我们就来探讨下...2020-04-25
  • 原生JS实现微信通讯录

    这篇文章主要为大家详细介绍了原生JS实现微信通讯录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-19
  • 详解C语言中const关键字的用法

    这篇文章主要对C语言中const关键字的用法进行了详细的分析介绍,需要的朋友可以参考下...2020-04-25
  • C语言实现时间戳转日期的算法(推荐)

    下面小编就为大家带来一篇C语言实现时间戳转日期的算法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
  • C语言之整数划分问题(递归法)实例代码

    这篇文章主要介绍了C语言之整数划分问题(递归法)实例代码的相关资料,需要的朋友可以参考下...2020-04-25