实验九 团队作业6:团队项目编码

项目 内容
课程班级博客链接 2022年春软件工程课程班(2019级计算机科学与技术)
团队名称 Typhoon-Team
团队成员分工描述 1. 张圆圆:主要负责定义类中服务参数和具体实现逻辑,调整类的层次关系和关联关系,负责项目中后端逻辑实现及前后端的对接
2. 孙得弘:博客编写以及编码环境准备
3. 姜婷:背包论坛编译系统设计说明书1.2;博客撰写;细化分析系统设计模型;精化类的属性和操作;详细定义类中服务参数和具体实现逻辑
作业要求链接 实验九 团队作业6:团队项目编码
团队的课程学习目标 掌握软件编码实现的工程要求。
这个作业在哪些方面帮助团队实现学习目标 1. 了解了软件编码实现的工程要求
2.掌握了软件开发过程
团队博客链接 Typhoon-Team
团队项目Github仓库地址链接 Easscy

任务1:完善项目系统设计说明书

1.1 细化分析系统设计模型

背包问题知识社区主要分为前台系统和后台系统两部分。对于这个典型的社区管理系统,尤其是对像论坛这样的数据流量特别大的网络管理系统,必须要满足使用方便、操作灵活的设计需求。本系统在设计时应该满足以下几个目标

1.采用人机对话的操作方式,界面设计美观友好,信息查看灵活、方便、快捷、准确,数据存储安全可靠。
2.全面展示系统所有分类的博客,并进行分页显示。
3.给用户提供一个方便快捷的主题信息查看功能。
4.实现在线发表博客。
5.提供登录模块,主要用于管理员登录系统和发表博客时留下发表者的信息。
6.用户随时都可以查看自己发表的博客。
7.对用户输入的数据,系统进行严格的数据检验,尽可能排除人为错误。
8.系统运行稳定、安全可靠,并最大限度实现易维护性和易操作性。


图1.1-1 系统HIPO图
细化分析系统设计模型 为此我们对整个系统内容做如下内容细化:
  1. 用户登录界面:当用户访问正确的网址时,进入用户登录界面。该界面包含用户名输入栏和密码输入栏以便接受用户的输入,还应该有“登录”按钮使得用户可以提交用户名和密码和“注册”按钮。通过可视化的方式选择所需要的控件,将其控件添加在登录界面。登录界面主要采用线性布局LinearLayout,设置了一个Imageview控件为用户的头像,设置文本框用于提示用户输入账号和密码等信息,并设置了两个按钮用于用户登录社区主界面和退出社区。

  2. 注册界面:用户点击用户登录界面的“注册”按钮后可以进入注册界面。该界面应提供“用户名”、“昵称”、“密码”、“确认密码”栏供用户输入,还应该提供“提交”按钮让用户提交用户信息并完成注册。建立数据库Potplayer,并在其中建立了一张User表来存放用户的信息,当用户注册信息时,首先根据界面提示信息输入个人信息,输入完成后,点击注册按钮,在注册按钮的监听事件中,首先使用getText()方法获取界面输入的信息存放在相应的变量中,接下来将账号信息与数据库中账号信息进行比对,判断账号是否已存在,存在则无法注册;若不存在,则使用insertData方法将账号信息添加至数据库中,此时注册成功,就可跳转至登录界面进行登录操作。

  3. 主界面:用户提供正确的用户名和密码后,跳转到该界面。该界面根据问题库中问题的热度,问题的时间等信息为用户推送相关的问题。并且需要提供搜索问题的输入栏和“个人中心”的跳转按钮。在背包问题知识社区主界面,主要采用线性布局LinearLayout,在界面的标题部分添加了一个Textview控件用于显示在登录界面所获取的账号信息,添加列表ListView控件用于存放博客信息记录,并在主界面添加了图标图片,对其设置监听事件,实现了返回,修改背景风格,添加信息记录等功能。

  4. 查看博客界面:用户在看到问题后可以点击该问题便可跳转到该界面,在该界面展示问题的详细信息,并且需要提供给用户“点赞”按钮和评论栏。

  5. 个人中心界面:用户在主界面点击个人中心跳转按钮可以跳转到该界面。该界面显示用户的昵称、签名、称号、提问数、回答数等基本信息,并且提供给用户查看“我的回答”、“我的提问”、“创建问题”、“帮助\提示”和“退出”等按钮方便用户进行相应操作。

  6. 创建博客问题界面:用户在个人中心界面点击“创建问题”按钮可以跳转到该界面。该界面提供给用户问题标题栏、设置为问题箱选项、问题标签选项、问题描述栏以及“发布”按钮。用户点击“发布”按钮后的问题信息会及时存储到问题信息库。

  7. 习题库内容细化

  • 业务知识库
    系统提供问答管理功能,可对工程认证业务知识库进行问题录入、问答导入、问答打出、同时对业务知识进行分类,支持单个录入、批量导入、快速添加业务知识问答,每个问答包括标准文法、相似问法、答案,机器人会根据问答知识库来回答用户的提问。- 问答设置
    添加问答时先选择问答分类,设置问答标准问法,相似问法、关联问题、标准答案。未知问答的状态,启用或停用。还可通过固定模板,对问题进行批量导入。
  • 问答逻辑设置
    系统设计自动默认推送的问题列表的层级逻辑。
  • 业务知识问答
    业务知识问答分为问题列表推送,精准回答、模糊匹配问答、模糊引导问答、智能学习及未知学习;
    1.问题列表推送
    页面自动推送常见问题,又用户自行选择,引导用户咨询和增加答题精准度,用户打开问答窗口时,默认推送该列表,按照问题点击次数降序排列;
    2.精准回答
    客户提问能精准匹配业务知识库的问答知识,机器人将根据问答学习提供准确答案。
    3.模糊匹配问答
    用户提问与业务知识库有语法顺序、名词、动词、形容词等加入情况,机器人通过语义理解分析,匹配业务知识,并给出准确回答。
    4.模糊引导问答
    用户提问的问题比较模糊,机器人根据语义分析理解匹配到多个问题不能准确回答,会推送给用户一个建议问题列表,客户可根据需求选择问题,机器人将推送选择问题的回答。
    5.智能学习
    当用户问的问题比较模糊,机器人不能准确回答,会给客户一个建议问题列表,当客户第一次选择问答的时候,机器人会自动将此问题推荐为用户选择问题的相似问法,管理员可在后台操作是否进行关联。
    6.未知学习
    机器人不能回答的问题,系统自动记录至未知学习列表,同时记录该问题的询问次数,管理员可根据问题提问频率看是否添加到知识库中,也可忽略或关联到其他问题中。
  • 报表分析
    1.热点问题报表
    热点问题统计实现对用户常问问题进行统计排名,系统自动对用户常问50问题进行统计排名,管理员可选择不同问题分类进行统计
    2.采纳率统计
    用户收到机器人反馈的问题后可选择采纳或不采纳,系统将统计不同答案的采纳率以便修改知识库。

1.2 精化类的属性和操作,详细定义类中服务参数和具体实现逻辑

1.2.1 用户类操作

用户类属性如下图所示:


图1.2.1-1 用户类属性

用户进入社区如账号已存在直接登录,账号不存在进行新用户注册。已有帐号若忘记密码跳转到ChangePwdActivity修改密码->输入账号,联系方式,与数据库中信息匹配->重置密码->重新跳转至Login界面进行登录,否则通过密码登陆方式登录成功。新用户注册需跳转至RegisterActivity进行用户注册,需输入注册信息,判断输入内容是否合法,从而注册成功。


图1.2.1-2 用户操作

1.2.2 习题类操作

习题类属性如下图所示:


图1.2.2-1 习题类属性
用户通过问题列表推送或者背包问题知识库选择感兴趣的问题内容进行习题问答,通过个人理解作答所选问题,对所作答内容确定后进行提交,此时后台通过判断是否存在标准答案进行答案批改判断。若答案不存在则由两种方式进行判断,一种是模糊匹配问答另一种是未知答案开放性回答,从而对问题答案做出判断。

图1.2.2-2 习题类操作

1.2.3博客类操作

博客类属性如下图所示:


图1.2.3-1 博客类属性
用户选择发布博客,进而跳转至RecordActivity界面进行博客创建,用户对所需发布的内容进行输入,输入后点击保存,后台获取所输入内容信息上传保存至数据库,接着从RecordActivity界面跳转至主界面,最RecordActivity界面所保存信息通过数据回流在主界面显示。

图1.2.3-2 博客操作

1.3 调整类的层次关系和关联关系

  • 界面后端逻辑实现类

图1.3-1 界面后端逻辑实现关系
  • 数据适配器

图1.3-2 数据适配器关系
  • 实体类

图1.3-3 实体类关系
  • 数据库逻辑实现

图1.3-4 数据库逻辑关系
  • 工具类

图1.3-5 工具类关系

1.4 定义软件数据库表结构

  • 用户表
字段名 数据类型 字段长度 是否主键 是否为空 备注
user_id int 15 用户id
user_name varchar 50 用户名
user_password varchar 50 密码
user_sex varchar 2 性别
user_face varchar 255 头像
user_phone varchar 255 联系电话
user_email varchar 200 电子邮箱
user_from varchar 200 来自何处
isAdmin int 2 是否为管理员
  • 文章帖表
字段名 数据类型 字段长度 是否主键 是否为空 备注
Fid int 10 发帖 id
Title varchar 255 帖子标题
content varchar 255 帖子内容
create_time datetime 10 发帖时间
user_id int 50 用户 id
  • 评论表
字段名 数据类型 字段长度 是否主键 是否为空 备注
reply_id int 10 回帖 id
reply_content varchar 255 回帖内容
reply_time datetime 回帖时间
user_id int 11 用户 id
fid int 11 发帖 id

1.5 编制《背包问题知识社区系统软件设计说明书1.2》发布在团队项目Github仓库。


图1.5-1 上传《背包问题知识社区系统软件设计说明书1.2》到项目仓库截图

任务2:团队软件项目编码准备

2.1 搭建并配置软件开发环境

  • 安装Android studio,点击“next”进入下一步。

  • 最新版的Android Studio在这一步并没有sdk,需要稍后再进行安装,这一步只需全部打勾之后点击“next”。

  • 直接点击“Install”。

  • 安装完成之后,点击“Next”。

  • 点击“Finish”,并运行Android Studio.

  • 进入欢迎界面,直接点击“Next”。

  • 等待sdk安装完成,直接点击“Finish”。

  • 正式进入软件界面,至此开发环境搭建完成

2.2 数据库环境介绍

Android数据存储的方式分为:文件存储、SharedPreferences、SQLite数据库,ContentProvider、网路存储,本项目主要用到两个数据存储方式,具体介绍如下所示:

  • SharedPreferences简介
    • SharedPreferences:是Android平台上一个轻量级的存储类,用于程序中一些少量数据持久化存储(如应用中的配置、参数属性、用户名、密码等)
    • 以键值对的方式来存储数据,当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来
    • 支持多种不同的数据类型存储,如果存储的数据类型是整型,那么读取出来的数据也是整型的;如果存储的数据是一个字符串,那么读取出来的数据仍然是字符串
    • 存储在xml中,其默认路径为/data/data//shared_prefs
  • SQLite数据库存储
    • 特点:
    1. SQLite是Android自带的一个轻量级的数据库,运算速度快,占 用资源少,支持基本SQL语法。
    2. SQLite数据库可以存储应用程序中的大量数据,并对数据进行管 理和维护。
  • SQLiteOpenHelper类(一个SQLite数据库辅助操作的类)
    • 作用:在Android中实现SQLite数据库操作,即管理数据库(创建、增、修、删)
    • 使用流程:创建SQLite数据库操作子类继承SQLiteOpenHelper类,根据自身需求,实现SQLiteOpenHelper类的方法,从而实现对数据库的操作。
  • SQLiteOpenHelper的常用方法
    • 创建 or 打开 可读/写的数据库(通过返回的SQLiteDatabase对象进行操作) getWritableDatabase() 。
    • 创建 or 打开 可读的数据库(通过返回的SQLiteDatabase对象进行操作) getReadableDatabase()
    • 数据库第1次创建时会调用onCreate 第1次调用 getWritableDatabase() / getReadableDatabase()时调用,在继承 SQLiteOpenHelper类的子类中重写 onCreate(SQLiteDatabase db)
    • 数据库升级时自动调用onUpgrade 在继承SQLiteOpenHelper类的子类中重写 onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    • 关闭数据库 close()

2.2 项目编码规范

  • 团队协作商议项目编码规范

图2.2-1 团队协作商议项目编码规范会议截图

图2.2-2 团队协作商议项目编码规范会议截图
  • 项目编码规范
  • 上传项目编码规范文档到项目仓库截图

图2.2-1 上传项目编码规范文档到项目仓库截图

任务3:团队协作方式编写软件代码,创建关联数据库,进行必要代码测试

3.1 上传项目源码文件至Github


图3.1-1 上传项目源码到项目仓库截图

3.2 团队项目仓库情况统计


图3.2-1 团队项目仓库情况统计

图3.2-2 团队项目仓库情况统计

3.3 代码测试

  • 测试环境:

    • 操作系统:Windows 11
    • 软件环境:JDK 1.8,Android Studio
    • 硬件环境:(手机客户端)EMUI9.0.1
  • 测试过程:

    • 进入界面


    • 注册界面


    • 登录界面

    • 主界面

    • 文章详情界面

    • 文章发布

    • 论坛界面

    • 创建论坛


    • 练习界面

    • 练习详情

    • 个人中心界面

    • 资源上传界面

    • 修改密码界面

任务4:实验总结

记录完成《实验九 团队作业6:团队项目编码》各项任务实际花费的时间和分工

任务内容 计划共完成的时间(min) 实际完成时间(min)
任务一 420 432
任务二 130 140
任务三 240 278
任务四 365 390

实验心得

团队成员 本次作业的感受和体会
张圆圆 在本次项目开发过程中,进一步地细化分析了系统设计模型,精化了类的属性和操作,对于每一个类之间的关系层次也有了详细的分析,通过此次项目开发,学习到了很多东西,在团队成员共同协商下完成了代码规范制定,通过团队成员的分工合作完成了此次项目开发,在项目开发过程中,我主要负责项目后端逻辑的实现,在原先已有的需求分析及软件设计分析的基础上,在完成后端逻辑实现时,工作效率有很大的提高,在遇到具体难题时,与团队成员一起讨论解决,提高了问题的处理效率,使得此次实验顺利完成。
姜婷 通过本次式样再次对系统设计做出改经对之前没有代码开发时所注意到的细节重新规划,对习题作答部分的内容做出详细设计,对用户类、博客类、问答类各种属性做出详细设计,对数据库内个属性字节也有详细的在规划。通过团队内协商合计出代码规划,在之后的代码合并中虽然仍有不同的格式但是为之后的代码开发做出准备。
孙得弘 通过这次开发,我学到了很多,敏捷开发流程的实践,掌握了软件编码实现的工程要求。我们每个成员都很认真努力的完成本次任务,冲刺过程很困难,但是每个队友都坚持下来,每个人都有成长。这个实验我们每个人对于每个环节都有所参与,互相配合,互相帮助,发挥各自作用。由于自己的编码能力不是很好,但通过本次项目,个人的编程能力得到了提高。大家也越来越默契,遇到问题及时沟通交流,努力解决问题,在每个成员的努力下,我们不断进步,超越自我。

组长总结陈述:

通过完成本次实验项目,让团队成员之间有了更加深入的了解,对真正的团队项目开发过程有了更加深入的体会,在开发过程中遇到难题时,与团队成员积极的沟通交流,一起解决所遇到的难题,在这个过程中,作为团队成员的我们收获到了很多,也让我们知道了在项目开发的过程中团队协作的重要性。通过项目前期的需求调研和系统功能分析设计,再加上本次实验的项目具体编码过程,作为团队成员的我们,相信都有了不同的收获,并且通过团队之间的协作,我们也深刻意思到团队的重要性,通过这次项目开发经历,我们在各个方面都有了很大的提升,虽然过程中有很多难题困扰着我们,但通过团队成员的努力,问题都一一得到了解决,顺利完成了此次实验。

posted @ 2022-06-20 18:06  Typhoon-Team  阅读(86)  评论(0编辑  收藏  举报