最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言實(shí)現(xiàn)通訊錄

 更新時(shí)間:2020年05月25日 09:32:26   作者:get_it_started  
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)通訊錄的具體代碼,供大家參考,具體內(nèi)容如下

實(shí)現(xiàn)的功能有:

1.初始化通訊錄;
2. 通訊錄中增加條目;
3. 刪除通訊錄中的指定條目;
4. 按指定規(guī)則查找通訊錄中特定條目;
5. 打印通訊錄中的所有信息;
6. 修改通訊錄的指定條目;
7. 銷毀通訊錄;
8. 將通訊錄內(nèi)容保存在文件;
9. 將文件中的內(nèi)容加載回內(nèi)存。

**Addr_Book.h**

#pragma once
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NAME_SIZE 200 
#define PHONE_SIZE 200 
#define ADDR_SIZE 200

typedef struct PersonInfo {
  char name[NAME_SIZE];
  char phone[PHONE_SIZE];
  char addr[ADDR_SIZE];
} PersonInfo;

#define FILE_PATH "./data.txt"

enum {
  DISPLAY = 1,
  ADD = 2,
  ERASE = 3,
  FIND = 4,
  MODIFY = 5,
  EXIT = 0
};

typedef struct AddrBook {
  PersonInfo* data;//內(nèi)容
  size_t size; //聯(lián)系人數(shù)量
  size_t capacity; //通訊錄容量
} AddrBook;


/**
* @brief 初始化通訊錄
*
* @param addr_book
*/
void AddrBookInit(AddrBook* addr_book);

/**
* @brief 通訊錄中增加條目
*
* @param addr_book
*/
void AddrBookAdd(AddrBook* addr_book);

/**
* @brief 刪除通訊錄中的指定條目
*
* @param addr_book
*/
void AddrBookErase(AddrBook* addr_book);

/**
* @brief 按指定規(guī)則查找通訊錄中特定條目
*
* @param addr_book
*/
void AddrBookFind(AddrBook* addr_book);

/**
* @brief 打印通訊錄中的所有信息
*
* @param addr_book
*/
void AddrBookDisplay(AddrBook* addr_book);

/**
* @brief 修改通訊錄的指定條目
*
* @param addr_book
*/
void AddrBookModify(AddrBook* addr_book);

/**
* @brief 銷毀通訊錄
*
* @param addr_book
*/
void AddrBookDestroy(AddrBook* addr_book);

/**
* @brief 將通訊錄內(nèi)容保存在文件
*
* @param addr_book
*/
void AddrBookSave(AddrBook* addr_book);

/**
* @brief 將文件中的內(nèi)容加載回內(nèi)存.
*
* @param addr_book
*/
void AddrBookLoad(AddrBook* addr_book);

**Addr_Book.c**

#define _CRT_SECURE_NO_WARNINGS 1

#include "Addr_Book.h"

//打印通訊錄
void AddrBookDisplay(AddrBook* addr_book){ 
  if (addr_book == NULL){
    return;
  }
  printf("\n====================通訊錄=========================\n");
  printf("|   姓名   |   號(hào)碼   |   地址   |\n");
  printf("|----------------|---------------|----------------|\n");
  size_t i = 0;
  for (; i < addr_book->size; ++i){
    printf("|   %s   |   %s   |   %s   |\n", 
      addr_book->data[i].name, addr_book->data[i].phone, addr_book->data[i].addr);
    printf("|----------------|---------------|----------------|\n");
  }
}

//初始化通訊錄
void AddrBookInit(AddrBook* addr_book){ 
  if (addr_book == NULL){
    return ;
  }
  addr_book->size = 0;
  addr_book->capacity = 1;
  addr_book->data = (PersonInfo*)malloc(sizeof(PersonInfo)*addr_book->capacity);
}

//擴(kuò)大內(nèi)存
void AddrBookRelloc(AddrBook* addr_book){
  if (addr_book == NULL){
    return;
  }
  addr_book->capacity = addr_book->capacity * 2 + 1;//內(nèi)存不夠,擴(kuò)大容量
  PersonInfo* new_data = (PersonInfo*)malloc(sizeof(PersonInfo)*addr_book->capacity);//開(kāi)辟新的空間大小
  size_t i = 0;
  for (; i < addr_book->size; ++i){
    new_data[i] = addr_book->data[i];//將舊內(nèi)存賦給新內(nèi)存
  }
  free(addr_book->data);//釋放舊內(nèi)存
  addr_book->data = new_data;
}

//添加聯(lián)系人
void AddrBookAdd(AddrBook* addr_book){ 
  if (addr_book == NULL){
    return;
  }
  if (addr_book->size >= addr_book->capacity){ //內(nèi)存不夠需要擴(kuò)大內(nèi)存
    AddrBookRelloc(addr_book);
  }
  size_t cur = addr_book->size;
  ++addr_book->size;
  printf("添加聯(lián)系人\n");
  printf("輸入姓名:");
  scanf("%s", addr_book->data[cur].name);
  printf("輸入號(hào)碼:");
  scanf("%s", addr_book->data[cur].phone);
  printf("輸入地址:");
  scanf("%s", addr_book->data[cur].addr);
  printf("添加結(jié)束!\n");
}

//刪除指定聯(lián)系人
void AddrBookErase(AddrBook* addr_book){ 
  if (addr_book == NULL){
    return;
  }
  char delete_name[200] = {0};
  printf("輸入要?jiǎng)h除聯(lián)系人姓名:");
  scanf("%s", &delete_name);
  size_t i = 0;
  for (; i <addr_book->size;++i){
    if (strcmp(addr_book->data[i].name, delete_name)){
      free(addr_book->data);
      addr_book->size--;
      printf("已刪除!");
    }
    else{
      printf("刪除失敗,請(qǐng)重新輸入聯(lián)系人!");
    }
  }
}

//保存內(nèi)容
void AddrBookSave(AddrBook* addr_book){ 
  FILE* fp = fopen(FILE_PATH, "w");
  if (fp == NULL){
    printf("打開(kāi)文件失敗!\n");
    return;
  }
  size_t i = 0;
  for (; i < addr_book->size; ++i){
    fprintf(fp, "|   %s   |   %s   |   %s   |\n",
      addr_book->data[i].name, addr_book->data[i].phone, addr_book->data[i].addr);
  }
  fclose(fp);
}

//按姓名查找聯(lián)系人
void AddrBookFind(AddrBook* addr_book){  
  if (addr_book == NULL){
    return;
  }
  char delete_name[200] = { 0 };
  printf("輸入所查找聯(lián)系人姓名:");
  scanf("%s", &delete_name);
  size_t i = 0;
  for (; i <addr_book->size; ++i){
    if (strcmp(addr_book->data[i].name, delete_name)){
      printf("找到了,該聯(lián)系人信息為:姓名:%s,號(hào)碼:%s,地址:%s\n",
        addr_book->data[i].name, addr_book->data[i].phone, addr_book->data[i].addr);    
    }
    else{
      printf("此人不存在!\n");
    }
  }
}

//修改聯(lián)系人信息
void AddrBookModify(AddrBook* addr_book){
  if (addr_book == NULL){
    return;
  }
  char name[200] = { 0 };
  printf("輸入要修改的聯(lián)系人名字:");
  scanf("%s", &name);
  size_t i = 0;
  for (; i < addr_book->size; ++i)
  {
    if (strcmp(addr_book->data[i].name, name) == 0)
    {
      printf("這是第%lu個(gè)聯(lián)系人:\n", i + 1);          
      printf("此人信息為:\n 姓名:%s ,電話:%s ,地址:%s\n",
        addr_book->data[i].name,
        addr_book->data[i].phone,
        addr_book->data[i].addr);
    }
  }
  size_t num = 0;
  printf("輸入要修改的聯(lián)系人編號(hào):");       
  scanf("%lu", &num);
  char name2[200];
  char phone[200];
  char addr[200];
  printf("請(qǐng)輸入新的姓名:");
  scanf("%s", name2);
  strcpy(addr_book->data[num - 1].name, name2);
  printf("請(qǐng)輸入新的電話號(hào)碼:");
  scanf("%s", phone);
  strcpy(addr_book->data[num - 1].phone, phone);
  printf("請(qǐng)輸入新的地址:");
  scanf("%s", addr);
  strcpy(addr_book->data[num - 1].addr, addr);
  printf("修改成功!\n");
  return;

}

//銷毀通訊錄
void AddrBookDestroy(AddrBook* addr_book){
  if (addr_book == NULL)            
  {
    printf("addr_book is null\n");
    return;
  }
  else
  {
    addr_book->size = 0;
    addr_book->capacity = 0;
    free(addr_book->data);
    printf("銷毀成功!\n");
  }

}

//將文件中的內(nèi)容加載回內(nèi)存
void AddrBookLoad(AddrBook* addr_book){
  if (addr_book = NULL){
    printf("通訊錄為空!\n");
    return;
  }
  FILE* fp = fopen(FILE_PATH,"r");
  if (fp = NULL){
    printf("打開(kāi)文件失敗!\n");
    return;
  }
  while (!feof(fp)){
    if (addr_book->size >= addr_book->capacity){
      AddrBookRelloc(addr_book);
    }
    size_t cur = addr_book->size;
    fscanf(fp, "%s%s%s\n", addr_book->data[i].name, addr_book->data[i].phone, addr_book->data[i].addr);
    addr_book->size++;
  }
  fclose(fp);
}



//===============
//以下為測(cè)試代碼
//===============

void menu(){
  AddrBook addr_book;
  AddrBookInit(&addr_book);
  AddrBookLoad(&addr_book);

  while (1){
    printf("============1.打印通訊錄=============\n");
    printf("============2.增加聯(lián)系人=============\n");
    printf("============3.刪除聯(lián)系人=============\n");
    printf("============4.查找聯(lián)系人=============\n");
    printf("============5.修改聯(lián)系人=============\n");
    printf("============6.銷毀通訊錄=============\n");
    printf("============0.退出通訊錄=============\n");
    int choice = 0;
    printf("請(qǐng)輸入所需功能:");
    scanf("%d", &choice);
    switch (choice){
    case DISPLAY:
      AddrBookDisplay(&addr_book);
      break;
    case ADD:
      AddrBookAdd(&addr_book);
      AddrBookSave(&addr_book);
      break;
    case ERASE:
      AddrBookErase(&addr_book);
      break;
    case FIND:
      AddrBookFind(&addr_book);
      break;
    case MODIFY:
      AddrBookModify(&addr_book);
      AddrBookSave(&addr_book);
      break;
    case DESTROY:
      AddrBookDestroy(&addr_book);
      break;
    case EXIT:
      printf("退出通訊錄!\n");
      break;
    default:
      printf("請(qǐng)輸入正確選擇:");
      break;
    }
  }
}

int main(){
  menu();
  return 0;
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談C語(yǔ)言=與==的區(qū)別詳解

    淺談C語(yǔ)言=與==的區(qū)別詳解

    這篇文章主要介紹了淺談C語(yǔ)言=與==的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C語(yǔ)言中位域的使用詳解

    C語(yǔ)言中位域的使用詳解

    位域是C語(yǔ)言中的一種高級(jí)功能,允許程序員為結(jié)構(gòu)體的成員分配特定數(shù)量的位,本文主要為大家介紹了位域的使用以及優(yōu)缺點(diǎn),希望對(duì)大家有所幫助
    2023-07-07
  • C語(yǔ)言可變參數(shù)列表的用法與深度剖析

    C語(yǔ)言可變參數(shù)列表的用法與深度剖析

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言可變參數(shù)列表的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-02-02
  • 從匯編看c++的默認(rèn)析構(gòu)函數(shù)的使用詳解

    從匯編看c++的默認(rèn)析構(gòu)函數(shù)的使用詳解

    本篇文章是對(duì)c++中默認(rèn)析構(gòu)函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下
    2013-05-05
  • 一文掌握 C++ 智能指針的使用方法

    一文掌握 C++ 智能指針的使用方法

    C++11 引入了智能指針的概念,使用了引用計(jì)數(shù)的想法,讓程序員不再需要關(guān)心手動(dòng)釋放內(nèi)存。關(guān)于C++指針得內(nèi)容下面文章將為大家做一個(gè)詳細(xì)介紹
    2021-09-09
  • C++中整形與浮點(diǎn)型如何在內(nèi)存中的存儲(chǔ)詳解

    C++中整形與浮點(diǎn)型如何在內(nèi)存中的存儲(chǔ)詳解

    大家好!這期和大家分享整形和浮點(diǎn)型是如何在數(shù)據(jù)是如何在內(nèi)存中存儲(chǔ),下面文章具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • C++使用回溯法解決黃金礦工問(wèn)題

    C++使用回溯法解決黃金礦工問(wèn)題

    在矩陣中考察回溯算法,分為任意起點(diǎn)、左上角開(kāi)始等情況。從而有不同的模板,其實(shí)區(qū)別就是直接開(kāi)始還是每個(gè)坐標(biāo)都去嘗試,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • C++前綴和及用法示例詳解

    C++前綴和及用法示例詳解

    前綴和算法的基本思想是利用動(dòng)態(tài)規(guī)劃的思想,通過(guò)累加計(jì)算出每一個(gè)位置的前綴和,具體實(shí)現(xiàn)時(shí),可以對(duì)原始數(shù)組進(jìn)行一次遍歷,累加計(jì)算出前綴和數(shù)組的每一個(gè)元素,這篇文章主要介紹了C++前綴和的相關(guān)知識(shí),需要的朋友可以參考下
    2025-03-03
  • 一篇文章帶你入門(mén)C++的異常處理

    一篇文章帶你入門(mén)C++的異常處理

    C++ 提供了異常機(jī)制,讓我們能夠捕獲運(yùn)行時(shí)錯(cuò)誤,本文就詳細(xì)的介紹了C++異常處理入門(mén),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C++中string與int的相互轉(zhuǎn)換實(shí)現(xiàn)代碼

    C++中string與int的相互轉(zhuǎn)換實(shí)現(xiàn)代碼

    這篇文章主要介紹了C++中string與int的相互轉(zhuǎn)換實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2017-05-05

最新評(píng)論

富阳市| 大余县| 唐山市| 罗定市| 阳新县| 元谋县| 林甸县| 四川省| 宁德市| 清河县| 清水河县| 承德市| 介休市| 贺兰县| 绥中县| 朔州市| 昌平区| 独山县| 白城市| 永济市| 眉山市| 邳州市| 汽车| 东平县| 弋阳县| 涞水县| 康定县| 临汾市| 双流县| 松桃| 东兴市| 木兰县| 乃东县| 杨浦区| 筠连县| 桦南县| 凤庆县| 柳林县| 青州市| 奉新县| 九寨沟县|