だから、私はあなたが顧客を作成/変更/検索/リストできるこの顧客アプリケーションをやっています。その後、これは注文などで顧客を製品にリンクすることにも拡大しますが、現在の私の焦点は顧客だけです。二分木を作成しましたが、これらの関数はすべて機能しますが、作成した顧客を別の機会に保存する方法が必要です。
何らかの方法で、(各ノードにある)すべての顧客を配列に転送してから、その配列をファイル「customer.dat」にfwriteする必要があると考えました。それに多くの時間を費やしてきました。これが私が持っている関数と構造体をよりよく理解するのに役立ついくつかのコードスニペットです:
typedef struct customer
{
char Name[MAXNAME];
char Surname[MAXNAME];
char ID[MAXID];
char Address[MAXADDRESS];
} Cstmr;
typedef struct node
{
Cstmr item;
struct node * left;
struct node * right;
} Node;
typedef struct tree
{
Node * root;
int size;
} Tree;
上記は構造体です。ノードにはCstmrタイプのアイテムが含まれ、左右のノードがリンクされています。ツリーには、ルートノードとサイズが含まれています。
void Traverse (const Tree * ptree, void (* pfun)(Cstmr item))
{
if (ptree != NULL)
InOrder(ptree->root,pfun);
}
static void InOrder(const Node * root, void(* pfun)(Cstmr item))
{
if (root != NULL)
{
InOrder(root->left, pfun);
(*pfun)(root->item);
InOrder(root->right, pfun);
}
}
これらの関数は、関数を追加して顧客を一覧表示するために使用されます
void printItem(Cstmr C)
{
printf("%-10s %-10s %-8s\n", C.Name, C.Surname, C.ID);
}
そして最後に書くことによって実行されます
Traverse(tree,printItem);
配列に追加するために(画面ではなくファイルに出力する)printItemを別の関数に変更しようとしましたが、今では物事が複雑になりすぎています!助言がありますか?