要求實現通訊錄管理系統,支持聯系人分組、文件持久化、增刪改查、按姓名排序、按組顯示。
struct Contact {
char name[30];
char work[30];
char phone[30];
char email[30];
char address[30];
int group; // 0=無分組, 1,2,3... 表示組別
struct Contact *next;
};
採用單鏈表串聯所有聯系人,group 字段標識分組。
contacts.dat 讀取鏈表。saveToFile() 將鏈表寫入二進制文件。使用冒泡或歸併排序對鏈表按 name 字段升序排列,排序後重寫文件。
遍歷鏈表,根據 group 字段分類輸出,或提供菜單選擇組別查看。
// 保存到文件
void saveToFile(Contact *head) {
FILE *fp = fopen("contacts.dat", "wb");
Contact *p = head;
while (p) {
fwrite(p, sizeof(Contact), 1, fp);
p = p->next;
}
fclose(fp);
}
// 從文件加載
Contact* loadFromFile() {
FILE *fp = fopen("contacts.dat", "rb");
if (!fp) return NULL;
Contact *head = NULL, *tail = NULL;
Contact temp;
while (fread(&temp, sizeof(Contact), 1, fp)) {
Contact *node = (Contact*)malloc(sizeof(Contact));
*node = temp;
node->next = NULL;
if (!head) head = tail = node;
else { tail->next = node; tail = node; }
}
fclose(fp);
return head;
}
通過結構體鏈表+文件存儲,可完整實現帶分組的通訊錄核心功能。代碼結構清晰,易於維護與擴展。