|
用C语言编通讯录程序(初学者级别的)(4) suc = pre->next; } if (suc) { if (suc->next) suc->next->pre = pre; pre->next = suc->next; free(suc->name); free(suc->address); free(suc->phone); free(suc->zip); free(suc); modified = 1; } else printf("Not found !\n"); } void display( ADDR *ptr ) { printf("\n\t名 : %s\n", ptr->name); printf("\t地址 : %s\n", ptr->address); printf("\t邮编 : %s\n", ptr->zip); printf("\t电话 : %s\n", ptr->phone); } /* 告知命令用法 */ void usage() { printf("\n命令表:\n"); printf("i : 插入一条新的通信录.\n"); printf("f : 按输入名寻找通信录.\n"); printf("d : 按输入名删除一条通信录.\n"); printf("s : 浏览通信录.\n"); printf("q : 退出.\n"); } /* 保存通信录到文件 */ void save(ADDR *head, char *fname) { FILE *fp; ADDR *p;
p = head->next; if ((fp = fopen(fname, "w")) == NULL) { fprintf(stderr, "Can't open %s.\n", fname); return; } while (p != NULL) { fprintf(fp, "%s\n%s\n%s\n%s\n", p->name, p->address, p->zip, p->phone); p = p->next; } fclose(fp); } /* 从文件读出通信录,建立双向链表 */ ADDR *load(char *fname) { ADDR *p, *h;
h = (ADDR *)malloc(sizeof(ADDR)); h->pre = NULL; h->next = NULL; if ((fp = fopen(fname, "r")) == NULL) return h; /* 原先没有文件,返回空链表 */ while (!feof(fp)) { p = (ADDR *)malloc(sizeof(ADDR)); if(getstr(fp, &p->name) == 0) {
|