中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言如何實現一個簡易通訊錄

發布時間:2020-07-23 16:21:45 來源:億速云 閱讀:209 作者:小豬 欄目:開發技術

小編這次要給大家分享的是C語言如何實現一個簡易通訊錄,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

具體功能

實現了

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 NULL\n");
    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("序號\t\t姓名\t\t性別\t\t電話\t\t地址\n");
  for(j=0; j< book->size; j++)
  {
    printf("%u\t\t%s\t\t%s\t\t%s\t\t%s\n",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,"序號\t\t姓名\t\t性別\t\t電話\t\t地址\n");
  for(i=0; i< book->size; i++)
  {
    fprintf(fp,"%u\t\t%s\t\t%s\t\t%s\t\t%s\n",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("通訊錄為空\n\n");
    return ;
  }
  // rewind函數是將fp指針指向文件的開始
  rewind(fp);
  while(!feof(fp))
  {
    fscanf(fp,"%u\t\t%s\t\t%s\t\t%s\t\t%s\n",&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("序號\t\t姓名\t\t性別\t\t電話\t\t地址\n");
    while(i < book->size)
    {
      if(strstr(book->data[i].name,f_name)) //用strstr函數來查關鍵字
      {
        flag = 1;
        printf("%u\t\t%s\t\t%s\t\t%s\t\t%s\n",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("序號\t\t姓名\t\t性別\t\t電話\t\t地址\n");
    while(i < book->size)
    {
      if(strstr(book->data[i].number,f_number))
      {
        flag = 1;
        printf("%u\t\t%s\t\t%s\t\t%s\t\t%s\n",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語言如何實現一個簡易通訊錄的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新乡县| 奈曼旗| 清水河县| 边坝县| 宣化县| 二连浩特市| 廉江市| 茌平县| 遵化市| 丁青县| 沭阳县| 萨迦县| 湘潭市| 天津市| 江永县| 津南区| 集安市| 临武县| 华亭县| 微山县| 长宁县| 丰原市| 神池县| 拜泉县| 苏州市| 新泰市| 呼玛县| 永安市| 贵溪市| 射阳县| 辽源市| 沧源| 三台县| 武鸣县| 三明市| 遂昌县| 龙井市| 伊金霍洛旗| 汾西县| 昌宁县| 台前县|