您好,登錄后才能下訂單哦!
這篇文章主要講解了C語(yǔ)言實(shí)現(xiàn)通訊錄的方法,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。
實(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);//開辟新的空間大小 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("打開文件失敗!\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("打開文件失敗!\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; }
看完上述內(nèi)容,是不是對(duì)C語(yǔ)言實(shí)現(xiàn)通訊錄的方法有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。