《2022年PhoneMe软件设计文档 .pdf》由会员分享,可在线阅读,更多相关《2022年PhoneMe软件设计文档 .pdf(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、PhoneMe 软件设计文档刘渊(2006011317) 李军(2006011320) 丁聪(2006011305) 2009-4-18 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 2 页 共 27 页修订记录版本号修订人日期备注1.0 丁聪、刘渊2009.4.11 原稿1.1 李军2009.4.12 修订1.2 丁聪2009.4.14 修订1.3 刘渊2009.4.15 修订1.4 丁聪2
2、009.4.17 排版1.5 丁聪2009-4-18 根据修改的 UML 修改文档1.6 丁聪2009-4-21 修正 UML 中的错误、更新数据库1.7 刘渊2009-5-10 更改部分类图,添加设计模式介绍名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 3 页 共 27 页目录1. 引言 . 51.1 编写目的 . 51.2 项目背景 . 51.3 参考资料 . 52. 用例图 . 62.1
3、 整体用例图 . 62.2 联系人信息管理用例图. 62.3 文件操作用例图. 72.4 标签管理用例图. 72.5 查询用例图 . 72.6 人立方用例图. 83. 序列图 . 93.1 软件启动 . 93.2 联系人管理 . 93.2.1建立新联系人. 93.2.2修改联系人信息. 103.2.3显示联系人信息. 103.2.4删除联系人 . 113.3 文件操作 . 113.3.1导出到文件 . 113.3.2从文件导入 . 123.4 标签管理 . 123.4.1增加普通标签. 123.4.2修改普通标签. 133.4.3删除普通标签. 133.4.4修改联系人普通标签. 133.4.
4、5修改联系人关系标签. 143.4.6批量应用普通标签. 153.4.7批量删除联系人普通标签. 153.5 查询 . 153.5.1通过关键字查询. 153.5.2通过普通标签查询. 163.5.3通过关系标签查询. 163.5.4通过生日查询. 173.6 人立方 . 173.6.1人物搜索 . 173.6.2六度搜索 . 183.7 生日提醒 . 184. 类关系图 . 204.1 top和 GUI包 . 204.2 contactInfo包 . 20名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - -
5、 - - - - 第 3 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 4 页 共 27 页4.3 labels包. 214.4 renlifang包 . 214.5 dataStructure包. 214.6 myexceptions包. 224.7 database包 . 224.8 search包. 234.9 pwd 包. 234.10 inout包. 235. 设计模式介绍. 255.1 Singleton模式 . 255.2 Facade模式 . 265.3 Template和 Strategy模式 . 266. 本地数据存储策略. 276.
6、1 存储方式 . 276.2 存储格式 . 27名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 5 页 共 27 页1. 引言1.1 编写目的本文档将对 PhoneMe联系人管理软件的软件功能进行详细描述,本文档的读者是项目策划、设计和评审人员。1.2 项目背景本项目作为软件工程课程的训练项目提出, 在基本的设计实现基础上,将不断对已有的设计进行进一步的修改和完善,最终完成整个软件开发过程。本次
7、项目的旨在是通过不同软件工程设计方法与技术的实践,体验软件设计技术的历史演化,了解和掌握各种技术、工具平台的特点与局限性,体会协同开发方式。第 1 阶段的主要目的是通过对项目需求的分析和理解,通过面向对象的设计方式完成项目前期的准备工作。在第2 阶段中,我们会根据既定需求,完善设计模式。第 3 阶段在设计文档和需求分析的指导下,完成PhoneMe原型系统的开发,并完成整个开发流程的测试报告(第 4 阶段)。通过 PhoneMe联系人管理软件的设计开放,了解软件文档的编写原则,训练掌握软件各类文档写作的技巧,同时提高和增加java 开发的能力和经验。1.3 参考资料软件工程课堂讲授资料和课件ja
8、va技术及其应用软件工程实践者的研究方法PhoneMe软件需求文档名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 6 页 共 27 页2. 用例图2.1 整体用例图2.2 联系人信息管理用例图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 27 页 - - - - - -
9、- - - PhoneMe 软件需求文档第 7 页 共 27 页2.3 文件操作用例图2.4 标签管理用例图2.5 查询用例图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 8 页 共 27 页2.6 人立方用例图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 27 页 -
10、 - - - - - - - - PhoneMe 软件需求文档第 9 页 共 27 页3. 序列图3.1 软件启动 : PhoneMe : PWDManager : DataBase : InputPWD:LabelView:ContactsView:InfomationView : Actor1 : start2 : createUI()3 : initPWD()4 : createPWDManager()5 : pwdManager6 : showInput()7 : pwd8 : matchPWD()9 : pwdCorrect10 : createCManager()11 : succ
11、ess12 : createLManager()13 : success14 : showLabels()15 : showContacts()16 : showLabels()3.2 联系人管理3.2.1 建立新联系人名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 10 页 共 27 页:PhoneMe:InformationView:ContactsView:ToolBar:Contacts
12、Manager:LabelManager:Contact : Actor1 : createNewContact2 : createNewContact()3 : getState()4 : NoInputing5 : showNewContact()6 : true7 : clearChoosed()8 : saveNewContact()9 : InputContactAndSave10 : createContact()11 : succeed12 : addContact()13 : updateNLabel()14 : newContactAdded()15 : showContac
13、ts()16 : setChoosed()17 : showContactInfo()3.2.2 修改联系人信息:PhoneMe:MyToolBar:ContactsView:InformationView:ContactsManager : Actor1 : changeContact2 : changeContact()3 : getChoosed()4 : choosedContact5 : getState()6 : NoInputing7 : showChange()8 : InputAndSave9 : updateContact()10 : updateContact()11 :
14、 succeed12 : showContactInfo()3.2.3 显示联系人信息名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 11 页 共 27 页:ContactsView:PhoneMe:InformationView : Actor1 : ChooseAContact2 : showContact()3 : showContactInfo()3.2.4 删除联系人:MyToolB
15、ar:PhoneMe:ContactsManager:ContactView:InformationView:LabelView : Actor1 : delContacts2 : delContacts()3 : getChoosed()4 : choosedContacts5 : getState()6 : notInputing7 : delContact()8 : succeed9 : showContacts()10 : getLabelKind()11 : labelkind12 : getLabelChoosed()13 : labelChoosed14 : showLabel(
16、)3.3 文件操作3.3.1 导出到文件名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 12 页 共 27 页:MyMenuBar:PhoneMe:InOutFile : Actor1 : exportToFile2 : out2File()3 : out2File()3.3.2 从文件导入:MyMenuBar:PhoneMe:InOutFile:ContactsManager:DataBas
17、e:LabelManager:Notification : Actor1 : Import2 : showChooseNotify()3 : yes4 : inFromFile()5 : inFromFile()6 : creataNewDataFile()7 : setContacts()8 : setNLabels()3.4 标签管理3.4.1 增加普通标签名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 27 页 - - - - - - - - - PhoneMe
18、软件需求文档第 13 页 共 27 页:MyToolBar:PhoneMe:LabelManager:DataBase:InformationView:LabelView:ContactsView:InputNLabelName : Actor1 : createANewNLabel2 : addNLabel()3 : getState()4 : notInputing5 : showInput()6 : newLabelName7 : addNLabel()8 : addNLabel()9 : success10 : success11 : showLabels()12 : setChoos
19、ed()13 : showContacts()14 : showLabel()3.4.2 修改普通标签:MyToolBar:PhoneMe:LabelView:InformationView:InNLabelNameView:LabelManager:ContactsView : Actor1 : changeNabelName2 : changeNLabelName()3 : getKind()4 : nLabelChoosed5 : getChoosed()6 : choosedNLabel7 : getState()8 : noInputing9 : showInput()10 : ne
20、wLabelName11 : updateNLabel()12 : showLabels()13 : showContacts()14 : showLabel()3.4.3 删除普通标签:MyToolBar:PhoneMe:LabelView:InformationView:LabelManager:DataBase:ContactsView : Actor1 : delNLabel2 : delNLabel()3 : getKind()4 : NLabelChoosed5 : getState()6 : NoInputing7 : getChoosed()8 : delNLabel()9 :
21、 delNLabel()10 : showLabels()11 : showContacts()12 : showLabel()3.4.4 修改联系人普通标签名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 14 页 共 27 页:ContactsView:ChangeNLabelView : Actor1 : changeNLabe2 : show()3 : newLabels3.4.5 修改
22、联系人关系标签:ContactsView:ChangeRLabelView : Actor1 : changeRLabel2 : show()3 : newRLabels名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 15 页 共 27 页3.4.6 批量应用普通标签:MyToolBar:PhoneMe:ContactsView:InformationView:ChooseNLabelView
23、:ContactsManager : Actor1 : useNLabelInBatch2 : useNLabelInBatch()3 : getChoosed()4 : choosedContacts5 : getState()6 : NoInputing7 : show()8 : Choosed9 : useNLabelInBatch()10 : success3.4.7 批量删除联系人普通标签:MyToolBar:PhoneMe:LabelView:ContactsManager:ContactsView:InformationView : Actor1 : delContactNLab
24、elInBatch2 : delNLabelInBatch()3 : getLabelKind()4 : NormalLabelChoosed5 : getState()6 : noInputing7 : getLabelChoosed()8 : choosed9 : delNLabelInBatch()10 : success11 : showContacts()12 : showLabel()3.5 查询3.5.1 通过关键字查询名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1
25、5 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 16 页 共 27 页:SearchBar:PhoneMe:InformationView:SearchManager:LabelView:ContactsView : Actor1 : askForSearch2 : Search()3 : getState()4 : NoInputing5 : searchContacts()6 : result7 : addSearchLabel()8 : showContacts()9 : showLabel()3.5.2 通过普通标签查询:LabelView:P
26、honeMe:SearchManager:InformationView:ContactsView : Actor1 : clickALabel2 : LabelChoosed()3 : getState()4 : NoInputing5 : delSearchLabel()6 : Search()7 : result8 : showContacts()9 : showLabel()3.5.3 通过关系标签查询名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 27 页 -
27、 - - - - - - - - PhoneMe 软件需求文档第 17 页 共 27 页:InformationView:PhoneMe:SearchManager:ContactsView:LabelView : Actor1 : selectARelation2 : search()3 : searchContacts()4 : result5 : showContacts()6 : addSearchLabel()3.5.4 通过生日查询:LabelView:PhoneMe:InformationView:SearchManager:InputDay:ContactView : Acto
28、r1 : searchBirthday2 : search()3 : getState()4 : NoIntputing5 : showInput()6 : input7 : search()8 : result9 : showContacts()10 : showLabel()3.6 人立方3.6.1 人物搜索名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 18 页 共 27 页:RenVi
29、ew:PhoneMe:RenSearch : Actor1 : InputAName2 : search1Ren()3 : search1Ren()4 : results5 : showResults()3.6.2 六度搜索:RenView:PhoneMe:RenSearch : Actor1 : InputTwoName2 : Search2Ren()3 : search2Ren()4 : results5 : showResults()3.7 生日提醒名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - -
30、- - - - 第 18 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 19 页 共 27 页:PhoneMe:SearchManager:Notification:LabelView:ContactsView:InformationView : Actorstartinit()search()resultsshowConfirmation()addSearchLabel()showContacts()showLabel()名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 -
31、- - - - - - 第 19 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 20 页 共 27 页4. 类关系图4.1 top和 GUI包topGUIPhoneMe-pm: PhoneMe+get(): PhoneMeMyMenuBarMyToolBarContactsViewInformationViewLabelViewRenViewInputPWDNotificationInN LabeN amelViewChangeN LabelViewChangeRLabelViewChooseN LabelViewSearchBarrenlifangLi
32、neModuleModulePaintPanelRenSearchBarRoundModule11MyFrame-mf: MyFrame = null-lv: LabelView-cv: ContactsView-mm: MyMenuBar-mt: MyToolBar-iv: InformationView-sb: SearchBar-rv: RenView-jtp: JTabbedPane-MyFrame()+get(): MyFrame+getSearchBar(): SearchBar+getInfoView(): InformationView+getContactsView(): C
33、ontactsView+getLabelView(): LabelView+getRenView(): RenView111111114.2 contactInfo包名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 21 页 共 27 页contactsInfoContactMyCManager0.*ContactsManager4.3 labels包labelsNormalLabelRelat
34、ionLabelMyManager0.*LabelManager4.4 renlifang包renlifangResultItemMyRenManagerResultListRenManager4.5 dataStructure包名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 22 页 共 27 页dataStructureStringComparator-comp: StringCompar
35、ator+get(): StringComparatorContactComparator-comp: ContactComparator+get(): ContactComparatorRLabelComparator-comp: RLabelComparator+get(): RLabelComparatorSortedSortedList-comp: Comparator4.6 myexceptions包myexceptionsNameTooLongMalformedTeleNumMyExceptionMalformedEmailAddrMalformedIMAddrMalformedB
36、irthdayMalformedURLContactAlreadyExistFileN otFoundFileFormatErrorFileFormatWarningMustHaveANameNLabelAlreadyExist4.7 database包名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 23 页 共 27 页databaseMyDBDataBaseDESAlgorithm4.8
37、search包searchMySManagerSearchManager4.9 pwd 包pwdMyPWDManager-pwd: StringPWDManager4.10 inout包名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 24 页 共 27 页inoutMyInOutFile-out2Xls(): boolean-out2VCard(): boolean-inFromXls():
38、int-inFromVCard(): intInOutFile名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 25 页 共 27 页5. 设计模式介绍5.1 Singleton模式Singleton模式能够让一个类只有一个实例,从而节省内存。 同时,我更喜欢的是它能够很容易的获得一个类的实例。工程中使用 Singleton模式的类有ContactComparator ,NLabelCompar
39、ator,RLabelComparator,StringComparator,MyFrame 和 PhoneMe(参看“ 4.5 dataStructure包”和“ 4.1 TOP和 GUI 包” ) ,都采用的是 lazy initialization ,为的是只在第一次获得实例时才创建。每个类的都有一个静态函数get 用于获得类实例。ContactComparator ,NLabelComparator ,RLabelComparator和StringComparator 都是 Comparator 的子类,用于进行相关数据类型的比较,由于它仅仅是提供一个比较函数,所以全局只需要一个实例就
40、行了。同时,由于在 SortedList 上排序要经常用到Comparator,使用 Singleton 模式也能使获得Comparator变得简单。后端PhoneMeMyFrameGUI 其它部分图 1 类结构图如图 1 所示,PhoneMe完成 GUI 和后端的全局控制,使用Singleton 模式一方面是由于 PhoneMe全局只需要一个实例,但更重要的是,GUI 其他部分中的类需要经常调用PhoneMe中的函数,一方面可以考虑给每个GUI 部分一个PhoneMe 成员,但这将让程序结构变得复杂(至少是构造GUI 变复杂了) ,同名师资料总结 - - -精品资料欢迎下载 - - - -
41、- - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 26 页 共 27 页时也很容易出现错误(例如出现多个PhoneMe 实例) 。另一方面,可以考虑通过 MyFrame 调用 PhoneMe 的函数,这就意味着对PhoneMe 的每个函数,MyFrame 基本都需要一个接口,这也会使程序变得凌乱不堪。使用Singleton模式就可以解决这个问题,当GUI 要使用 PhoneMe 的函数的时候,只需调用PhoneMe的 get 函数就可以得到全局Phon
42、eMe实例。MyFrame 使用 Singleton 模式主要是考虑到许多弹窗需要父容器,总是传一个父容器参数是麻烦的。 使用 Singleton 模式能够在弹窗时很容易获得父容器。5.2 Facade 模式在设计 PhoneMe 与 GUI 的交互时,为了能够把PhoneMe完全从 GUI剥离出来,就需要有一个类完成GUI 的创建工作。这就是 GUI 的门面 MyFrame。在创建 GUI 时,PhoneMe 只需调用MyFrame 的构造函数就可以了。同时,PhoneMe要对 GUI 各个部分进行操作,让PhoneMe保存每个 GUI 部分的实例是十分繁琐的,而MyFrame 提供各种 g
43、et 操作,当 PhoneMe需要 GUI 某个部分时就可以直接从MyFrame 里拿就行了(参看图1 和“4.1 TOP和 GUI 包” ) 。5.3 Template和 Strategy模式工程中需要一个排序的表,用以存放联系人,普通标签,关系标签,自然而然, 想到了用 Template模式, 这大大简化了我们的实现。 Sorted和 SortedList实现了 Template模式 (参看“4.5 dataStructure包” ) , 允许的模板类型为Contact,NormalLabel,RelationLabel。SortedList 中有一个 Comparator 成员,在构造的
44、时候要求提供,根据不同的Comparator,就可以实现不同的排序策略,这正是Strategy模式的应用。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 26 页,共 27 页 - - - - - - - - - PhoneMe 软件需求文档第 27 页 共 27 页6. 本地数据存储策略6.1 存储方式我们使用本地文件对用户密码和数据进行加密存储。这样做跟其他可能存储方式的比较:如果使用数据库存放,那么只有两种方式,本地数据库和远程数据库。采取本地数据库的方式存储,必然要求用户在客
45、户机上安装数据库软件,会给用户造成不必要的麻烦;如果采取远程数据库的话会要求用户在使用该软件的时候必须联网,这样也会给用户带来使用上的不便。所以我们采取使用本地文件的方式进行存储。但是使用本地文件存储又带来了一个数据安全性的问题,所以我们对要存储的数据进行加密后存储。采用javax.crypto 包中的可逆加密算法DES 对联系人和标签进行加密和解密。采用md5 的方式对用户密码进行加密。6.2 存储格式使用三个文本文件,其中文件contact.db用来存储联系人信息, psw.db用来存储用户密码, label.db用来存储标签信息。contact.db 文件采取每行存储一个contact 信息的方式存储。存储的每个contact信息均为对 contact 类序列化经过 DES 算法加密的结果。程序中所有关于数据存储的操作均以contact为基本单位, 即对于文件来说, 都是以行作为单位进行添加、修改和删除。psw.db存储经过 md5 加密以后的用户密码。label.db 存储标签信息,采用DES 算法加密。每行存储一个序列化并加密以后的 label信息。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 27 页,共 27 页 - - - - - - - - -