第4章大型综合程序范例解析 通讯录 数据结构设计: struct mydate unsigned int year unsigned int month unsigned int d typedef struct mydate date
第4章 大型综合程序范例解析 通讯录 数据结构设计: struct mydate{ unsigned int year; unsigned int month; unsigned int day; }; typedef struct mydate date;
第4章大型综合程序范例解析 通讯录 数据结构设计: 三个查询关键字:记录编号、组别和联系人姓名 union mysearch entry unsigned int num unsigned int group char name MAXLen+1 typedef union mysearch entry search entry
第4章 大型综合程序范例解析 通讯录 数据结构设计: 三个查询关键字:记录编号、组别和联系人姓名 union mysearch_entry{ unsigned int num; unsigned int group; char name[MAXLEN+1]; }; typedef union mysearch_entry search_entry;
第4章大型综合程序范例解析 通讯录函数设计 menu c输入输出文件 函数原型 函数功能 函数处理描述 void menulist( void) 以文本方式显示程序主菜单,同时响应|调用bseo,获取按键的值 用户输入 void upar(int y) 向上滚动光标条 通过改变字体颜色实现光标条移动 void downbar(int y) 向下滚动光标条 通过改变字体颜色实现光标条移动 void mydelay(void) 等待用户响应 调用 getch(实现 void format( void) 结果输出时打印输出的格式信息 调用 printf(()实现 void searchmenu( void) 输出查询功能的子菜单 调用 printf(实现 void input search(char ch) 处理查询时用户的输入,将关键字读入根据输入参数ch,执行相应的操作 int input num( void) 读入一个整型数值(记录编号),进行 合法性检查 采用了递归的方法循环读取数据 进行数据修改时,读入一个新的记录项 参数:新记录项的指针 int input new myrecord*p 并用它覆盖输入参数所指向的数返回值:返回是否进行了修改的信息 据记录项。 ,已修改返回 1,否则返 回0 myrecord*input app( void) 录入信息时处理键盘输入,对输入进行逐项录入通讯记录 int date legal(int year, int month, int 参数:年、月、日的信息 day 检查日期是否为合法 返回值:合法日期返回1,否则返回0
第4章 大型综合程序范例解析 通讯录-函数设计 函数原型 函数功能 函数处理描述 void menulist(void) 以文本方式显示程序主菜单,同时响应 用户输入 调用bioske(0),获取按键的值 void upbar(int y) 向上滚动光标条 通过改变字体颜色实现光标条移动 void downbar(int y) 向下滚动光标条 通过改变字体颜色实现光标条移动 void mydelay(void) 等待用户响应 调用getch()实现 void format(void) 结果输出时打印输出的格式信息 调用printf()实现 void searchmenu(void) 输出查询功能的子菜单 调用printf()实现 void input_search(char ch) 处理查询时用户的输入,将关键字读入 根据输入参数ch,执行相应的操作 int input_num(void) 读入一个整型数值(记录编号),进行 合法性检查 采用了递归的方法循环读取数据 int input_new(myrecord *p) 进行数据修改时,读入一个新的记录项 ,并用它覆盖输入参数所指向的数 据记录项。 参数:新记录项的指针 返 回 值:返回是否进行了修改的信息 ,已修改返回 1,否则返 回0。 myrecord *input_app(void) 录入信息时处理键盘输入,对输入进行 合法性检查 逐项录入通讯记录 int date_legal(int year,int month,int day) 检查日期是否为合法 参数:年、月、日的信息 返 回 值:合法日期返回1,否则返回0 menu.c输入输出文件
第4章大型综合程序范例解析 ◎通讯录函数设计 flec文件处理文件 数:要录入的记录项的指针 int file app( myrecord*p) 添加一条新的记录项 返回值:操作结果(插入成功返 回1,失败返回0) myrecord *read record(int n) 从文件中读出下标为n的块(记录项) 参数:下标值 返回值:读取结果的指针 参数:指向记录项的指针和要 int write record( myrecord *p, int n)|向文件中写入某一块(如果该块已经存在写入的块位置 将进行覆盖) 返回值:操作结果(插入成功返 回1,失败返回0) 参数:指向查询项的指针和查 int file search(search_entry*s,int f对存储文件进行遍历,查找符合输入的记|询类型 录项并输出 返回值:符合条件的记录项总数 (如果是0则查找失败) 参数:下标值 int file delete(int n) 删除文件中某个记录块 返回值:操作结果(插入成功返 回1,失败返回0)
第4章 大型综合程序范例解析 通讯录-函数设计 file.c文件处理文件 int file_app(myrecord *p) 添加一条新的记录项 参 数:要录入的记录项的指针 返 回 值:操作结果(插入成功返 回1,失败返回0) myrecord *read_record(int n) 从文件中读出下标为n的块(记录项) 参 数:下标值 返 回 值:读取结果的指针 int write_record(myrecord *p,int n) 向文件中写入某一块(如果该块已经存在 ,将进行覆盖) 参 数:指向记录项的指针和要 写入的块位置 返 回 值:操作结果(插入成功返 回1,失败返回0) int file_search(search_entry *s,int f) 对存储文件进行遍历,查找符合输入的记 录项并输出 参 数:指向查询项的指针和查 询类型 返 回 值:符合条件的记录项总数 (如果是0则查找失败) int file_delete(int n) 删除文件中某个记录块 参 数:下标值 返 回 值:操作结果(插入成功返 回1,失败返回0)
第4章大型综合程序范例解析 ◎通讯录函数设计 control. c控制文件 void append( void) 执行数据录入操作 调用 Input app完成数据录入,调用 fe_appO完成数据保存。 void delet( void) 执行数据记录项删除操作 调用 file search查找要删除的记录,然后 调用 file delete()进行删除 调用 searchmenud进入查找的菜单,调用 void search( void) 执行数据查找操作 put search(ch)获得要查找的内容 file search()进行查找 调用 nput num()输入待修改的记录,调 void change(void 执行数据记录项修改操作 用 file search()进行查找,调用 Imput new()输入新的内容,调用 write record()进行更新 void list all( void) 列出当前所有联系人信息 打开文件,遍历所有记录并输出 yoid init( vo id) 系统初试化操作,保证文件的正确性和合法性调用 fopen(O)打开文件,初始化 void quit( void) 系统退出函数,写回文件以保证数据的一致性关闭文件,退出系统
第4章 大型综合程序范例解析 通讯录-函数设计 control.c控制文件 void append(void) 执行数据录入操作 调用input_app()完成数据录入,调用 file_app()完成数据保存。 void delet(void) 执行数据记录项删除操作 调用file_search查找要删除的记录,然后 调用file_delete()进行删除 void search(void) 执行数据查找操作 调用searchmenu()进入查找的菜单,调用 input_search(ch)获得要查找的内容, file_search()进行查找 void change(void) 执行数据记录项修改操作 调用input_num()输入待修改的记录,调 用file_search()进行查找,调用 input_new()输入新的内容,调用 write_record()进行更新 void list_all(void) 列出当前所有联系人信息 打开文件,遍历所有记录并输出 void init(void) 系统初试化操作,保证文件的正确性和合法性 调用fopen()打开文件,初始化 void quit(void) 系统退出函数,写回文件以保证数据的一致性 关闭文件,退出系统