所以,我正在做这个客户应用程序,您可以在其中创建/修改/搜索/列出客户。后来这扩展到通过订单将客户与产品联系起来等等,但我现在的重点只是客户。我已经创建了一个二叉树并且所有这些功能都可以工作,但是我需要一种方法来存储创建的客户以备下次使用。
我想以某种方式我必须将所有客户(在每个节点中找到)转移到一个数组中,然后将该数组写入文件“customer.dat”。花了很多时间。这里有一些代码片段可以帮助更好地理解我有什么功能和结构:
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;
以上是结构体,Node 包含 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 更改为另一个函数以添加到数组(输出到文件而不是屏幕),但现在事情变得太复杂了!有什么建议么?