计算机生产实习软件设计报告_第1页
计算机生产实习软件设计报告_第2页
计算机生产实习软件设计报告_第3页
计算机生产实习软件设计报告_第4页
计算机生产实习软件设计报告_第5页
已阅读5页,还剩21页未读, 继续免费阅读

付费下载

下载本文档

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

文档简介

北京科技大学本科生计算机生产实习软件设计报告软件名称:_______通讯录___开发小组:_____________组长姓名:_______________组员:年月日

TOC\o"1-3"1.引言 41.1编写目的 41.2项目背景 41.3定义 41.4参考资料 52.总体设计 52.1需求概述 52.1.1功能性需求 52.1.2非功能性需求 52.2软件结构 63.程序描述 63.1界面显示模块 63.1.1功能 63.1.2功能描述 73.1.3输入项目 73.1.4输出项目 83.1.5算法 113.6程序逻辑 123.1.7接口 133.1.8存储分配 143.1.9限制条件 143.1.10测试要点 143.2数据处理模块 143.2.1功能 143.2.2功能描述 143.2.3输入项目 153.2.4输出项目 153.2.5算法 173.2.6程序逻辑 183.2.7接口 193.2.8存储分配 193.2.9限制条件 193.2.10测试要点 193.3搜索排序模块 203.3.1功能 203.3.2功能描述 203.3.3输入项目 203.3.4输出项目 203.3.5算法 233.3.6程序逻辑 243.3.7接口 253.3.8存储分配 263.3.9限制条件 263.3.10测试要点 26

1.引言1.1编写目的软件设计报告是为了解释开发这个软件产品意义、作用、以及最终要达到的意图。通过这份软件设计报告详尽说明了该软件产品的软件结构,包括数据库结构和出错处理,从而对该软件产品的结构的描述。可能的读者包括:用户、开发人员、项目经理、营销人员、软件测试人员。1.2项目背景项目来源:北京科技大学计算机专业2013年暑期生产实习开发小组选定设计题目。此次是学校计算机实习的课程,由北京科技大学计算机与通信工程学院计算机系主管。近几年智能手机发展非常迅猛,智能手机的功能也越来越丰富,基于iOS的iPhone智能手机因其独特的设计、优秀的性能和极佳的体验深受用户欢迎。手机通讯录作为一款最为广泛使用的应用,如何能让用户更加方便快捷地使用,很有研究的必要。因此,我们设计和实现了基于iOS操作系统的手机通讯录应用。我们将从功能性需求和非功能性需求出发,对通讯录客户端进行了设计,从数据处理模块和界面显示模块两个部分进行了设计和实现。本报告详细叙述了联系人搜索模块的算法实现和其显示规则的实现,以及其他通讯录常有功能的设计和实现。最后,经过严格而详细的测试,应用获得测试报告。本小组成员在项目中独立完成了的模块有联系人搜索模块、群组模块、联系人详情模块和设置模块,参与完成了通讯录数据库的读取和操作、性能的优化、缓存模块等工作。通讯录应用已经完成了第一个版本的开发工作,已经可以在学校提供的设备上顺利运行。1.3定义【列出文档中所用到的专门术语的定义和缩写词的原文。】1.4参考资料《iOS编程》JoeConWay&AaronHillegass著2.总体设计2.1需求概述从项目开发的角度来看,软件需求主要包括两大类型:功能性需求和非功能性需求。其中功能性需求是最主要的需求,是需要计算机系统解决的问题,也是对数据处理的要求。功能需求规定了系统必须执行的功能。非功能性需求是一些限制性要求,是对实际使用环境所做的要求,如性能要求、可靠性要求、安全性要求等。非功能性需求比功能性需求要求更严格,更不容易满足,因为如果非功能性需求不能满足的话,系统将无法运行。通讯录客户端的需求主要从功能性需求和非功能性需求两方面分析。2.1.1功能性需求通讯录应用作为一款基本应用,功能包括:(1)所有联系人所有联系人可显示通讯录中记录的所有联系人列表,对单个联系人可实现的功能有查看联系人详情、删除联系人与新建联系人。(2)联系人详情联系人详情显示的是联系人的详细信息,可对联系人进行相关操作。联系人详情界面应显示联系人具体信息,如姓名、照片、电话号码、,可进行的操作有编辑联系人信息和删除成员。(3)搜索通过本功能,用户只需输入联系人姓名、或姓名首字母、或电话号码,就可以检索到符合相应搜索条件的联系人,对之进行选择后可进行进一步操作。2.1.2非功能性需求非功能性需求对用户的操作体验起着重要作用,本应用对非功能性需求非常重视,对应用做了很多优化,旨在加强用户体验。非功能性需求主要有:(1)资源消耗iPhone手机的CPU和内存资源有限,用户使用过程中的耗电量是需要考虑的问题,因此,在应用使用过程中,需要尽可能减少对CPU和内存的使用,减少耗电量。(2)启动时间应用启动时间应尽可能短,加载时间太长不利于用户感受。(3)搜索时间和准确性搜索联系人时间应尽可能短,即时显示搜索结果,搜索结果应准确、排序应合理,(4)显示结果突出显示搜索代表的部分。(5)操作流畅性各类操作如删除联系人、编辑联系人等应没有太长时间的延迟,保证操作的流畅性。(6)可靠性通讯录的信息是用户最重要的信息之一,对通讯录信息的处理应经过用户的同意,不能擅自处理甚至分享用户的信息,造成用户的隐私的泄露。应用上线前需要进行专业的测试,消除重大bug,以免对用户通讯录信息造成破坏甚至丢失。主界面搜索模块新建联系人联系人信息编辑联系人主界面搜索模块新建联系人联系人信息编辑联系人程序描述3.1界面显示模块3.1.1功能界面是用户和系统交互的窗口,应用界面应基于手机的物理特性和软件的应用特征进行合理设计。本应用的界面主要包括显示所有联系人、显示联系人详细信息、编辑联系人信息、搜索界面,有些模块又能打开其他的界面。3.1.2功能描述(1)所有联系人界面所有联系人界面是应用启动首先进入的界面,也是用户使用最多的界面。a.所有联系人界面显示的是按联系人显示名称的拼音首字母进行分组的联系人列表,列表采用UITableview,分组索引为A~Z和,中文按照首字母顺序排序。b.每个UITableviewCell显示联系人名称、电话号码。c.由于每个uITableviewcell大小的限制,不可能显示太多的信息,为加入更多的功能,在每个TableviewCell中加入UISwipeGestureRecognizer滑动手势操作。在滑动每个cell时,会出现delete按钮,点击按钮可以删除联系人d.当点击右边的索引时,UITableview快速定位到点击索引对应的分组。e.点击界面上面的add按钮,会弹出添加联系信息界面。用户可以添加新的联系人。f.点击每个cell,会弹出联系人的详细信息界面,用于显示联系人的全部信息。(2)联系人详细信息界面a.在界面中显示用户的头像,姓名,联系电话,邮箱,住址等信息。点击用户信息可以返回所有联系人界面。B.点击右上角编辑按钮会弹出编辑用户信息界面,可以编辑、修改、删除联系人信息。(3)编辑联系人信息界面a.在该界面可以编辑联系人信息,包括头像、姓名、电话、邮箱、住址、指定铃声设置。b.点击头像框会弹出提示框选择图片,使用照相机或是取消,用户可以根据需要选择。c.用户可以在文本框中根据提示输入所需要的信息,点击铃声设置框可以选择铃声。d.电话、地址均为多值属性,用户点击加号可根据需要添加所需数量。e.点击左上取消按钮会取消编辑或新建联系人信息,点击右上done按钮会保存用户所输入的信息并返回上一层界面。搜索界面在所有联系人界面中,联系人列表上方会有搜索栏,当用户在此搜索信息时会弹出搜索界面,界面下方为键盘,在搜索栏中可以输入字母、汉字和数字,程序会根据输入的信息搜索联系人,并在下方显示联系人列表。用户点击联系人列表中的联系人会弹出联系人详细信息界面。3.1.3输入项目联系人数据库中所存储的数据发送界面切换消息3.1.4输出项目所有联系人界面:编辑联系人信息界面联系人详细信息界面搜索界面3.1.5算法AddressBookUI框架中提供了与联系人的显示、编辑、添加等相关的控制器,有四个:ABPeoplePickerNavigationController:显示整个通讯录并可以选择一个联系人的信息ABPersonViewController:显示一个具体联系人的信息ABNewPersonViewController:增加一个新的联系人ABUnknownPersonViewController:完善一个联系人的信息由于其中最主要的是ABPeoplePickerNavigationController,因此就具体的介绍一下通过程序显示整个通讯录并且可以选择其中某个联系人信息的步骤。(a)创建并初始化一个ABPeoplePickerNavigationController对象(b)设置其代理(delegate)(c)用presentModalViewController:animated:这个方法进行显示整个通讯录页面3.6程序逻辑-(void)viewDidLoad初始化主界面窗口,在窗口中创建搜索栏-(void)viewWillAppear:(BOOL)animated窗口出现时执行的方法,刷新数据-(void)viewDidDisappear:(BOOL)animated窗口消失时执行方法-(void)initData创建联系人类的对象,逐个读取联系人的数据,获取每个联系人姓名的首字母,并实现中文联系人首字母按照26个字母顺序排序,其他字符归于#组。-(NSInteger)numberOfSectionsInTableView:(UITableView*)aTableView将tableview分为27组-(NSArray*)sectionIndexTitlesForTableView:(UITableView*)aTableView在右侧显示引导栏,当用户点到其中字母是,回调到以该字母为首字母的分栏,显示该组联系人。-(NSInteger)tableView:(UITableView*)aTableViewnumberOfRowsInSection:(NSInteger)section用于显示排序完成后的联系人信息,以及在搜索完成后按照首字母排序显示联系人的信息。-(UITableViewCell*)tableView:(UITableView*)aTableViewcellForRowAtIndexPath:(NSIndexPath*)indexPath用于在tableview中每个cell中显示联系人的姓名以及电话。-(void)tableView:(UITableView*)aTableViewdidSelectRowAtIndexPath:(NSIndexPath*)indexPath当点击每个cell时,弹出该联系人的详细信息,当取消时返回主界面。-(void)tableView:(UITableView*)aTableViewcommitEditingStyle:(UITableViewCellEditingStyle)editingStyleforRowAtIndexPath:(NSIndexPath*)indexPath点击编辑按钮时发送消息,会弹出新建联系人界面。-(IBAction)addContactItemBtn:(id)sender点击新建联系人按钮时发送消息,弹出新建联系人界面。-(void)newPersonViewController:(ABNewPersonViewController*)newPersonViewControllerdidCompleteWithNewPerson:(ABRecordRef)person完成新建联系人时,返回主界面,并且重新读取联系人数据,刷新界面。3.1.7接口#import<UIKit/UIKit.h>#import<AddressBookUI/AddressBookUI.h>#import"ABContactsHelper.h"#import"ABContact.h"3.1.8存储分配3.1.9限制条件3.1.10测试要点3.2数据处理模块3.2.1功能数据处理模块对获取的联系人和群组信息进行处理,主要功能包括:所有联系人,新建联系人,编辑联系人,删除联系人。3.2.2功能描述(1)所有联系人联系人的信息包括联系人的ID号、姓、名、电话号码数组、照片、名字首字母组成的字符串、名字拼音、电子邮件数组、电话号码归属地,获取各项信息都有一个相应的函数,把获取联系人信息的所有函数封装到一起,并把获取的信息放到同一个类的相应字段中。当外部应用更改了通讯录数据库时,本应用需要获知并更新到最新的状态。iOSSDK提供了ABAddressBookRegisterExtemalChallgeCallback方法,注册了外部改变回调,就会得到通讯录数据库更改的消息,此时发送通知,相应的数据模块就可以重新获取联系人信息,然后相关的控制器就可以更新界面显示最新的数据。取消注册外部改变回调的方法是ABAddressBookUnregisterExtemalChangeCaLllback。(2)编辑联系人编辑联系人数据模块需要实现的功能有修改联系人姓名、修改电话号码、修改联系人邮箱地址。由于iOSSDK提供了修改联系人信息的ABPersonViewController,可以显示并修改联系人的信息,尽管SDK中提供了代码实现修改联系人信息的方法,但利用系统提供的ABViewController更加全面、安全,所以修改联系人信息主要利用此控制器进行。删除联系人删除联系人要实现删除某个联系人的全部信息,iOS提供了删除联系人的ABAddressBookRemoveRecord函数,通过此函数可以实现删除联系人的操作。3.2.3输入项目联系人数据库中数据用户输入信息界面切换消息用户手势3.2.4输出项目新建联系人编辑联系人删除联系人3.2.5算法AddressBook框架主要负责记录联系人每个属性信息,如果想在程序中操作通讯录,就必须导入AddressBook框架。下面介绍AddressBook框架中的两个基本数据类型。(1)ABAddressBookRefABAddressBookRef类似于一个管理者,管理着整个通讯录,并管理通讯录的通道。创建方法如下:ABAddressBookRefaddressbook=ABAddressBookCreate();(2)ABRecordRefABRecordRef中记录了通讯录中某个人或群组的所有属性,比如firstname、lastname、电话号码、邮箱、地址等。ABRecordRefperson=ABPersonCreate();每个ABRecordRef对象的属性分为单值属性和多值属性两种。单值属性指一些拥有唯一值的属性,多值属性是指一些拥有多个值的属性,读取多值属性需要通过ABMultiValueRef类中的方法来完成。下面代码是获取联系人的多个电话号码的方法://获取当前联系人有多少个电话号码CFindexcount=ABMultiValueGetCount(phonenumber);//通过索引获取每个电话号码的值CFStringReflabel=ABMuniValueCopyLaberAtIndex(phoneNumber,index);下面介绍AddressB00k框架中的一些常用方法:ABRecordCopyValue:从一个记录中获取某个属性对应的值。ABRecordCopyCompositeName:获取联系人完整的姓名。ABMultiValueCopyAtIndex:多值属性中,该方法获取某个位置的值。ABMultiValueCopyLabelAtIndex:返回对应位置处属性标识。ABMultiValueCopyArrayofAllValues:返回包含所有属性的数组。ABMultiValueGetCount:返回属性值的个数。ABRecordGetRecordID:获取记录的ID。ABRecordGetRecordType:返回记录的类型,是联系人还是群组。ABRecordCopyValue:获取属性的值。ABRecordSetValue:设置一个属性的值。ABRecordRemoveValue:删除记录中的属性值。3.2.6程序逻辑+(NSArray*)contactsArray从AddressBook里得到所有联系人+(NSDictionary*)hasContactsExistInAddressBookByPhone:(NSString*)phone以号码来检测通讯录内是否已包含该联系人+(ABContact*)byPhoneNumberAndLabelToGetContact:(NSString*)phonewithLabel:(NSString*)label通过号码得到该联系人+(ABContact*)byPhoneNumberAndNameToGetContact:(NSString*)namewithPhone:(NSString*)phone通过姓名与号码得到该联系人+(ABContact*)byNameToGetContact:(NSString*)name通过姓名得到该联系人+(NSArray*)getPhoneNumberAndPhoneLabelArray:(ABContact*)contact得到联系人的号码组与Label组+(NSArray*)getPhoneNumberAndPhoneLabelArrayFromABRecodID:(ABRecordRef)personwithABMultiValueIdentifier:(ABMultiValueIdentifier)identifierForValue得到联系人的号码组与Label组+(NSString*)getPhoneNumberFromDic:(NSDictionary*)Phonedic从所存的辞典中得到当前联系人的电话号码+(NSString*)getPhoneNameFromDic:(NSDictionary*)Phonedic从所存的辞典中得到当前联系人的姓名+(NSString*)getPhoneLabelFromDic:(NSDictionary*)Phonedic从所存的辞典中得到当前联系人的Label+(BOOL)addPhone:(ABContact*)contactphone:(NSString*)phone向当前联系人表中插入一条电话记录+(NSString*)getPhoneNumberFomat:(NSString*)phone号码显示格式+(BOOL)removeSelfFromAddressBook:(ABContact*)contactwithErrow:(NSError**)error从通讯录中删除联联人3.2.7接口#import<UIKit/UIKit.h>#import"ABContactsHelper.h"#import"ABContact.h"#import<AddressBook/AddressBook.h>3.2.8存储分配3.2.9限制条件3.2.10测试要点3.3搜索排序模块3.3.1功能通过汉字转化拼音能使得iOS按照汉字首字母顺序排序,方便用户找到联系人,搜索功能能使在用户的联系人过多时能够通过首字母或者电话查找到联系人。3.3.2功能描述IOS项目中会用到对通讯录的联系人或是会员按姓名为关键字排序,因为NSArray并不直接支持对汉字的排序,这就要通过将汉字转换成拼音完成按A~Z的排序,利用自定义键盘,可以快速搜索到需要查找的联系人。根据中文拼音的特点,在尽可能少输入查询词的情况下,查到用户想要的结果。3.3.3输入项目联系人数据库中数据用户输入搜索信息3.3.4输出项目排序:按数字搜索:按首字母搜索:3.3.5算法(1)排序因项目需要对通讯录中的联系人进行排序,需要对中文字符进行拼音转换。我们只是把中文转为拼音首字母而已,比如“王”转换为字母w就可以了。对此,我们找到了一个简便的解决办法:George用c语言写了一个pinyinFirstLetter函数用于获取中文拼音首字母。这个函数主要基于一个巨大的c语言char数组,把unicode字符集中所有中文的拼音首字母都映射进去了。pinyinFirstLetter基于这么一个简单的原理:我们知道,在ObjectiveC语言中,字符串是以unicode进行编码的。在unicode字符集中,汉字的编码范围为4E00到9FA5之间(即从第19968开始的20902个字符是中文简体字符)。我们把这些字符的拼音首字母按照顺序都存放在一个char数组中。当我们查找一个汉字的拼音首字母时,只需把这个汉字的unicode码(即char强制转换为int)减去19968,然后用这个数字作为索引去找char数组中存放的字母即可。(2)搜索匹配方式主要分两大类:拼音匹配和电话号码匹配。拼音匹配指搜索词与联系人名拼音之间的匹配,又可分下面几种情况。第一种,首字母匹配,比如王小二的拼音是wangxiaoer,首字母为WXE,如果用户输入WXE、WX,都与WXE是匹配的;。第二种,全拼匹配,由于每个汉字的拼音都是由首字母开始的,所以用户输入的第一个字母必须为首字母。第三种,混合匹配,这种匹配方式代表首字母和全拼两种匹配方式结合到一起。同样,混合匹配也必须满足第一个输入字母为首字母。电话号码匹配表示用户输入的数字与电话号码之间的匹配。比如电话号码1234567890,如果用户输入1234567890、123456、234567、67890,这些是与1234567890匹配的。因为它们是1234567890的一部分,而且是连续的;如果用户输入12356、23467、78912,这些不与1234

温馨提示

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

评论

0/150

提交评论