电话簿管理程序.ppt
- 文档编号:2672326
- 上传时间:2022-11-06
- 格式:PPT
- 页数:63
- 大小:293.50KB
电话簿管理程序.ppt
《电话簿管理程序.ppt》由会员分享,可在线阅读,更多相关《电话簿管理程序.ppt(63页珍藏版)》请在冰豆网上搜索。
电话簿管理程序电话簿管理程序程序设计基础模拟项目之一项目目标:
项目目标:
l通过该模拟项目巩固C语言所学知识,主要包括:
指针、链表、结构体、预编译、宏定义、函数调用、数组、文件读写、enum、typedef等。
l将所学各项离散的C语言知识进行自然的、有机的组合运用。
l学习完整的项目开发过程,包括:
功能需求分析、系统概要设计、系统详细设计、编码和测试。
l建立程序设计和算法设计基本思想。
l用C语言完成一个完整的电话簿管理程序。
项目所需完成的任务:
项目所需完成的任务:
l功能需求分析l系统概要设计(包括数据结构设计、功能接口设计、关键算法设计、界面设计等)l系统详细设计(程序框架设计、文件结构,函数设计)l代码编写l调试和测试(单元测试和系统测试)示例示例从以下方面来示范一个电话簿管理程序1、功能需求分析2、系统概要设计3、系统详细设计4、代码编写5、调试和测试(从开发者的角度)1、功能需求分析:
、功能需求分析:
l增加记录l修改记录l删除记录l根据查询条件查询符合条件的记录l程序退出时能保存所有记录l程序启动时能读入所有记录l(每条记录所包括的内容、格式等)2、系统概要设计、系统概要设计2.1系统结构系统结构包括系统物理结构和系统逻辑结构。
a)物理结构:
从硬件结构(部署)的角度例:
2、系统概要设计、系统概要设计b)逻辑结构:
从软件结构(部署)的角度例:
2、系统概要设计、系统概要设计c)各软件功能划分(略)2、系统概要设计、系统概要设计d)功能需要分配表(略)2、系统概要设计、系统概要设计本系统的物理结构:
单机(PC)本系统的逻辑结构:
磁盘电话簿管理程序记录数据2、系统概要设计、系统概要设计2.2开发技术a)操作系统WindowsXPb)开发环境(开发平台)VisualC+c)开发语言C语言2、系统概要设计、系统概要设计2.3数据结构(接口,内部和外部接口)a)用于存放单个名片的结构typedefstructintmemberID;/成员ID号charnameLEN_NAME+1;/成员姓名SEXsex;/成员性别charteleNoLEN_TELENO+1;/成员的电话charaddrLEN_ADDRESS+1;/成员地址charemailLEN_EMAIL+1;/成员e-mail地址GROUPTYPErelation;/分组信息ElemType;2、系统概要设计、系统概要设计2.3数据结构a)用于存放单个名片的结构(续)enumSEX/性别FEMALE=0,MALE=1;/分组enumGROUPTYPEFRIENDS=0,FAMILYMEMBERS,CLASSMATES,COLLEAGUE,OTHER;2.3数据结构b)用于存放所有名片的结构链表:
最后一个空节点的作用:
避免用指针的指针,在稍后的程序中讲解,掌握指针、函数参数传值和传指针的不同执行结果2、系统概要设计、系统概要设计L记录数据2记录数据1记录数据N空记录数据NULL2.3数据结构b)用于存放所有名片的结构(续)定义链表的结点结构typedefstructSTRU_NODEElemTypedata;/结点数据structSTRU_NODE*next;/指向下一个结点的指针LinkList;typedefSTRU_NODELNode;2、系统概要设计、系统概要设计2、系统概要设计、系统概要设计2.4数据存放永久性的数据存放主要有两种方式:
写入数据库和写入文件。
本项目选择写入文件。
2、系统概要设计、系统概要设计2.5程序功能接口设计对照程序所要完成的功能,设计出如下接口:
a)voidAddMember(LinkList*L);/往电话本中添加一个记录b)voidDelMember(LinkList*L);/从电话本中删除一个记录c)voidModifyMember(LinkList*L);/修改成员信息d)voidSearchMember(LinkList*L);/查询记录e)voidDisplayAll(LinkList*L);/显示所有记录信息2、系统概要设计、系统概要设计2.5程序功能接口设计(续)f)boolReadDataFromFile(LinkList*L,char*filename);/从文件中读入保存的记录信息g)boolWriteDataToFile(LinkList*L,char*filename);/将所有记录写入文件2、系统概要设计、系统概要设计2.6界面设计3、系统详细设计、系统详细设计3.1程序框架设计程序的主程序框架用以下伪代码说明:
voidmain()/程序初始化工作生成一个含有一个空节点的链表;从文件中读出数据并插入链表中;显示程序信息显示程序信息;/程序运行方式调用用户界面,接受用户的输入并响应;/程序结束工作将电话本(链表)中的数据保存到文件中;销毁链表,回收new分配的空间;3、系统详细设计、系统详细设计3.1程序框架(main函数)详细设计(续)voidmain()/生成一个含有一个空节点的链表生成一个含有一个空节点的链表LinkList*L=newLNode1;InitElem(&(L-data);L-next=NULL;DispProgramInfo();/显示程序信息显示程序信息ReadDataFromFile(L,addressbook.dat);/从文件中读出数据并插入链表中从文件中读出数据并插入链表中Run(L);/调用用户界面,接受用户的输入调用用户界面,接受用户的输入WriteDataToFile(L,“addressbook.dat”);/将电话本将电话本(链表链表)中的数据保存到文中的数据保存到文件中件中DestroyList(L);/销毁链表,回收销毁链表,回收new分配的空间分配的空间3、系统详细设计、系统详细设计3.1程序框架(main函数)详细设计(续)voidRun(LinkList*L)do提示用户选择操作提示用户选择操作;switch(用户选择用户选择)/根据用户选择调用相关函数完成指定的操作根据用户选择调用相关函数完成指定的操作case添加一个成员添加一个成员:
AddMember(L);break;case删除成员删除成员:
DelMember(L);break;case修改各项信息修改各项信息:
ModifyMember(L);break;case查询记录信息查询记录信息:
SearchMember(L);break;case所有记录信息所有记录信息:
DisplayAll(L);break;default:
break;while(选择选择!
=退出退出);3、系统详细设计、系统详细设计3.2功能接口详细设计/往电话本中添加一个记录a)voidAddMember(LinkList*L)输入新的记录信息;if(该记录信息已经存在于链表之中)提示操作失败信息;显示已经存在的记录信息;返回;将记录信息插入链表;3、系统详细设计、系统详细设计3.2功能接口详细设计/从电话本中删除一个记录b)voidDelMember(LinkList*L)输入查询条件;输入查询条件;查找符合条件的记录查找符合条件的记录;if(找到符合条件的记录找到符合条件的记录)显示该记录信息;显示该记录信息;从链表中删除记录;从链表中删除记录;reutrn;提示删除失败信息;提示删除失败信息;3、系统详细设计、系统详细设计3.2功能接口详细设计/在电话本中修改一个记录c)voidModifyMember(LinkList*L)输入查询条件;输入查询条件;在链表中查找符合条件的记录在链表中查找符合条件的记录;if(找到符合条件的记录找到符合条件的记录)显示记录信息;显示记录信息;输入新的记录信息;输入新的记录信息;在链表中修改记录信息在链表中修改记录信息;reutrn;提示修改失败信息;提示修改失败信息;3、系统详细设计、系统详细设计3.2功能接口详细设计/往电话本中查找一个记录d)voidSearchMember(LinkList*L)输入查询条件;输入查询条件;在链表中查找符合条件的记录在链表中查找符合条件的记录;if(找到符合条件的记录找到符合条件的记录)显示记录信息;显示记录信息;reutrn;提示查找失败信息;提示查找失败信息;3、系统详细设计、系统详细设计3.2功能接口详细设计/显示电话本中所有的记录信息e)voidDisplayAll(LinkList*L)for(inti=0;iLenthOfList;i+)显示记录信息;显示记录信息;3、系统详细设计、系统详细设计3.2功能接口详细设计/将所有记录写入文件f)boolWriteDataToFile(LinkList*L,char*filename);打开保存信息的数据文件打开保存信息的数据文件filename;if(打开文件成功打开文件成功)for(inti=0;isex=FEMALE)/容易写成printf(FEMALEn);elseprintf(MALEn);return;4、代码编写及代码解析、代码编写及代码解析
(2)条件表达式中布尔值的最佳写法voidDelMember(LinkList*L)if(!
InputCondition(&memData)return;/比if(InputCondition(&memData)=false)等写法要好/*如果InputCondition的返回值不是布尔类型,禁止如下用法:
if(!
InputCondition(&memData)*/4、代码编写及代码解析、代码编写及代码解析(3)判断指针是否为空的最佳写法voidDestroyList(LinkList*L)while(L!
=NULL)/很多人写成while(L),错的return;4、代码编写及代码解析、代码编写及代码解析(4)枚举类型的实质voidDisplayMemData(ElemType*memData)if(memData-sex=FEMALE)printf(FEMALEn);elseprintf(MALEn);return;4、代码编写及代码解析、代码编写及代码解析(5)输入数值型变量之后再输入字符(串)型为什么需要getchar()?
boolInputMemData(ElemType*memData)printf(请输入ID号(int):
);scanf(%d,&(memData-memberID);getchar();printf(请输入姓名(不超过%d位):
LEN_NAME);gets(memData-name);4、代码编写及代码解析、代码编写及代码解析(6)在对指针空间进行操作之前一定要保证指针空间的合法性boolInputCondition(ElemType*memData)if(memData=NULL)returnfalse;4、代码编写及代码解析、代码编写及代码解析(7)字符、字符串输入输出操作函数getchar();getc();puts();gets();getline();/C+printf();scanf();fread();fwite();程序运行演示程序运行演示上机实验:
(1)完成一组操作电话簿记录的函数,包括在电话簿中进行插、查、删、改以及显示。
(2)完成主程序。
(3)完成整个工程下的所有编码且没有编译错误(文件AddressBook.h、AddressBook.cpp和AddressBookManage.cpp)5、调试和测试、调试和测试l程序完成之后,在提交给外部进行测试之前需要进行内部测试l本课程只学习内部测试,即从程序开发者的角度进行的最基本的测试,并对测试的过程和方法进行简化。
l为什么要进行测试和调试测试分为:
单元测试和功能测试调试:
在测试过程中定位错误的方法5、调试和测试、调试和测试5.1单元测试单元测试又称模块测试,是针对软件设计的最小单
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电话簿 管理程序
![提示](https://static.bdocx.com/images/bang_tan.gif)