#include #include "jrb.h" typedef struct { char *name; int age; char *ssn; } Entry; main() { JRB t, tmp; FILE *f; int age; char fn[300], ln[300], ssn[100], n[300]; char command[300]; Entry *e; t = make_jrb(); f = stdin; while(fscanf(f, "%s", command) != EOF) { if (strcmp(command, "ADD") == 0) { fscanf(f, "%s %s %d %s", fn, ln, &age, ssn); e = (Entry *) malloc(sizeof(Entry)); e->name = (char *) malloc(sizeof(char)*(strlen(ln)+strlen(fn)+3)); strcpy(e->name, ln); strcat(e->name, ", "); strcat(e->name, fn); e->ssn = (char *) strdup(ssn); e->age = age; jrb_insert_str(t, e->name, new_jval_v(e)); } else if (strcmp(command, "PRINT") == 0) { printf("__________________________________________________\n"); jrb_traverse(tmp, t) { e = (Entry *) tmp->val.v; printf("%-30s -- %11s %4d\n", e->name, e->ssn, e->age); } printf("--------------------------------------------------\n"); } else if (strcmp(command, "DELETE") == 0) { fscanf(f, "%s %s", fn, ln); strcpy(n, ln); strcat(n, ", "); strcat(n, fn); tmp = jrb_find_str(t, n); if (tmp == NULL) { printf("Error: No %s %s\n", fn, ln); } else { jrb_delete_node(tmp); } } else if (strcmp(command, "DONE") == 0) { exit(0); } else { printf("Bad command: %s\n", command); } } }