小週末學習了結構體,今天打算自己做乙個通訊錄,這個通訊錄儲存若干個使用者資訊,每個使用者資訊中包含姓名,**。
我們想要這個通訊錄可以實現增刪改查的功能。
首先,首先我們要建立乙個結構體,這個結構體儲存了每個人的資訊(姓名及**)
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...