c/c++语言开发共享C语言实现一个简易通讯录

本文实现一个通讯录,是基于c语言的io文件操作、数据结构里面的顺序表实现。具体功能实现了1、信息的添加2、信息的显示3、信息的修改(修改单一属性)4、将内存中的信息保存到文件中去5、将文件中的信息加载

c/c++开发分享C语言实现一个简易通讯录实现一个通讯录,是基于c语言的io文件操作、数据结构里面的顺序表实现。

具体功能

实现了

1、信息的添加
2、信息的显示
3、信息的修改(修改单一属性)
4、将内存中的信息保存到文件中去
5、将文件中的信息加载到内存中(每次程序运行数据就会丢失)
6、信息的删除
7、信息的查找(按照各自的属性查找)
8、给每一条信息设置了唯一的标识id
9、通讯录的销毁

头文件中的声明

在c语言中我们采用结构体来记录每一个人的具体信息
用顺序表的数据结构来来对数据的操作

  #ifndef __addressbook_h__  #define __addressbook_h__    #include<stdio.h>  #include<stdlib.h>  #include<string.h>  #include<windows.h>    #define name_max 200 //免费精选名字大全  #define gender_max 100 // 性别  #define address_max 200 // 地址  #define number_max 200 // 电话  #define seqlist_max 1000 // 存储的最大信息数量  #define file_path "address_book.txt" // 写入文件的位置    typedef struct person_inf  {      char name[name_max];    char gender[gender_max];    char number[number_max];    char address[address_max];  }person_inf;    typedef struct address_book  {    size_t size;    person_inf data[seqlist_max];  }address_book;    //初始化通讯录  void address_book_init(address_book *book);    //添加信息  void address_book_add(address_book *book);    //显示信息  void address_book_display(address_book *book);    //删除所有信息  void address_book_delete_all(address_book *book);    //保存信息  void address_book_save(address_book *book);    //加载信息  void address_book_load(address_book *book);    //修改信息  void address_book_update(address_book *book);    //删除信息  void address_book_delete(address_book *book);    //查找信息  void address_book_find(address_book *book);    //销毁通讯录  void adderss_book_destory(address_book *book);    #endif

函数的定义

在这里我们实现了,基本的增删查改,保存信息加载信息。

  #define _crt_secure_no_warnings    #include "addressbook.h"    //初始化通讯录  void address_book_init(address_book *book)  {    if(book == null)    {      return ;    }    book->size = 0;  }    //添加信息  void address_book_add(address_book *book)  {    size_t cur = 0;    if(book == null)    {      printf("book is nulln");      return ;    }    cur = book->size;    ++book->size;    printf("添加信息n");    printf("请输入要添加的姓名n");    scanf("%s",book->data[cur].name);    printf("请输入要添加的性别n");    scanf("%s",book->data[cur].gender);    printf("请输入要添加的电话n");    scanf("%s",book->data[cur].number);    printf("请输入要添加的地址n");    scanf("%s",book->data[cur].address);    printf("添加成功n");    return;  }    //显示信息  void address_book_display(address_book *book)  {    size_t j = 0;    if(book == null)    {      return ;    }    printf("序号tt姓名tt性别tt电话tt地址n");    for(j=0; j< book->size; j++)    {      printf("%utt%stt%stt%stt%sn",j,book->data[j].name,      book->data[j].gender,book->data[j].number,      book->data[j].address);    }  }    //保存信息  void address_book_save(address_book *book)  {    size_t i = 0;    file *fp = fopen(file_path,"w");    if(book == null)    {      return ;    }    if(fp == null)    {      printf("打开文件失败n");      return ;    }    //fprintf(fp,"序号tt姓名tt性别tt电话tt地址n");    for(i=0; i< book->size; i++)    {      fprintf(fp,"%utt%stt%stt%stt%sn",i,book->data[i].name,      book->data[i].gender,book->data[i].number,      book->data[i].address);    }    fclose(fp);  }    //加载信息  void address_book_load(address_book *book)  {    size_t len = 0;    size_t i = 0;    file *fp = fopen(file_path,"r");      if(book == null)    {      return ;    }    if(fp == null)    {      printf("打开文件失败n");      return ;    }    // 把光标移动到文件末尾    fseek(fp,0,seek_end);    // 从光标到文件首偏移的字节数    len = ftell(fp);    if(len == 0)    {      printf("通讯录为空nn");      return ;    }    // rewind函数是将fp指针指向文件的开始    rewind(fp);    while(!feof(fp))    {      fscanf(fp,"%utt%stt%stt%stt%sn",&i,book->data[book->size].name,//name是数组,在调用数组名时候降级为指针        book->data[i].gender,book->data[book->size].number,        book->data[book->size].address);      i++;      ++book->size;    }    fclose(fp);  }      //修改信息  void address_book_update(address_book *book)  {    size_t i = 0;    if(book == null)    {      return ;    }    printf("请输入要修改的编号n");    scanf("%u",&i);    if(i > book->size || i < 0)    {      printf("输入为非法值n");      return ;    }    printf("修改信息n");    printf("姓名修改为n");    scanf("%s",book->data[i].name);    printf("性别修改为n");    scanf("%s",book->data[i].gender);    printf("修改电话为n");    scanf("%s",book->data[i].number);    printf("地址修改为n");    scanf("%s",book->data[i].address);    printf("修改成功n");    return ;  }      //删除信息  void address_book_delete(address_book *book)  {    size_t i = 0;    if(book == null)    {      return ;    }    printf("请输入要删除的编号n");    scanf("%u",&i);    if(i > book->size)    {      printf("输入为非法值n");      return ;    }    while(i < book->size)    {      book->data[i] = book->data[i+1];      i++;    }    book->size--;    printf("删除成功n");    return;  }    //删除所有信息  void address_book_delete_all(address_book *book)  {    if(book == null)    {      return ;    }    book->size = 0;  }    //查找信息  void address_book_find(address_book *book)  {    int flag = 0;    size_t i = 0;    int choice = 0;    char f_name[50];    char f_number[50];    if(book == null)    {      //book为空指针;      return ;    }    printf("请输入要查找的方式n");    printf("************************n");    printf("*1.姓名查找 2.电话号查找n");    printf("************************n");    scanf("%d",&choice);    if (choice == 1)    {      //姓名查找      printf("请输入查找的姓名或者关键字n");      scanf("%s",f_name);      printf("序号tt姓名tt性别tt电话tt地址n");      while(i < book->size)      {        if(strstr(book->data[i].name,f_name)) //用strstr函数来查关键字        {          flag = 1;          printf("%utt%stt%stt%stt%sn",i,book->data[i].name,          book->data[i].gender,book->data[i].number,          book->data[i].address);        }        i++;      }      if(flag == 0)      printf("未查找到n");    }    else if (choice == 2)    {      //电话号码查找      printf("请输入查找的电话号或者关键号码n");      scanf("%s",f_number);      printf("序号tt姓名tt性别tt电话tt地址n");      while(i < book->size)      {        if(strstr(book->data[i].number,f_number))        {          flag = 1;          printf("%utt%stt%stt%stt%sn",i,book->data[i].name,          book->data[i].gender,book->data[i].number,          book->data[i].address);        }        i++;      }      if(flag == 0)      {        printf("未查找到n");      }    }    else    {      printf("选择错误n");    }  }    /*fseek(fp,100l,0);把文件内部指针移动到离文件开头100字节处;  fseek(fp,100l,1);把文件内部指针移动到离文件当前位置100字节处;  fseek(fp,-100l,2);把文件内部指针退回到离文件结尾100字节处。    ftell(fp);利用函数 ftell() 也能方便地知道一个文件的长。  如以下语句序列: fseek(fp, 0l,seek_end); len =ftell(fp)+1;   首先将文件的当前位置移到文件的末尾,然后调用函数ftell()获得当前  位置相对于文件首的位移,该位移值等于文件所含字节数。  */    //销毁通讯录  void adderss_book_destory(address_book *book)  {    file *fp = fopen(file_path,"w");    if(book == null)    {      return ;    }    if(fp == null)    {      printf("打开文件失败n");      return ;    }    fseek(fp,0,seek_set);    rewind(fp);    fclose(fp);    printf("销毁成功n");  }

主函数的实现(主要的框架)

实现是采用枚举来标识要使用哪种功能,其中要注意的是,我们在将程序运行起来时候就需要加载我们的以前文件中的信息。还有就是我们要在每次添加一条信息,或者删除,修改都需要保存,既内存中和io文件中保存写入一次

  enum  {    exit,    display,    add,    update,    y_delete,    find,    destory  };    //菜单  void menu()  {    int choice = 0;    address_book book;    address_book_init(&book);    address_book_load(&book);    while(1)    {      printf("===============================n");      printf("1.显示通讯录n");      printf("2.添加n");      printf("3.修改n");      printf("4.删除n");      printf("5.查找n");      printf("6.销毁n");      printf("0.退出n");      printf("===============================n");      scanf("%d",&choice);      system("cls");      switch (choice)      {        case display:          address_book_display(&book);          break;        case add:          address_book_add(&book);          address_book_save(&book);          break;        case update:          address_book_update(&book);          address_book_save(&book);          break;        case y_delete:          address_book_delete(&book);          address_book_save(&book);          break;        case find:          address_book_find(&book);          break;        case destory:          adderss_book_destory(&book);          address_book_delete_all(&book);          break;        case exit:          return ;          break;        default:          printf("输入值非法n");          break;      }    }    }    int main()  {    menu();    return 0;  }

以上就是c/c++开发分享C语言实现一个简易通讯录的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/598548.html

(0)
上一篇 2021年5月8日
下一篇 2021年5月8日

精彩推荐