电话簿管理程序ppt课件_第1页
电话簿管理程序ppt课件_第2页
电话簿管理程序ppt课件_第3页
电话簿管理程序ppt课件_第4页
电话簿管理程序ppt课件_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电话簿管理程序,1,电话簿管理程序,程序设计基础模拟项目之一,电话簿管理程序,2,项目目标:,通过该模拟项目巩固C语言所学知识,主要包括:指针、链表、结构体、预编译、宏定义、函数调用、数组、文件读写、enum、 typedef等。 将所学各项离散的C语言知识进行自然的、有机的组合运用。 学习完整的项目开发过程,包括:功能需求分析、系统概要设计、系统详细设计、编码和测试。 建立程序设计和算法设计基本思想。 用C语言完成一个完整的电话簿管理程序。,电话簿管理程序,3,项目所需完成的任务:,功能需求分析 系统概要设计(包括数据结构设计、功能接口设计、关键算法设计、界面设计等) 系统详细设计(程序框架

2、设计、文件结构,函数设计) 代码编写 调试和测试(单元测试和系统测试),电话簿管理程序,4,示例,从以下方面来示范一个电话簿管理程序 1、功能需求分析 2、系统概要设计 3、系统详细设计 4、代码编写 5、调试和测试(从开发者的角度),电话簿管理程序,5,1、功能需求分析:,增加记录 修改记录 删除记录 根据查询条件查询符合条件的记录 程序退出时能保存所有记录 程序启动时能读入所有记录 (每条记录所包括的内容、格式等),电话簿管理程序,6,2、系统概要设计,2.1 系统结构 系统结构包括系统物理结构和系统逻辑结构。 a) 物理结构:从硬件结构(部署)的角度 例:,电话簿管理程序,7,2、系统概

3、要设计,b) 逻辑结构:从软件结构(部署)的角度 例:,电话簿管理程序,8,2、系统概要设计,c) 各软件功能划分(略),电话簿管理程序,9,2、系统概要设计,d) 功能需要分配表(略),电话簿管理程序,10,2、系统概要设计,本系统的物理结构:单机(PC) 本系统的逻辑结构:,磁盘,电话簿管理程序,记录数据,电话簿管理程序,11,2、系统概要设计,2.2 开发技术 a)操作系统 WindowsXP b)开发环境(开发平台) Visual C+ c)开发语言 C语言,电话簿管理程序,12,2、系统概要设计,2.3 数据结构(接口,内部和外部接口) a)用于存放单个名片的结构 typedef s

4、truct int memberID; /成员ID号 char nameLEN_NAME + 1; /成员姓名 SEX sex; /成员性别 char teleNoLEN_TELENO + 1; /成员的电话 char addrLEN_ADDRESS + 1; /成员地址 char emailLEN_EMAIL+ 1; /成员e-mail地址 GROUPTYPE relation; /分组信息 ElemType;,电话簿管理程序,13,2、系统概要设计,2.3 数据结构 a)用于存放单个名片的结构 (续) enum SEX /性别 FEMALE = 0, MALE = 1 ; /分组 enum

5、 GROUPTYPE FRIENDS =0, FAMILYMEMBERS, CLASSMATES , COLLEAGUE, OTHER ;,电话簿管理程序,14,2.3 数据结构 b) 用于存放所有名片的结构 链表: 最后一个空节点的作用: 避免用指针的指针,在稍后的程序中讲解,掌握指针、函数参数传值和传指针的不同执行结果,2、系统概要设计,电话簿管理程序,15,2.3 数据结构 b) 用于存放所有名片的结构(续) 定义链表的结点结构 typedef struct STRU_NODE ElemType data; /结点数据 struct STRU_NODE *next; /指向下一个结点的指

6、针 LinkList; typedef STRU_NODE LNode;,2、系统概要设计,电话簿管理程序,16,2、系统概要设计,2.4数据存放 永久性的数据存放主要有两种方式:写入数据库和写入文件。 本项目选择写入文件。,电话簿管理程序,17,2、系统概要设计,2.5程序功能接口设计 对照程序所要完成的功能,设计出如下接口: void AddMember(LinkList *L); /往电话本中添加一个记录 void DelMember(LinkList *L); /从电话本中删除一个记录 void ModifyMember(LinkList *L); /修改成员信息 void Searc

7、hMember(LinkList *L); /查询记录 void DisplayAll(LinkList *L); /显示所有记录信息,电话簿管理程序,18,2、系统概要设计,2.5程序功能接口设计 (续) bool ReadDataFrom *L, char *); /从文件中读入保存的记录信息 bool WriteDataTo *L, char *); /将所有记录写入文件,电话簿管理程序,19,2、系统概要设计,2.6界面设计,电话簿管理程序,20,3、系统详细设计,3.1 程序框架设计 程序的主程序框架用以下伪代码说明: void main() /程序初始化工作 生成一个含有一个空节点

8、的链表 ; 从文件中读出数据并插入链表中; 显示程序信息; /程序运行方式 调用用户界面,接受用户的输入 并响应 ; /程序结束工作 将电话本(链表)中的数据保存到文件中; 销毁链表,回收new分配的空间; ,电话簿管理程序,21,3、系统详细设计,3.1 程序框架(main函数)详细设计 (续) void main() /生成一个含有一个空节点的链表 LinkList *L = new LNode1; InitElem( /销毁链表,回收new分配的空间 ,电话簿管理程序,22,3、系统详细设计,3.1 程序框架(main函数)详细设计 (续) void Run(LinkList *L) d

9、o 提示用户选择操作 ; switch(用户选择 ) /根据用户选择调用相关函数完成指定的操作 case 添加一个成员: AddMember(L); break; case 删除成员: DelMember(L); break; case 修改各项信息: ModifyMember(L); break; case 查询记录信息: SearchMember(L); break; case 所有记录信息: DisplayAll(L); break; default: break; while(选择 != 退出 ); ,电话簿管理程序,23,3、系统详细设计,3.2 功能接口详细设计 /往电话本中添加一

10、个记录 a) void AddMember(LinkList *L) 输入新的记录信息; if(该记录信息已经存在于链表之中) 提示操作失败信息; 显示已经存在的记录信息; 返回; 将记录信息插入链表; ,电话簿管理程序,24,3、系统详细设计,3.2 功能接口详细设计 /从电话本中删除一个记录 b) void DelMember(LinkList *L) 输入查询条件; 查找符合条件的记录 ; if(找到符合条件的记录) 显示该记录信息; 从链表中删除记录; reutrn; 提示删除失败信息; ,电话簿管理程序,25,3、系统详细设计,3.2 功能接口详细设计 /在电话本中修改一个记录 c)

11、 void ModifyMember(LinkList *L) 输入查询条件; 在链表中查找符合条件的记录 ; if(找到符合条件的记录) 显示记录信息; 输入新的记录信息; 在链表中修改记录信息 ; reutrn; 提示修改失败信息; ,电话簿管理程序,26,3、系统详细设计,3.2 功能接口详细设计 /往电话本中查找一个记录 d) void SearchMember(LinkList *L) 输入查询条件; 在链表中查找符合条件的记录 ; if(找到符合条件的记录) 显示记录信息; reutrn; 提示查找失败信息; ,电话簿管理程序,27,3、系统详细设计,3.2 功能接口详细设计 /显

12、示电话本中所有的记录信息 e) void DisplayAll(LinkList *L) for(int i =0 ;isex = FEMALE) printf(FEMALEn); else printf(MALEn ); return; ,电话簿管理程序,50,4、代码编写及代码解析,(5) 输入数值型变量之后再输入字符(串)型 为什么需要getchar()? bool InputMemData(ElemType *memData) printf(请输入ID号(int): ); scanf(%d, ,电话簿管理程序,51,4、代码编写及代码解析,(6) 在对指针空间进行操作之前一定要保证指针

13、空间的合法性 bool InputCondition(ElemType *memData) if(memData = NULL) return false; ,电话簿管理程序,52,4、代码编写及代码解析,(7) 字符、字符串输入输出操作函数 getchar(); getc(); puts(); gets(); getline(); /C+ printf(); scanf(); fread(); fwite(); ,电话簿管理程序,53,程序运行演示,上机实验: (1)完成一组操作电话簿记录的函数,包括在电话簿中进行插、查、删、改以及显示。 (2)完成主程序。 (3)完成整个工程下的所有编码且

14、没有编译错误 (文件AddressBook.h 、AddressBook.cpp和AddressBookManage.cpp),电话簿管理程序,54,5、调试和测试,程序完成之后,在提交给外部进行测试之前需要进行内部测试 本课程只学习内部测试,即从程序开发者的角度进行的最基本的测试,并对测试的过程和方法进行简化。 为什么要进行测试和调试 测试分为:单元测试和功能测试 调试:在测试过程中定位错误的方法,电话簿管理程序,55,5、调试和测试,5.1单元测试 单元测试又称模块测试,是针对软件设计的最小单位程序模块,进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。单元测试需要从程

15、序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。,电话簿管理程序,56,5、调试和测试,5.1单元测试 单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。 在一种传统的结构化编程语言中,比如C,要进行测试的单元一般是函数或子过程。在象C+这样的面向对象的语言中, 要进行测试的基本单元是类。 单元测试工具(软件): CppUnit,这是C+单元测试工具的鼻祖,免费的开源的单元测试框架。 c+Test,这是Parasoft公司的产品。C+Test是一个功能强大的自动化C/C+单元级测试工具,可以自动测

16、试任何C/C+函数、类,自动生成测试用例、测试驱动函数或桩函数 Visual Unit,简称VU,是可视化、自动化、高效率的C/C+单元测试、可视编程工具,功能强大、易学易用。,电话簿管理程序,57,5、调试和测试,5.1单元测试 例1:bool ListInsert(LinkList *L, ElemType *e , int index ) 根据函数调用关系,先测试函数CopyElem 测试的通常输入输出方式:界面和文件(优缺点) 实际输出与期望输出不一致:bug,需要纠正 在测试函数的设计过程中可以同时测试关联比较紧密的多个函数。 (演示 测试函数testCopyElem) (演示测试函

17、数ListInsert),电话簿管理程序,58,5、调试和测试,5.1单元测试 例2:测试bool ListDelete(LinkList *L, int index); (修改该函数,使得该函数产生bug,演示测试输出与期望输出不同,从而进入调试过程) 测试函数 testListDelete 演示调试过程,电话簿管理程序,59,5、调试和测试,5.1单元测试 在实践工作中,进行完整计划的单元测试和编写实际的代码所花费的精力大致上是相同的。一旦完成了这些单元测试工作,很多Bug将被纠正,在确信他们手里拥有稳定可靠的部件的情况下,开发人员能够进行更高效的系统集成工作。 经常与单元测试联系起来的另外一些开发活动包括代码走读(Code review) ,开发人员不妨在单元测试之前进行代码走读,提高调试和测试效率。,电话簿管理程序,60,5、调试和测试,5.2功能测试 需求理解了,知道客户想要系统实现什么,理解了业务,就知道了系统是怎样一个流程来实现的。然后按照需求来进行测试的,不满足需求要求的都可以认为是BUG。但实际中,这样一个简化了过程都很难,毕竟想从开发

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论