C语言实现简易通讯录

本文实例为大家分享了C语言实现简易通讯录的具体代码,供大家参考,具体内容如下

功能描述:

1、存储联系人的相关信息,包括姓名、性别、电话号码、备注
2、可输出通讯录全部信息
3、清空通讯录的
4、用户交互界面
5、插入新联系人信息
6、查找联系人,包括“按姓名查找”和“按电话号查找”两种
7、删除联系人,包括“按姓名删除”和“按电话号删除”两种
8、按性别筛选联系人信息

在本次通讯录的编写代码中,涉及到了C高级和数据结构的一些知识,包括指针,结构体,数据结构(链表)等。

代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 20
#define OK 1
#define Error 0
typedef struct Node //定义一个存储数据的结构体
{
 char name[SIZE];
 char s;
 long int number;
 char remark[SIZE];
 struct Node *next;
}Node;
typedef struct Node *LinkList; //定义了结构体指针

/************创建一个空的结点,作为头结点***************/
LinkList CreateEmptyLinkList()
{
 LinkList p;
 p=(LinkList)malloc(sizeof(Node));  //手动申请一个堆区的地址,为结点提供空间
 if(p==NULL)
 {
 printf("CreateEmptyLinkList Error\n");
 exit(0);
 }
 p->next=NULL;
 return p;
}

/************头插法添加新的联系人************************/

int CreateLinkList(LinkList Q)
{
 LinkList p;
 char name[SIZE],s,remark[SIZE];
 long int num;
 p=(LinkList)malloc(sizeof(Node));
 if(p==NULL)
 {
 printf("CreateLinkList Error\n");
 return Error;
 }
 printf("请输入姓名:");
 scanf("%s",name);
 strcpy(p->name,name);
 printf("请输入性别(m/男,f/女):");
 scanf("%s",&s);
 while(s!='m'&&s!='f')
 {
 printf("输入错误\n");
 printf("请输入性别(m/男,f/女):");
 scanf("%s",&s);
 }
 printf("请输入电话号码:");
 scanf("%ld",&num);
 printf("请输入备注:");
 scanf("%s",remark);
 p->s=s;
 p->number=num;
 strcpy(p->remark,remark);
 p->next=Q->next;
 Q->next=p;
 return OK;
}
/*********************制作原始联系人信息****************/
int FirstCreateLinkList(LinkList Q)
{
 LinkList x,y,z;
 x=(LinkList)malloc(sizeof(Node));
 if(x==NULL)
 {
 printf("CreateLinkList Error\n");
 return Error;
 }
 strcpy(x->name,"LiLi");
 x->s='f';
 x->number=10110;
 x->next=Q->next;
 strcpy(x->remark,"LiLi");
 Q->next=x;
 y=(LinkList)malloc(sizeof(Node));
 if(y==NULL)
 {
 printf("CreateLinkList Error\n");
 return Error;
 }
 strcpy(y->name,"NaNa");
 y->s='f';
 y->number=11100;
 strcpy(y->remark,"NaNa");
 y->next=Q->next;
 Q->next=y;
 z=(LinkList)malloc(sizeof(Node));
 if(z==NULL)
 {
 printf("CreateLinkList Error\n");
 return Error;
 }
 strcpy(z->name,"LiuLiu");
 z->s='m';
 z->number=10000;
 strcpy(z->remark,"LiuLiu");
 z->next=Q->next;
 Q->next=z;
 return OK;
}
/*****************按姓名删除一个联系人****************************/

int DeleteNameLinkList(LinkList L,char name1[SIZE])
{
 LinkList p,q;
 p=L;
 while(p->next && strcmp(p->next->name,name1))
 {
 p=p->next;
 }
 if(!p->next)
 {
 printf("该通讯录没有要删除的联系人,删除失败!\n");
 return Error;
 }
 else
 {
 q=p->next;
 printf("已删除联系人:\n");
 printf("姓名:%s\n",q->name);
 if(q->s=='m')
 printf("性别:男\n");
 else
 printf("性别:女\n");
 printf("电话号码:%ld\n",q->number);
 printf("备注:%s\n",q->remark); 

 p->next=q->next;
 free(q);
 return OK;
 }
}
/*****************按号码删除一个联系人****************************/

int DeleteNumLinkList(LinkList L,long int j)
{
 LinkList p,q;
 p=L;
 while((p->next->number!=j)&&((p->next)!=NULL))
 {
 p=p->next;
 if((p->next)==NULL)
 {
  printf("该通讯录没有要删除的联系人,删除失败!\n");
  return Error;
 }
 }
 q=p->next;
 printf("已删除联系人:\n");
 printf("姓名:%s\n",q->name);
 if(q->s=='m')
 printf("性别:男\n");
 else
 printf("性别:女\n");
 printf("电话号码:%ld\n",q->number);
 printf("备注:%s\n",q->remark);
 p->next=q->next;
 free(q);
 return OK;
}

/******************按姓名查找一个联系人****************************/
int FindNameLinkList(LinkList L,char name2[SIZE])
{
 LinkList p,q;
 p=L;
 while(strcmp(p->next->name,name2)!=0&&(p->next!=NULL))
 {
 p=p->next;
 if(p->next==NULL)
 {
  printf("该通讯录没有您要找的人,查找失败\n");
  return Error;
 }
 }
 q=p->next;
 printf("找到记录:\n");
 printf("姓名:%s\n",q->name);
 if(q->s=='m')
 printf("性别:男\n");
 else
 printf("性别:女\n");
 printf("电话号码:%ld\n",q->number);
 printf("备注:%s\n",q->remark);
 printf("*********************************\n");
 return OK;
}
/******************按号码查找一个联系人****************************/
int FindNumLinkList(LinkList L,long int j)
{
 LinkList p,q;
 p=L;
 while((p->next->number!=j)&&((p->next)!=NULL))
 {
 p=p->next;
 if((p->next)==NULL)
 {
  printf("该通讯录没有您要找的人,查找失败\n");
  return Error;
 }
 }
 q=p->next;
 printf("找到记录:\n");
 printf("姓名:%s\n",q->name);
 if(q->s=='m')
 printf("性别:男\n");
 else
 printf("性别:女\n");
 printf("电话号码:%ld\n",q->number);
 printf("备注:%s\n",q->remark);
 printf("*********************************\n");
 return OK;
}
/******************查找一个联系人****************************/
int FindLinkList(LinkList L)
{
 LinkList head = L;
 printf("*********************************\n");
 printf("请输入查找联系人的方式:\n");
 printf("1:按姓名\n");
 printf("2:按号码\n");
 printf("0:返回\n");
 printf("*********************************\n");
 printf("请选择:");
 int k=3;  //确保下面while循环运行
 while(k)
 {
 scanf("%d",&k);
 char Delname1[SIZE];
 long int N;
 if(k>2||k<0)
 {
  printf("输入错误,请重新输入:");
  scanf("%d",&k);
  while(getchar()!='\n')
  printf("\n");
 }
 switch(k)
 {
  case 1:
  printf("请输入姓名:");
  scanf("%s",Delname1);
  FindNameLinkList(head,Delname1);
  k=0;
  break;
  case 2:
  printf("请输入号码:");
  scanf("%ld",&N);
  FindNumLinkList(head,N);
  k=0;
  break;
 }

 }
}
/********************清空联系人信息*************************/
int ClearLinkList(LinkList L)
{
 LinkList p,q;
 p=L->next;
 while(p)
 {
 q=p->next;
 free(p);
 p=q;
 }
 L->next=NULL;
 printf("清空所有联系人成功\n");
 return OK;
}

/*********************筛选所有男性联系人**********************/
int ScreenMaleLinkList(LinkList L)
{
 LinkList p;
 p=L->next;
 int i=0;
 while(p)
 {
 if(p->s=='m')
 {
  printf("姓名:%s\n",p->name);
  if(p->s=='m')
  printf("性别:男\n");
  else
  printf("性别:女\n");
  printf("电话号码:%ld\n",p->number);
  printf("备注:%s\n",p->remark);
  printf("*********************************\n");
 }
 p=p->next;
 i++;
 }
 if(i==0&&!p)
 {
 printf("无男性联系人\n");
 }
 return OK;
}
/*********************筛选所女性联系人**********************/
int ScreenFemaleLinkList(LinkList L)
{
 LinkList p;
 p=L->next;
 int i=0;
 while(p)
 {
 if(p->s=='f')
 {
  printf("姓名:%s\n",p->name);
  if(p->s=='m')
  printf("性别:男\n");
  else
  printf("性别:女\n");
  printf("电话号码:%ld\n",p->number);
  printf("备注:%s\n",p->remark);
  printf("*********************************\n");
 }
 p=p->next;
 i++;
 }
 if(i==0&&!p)
 {
 printf("无女性联系人\n");
 }
 return OK;
}
/************************通讯录功能界面*****************/
void FunctionalInterface()
{
 system ("clear");
 printf("*********************************\n");
 printf("欢迎使用Linux通讯录!\n");
 printf("*********************************\n");
 printf("1:输出全部联系人信息\n");
 printf("2:插入新的联系人\n");
 printf("3:删除一个联系人\n");
 printf("4:查找某个联系人\n");
 printf("5:清空全部联系人信息\n");
 printf("6:筛选全部男性联系人信息\n");
 printf("7:筛选全部女性联系人信息\n");
 printf("0:退出\n");
 printf("*********************************\n");
}
/*****************删除一个联系人****************************/

int DeleteLinkList(LinkList L)
{
 LinkList head = L;
 printf("*********************************\n");
 printf("请输入删除联系人的方式:\n");
 printf("1:按姓名\n");
 printf("2:按号码\n");
 printf("0:返回\n");
 printf("*********************************\n");
 printf("请选择:");
 int i=3;
 while(i)
 {
 scanf("%d",&i);
 char Delname[SIZE];
 long int j;
 if(i>2||i<0)
 {
  printf("输入错误,请重新输入:");
  scanf("%d",&i);
  while(getchar()!='\n')
  printf("\n");
 }
 switch(i)
 {
  case 1:
  printf("请输入姓名:");
  scanf("%s",Delname);
  DeleteNameLinkList(head,Delname);
  i=0;
  break;
  case 2:
  printf("请输入号码:");
  scanf("%ld",&j);
  DeleteNumLinkList(head,j);
  i=0;
  break;
 }

 }

}
/*******************遍历打印整个链表**********************/
int PrintfLinkList(LinkList L)
{
 LinkList p,q;
 q=p=L->next;
 int i=0;
 while(q)
 {
 i++;
 q=q->next;
 if(i==0&&!p)
 {
 printf("无联系人\n");
 }
 }
 printf("共有%d个联系人\n",i);
 while(p)
 {
 printf("*********************************\n");
 printf("姓名:%s\n",p->name);
 if(p->s=='m')
  printf("性别:男\n");
 else
  printf("性别:女\n");
 printf("电话号码:%ld\n",p->number);
 printf("备注:%s\n",p->remark);
 p=p->next;
 }
 printf("*********************************\n");
 return OK;

}

int main()
{
 int a;
 LinkList head;
 head=CreateEmptyLinkList();
 FirstCreateLinkList(head);
 FunctionalInterface();
 while(a)
 {
 printf("请输入您要选择的功能:");
 scanf("%d",&a);
 if(a>7||a<0)
 {
  printf("输入错误,请重新输入:");
  scanf("%d",&a);
  while(getchar()!='\n')
  printf("\n");
 }
 switch(a)
 {
  case 1:
  PrintfLinkList(head);
  break;
  case 2:
  CreateLinkList(head);
  break;
  case 3:
  DeleteLinkList(head);
  break;
  case 4:
  FindLinkList(head);
  break;
  case 5:
  ClearLinkList(head);
  break;
  case 6:
  ScreenMaleLinkList(head);
  break;
  case 7:
  ScreenFemaleLinkList(head);
  break;
  }
 if(a!=0)
 {
  printf("请按回车键继续:");
  getchar();
  if(getchar()=='\n')
  FunctionalInterface();
 }
 }
 printf("欢迎再次使用\n");
 return 0;
}

以上均为自己编写,个人能力有限,如有错误,还请各位批评指正。

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

(0)

相关推荐

  • C语言通讯录管理系统课程设计

    本文实例为大家分享了C语言通讯录管理系统课程设计,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <windows.h> struct Sign{ char name[8]; char sex[4]; char birthday[12]; char phone[11]; char postcode[7]; char addr[30]; struct Sign *next; }pe; char Ph

  • C语言通讯录实例分享

    本文实例为大家分享了C语言通讯录实例的具体代码,供大家参考,具体内容如下 main.c文件: // // main.c // c语言通讯录 // // Created by stevenchang on 9/6/15. // Copyright (c) 2015 cz. All rights reserved. // /** 1.添加联系人 2.删除联系人 3.更新联系人 4.显示所有联系人 5.查找联系人 6.退出系统 */ #include <stdio.h> int main(int a

  • C语言实现个人通讯录管理系统

    如何用c语言制作简易的个人通讯录管理系统?想必这是每一位初步学习c语言的同学需要解决的一个大问题.如何将这些数据类型不完全相同的数据元素存储并访问呢?采用结构体便能轻松解决这个问题! #include<stdio.h> #include<string.h> #include<stdlib.h> #include<windows.h> struct stu //第一部分:声明结构体类型struct stu { char name[100];//姓名为字符串型

  • 使用C语言打造通讯录管理系统和教学安排系统的代码示例

    通讯录管理系统 实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能.. 完整的代码如下: #include <stdio.h> #include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针// #include <string.h> #include <stdlib.h> //标准库函数// #define NULL 0 #define LEN sizeof(struct address_list) //计

  • C语言实现通讯录系统

    C语言通讯录系统实现,供大家参考,具体内容如下 需求分析: 利用文件读,写的方法 实现增加通讯录联系人信息 实现删除通讯录联系人信息 实现查找通讯录联系人信息 实现修改通讯录联系人信息 实现查看现有通讯录联系人信息 代码实现: // main.c // C语言通讯录实现 // // Created by Brisinga on 15/10/14. // Copyright © 2015年 yan. All rights reserved. // #include <stdio.h> #incl

  • C语言基于哈希表实现通讯录

    本文为大家分享了C语言基于哈希表实现通讯录的具体代码,供大家参考,具体内容如下 1.需求分析 本演示程序用C语言编写,完成哈希表的生成,电话号码的插入.以及查找等功能. (1)按提示输入相应的联系人的相关资料: (2)以相应的输出形式输出所存储的的联系人的资料: (3)程序可以达到建立.添加.查找.打印的功能: (4)程序可以判断用户输入的非法数据并引导正确的输入. 2.概要设计 存储电话号码的记录时,若在存储位置和其关键字之间建立某种确定的对应关系使得每个关键字和存储结构中一个唯一的存储位置相

  • C语言通讯录管理系统完整版

    C语言实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能.. 完整的代码如下: #include <stdio.h> #include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针// #include <string.h> #include <stdlib.h> //标准库函数// #define NULL 0 #define LEN sizeof(struct address_list) //计算字节//

  • 利用C语言结构体实现通讯录

    本文实例为大家分享了C语言结构体实现通讯录的具体代码,供大家参考,具体内容如下 用来存储1000个人的信息的通讯录,每个人的信息包括: 姓名.性别.年龄.电话.住址 程序如下: #include<stdio.h> #include<string.h> #include<stdlib.h> struct People { char name[20]; char sex[5]; int age; char tel[15]; char addr[50]; }; //定义人的信

  • C语言使用结构体实现简单通讯录

    C语言用结构体实现一个通讯录,通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名.性别.年龄.电话.住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 代码实现: 头文件: #ifndef __HEAD_H__ ////防止头文件被多次调用 #define __HEAD_H__ #include<stdio.h> #include<string.h> #in

  • C语言实现通讯录功能

    本文实例为大家分享了C语言实现通讯录功能的具体代码,供大家参考,具体内容如下 先定义头文件 #ifndef __CONTACT_H__ #define __CONTACT_H__ #define NAME_LEN 10 #define SEX_LEN 6 #define TELE_LEN 12 #define ADDR_LEN 20 #define MAX_PEO 1000 typedef struct PEO { char name[NAME_LEN]; int age; char sex[S

  • C语言实现简单的通讯录

    用C语言写了一个简单的通讯录,说简单一是功能简单,二是也没有加读写文件操作,只是作为链表操作的一个练习,希望能给这方面的新手一此引导和帮助. 代码: /* 转贴请注明出处 */ /* 作者:小浦原(ID:blueboy82006) */ /* http://blog.csdn.net/blueboy82006 */ #include <stdio.h> #include <stdlib.h> #include<string.h> #include<ctype.h&

  • C语言实现一个通讯录

    实现一个通讯录,通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名.性别.年龄.电话.住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6.  清空所有联系人 7. 以名字排序所有联系人 没有开辟动态内存的方法: 头文件:test.h #ifndef __CONTACT #define __CONTACT #define _CRT_SECURE_NO_WARNINGS 1 #include<

  • 用C语言实现简易通讯录

    C语言实现一个通讯录,通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名.性别.年龄.电话.住址 **提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 7. 以名字排序所有联系人** 思路分析: 首先我们可以分三个模块来解决这个问题,第一个模块我们需要一个头文件,这个头文件里可以包含一些相应信息,当实现文件和测试文件包含自己定义的头文件时便可以获得一些相关的信息.所以头文件里

随机推荐