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

C语言实现了通讯录的录入信息、保存信息、插入、删除、排序、查找、单个显示等功能。。

完整的代码如下:

#include <stdio.h>
#include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针//
#include <string.h>
#include <stdlib.h> //标准库函数//
#define NULL 0
#define LEN sizeof(struct address_list) //计算字节//
int n;
struct address_list
{
  char name[30];   //名字
  char work[30];   //职业
  char handset[30]; //手机
  char email[30];  //电子邮件
  char address[30]; //通讯地址
  struct address_list *next;
};
struct address_list *shifang(struct address_list *head); // 释放内存函数声明
//创建函数,不带头结点的链表
struct address_list *creat(void)
{
  struct address_list *head,*p1,*p2;
  char name[20];
  n=0;
  p1=(struct address_list *)malloc(LEN);
  p2=p1;  //强制内存转换
  printf("请输入通讯录的内容!\n姓名输入为0时表示创建完毕!\n");
  printf("请输入姓名:");
  gets(name);
  if(strcmp(name,"0")!=0)
  {
    strcpy(p1->name,name);
    printf("请输入职业:");   gets(p1->work);
    printf("请输入手机:");   gets(p1->handset);
    printf("请输入电子邮件:"); gets(p1->email);
    printf("请输入通讯地址:"); gets(p1->address);
    head=NULL;
    while(1)
    {
      n=n+1;  //记录通讯录人数个数
      if(n==1)
        head=p1;
      else
        p2->next=p1;
      p2=p1;
      printf("请输入姓名:");
      gets(name);
      if(strcmp(name,"0")==0)
      {
        break;
      }
      else
      {
        p1=(struct address_list *)malloc(LEN);
        strcpy(p1->name,name);
        printf("请输入职业:"); gets(p1->work);
        printf("请输入手机:"); gets(p1->handset);
        printf("请输入电子邮件:"); gets(p1->email);
        printf("请输入通讯地址:"); gets(p1->address);
      }
    }
    p2->next=NULL;
    return head;
  }
  else
    return 0;
}
//输出函数
void print(struct address_list *head)
{
  struct address_list *p;
  if(head!=NULL)
  {
    p=head;
    printf("本通讯录现在共有%d人:\n",n);
    printf("---姓名-------职业--------手机-------Email-------通讯地址\n");
    printf("==================================\n");
    do
    {
      printf("== %s",p->name); printf("    ");
      printf("%s",p->work); printf("    ");
      printf("%s",p->handset); printf("    ");
      printf("%s",p->email); printf("    ");
      printf("%s",p->address); printf("    \n");
      p=p->next;
    }while(p!=NULL);
    printf("==================================\n");
  }
  else
    printf("通讯录为空,无法输出!\n");
}
//增加函数
struct address_list *insert(struct address_list *head)
{
  struct address_list *p0,*p1,*p2;
  char name[20];
  p1=head;
  printf("请输入增加的内容:\n");
  printf("请输入姓名:"); gets(name);
  if(strcmp(name,"0")==0)
  {
    printf("姓名不能为0,增加失败!\n");
    return(head);
  }
  else
  {
    p0=(struct address_list *)malloc(LEN);
    strcpy(p0->name,name);
    printf("请输入职业:"); gets(p0->work);
    printf("请输入手机:"); gets(p0->handset);
    printf("请输入电子邮件:"); gets(p0->email);
    printf("请输入通讯地址:"); gets(p0->address);
    n=n+1;
    if(head==NULL)
    {
      head=p0;
      p0->next=NULL;
      return head;
    }
    else
    {
      while(strcmp(p0->name,p1->name)>0&&(p1->next!=NULL))
      {
        p2=p1;
        p1=p1->next;
      }
      if(strcmp(p0->name,p1->name)<0 || strcmp(p0->name,p1->name)==0)
      {
        if(head==p1)
        {
          head=p0;
        }
        else
        {
          p2->next=p0;
        }
        p0->next=p1;
      }
      else
      {
        p1->next=p0;
        p0->next=NULL;
      }
      return head;
    }
  }
}
struct address_list* delete_txl(struct address_list *head)
{
  struct address_list *p,*q;
  char name[30];
  if(head==NULL)
  {
    printf("通讯录为空,无法显示!\n");
    return head;
  }
  p=head;
  printf("请输入需要删除的人的姓名:");
  gets(name);
  if(strcmp(head->name,name)==0)
  {
    head=head->next;
    free(p);
    printf("删除操作成功!\n");
    return head;
  }
  else
  {
    q=head,p=head->next;
    while(p!=NULL)
    {
      if(strcmp(p->name,name)==0)
      {
        q->next=p->next;
        free(p);
        printf("删除操作成功!\n");
        return head;
      }
      p=p->next;
      q=q->next;
    }
  }
}
//显示函数
struct address_list *display(struct address_list *head)
{
  struct address_list *p1,*p2;
  char name[30];
  int m;
  if(head==NULL)
  {
    printf("通讯录为空,无法显示!\n");
    return head;
  }
  p1=head;
  m=0;
  printf("请输入需要显示人的姓名:");
  gets(name);
  while(p1!=NULL)
  {
    while((strcmp(p1->name,name))!=0 && p1->next!=NULL)
    {
      p2=p1;
      p1=p1->next;
    }
    if(strcmp(p1->name,name)==0)
    {
      m++;
      printf("%s的通讯内容如下:\n",name);
      printf("---姓名--------职业--------手机-------Email------通讯地址\n");
      printf("==================================\n");
      printf("== %s",p1->name);printf("    ");
      printf("%s",p1->work);printf("    ");
      printf("%s",p1->handset);printf("    ");
      printf("%s",p1->email);printf("    ");
      printf("%s",p1->address); printf("    \n");
      printf("==================================\n");
    }
    p1=p1->next;
  }
  if(m==0)
  {
    printf("此人未在本通讯录中!\n");
  }
  return(head);
} 

//排序函数
struct address_list *paixu(struct address_list *head)
{
  struct address_list *p1,*p2;
  int i,j;
  struct address_list1
  {
    char name[30];
    char work[30];
    char handset[30];
    char email[30];
    char address[30];
  };
  struct address_list1 px[200];
  struct address_list1 temp;
  if(head==NULL)
  {
    printf("通讯录为空,无法排序!\n");
    return(head);
  }
  p1=head;
  for(i=0;i<n,p1!=NULL;i++)
  {
    strcpy(px[i].name,p1->name);
    strcpy(px[i].work,p1->work);
    strcpy(px[i].handset,p1->handset);
    strcpy(px[i].email,p1->email);
    strcpy(px[i].address,p1->address);
    p2=p1;
    p1=p1->next;
  }
  head=shifang(head);
  for(j=0;j<n-1;j++)
  {
    for(i=j+1;i<n;i++)
    {
      if(strcmp(px[i].name,px[j].name)<0)
      {
        temp=px[i];
        px[i]=px[j];
        px[j]=temp;
      }
    }
  }
  p1=(struct address_list *)malloc(LEN);
  p2=p1;
  strcpy(p1->name,px[0].name);
  strcpy(p1->work,px[0].work);
  strcpy(p1->handset,px[0].handset);
  strcpy(p1->email,px[0].email);
  strcpy(p1->address,px[0].address); 

  head=p1;
  for(i=1;i<n;i++)
  {
    p1=(struct address_list *)malloc(LEN);
    strcpy(p1->name,px[i].name);
    strcpy(p1->work,px[i].work);
    strcpy(p1->handset,px[i].handset);
    strcpy(p1->email,px[i].email);
    strcpy(p1->address,px[i].address);
    p2->next=p1;
    p2=p1;
  }
  p2->next=NULL;
  printf("按姓名排序后为:\n");
  print(head);
  return(head);
}
//姓名查找函数
struct address_list *search(struct address_list *head)
{
  struct address_list *p1,*p2;
  int m;
  char name[30];
  if(head==NULL)
  {
    printf("通讯录为空,无法分类查找!\n");
    return(head);
  }
  p1=head;
  printf("********************\n");
  printf("** 请输入需要查找的姓名 **\n");
  printf("********************\n");
  m=0;
  gets(name);
  while(p1!=NULL)
  {
    while(strcmp(p1->name,name)!=0&&p1->next!=NULL)
    {
      p2=p1;
      p1=p1->next;
    }
    if(strcmp(p1->name,name)==0)
    {
      m++;
      printf("你查找的内容是:\n");
      printf("+++++++++++++++++++++++++++++++++++\n");
      printf("++ %s    %s    %s    %s    %s\n",p1->name,p1->work,p1->handset,p1->email,p1->address);
      printf("+++++++++++++++++++++++++++++++++++\n");
    }
    p1=p1->next; 

    if(m==0)
    {
      printf("此人未在本通讯录中!\n");
    }
    break;
  } 

  return(head);
} 

//释放内存函数
struct address_list *shifang(struct address_list *head)
{
  struct address_list *p1;
  while(head!=NULL)
  {
    p1=head;
    head=head->next;
    free(p1);
  }
  return(head);
} 

//文件写入函数
void save(struct address_list *head)
{
  FILE *fp;
  struct address_list *p1;
  char tong[30];
  if(head==NULL)
  {
    printf("通讯录为空,无法存储!\n");
    return;
  }
  printf("请输入保存后的文件名:");
  gets(tong);
  fp=fopen("(tong).txt","w");
  if(fp==NULL)
  {
    printf("cannot open file\n");
    return;
  }
  p1=head;
  fprintf(fp,"姓名  职业   手机   Email   通讯地址\n");
  for(;p1!=NULL;)
  {
    fprintf(fp,"%s    %s    %s    %s    %s\n",p1->name,p1->work,p1->handset,p1->email,p1->address);
    p1=p1->next;
  }
  printf("保存完毕!\n");
  fclose(fp);
} 

//文件读出函数
struct address_list *load(struct address_list *head)
{
  FILE *fp;
  char tong[30];
  struct address_list *p1,*p2;
  printf("请输入要输出的文件名:");
  gets(tong);
  fp=fopen("(tong).txt","r");
  if(fp==NULL)
  {
    printf("此通讯录名不存在,无法输出!\n");
    return(head);
  }
  else
  {
    head=shifang(head);
  }
  p1=(struct address_list *)malloc(LEN);
  fscanf(fp,"%s%s%s%s%s",&p1->name,&p1->work,&p1->handset,&p1->email,&p1->address);
  if(feof(fp)!=0)
  {
    printf("文件为空,无法打开!\n");
    return(head);
  }
  else
  {
    rewind(fp);
    p2=p1;
    head=p1;
    n=0;
    while(feof(fp)==0)
    {
      fscanf(fp,"%s%s%s%s%s",&p1->name,&p1->work,&p1->handset,&p1->email,&p1->address);
      if(feof(fp)!=0)
        break;
      p2->next=p1;
      p2=p1;
      p1=(struct address_list *)malloc(LEN);
      n=n+1;
    }
    p2->next=NULL;
    p1=head;
    head=head->next;
    n=n-1;
    free(p1);
    print(head);
    printf("打开完毕!\n");
    return(head);
  }
  fclose(fp);
} 

//综合操作函数
struct address_list *menu(struct address_list *head)
{
  char num[10];
  while(1)
  {
    printf("*********************\n");
    printf("*** 1 姓名查找   ****\n");
    printf("*** 2 单个显示   ****\n");
    printf("*** 3 增加     ****\n");
    printf("*** 4 退出     ****\n");
    printf("*********************\n");
    printf("请输入您选择的操作:");
    gets(num);
    switch(*num)
    {
    case '1':
      {
        head=search(head);             //姓名查找
        print(head);
      }
      break;
    case '2':
      {
        head=display(head);             //显示
      }
      break;
    case '3':
      {
        head=insert(head);              //增加
        print(head);
      }
      break;
    case '4':
      return head;
    default:
      printf("操作错误,此项不存在!\n");
      break;
    }
    if(strcmp(num,"6")==0)
      break;
  }
  return head;
}
//主函数
void main()
{
  struct address_list *head=NULL;
  char num[10];
  printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");
  printf("*=*        程序说明        *=*\n");
  printf("*=*  请及时保存创建完毕的通讯录内容!  *=*\n");
  printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");
  while(1)
  {
    printf("************************\n");
    printf("***   1 创建通讯录   ****\n");
    printf("***   2 按名字排序   ****\n");
    printf("***   3 综合操作    ****\n");
    printf("***   4 保存      ****\n");
    printf("***   5 打开      ****\n");
    printf("***   6 删除      ****\n");
    printf("***   7 退出      ****\n");
    printf("************************\n");
    printf("请输入您选择的操作:");
    gets(num);
    switch(*num)
    {
    case '1':
      {
        if(head==NULL)
        {
          head=creat();                //创建
          print(head);
        }
        else
        {
          head=shifang(head);
          head=creat();                //重新创建
          print(head);
        }
      }
      break;
    case '2':
      {
        head=paixu(head);                //排序
      }
      break;
    case '3':
      {
        head=menu(head);               //综合操作
      }
      break;
    case '4':
      {
        save(head);                  //文件保存
        print(head);
      }
      break;
    case '5':
      {
        head=load(head);               //文件输出
      }
      break;
    case '6':
      {
        head=delete_txl(head);              //删除
        print(head);
      }
      break;
    case '7':
      head=shifang(head);
      break;
    default:
      printf("操作错误,此项不存在!\n");
      break;
    }
    if(strcmp(num,"7")==0)
      break;
  }
}

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

您可能感兴趣的文章:

  • C语言通讯录管理系统课程设计
  • C语言实现通讯录功能
  • C语言使用结构体实现简单通讯录
  • C语言通讯录实例分享
  • 用C语言实现简易通讯录
  • C语言实现一个通讯录
  • C语言实现通讯录系统
  • C语言实现简单的通讯录
  • 使用C语言打造通讯录管理系统和教学安排系统的代码示例
  • C语言基于哈希表实现通讯录
(0)

相关推荐

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

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

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

  • C语言实现一个通讯录

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

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

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

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

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

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

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

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

随机推荐