zoukankan      html  css  js  c++  java
  • 面向对象设计大作业第二阶段:QQ的“联系人”功能

    1.功能调查与系统功能框架图

    1.1 功能调查

    本次面向对象设计大作业功能调查是基于QQ电脑版功能进行调查的,点开QQ首先需要输入用户名和密码进行登录

    在主界面我们可以看到分组以及分组内的联系人

    具体点开某个联系人的资料卡,我们可以查看当前联系人的各项基本信息

    1.2 系统功能框架图


    2.类的设计:UML类图

    2.1 MVC模式图

    2.2 Model实体类之间的继承关系以及DAO接口的实现

    2.3 主控流程类


    3.类说明:说明主要类的属性和主要方法。

    1. 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 ,根据出生年月日来设置生肖
    2. ContactsDAOListImpl类,ContactsDAO接口List实现类,MVC模型类

      • 主要属性
        • groupList:List,所有的分组。分组可能不止有一个,因而用List存储,下标对应personList中某个分组名。
        • personList:List<List>,所有的联系人。在List中嵌套List,外层List用于存储每个分组,内层List用于存储分组内的联系人,下标对应groupList中某个分组的联系人。
      • 主要方法
        • add(Person p):boolean,添加联系人。
        • delete(String QQ):boolean,删除联系人。
        • search(String QQ):Person,根据QQ号查找对应的联系人。
        • getGroups():List,获取所有分组。
        • getPersons(String group):List,获取某个分组下的所有联系人。
        • writeContacts(OutputStream out):boolean,将联系人写入文件。
    3. ContactsDAOMapImpl类,ContactsDAO接口Map实现类,MVC模型类

      • 主要属性
        • contactsMap:Map<String, List>,分组与其内的联系人映射表。用一个Map可以很好地表示分组与其联系人的关系,keyset存放所有分组,valueset存放相应分组的所有联系人。
      • 主要方法
        • add(Person p):boolean,添加联系人。
        • delete(String QQ):boolean,删除联系人。
        • search(String QQ):Person,根据QQ号查找对应的联系人。
        • getGroups():List,获取所有分组。
        • getPersons(String group):List,获取某个分组下的所有联系人。
        • writeContacts(OutputStream out):boolean,将联系人写入文件。
    4. PersonView类,MVC视图类

      • 主要属性
        用于视图展示,无属性。
      • 主要方法
        • printPerson(Person p):void,输出某个联系人的详细信息。
    5. 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展示联系人详细信息。
    6. 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的联系人功能


  • 相关阅读:
    [Docker]一键部署gitlab中文版
    [Docker]python 2.7.5 docker-compose安装
    [CentOS7]pip安装
    快速傅里叶变换FFT
    HDU 4734 f(x)
    DP
    HDU 3555 Bomb
    HDU 5898 odd-even number
    将文本拷贝到剪贴板
    数论分块
  • 原文地址:https://www.cnblogs.com/zzhmyblog/p/14102583.html
Copyright © 2011-2022 走看看