c語言實現乙個通訊錄

2021-09-26 14:36:00 字數 4365 閱讀 1361

小週末學習了結構體,今天打算自己做乙個通訊錄,這個通訊錄儲存若干個使用者資訊,每個使用者資訊中包含姓名,**。

我們想要這個通訊錄可以實現增刪改查的功能。

首先,首先我們要建立乙個結構體,這個結構體儲存了每個人的資訊(姓名及**)

typedef struct personinfopersoninfo;
緊接著,我們又建立乙個通訊錄結構體,這個結構體,包含了所有人的資訊

typedef struct addrbookaddrbook;
我們需要與使用者完成乙個輸入的交換過程,我們這裡建立乙個選單函式

int menu()
其中,1,2,3,4增刪改查四個功能,都是結構體傳指標傳參,物件都是addr_book,我們這裡可以用轉移表,建立乙個函式指標陣列來實現四個功能

typedef void(*func)(addrbook*)
int main();

while (1)

if (choice == 0)

func_table[choice - 1](&addr_book);

} system("pause");

return 0;

}

我們主函式中的每乙個功能函式進行分析

我們需要將通訊錄初始化

一開始通訊錄的有效聯絡人是0,並且聯絡人的結構體中**及姓名都是空字串

void init(addrbook* addr_book)

}

接著我們要完成add函式,即新增聯絡人,這裡我們需要注意,我們之前建立的size變數為有效聯絡人,一開始size為0,當我們新建聯絡人,我們即把聯絡人的資訊放到size這個位置,size需要自增

具體實現看**

void add(addrbook* addr_book)

personinfo* p = &addr_book->persons[addr_book->size];

//指標變數,指向person中size的位置

printf("輸入新聯絡人的姓名\n");

scanf("%s", p->name);

printf("輸入新聯絡人的**\n");

scanf("%s", p->phone);

++(addr_book->size);

//自增

printf("建立成功\n");

}

接著是顯示通訊錄,這塊**會比較簡單一些

void printall(addrbook* addr_book)//列印序號,當前序號的姓名以及**。

printf("當前共有%d條記錄\n",addr_book->size);

printf("***************===\n");

在接著是更新通訊錄,例如在通訊錄中我們需要將聯絡人的手機號更改一下,我們就需要對其進行更新,在這裡我們小小用了乙個「*」字元的特殊功能,我們看一下在**中如何實現

void update(addrbook* addr_book)

int index = 0;

scanf("%d", &index);

if (index < 0 || index >= addr_book->size)

printf("當前姓名為:%s\n請輸入修改之後的姓名(*表示不修改):", addr_book->persons[index].name);

char name[name_max_size] = ;

scanf("%s", name);

//這裡就是字串「*」的功能,如果相等返回0,不修改

//不想等,即返回其他數,此時將使用者輸入的name拷貝到通訊錄中

if (strcmp(name, "*") != 0)

printf("當前**為:%s\n請輸入修改之後的**(*表示不修改):", addr_book->persons[index].phone);

char phone[phone_max_size] = ;

scanf("%s", phone);

if (strcmp(phone, "*") != 0)

printf("修改完成\n");

}

接著是remove函式,**如下(含說明)

void remove(addrbook* addr_book)

int index = 0;

scanf("%d", &index);

if (index < 0 || index >= addr_book->size)

//具體怎麼刪除

//1.刪除最後乙個元素

if (index == addr_book->size - 1)

else

printf("刪除成功,當前還剩%d條記錄\n", addr_book->size);

}

再對其中做一些細小的改動

具體總**如下

#define _crt_secure_no_warnings

#include#include#include#include//#define persons_max_size 200

#define name_max_size 1024

#define phone_max_size 100

typedef struct personinfopersoninfo;

typedef struct addrbookaddrbook;

void init(addrbook* addr_book)

}void add(addrbook* addr_book)

personinfo* p = &addr_book->persons[addr_book->size];

printf("輸入新聯絡人的姓名\n");

scanf("%s", p->name);

printf("輸入新聯絡人的**\n");

scanf("%s", p->phone);

++(addr_book->size);

printf("建立成功\n");

}void remove(addrbook* addr_book)

int index = 0;

scanf("%d", &index);

if (index < 0 || index >= addr_book->size)

//具體怎麼刪除

//1.刪除最後乙個元素

if (index == addr_book->size - 1)

else

printf("刪除成功,當前還剩%d條記錄\n", addr_book->size);

}void printall(addrbook* addr_book)

printf("當前共有%d條記錄\n",addr_book->size);

printf("***************===\n");

}void update(addrbook* addr_book)

int index = 0;

scanf("%d", &index);

if (index < 0 || index >= addr_book->size)

printf("當前姓名為:%s\n請輸入修改之後的姓名(*表示不修改):", addr_book->persons[index].name);

char name[name_max_size] = ;

scanf("%s", name);

if (strcmp(name, "*") != 0)

printf("當前**為:%s\n請輸入修改之後的**(*表示不修改):", addr_book->persons[index].phone);

char phone[phone_max_size] = ;

scanf("%s", phone);

if (strcmp(phone, "*") != 0)

printf("修改完成\n");

}int menu()

addrbook addr_book;

typedef void(*func)(addrbook*);//轉移表

int main();

while (1)

if (choice == 0)

system("cls");

func_table[choice - 1](&addr_book);

} system("pause");

return 0;

}

C語言 實現乙個通訊錄

可以增容 通訊錄可以用來儲存無上限數量的人的資訊,每個人的資訊包括 姓名 性別 年齡 住址 新增聯絡人資訊 刪除指定聯絡人資訊 查詢指定聯絡人資訊 修改指定聯絡人資訊 顯示所有聯絡人資訊 清空所有聯絡人 排序所有聯絡人 ifndef contact h define contact h includ...

C語言實現乙個簡單通訊錄

通訊錄和學生資訊管理系統的基本功能部分實現一模一樣。來看看不一樣的部分。查詢 通訊錄需要實現根據聯絡人不同資訊查詢的功能,可以為每一種查詢情況都封裝乙個查詢函式,或者根據不同情況返回不同的比較結果進行查詢。為了使函式更加簡短,我們將該功能分為三個函式。根據 mode 的不同獲取不同比較方式的比較結果...

C語言實現乙個簡單的通訊錄

通訊錄可以用來儲存1000個人的資訊,每個人的資訊包括 姓名 性別 年齡 qq 住址。通訊錄功能包括 新增聯絡人 顯示聯絡人 刪除指定聯絡人 查詢指定聯絡人 修改指定聯絡人 對通訊錄進行排序。整個通訊錄由三個檔案組成 contact.h contact.c test.c contact.h incl...