面向对象设计大作业——QQ联系人系统
1.功能调查与系统功能框架图 |
功能调查
<1>QQ联系人程序是我们在使用QQ-APP时最重要的基础功能之一。联系人包含了用户与外界的通讯信息,是现代信息交流中最普及的通讯方式信息之一。
<2>在我们常见的QQ联系人基本信息中,包括联系人的昵称、QQ号、性别和备注,当然还有生日、职业等等其他附属信息。
<3>在联系人系统的基础功能中,有我们最经常使用的联系人添加/删除功能,以及对联系人的备注等信息的编辑功能。
<4>QQ以面向群众作为主要使用对象。
<5>
通讯录在现代通讯信息的记录方式中有许多不同的类型
在我们最常用的手机通讯录中,大部分采用的是使用联系人的姓名首字母对联系人来进行分组和排序
而在QQ的旧版本中,采用的是用户自定义的分组方式,例如系统默认的我的好友、朋友、家人、同事等
在后来的版本更新中为了优化用户寻找对应联系人的体验,加入了在手机通讯录中使用的首字母分组排序方式
当然也有一些通讯录使用的是手机号码/ID的前三位数字、归属地等对联系人来进行排序,不过这些已经是现在少有的分组排序方式了。
系统功能框架图
QQ联系人系统最主要的两个构成部分便是联系人的存储和联系人信息的操作
在联系人的存储中包含了联系人的基本信息存储以及分组方式
在联系人信息的操作中包含了联系人的添加与删除,以及对联系人信息例如备注的编辑等
2.类的设计 |
UML类图
3.类说明 |
(1)Item类
主要属性:
(String)nickname:联系人的昵称
(String)id:联系人的QQID
(String)remarks:联系人的备注
主要方法:
boolean equals(Object obj):判断两个联系人是否重复(为同一联系人)
String toString():将联系人信息转化为字符串形式输出
(2)ContactSet类
主要属性:
(ArrayList
主要方法:
boolean add(Item i):增加联系人
boolean delete(Item i):删除联系人
void printContactset():输出用户的所有联系人信息
boolean editInformation(String id):编辑指定联系人的信息
(3)User类
主要属性:
(String)id:用户个人的QQID(即QQ账号)
(ContactSet)set:用户的通讯录
主要方法:
ContactSet getSet():读取用户的通讯录信息
void setSet(ContactSet set):导入一段通讯录信息到用户的通讯录中
(4)ShelfDao类
主要方法:
boolean add(Item item):增加联系人
boolean delete(Item item):删除联系人
void showShelf():展示集合中的联系人信息
Item readItem(String id):根据QQID读取指定的联系人信息
4.系统的包(package)的规划设计 |
package1:model(模型)
包含的类:
(1)Item:联系人对象
(2)ShelfDaoArrayImpl:联系人信息列表
(3)ShelfDaoArrayListImpl:联系人信息集合
(4)ContactSet:包含用户所存储的联系人的通讯录
package2:dao(dao接口)
包含的类:
(1)ShelfDao:Dao接口实现集合和列表的转换
package3:ui(系统界面)
包含的类:
(1)ShowUI:系统UI展示界面(GUI实现)
package4:contactset(通讯录主程序)
包含的类:
(1)Main:主函数,即系统运行的主要程序
5.特色 |
Dao模式
Dao接口实现了联系人数据在集合和列表中的转换,一个典型的DAO 模式主要由以下几部分组成。
(1)DAO接口: 把对数据库的所有操作定义成抽象方法,可以提供多种实现。
(2)DAO 实现类: 针对不同数据库给出DAO接口定义方法的具体实现。
(3)实体类:用于存放与传输对象数据。
(4)数据库连接和关闭工具类: 避免了数据库连接和关闭代码的重复使用,方便修改。
数据持久化
分类存储用户的联系人信息在contact(n)的文件夹的txt文件中,使用流对文件进行读取、写入和修改等操作。