2011-09-18 43 views
0

我正在編寫一個地址簿程序。有插入,顯示和刪除選項。插入時,它將輸入數據並將其存儲到文件中。每當我添加新聯繫人時,都會將它們添加到文件中。 將數據保存到文件後,我可以動態分配一個結構地址簿數組來存儲每個聯繫人詳細信息。因此,如果我想要顯示或刪除特定的聯繫人,除了打開文件,比較文件中的每個元素之外,很容易。 根據保存在文件中的聯繫人數量,我們可以動態地爲結構地址簿分配數組並存儲細節。如何動態創建一個結構數組並將其存儲在文件中

#define FIRST_NAME_LENGTH 15 
    #define LAST_NAME_LENGTH 15 
    #define NUMBER_LENGTH  15 
    #define ADDRESS_LENGTH  15 
    /* Structure defining a name */ 
    struct Name 
    { 
     char lastname[LAST_NAME_LENGTH]; 
     char firstname[FIRST_NAME_LENGTH]; 
    }; 

    /* Structure defining a phone record */ 
    struct addressbook 
    { 
     char answer; 
     struct Name name; 
     char address[ADDRESS_LENGTH]; 
     char phonenumber[NUMBER_LENGTH]; 

    }; 
    struct addressbook a; 


    void add_record() 
    { 
     printf("enter details\n"); 
     printf("enter lastname of person :\n"); 
     scanf("%s", a.name.lastname); 
     printf("enter firstname of person :\n"); 
     scanf("%s", a.name.firstname); 
     printf("enter address of person :\n"); 
     scanf("%s", a.address); 
     printf("enter phone number of person :\n"); 
     scanf("%s", a.phonenumber); 
     if((fp = fopen(filename,"a+")) == NULL){ 
     printf("Error opening %s for writing. Program terminated.\n", filename); 
     abort(); 
     } 
     fwrite(&a, sizeof(a), 1, fp);     /* Write to the file */ 
     fclose(fp);          /* close file */ 
     printf("New record added\n"); 
    } 

回答

1

你的地址簿中應該持有的聯繫人列表。所以最好不要讓它與具體的聯繫方式混淆。一個更好的辦法來做到這一點是:

struct Contact 
{ 
    struct Name name; 
    char address[ADDRESS_LENGTH]; 
    char phonenumber[NUMBER_LENGTH]; 
}; 

在你的通訊錄結構,可以存儲結構聯繫的對象無論是作爲一個鏈表或數組(動態增長,如果你需要的話)。

您在數據讀取
struct AddressBook 
{ 
    Contact *contacts[MAX_CONTACTS]; 
} 

每次,將其存儲到一個新的Contact對象和指針指向的對象存儲您的數組英寸但是,如果您有大量聯繫人,則不建議將它們全部存儲在內存中,而是可以對該文件執行一些二進制搜索並只讀取所需的聯繫人塊。

相關問題