通讯录实现的架构设计与需求分析
通讯录实现的功能:
- 添加一个人员
- 打印显示所有人员
- 删除一个人员
- 查找一个人员
- 保存文件
- 加载文件
需求分析:
- 人员如何存储 —>链表的方式
- 文件存储 ---->人员数据的格式
- 人员信息 ---->姓名,电话
文件数据存储
name:xxx,phone:xxx
name:yyy,phone:yyy
键值对
架构设计:
代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NAME_LENGTH 16
#define PHONE_LENGTH 32
#define BUFFER_LENGTH 128
#define MIN_TOKEN_LENGTH 5
#define INFO printf
#define LIST_INSERT(item, list) do {
\
item->prev = NULL; \
item->next = list; \
if ((list) != NULL) (list)->prev = item; \
(list) = item; \
} while(0)
#define LIST_REMOVE(item, list) do {
\
if (item->prev != NULL) item->prev->next = item->next; \
if (item->next != NULL) item->next->prev = item->prev; \
if (list == item) list = item->next; \
item->prev = item->next = NULL; \
} while(0)
struct person {
char name[NAME_LENGTH];
char phone[PHONE_LENGTH];
struct person *next;
struct person *prev;
};
struct contacts {
struct person *people;
int count;
};
enum {
OPER_INSERT = 1,
OPER_PRINT,
OPER_DELETE,
OPER_SEARCH,
OPER_SAVE,
OPER_LOAD
};
// define interface
int person_insert(struct person **ppeople, struct person *ps) {
if (ps == NULL) return -1;
LIST_INSERT(ps, *ppeople);
return 0;
}
int person_delete(struct person **ppeople, struct person *ps) {
if (ps == NULL) return -1;