2016-12-29 184 views
0

我試圖解決這個銀行帳戶問題:初始化結構數組在類的構造函數C++

enter image description here

我想創建使用二叉樹銀行帳戶程序,所以我使用了一個struct要輸入帳戶信息,但是,我面臨的問題是我想創建一個struct的數組,以便當客戶想要擁有多個帳戶時,我想增加結構數組以輸入第二個帳戶信息

所以主要想法是我想在s中的多個帳戶使用struct數組的ame二叉樹節點。 有沒有人有一個想法如何,我可以做到這一點,在main()我想創建一個新帳戶同一個人

這裏每次初始化數組是結構的內容

​​

我不知道如何把這些值在構造以及如何將其通過此功能

bool createnewaccount(int id, int balance, string name) 
{ 
    Node *temp = root; 
    Node *prev = root; 
    while (temp != 0) 
    { 
     prev = temp; 
     if (id > temp->data.id) 
      temp = temp->right; 
     else if (id < temp->data.id) 
      temp = temp->left; 
     else 
      return false; 
    } 
    if (prev->data.id > id) 
    { 
     prev->left = new Node(0, 0, id, balance, name); 
     return true; 
    } 
    else 
    { 
     prev->right = new Node(0, 0, id, balance, name); 
     return true; 
    } 
} 
+1

郵編不是圖像。 –

+0

你可以保持'的std ::矢量賬戶;'你二叉樹節點內。並瞭解[std :: vector](http://www.cplusplus.com/reference/vector/vector/) – sameerkn

+2

問題是什麼? – 2016-12-29 12:47:47

回答

1

傳遞給構造函數根據問題1的要求,所有操作必須使用一個唯一的銀行帳號進行。所以你的二叉樹使用銀行賬號進行排序。

你的方法一般問題

要回答的問題2,你不能只在一個節點添加多個帳戶號碼:您將無法找到其他帳戶在樹中,除非你會探索所有的節點!完全按照您在問題1中實施樹的方式保持樹狀結構將回答問題2。只是您的客戶信息(名稱)會重複,並且您無法看到客戶的整體平衡。

有幾種選擇,你可以考慮:

  1. 什麼也不做,只是生活在重複的客戶名稱(畢竟沒有什麼在這個要求)。

  2. 說出ID不再是銀行ID,而是客戶ID。賬戶ID將通過結合客戶ID和順序索引來獲得。在這種情況下,您可以按照您的設想來管理一組帳戶。然後問題就解析爲解析賬號來區分cusotmer id和index,並添加一個索引邏輯。

  3. 保持ID和樹照原樣。但不是名稱,請使用客戶ID並管理第二棵樹以按名稱維護客戶,並列出客戶擁有的所有銀行帳戶的列表(銀行帳戶ID的矢量,您可以在第一棵樹中進行搜索)。在你的代碼

問題

createnewaccount()是有缺陷的。當樹爲空時(rootnullptr),您將解引用空指針(prev->data):這是未定義的行爲。爲了解決這個最簡單的方法是正確的開始功能的添加一種特殊情況:

if (root == nullptr) { 
    root = new Node (...); 
    return true; 
} 

一旦你已經解決了這個,你會發現,你的設計是根據每個節點的一個帳戶的假設。如果你想每個節點的多個賬戶:

  • 你需要與功能擴展Node類,其他帳戶添加到現有節點(構造函數總是創建一個新的節點)。
  • 你將如何找到一個現有客戶的節點到新的帳戶添加到現有的節點?

如何你如何看待這個問題解決了這個問題正確

無論如何,每個客戶的多個銀行賬戶要求能夠找到每個帳戶ID以及按客戶的銀行賬戶。這意味着要管理兩棵樹:一個按銀行賬戶排序,另一個按顧客排序。

我認爲這是howework,因爲真正的代碼,你永遠不會開發一個二叉樹,但只使用一個std::map

所以我不會做你的功課你,但這裏一個線索:

struct Info { 
    int id; 
    string name; 
    int balance; 
}; 

class AccountNode // for your tree of unique bank accounts 
{ 
public: 
    AccountNode *left; 
    AccountNode *right; 
    Info data; 
    AccountNode() : left(nullptr), right(nullptr) { } 
    AccountNode (AccountNode *l, AccountNode *r, int Id, int Balance, string Name): 
       left(l), right(l) 
    { 
     data.id = Id; 
     data.name = Name; 
     data.balance = Balance; 
    } 
};  

class CustomerNode { // for a second tree of unique customers 
public: 
    CustomerNode *left; 
    CustomerNode *right; 
    std::string name; // in reality, you'd use a struct for address and contact infos 
    std::vector<int> accounts; // or an array if you're not allowed to use vector 
    CustomerNode() : left(nullptr), right(nullptr) { } 
    CustomerNode(CustomerNode * l, CustomerNode * r, string Name): 
       left(l), right(l), name(Name) { } 
}; 

通過這種結構,當你創建一個新賬戶,以獨特的銀行賬戶的樹,有添加的帳戶後,如果客戶已經存在,你可以在客戶樹中搜索。如果沒有,你創建它。在所有情況下,您都會添加到客戶的節點(在第二個樹中)新帳戶的ID。

然後,您可以用搜索會顯示他的賬戶和資產負債列表中選擇一個客戶的豐富應用程序。

0

對於您可以添加和隨意刪除對象,你可以使用vector<info>,但如果你想要一個數組,你可以這樣做的結構:如果你想擴大規模

info *myarray; 

info(int size){ //constructor 
    myarray = new info[size]; 
    //... 
} 

您陣列和維持目前的元素,你可以:

void expand(int currentSize, int newSize){ 
    info newArray = new info[newSize]; 
    for(int i = 0; i < currentSize; i++){ 
     newArray[i] = myarray[i]; 
    } 
    myarray = newArray; 
} 

希望幫助