1、通讯录管理系统by wangwang实训报告题 目: 通讯录院 系: 信息科技学院专 业: 电子信息工程姓 名: 朱秀珍学 号: 1352100202指导教师: 朱震日 期: 2014-07-01桂林电子科技大学信息科技学院目 录1 问题定义 .32 系统设计 321 总体设计322 详细设计42.2.1 主控流程 42.2.2 数据结构设计 52.2.3 输入记录模块 52.2.4 查询记录模块 52.2.5 删除记录模块 53 系统实现 53.1 编码 53.1.1 程序源代码 .53.1.2 主函数main() .193.1.3 主菜单界面 . 193.1.4 读取文件中的记录至链表.2
2、13.1.5 删除记录.223.1.6 查找记录 .233.1.7 修改记录.233.1.7 添加记录.23 3.2 测试与调试263.2.1 概述 .263.2.2 程序测试 .264 系统维护 305 归纳总结 315.1 开发经验 315.2 实训中遇到的问题及解决方法 315.3 设计中的不足之处 315.4 感想和心得体会 316 参考资料 32本题目设计目的是训练学生的基本编程能力,了解通讯录的开发流程,熟悉C语言的文件的各种基本操作。本程序中涉及结构体、各种语句的运用如for();switch();if.else等方面的知识。通过本程序的训练,使学生能对C语言的文件操作有一个更深
3、刻的了解,初步掌握链表的一些结构及构成。掌握利用结构体实现对通讯录的原理,为进一步开发出高质量的通讯录打下坚实的基础。1、问题定义创建一个通讯录。假设系统中每个学生记录包括姓名、联系地址、联系电话的修改、删除和查询等程序的运行效果如下图所示,选择任意菜单后,实现相应功能。在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段,完成系统设计和系统实现的任务。2、系统设计21 总体设计采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。需要注意的是划分出来的模块应该相对独立但又相关,且容易理解。可以用模块化层次结构图(即模块图)来分析其任务的
4、划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述。图2.1 通讯录系统功能模块图本通讯录由实现,如图2.1所示,它由如下四大功能模块组成: 输入记录模块。完成将数据存入结构体的工作。记录可以从文件中读入,也可从键盘逐个输入朋友信息。朋友信息由朋友的姓名、联系地址、联系电话构成。当从数据文件中读入记录时,也就是把在以记录为单位存储的数据文件中。 查询记录模块。完成在结构体中查找满足相关条件的学生记录。在此通讯录中,用户可以按照姓名在中进行查找。若找到该学生的记录,则返回指向该学生的记录的指针。否则返回一个值为NULL的空指针,并打印出未找到该学生记录的提示信息。
5、添加记录模块。完成对朋友信息的更新。在此通讯录中,它实现了对好友记录的增加和排序操作,并将追加后的数据存入源数据文件。 输出记录模块。实现对朋友信息的存盘,即将记录写入数据文件中; 22 详细设计2.2.1主控main()函数执行流程 删 除 记 录 修 改 记 录 退 出 添 加 记 录2.2.2数据结构设计 结构体struct CallData char name30; char Phonnum12; char Telenum12; char Addr128; struct CallData *next;图2.2 主控函数执行流程图2.2.3输入记录模块输入记录模块主要实现将数据存入结构体
6、中。,用户应选择2,调用AddDataToLink(t)函数,进行朋友将要添加的组数,姓名、电话、地址的输入,即完成在结构体中添加记录的操作。2.2.4查询记录模块2.2.4查询记录模块主要实现了在结构体中按姓名查找满足相关条件的信息记录。在查询函数QueryData(Data)中,找到相同名字则打印出记录。2.2.5删除记录模块该操作完成删除指定姓名的记录,调用DeleteData(DeleteItem),输入要删除的序号,输入后调用函数若找到该记录,询问是否继续寻找相同姓名的记录。3、系统实现31 编码3.1.1 程序源代码#include#include#include#include#
7、includeusing namespace std;#define OPEN_FILEERROR -1#define WRITE_FILEERROR -2#define READ_FILEERROR -3struct CallData char name30; char Phonnum12; char Telenum12; char Addr128; struct CallData *next;int OnePage();/*第一屏显示函数*/int AddDataPage();/*添加记录的提示函数*/void QueryDataPage();/*查询记录提示函数*/bool AddLin
8、ktoFilePage();/*添加链表信息至文件*/void UpdateDataPage();/*修改记录提示函数*/int Deletepage();/*删除记录函数*/struct CallData*CreatNode();/*建立链表节点*/struct CallData*CreatLink(int N);/*建立度为N的节点*/struct CallData*InsertNode();/*插入一个节点*/struct CallData* DeleteNode(CallData*Head, char*Item);/*删除一个节点*/struct CallData* FileToLin
9、k();/*从文件读取数据到链表*/void freelink(CallData*head);/*链表资源回收*/void input(struct CallData*pdata);/*输入数据至链表*/void output(struct CallData*head);/*输出链表*/void outputnode(struct CallData*head);/*输出节点*/struct CallData* AddDataToLink(int t);/*添加记录函数*/int AddDataToFile(struct CallData*head, char*way);/*写数据到文件*/in
10、t UpdateData(char*Item);/*修改记录函数*/int DeleteData(char *Item);/*删除记录函数*/int QueryData(char*Item);/*查找记录函数*/int DataCmp(struct CallData*head, char*Item);/*比较函数,用于比较并输出链表中与Item相同的记录*/int HelpData();/*帮助函数*/int Exit();/*退出处理函数*/int main() bool back = true, exit = true;/*循环条件变量*/ int input, t;/*input为功能选
11、择变量,t 为添加的条目的组数*/ char Data20, DeleteItem20, UpdateItem20;/*定义要查找的名字Data,要删除的项目DeleteItem,要修改的条目UpdataItem*/ struct CallData* Link = NULL;/*定义结构体变量link*/ while (exit) OnePage();/*显示第一屏*/ printf(*请输入要选择的功能: ); scanf(%d, &input);/*输入要进行的功能*/ printf(n); switch (input) case 1: while (back) system(cls);
12、QueryDataPage();/*显示查询屏*/ scanf(%s, Data);/*输入要查找的名字*/ if (QueryData(Data) = -1)/*调用查找函数,参数Data为要查找的名字*/ printf(*没有找到该联系人*n); printf(*是否继续查询:); back = AddLinktoFilePage();/*完成一次查询后是否继续查询*/ system(cls); back = true; break; case 2: while (back) system(cls); AddDataPage();/*添加联系人显示*/ printf(*请输入要添加的条目的
13、组数:); scanf(%d, &t);/*输入要添加几组数据*/ if (t100)/*判断用户输入*/ HelpData(); else Link = AddDataToLink(t);/*调用添加记录函数*/ output(Link); printf(*是否保存数据:n); if (AddLinktoFilePage() = true) AddDataToFile(Link, a+);/*将数据保存到文件*/ else freelink(Link);/*释放链表资源*/ printf(*是否继续添加:); back = AddLinktoFilePage(); system(cls);
14、back = true; break; case 3: while (back) system(cls);/*清屏*/ Deletepage();/*显示删除功能界面*/ printf(*请输入要删除的联系人的姓名:); scanf(%s, DeleteItem);/*输入联系人姓名*/ if (DeleteData(DeleteItem) = 0)/*调用删除函数,函数内已经包含查找函数*/ printf(*删除记录操作成功*); else printf(*删除失败,未发现该联系人*n); printf(*是否继续操作:); back = AddLinktoFilePage();/*输入y或
15、者n*/ system(cls); back = true;/*充值back*/ break; case 4: while (back) system(cls);/*清屏*/ UpdateDataPage(); printf(*输入要修改的联系人姓名:); scanf(%s, UpdateItem); if (UpdateData(UpdateItem) = 0)/*调用修改函数,函数内已经包含查找函数,返回0则修改成功*/ printf(*修改记录操作成功*n); printf(*是否继续修改记录:); back = AddLinktoFilePage(); system(cls);/*清屏
16、*/ else/*否则修改失败*/ printf(*修改记录操作失败,或没有发现该联系人*n); printf(*是否继续修改记录:n); back = AddLinktoFilePage(); system(cls);/*清屏*/ back = true; break; case 5: exit = false; Exit(); break; default: HelpData(); return 0;int OnePage() printf(*ZZ通讯录管理系统*n); printf( n); printf(*版本1.0测试版*n); printf(操作提示:n); printf(1.查询
17、记录n); printf(2.添加记录n); printf(3.删除记录n); printf(4.修改记录n); printf(5.退出n); printf(*n); return 0;int AddDataPage() system(cls); printf(*ZZ通讯录管理系统*n); printf(n); printf(*版本1.0测试版*n); printf(操作提示:n); printf(1.请输入要添加的数据的组数n); printf(2.按照屏幕上的提示输入相关的数据n); printf(*n); return 0;bool AddLinktoFilePage() printf(
18、*n); printf(操作提示:n); printf(1.请输入 Y 或者 N n); printf(2.Y 是 ,N 否 n); printf(*n); printf(请选择:); char chose; cinchose; while(chose != Y & chose != N & chose != y & chose != n) printf(输入有误,请输入 Y 或 N n); if (chose = Y | chose = y) return true; else return false;void QueryDataPage() system(cls); printf(*ZZ
19、通讯录管理系统*n); printf( n); printf(*版本1.0测试版*n); printf(*【来自ZZ通讯录系统的提示:】*n); printf(*请输入需要查找的名字*n); printf(*当前版本只支持名字查找*n); printf(*n); printf(*请输入要查询的姓名:);void UpdateDataPage()/*修改记录提示函数*/ system(cls); printf(*ZZ通讯录管理系统*n); printf(n); printf(*版本1.0测试版*n); printf(操作提示:n); printf(*请输入要修改的条目,即输入要修改的姓名*);
20、printf(*按照屏幕上的提示输入相关的数据*n); printf(*n);int Deletepage() system(cls); printf(*ZZ通讯录管理系统*n); printf(n); printf(*版本1.0测试版*n); printf(操作提示:n); printf(按照屏幕上的提示输入相关的数据n); printf(*n); return 0;int ExitPage() system(cls); printf(*ZZ通讯录管理系统*n); printf(n); printf(*版本1.0测试版*n); printf(n); printf(*正在处理退出*n); pr
21、intf(*n); return 0;struct CallData*CreatNode()/*建立链表节点*/ struct CallData*Head, *point; point = Head = (struct CallData*)malloc(sizeof(struct CallData); point-next = NULL; return Head;struct CallData* DeleteNode(CallData*Head, char*Item)/*删除链表中name为Item的节点*/ struct CallData *P1, *P2 = NULL; if (Head = NULL)/*是否为空表*/ printf(链表为空); return Head; P1 = Head; while (strcmp(P1-name, Item) != 0 & P1
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1