1.功能调查与系统功能框架图
1.1 功能调查
本次面向对象设计大作业功能调查是基于QQ电脑版功能进行调查的,点开QQ首先需要输入用户名和密码进行登录。
在主界面我们可以看到分组以及分组内的联系人。
具体点开某个联系人的资料卡,我们可以查看当前联系人的各项基本信息。
1.2 系统功能框架图
2.类的设计:UML类图
2.1 MVC模式图
2.2 Model实体类之间的继承关系以及DAO接口的实现
2.3 主控流程类
3.类说明:说明主要类的属性和主要方法。
-
Person类,联系人
- 主要属性
- QQ:Integer ,QQ号
- nickname:String ,联系人昵称
- notes:String ,备注
- group:String ,所属分组
- sex:Gender ,性别
- age:Integer ,年龄
- birthday:Calendar ,出生年月日
- constelletion:Constelletion ,星座
- twelveAnimals:String ,生肖
- address:Address ,所在地
- 主要方法
- setConstelletion():void ,根据出生年月日来设置星座
- settwelveAnimals():void ,根据出生年月日来设置生肖
- 主要属性
-
ContactsDAOListImpl类,ContactsDAO接口List实现类,MVC模型类
- 主要属性
- groupList:List
,所有的分组。分组可能不止有一个,因而用List存储,下标对应personList中某个分组名。 - personList:List<List
>,所有的联系人。在List中嵌套List,外层List用于存储每个分组,内层List用于存储分组内的联系人,下标对应groupList中某个分组的联系人。
- groupList:List
- 主要方法
- add(Person p):boolean,添加联系人。
- delete(String QQ):boolean,删除联系人。
- search(String QQ):Person,根据QQ号查找对应的联系人。
- getGroups():List
,获取所有分组。 - getPersons(String group):List
,获取某个分组下的所有联系人。 - writeContacts(OutputStream out):boolean,将联系人写入文件。
- 主要属性
-
ContactsDAOMapImpl类,ContactsDAO接口Map实现类,MVC模型类
- 主要属性
- contactsMap:Map<String, List
>,分组与其内的联系人映射表。用一个Map可以很好地表示分组与其联系人的关系,keyset存放所有分组,valueset存放相应分组的所有联系人。
- contactsMap:Map<String, List
- 主要方法
- add(Person p):boolean,添加联系人。
- delete(String QQ):boolean,删除联系人。
- search(String QQ):Person,根据QQ号查找对应的联系人。
- getGroups():List
,获取所有分组。 - getPersons(String group):List
,获取某个分组下的所有联系人。 - writeContacts(OutputStream out):boolean,将联系人写入文件。
- 主要属性
-
PersonView类,MVC视图类
- 主要属性
用于视图展示,无属性。 - 主要方法
- printPerson(Person p):void,输出某个联系人的详细信息。
- 主要属性
-
ContactsController类,MVC控制类
- 主要属性
- contacts:ContactsDAO,联系人列表。
- personView:PersonView,展示视图。
- 主要方法
- addPerson(Person p):boolean,调用contacts添加联系人。
- delete(String QQ):boolean,调用contacts删除联系人。
- search(String QQ):Person,调用contacts查找联系人。
- writeContacts(OutputStream out):boolean,调用contacts将联系人写入文件。
- printPeron(String QQ):void,调用personView展示联系人详细信息。
- 主要属性
-
Log类,登录注册类
- 主要属性
用于登录注册,无属性。 - 主要方法
- login(String name, String pwd):User,登录。
- logon(String name, String pwd):boolean,注册。
- 主要属性
4.系统的包(package)的规划设计
5.特色:
5.1 是否使用DAO模式?带来了什么好处?
是,使用了DAO模式,使用DAO模式的好处有
- 隔离了数据访问代码和业务逻辑代码。业务逻辑代码直接调用DAO方法即可。分工明确,数据访问层代码变化不影响业务逻辑代码,这符合单一职能原则,降低了藕合性,提高了可复用性。
- 能够很方便地在两种或者两种以上的数据存储方式中快速切换。当需要添加新的数据存储方式的时候,只需要实现一个新的DAO接口实现类即可,而无需重写代码。降低了代码的藕合性,提高了代码扩展性和系统的可移植性。
5.2 是否使用MVC模式?哪里体验?
是,使用了MVC模式,在此次设计中将ContactsDAO(及其实现类)作为Model,将PersonView作为View,将ContactsController作为Controller,ContactsController将PersonView中更新得到的数据传递给ContactsDAO(及其实现类),ContactsDAO(及其实现类)更新内部的数据之后反馈给PersonView,更新视图(详细图解见2.1 MVC模式图),将ui界面和内部数据处理分割开来,有利于分层开发。
5.3 是否进行数据持久化(数据存储)?准备使用什么方案?
是,将要进行数据持久化(数据存储),准备将用户信息(用户名和密码)和各个用户的联系人列表存储在txt文本文件中,程序开始运行时读取用户信息文件进行登录,成功登录之后,读取该用户的联系人列表文件创建联系人列表;程序结束时,将更新后的联系人列表写入到登录用户对应的联系人列表文件中。
5.4 是否使用阿里巴巴代码规范扫描插件对项目代码进行扫描?
是,已经使用阿里巴巴代码规范扫描插件对项目代码进行扫描。
初次扫描
第一次修正后再次扫描
第二次修正后扫描
5.5 是否使用Git管理代码?
是,已使用Git管理代码,代码仓库地址:QQ的联系人功能