【课设】基于华为HarmonyOS 2.0多端分布式技术的家教系统
期末大作业
设计报告
名 称: Java应用技术
题 目:新兴分布式多端开发技术
院 系:
班 级:
学 号:
学生姓名:
指导教师:
设计周数:
目 录
一、设计概要... 1
二、设计正文... 1
1. 需求分析(至少写1页).. 1
1.1. 用户需求:... 1
1.2. 业务需求... 2
2. 概要设计(至少写2页).. 3
2.1. 系统架构:... 3
2.2. 客户端:... 4
2.3. 服务器端:... 5
2.4. 数据库设计:... 5
3. 详细设计(至少写5页).. 7
3.1. 鸿蒙OS云端APP与本地Spring Boot后端通信.. 7
3.2. 客户端... 9
3.3. 服务端... 11
4. 调试分析(至少写1页).. 11
4.1. 基于postman测试后端功能... 11
4.2. 错误分析:... 13
5. 测试结果(至少写3页).. 14
6. 用户手册(至少写5页).. 19
6.1. 登录注册功能:... 19
6.2. 主界面介绍:... 22
6.3. 早教算术题功能:.. 23
6.4. 益智拼图游戏功能.. 25
6.5. 小功能模块... 27
6.6. 我的设备和家庭管理... 28
三、设计总结或结论... 30
参考文献... 31
附录(其他必要资料,不需要源代码)... 31
一、设计概要
新兴分布式多端开发技术为解决多端并发困难带来了新的思路,华为HarmonyOS 2.0[1]提供了一次开发多端部署的功能,以往的分布式开发[2]对开发人员要求掌握技术较多,如今的鸿蒙OS系统提供了分布式的UX框架,轻松实训界面跨端自适应,使得学习成本大大减低。作为一次开发,多端部署的强有力支撑技术—分布式技术,根据传统的定义来看,它是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统[3]。其旨在利用更多的机器,处理更多的数据。分布式技术可以用来打造一台“超级设备”[4],让信息在多终端之间无缝流转,各终端之间能力互助共享、互为外设,最终实现应用如同在同一终端运行、用户如同使用同一终端、开发者如同为同一终端开发。该分布式技术的应用,不仅大幅降低跨设备的应用开发工作量,还有效地提升了开发者的效率[5],鸿蒙OS在支付领域[6]、农业领域[7]、家电邻域[8]等等都有着旷阔的前景。
本系统采用C/S架构分为服务端和客户端。整个项目采用RESTFUL风格进行服务端与客户端的交互。
本系统是基于Spring Boot的鸿蒙OS亲自家教系统,用户mybits框架对MySQL数据库进行操作,客户端通过。采用主流的后端Spring Boot框架,结合当前高热度的鸿蒙OS分布式系统,以json作为网络通讯的载体,实现了多用户多端部署同一系统进行并发操作模块、用户个人信息模块、拓展功能模块和对用户信息管理模块。
在鸿蒙OS开发中,已经存在许多类似的系统,本系统采用的是成熟的后端技术和新兴的鸿蒙OS,从设计的角度上看是可行的[9];本系统的难点在于对鸿蒙OS系统的学习成本和对于尚且未成熟的鸿蒙OS的开发平台所带来的不可知错误以及对于开发手机端的不熟悉,其中由于没有学习过安卓开发,故对手机端如何与后端进行网络通讯也是难点之一[10]。
二、设计正文
1. 需求分析(至少写1页)
1.1. 用户需求:
(1) 用户需要注册登录
(2) 用户需要管理个人信息
(3) 用户能够使用额外功能
(4) 用户能够多端协作
(5) 用户能够查阅家庭信息
(6) 用户能顾查阅设备信息
1.2. 业务需求
1.2.1. 客户端:
(1) 对用户提供登录注册修改密码功能
(2) 对用户提供额外的API功能
(3) 对用户提供家庭管理功能
(4) 对用户提供设备管理功能
(5) 自动识别用户设备并添加进用户信息中
(6) 提供多设备协同
1.2.2. 服务器端:
(1) 进行登陆时根据用户手机号查出密码才进行匹配。
(2) 用户注册时先查询用户手机号码是否在数据库中存在记录,若不存在则进行插入,否则返回警告信息。
(3) 用户注册时提供查阅所有家庭列表,让用户选择其中一个,不能为空,若为空返回警告信息。
(4) 用户修改密码时先查询用户手机号码是否在数据库中存在记录,若存在则进行更新操作,若不存在返回警告信息。
(5) 用户创建家庭时先查询该家庭名称是否与数据库中其他家庭名称过于相似,若是返回警告信息,否则进行添加操作。
(6) 用户登录系统后自动识别用户设备,并级联添加用户设备,若该用户已存在同样的设备则不进行改操作,若不存在则添加进数据库。
(7) 客户端访问服务端对应的接口则可进行相应的操作,如查阅所有家庭,查阅所有设备,所有本家庭成员等等。
系统需求分析数据流图:
图 1 系统数据流图
2. 概要设计(至少写2页)
2.1. 系统架构:
(1) 本系统采用C/S架构分为服务端和客户端。整个项目采用RESTFUL风格进行服务端与客户端的交互。
(2) 服务端采用Spring Boot框架,使用MyBits框架对MySQL数据库进行操作;客户端同方法访问服务端提供的接口来获得想要的数据。服务端接收到来自服务端的请求后,解析客户端发送来的数据包,再根据数据对数据库进行增删查改操作,最后返回响应。
(3) 客户端采用鸿蒙OS开发手机APP,使用xml和Java结合开发页码,在后端中封装表单成json格式,再通过https协议与服务端进行通信。
(4) 在本系统中,由于鸿蒙OS使用了远程模拟的形式,手机APP运行在云端,故云端APP想要与本地的Spring Boot服务端进行通信,需要获知本地服务端的公网地址,本系统采用“花生壳”免费服务,将本地的内网ip做外网穿透,得到外网ip,这样才能进行鸿蒙OS的云端APP与本地服务器进行通信,鸿蒙OS与本地服务端通信如图 2 远程通信示意图。
图 2 远程通信示意图
2.2. 客户端:
(1) 用户信息管理模块:提供用户登录、注册、修改密码、查阅所有家庭、查阅家庭所有成员、查阅本系统所有设备、查阅本用户拥有的所有设备功能。
(2) 家庭管理模块:采用链表的数据结构存储家庭列表,提供查询所有家庭列表的接口,返回家庭列表的链表;提供查询一个家庭的所有成员的接口,返回所有成员的链表。
(3) 设备管理模块:采用链表的数据结构存储设备列表,提供查询所有设备的接口,返回设备链表;提供查阅一个用户的所有已拥有的设备的接口,返回所有的设备链表。
(4) 额外功能模块:采用“聚合数据”提供的免费网络API,通过ZZRHttp网络框架,发送https请求到服务器,返回API提供的结果,使用Jackson解析数据包,转化为Java类对象,再将数据呈现在客户端上。
(5) 分布式协同功能模块:客户端需要在build.json中获取申请分布式协同的权限。
系统结构图如图 3所示:
图 3 系统结构图
2.3. 服务器端:
(1) Spring Boot框架结构:
图 4 Spring Boot框架结构
(2) 用户信息管理模块:
a) 用户登录
b) 用户注册
c) 修改密码
(3) 家庭信息管理模块:
a) 添加家庭
b) 修改家庭
c) 查询家庭列表
d) 查询家庭成员
(4) 设备信息管理模块:
a) 添加设备
b) 修改设备
c) 查询设备列表
d) 查询用户设备
2.4. 数据库设计:
(1) 数据库E-R图
图 5 数据库E-R图
(2) 数据库表设计:
a) 用户表:
表格 1 用户表
列名 |
数据类型 |
长度 |
允许空值 |
备注 |
说明 |
user_id |
varchar |
32 |
不允许 |
主键 |
用户id |
user_phone |
varchar |
32 |
不允许 |
|
用户手机 |
password |
varchar |
32 |
不允许 |
|
密码 |
user_name |
varchar |
32 |
允许 |
|
用户名称 |
family_id |
varchar |
32 |
不允许 |
|
家庭id |
b) 家庭表:
表格 2 家庭表
列名 |
数据类型 |
长度 |
允许空值 |
备注 |
说明 |
family_id |
varchar |
32 |
不允许 |
主键 |
家庭id |
family_name |
varchar |
32 |
不允许 |
|
家庭名称 |
c) 设备表:
表格 3 设备表
列名 |
数据类型 |
长度 |
允许空值 |
备注 |
说明 |
device_id |
varchar |
32 |
不允许 |
主键 |
设备id |
device_desc |
varchar |
32 |
不允许 |
|
设备名称 |
device_user |
varchar |
32 |
不允许 |
|
设备所属用户 |
(3) 数据字典:
表格 4 用户表user数据字典
字段 |
描述 |
数据类型 |
约束 |
user_id |
用户id |
varchar |
pk |
user_phone |
用户手机 |
varchar |
not null,unique |
password |
密码 |
varchar |
not null |
user_name |
varchar |
varchar |
not null |
family_id |
varchar |
varchar |
references family(family_id) |
表格 5 家庭表family数据字典
字段 |
描述 |
数据类型 |
约束 |
family_id |
家庭id |
varchar |
pk |
family_name |
家庭名称 |
varchar |
not null |
表格 6 设备表device数据字典
字段 |
描述 |
数据类型 |
约束 |
device_id |
设备id |
varchar |
pk |
device_desc |
设备描述 |
varchar |
not null |
deivce_user |
设备所属用户 |
varchar |
references user(user_phone) |
3. 详细设计(至少写5页)
3.1. 鸿蒙OS云端APP与本地Spring Boot后端通信
在远程部署的鸿蒙OS的APP发送http协议请求到本地的Spring Boot服务端,由于是在云端部署的APP,故发送的网络请求是通过互联网进行传输的,如果直接使用本地的内网ip,那么云端部署的APP找不到本地服务器,故连接失败,如图 6所示。
图 6 远程连接错误
此处是外网的云端部署的华为APP想要与本地的服务端进行通信,由于APP找不到内网ip设备,故根据计算机网络原理,我们需要把内网ip映射到一个外网域名上,这样外网设备才能找到该外网域名所对应的内网ip,进而找到该设备,过程如图 7所示。
图 7 外网穿透实现远程通信
在鸿蒙OS的开发平台DevEco中,采用集成的ZZRHttp网络框架完成Http访问网络,进行数据包的发送与接收;ZZRHttp网络框架的使用方法,url为目标地址:
1 ZZRHttp.get(url, new ZZRCallBack.CallBackString() { 2 3 @Override 4 5 public void onFailure(int code, String errorMessage) { 6 7 //http访问出错了,此部分内容在主线程中工作; 8 9 //可以更新UI等操作,请不要执行阻塞操作。 10 11 } 12 13 @Override 14 15 public void onResponse(String response) { 16 17 //http访问成功,此部分内容在主线程中工作; 18 19 //可以更新UI等操作,但请不要执行阻塞操作。 20 21 } 22 23 });
为了发送json格式的数据,还需要采用Gson和Jackson对Java对象进行封装为json数据包,在通过ZZRHttp网络框架发送json数据包到目标地址,Spring Boot服务端接收json数据包解析后返回json结果,客户端再通过解析json数据包得到服务端结果,过程如图 8所示。
图 8 json传输流程图
3.2. 客户端
(1) 用户登录流程图:
用户进入本系统,在鸿蒙OS前端界面输入手机号码和密码,前端将用户信息打包成json数据包,通过ZZRHttp网络框架发送到本地服务端的外网域名,本地服务的接收到json数据包后经Spring Boot框架自动解析json为Java对象并获取数据执行操作,返回一个json数据包到前端,前端解析json数据包得到服务端返回的结果。
图 9 用户登录流程图
(2) 用户注册流程:
用户进入系统,输入用户id,用户手机号,密码和重复密码,点击查阅家庭列表看所有的家庭,选取其中一个家庭id,
图 10 用户注册流程图
(3) 用户修改密码流程:
修改密码流程:
图 11 用户修改密码流程图
(4) 用户使用额外功能:
通过网络免费的API,使用ZZRHttp发送get请求到对应的服务器,服务器返回结果,在鸿蒙OS客户端解析返回的json包,转化为对应的Java类对象,提取对象信息反馈到前端界面,过程如图 12 所示。
图 12 API通信流程图
3.3. 服务端
Spring Boot服务端中
(1) entity层对应数据库实体类,一张表对应一个实体类,类属性同表字段一一对应;
(2) mapper层即数据持久层,作用是访问数据库,向数据库发送sql语句,完成数据的增删查改任务,本系统使用MyBits整合了数据库,通过xml文件来匹配mapper文件,提高了系统性能,简化了mapper代码编写。
(3) server层即业务处理,是对mapper层的封装,提供接口给controller层。
(4) controller层几位控制层,功能是请求和响应控制,负责前后端交互,接收前端请求,调用server层,接收server返回的数据,最后返回具体页面和数据到客户端。
4. 调试分析(至少写1页)
4.1. 基于postman测试后端功能
(1) 问题1:输入(本机地址和端口)user/userlogin,但页面报错,返回idea查看控制台输出,发现是配置文件中的服务端口和ip地址不对,随后将其改正。
图 13 postman测试用户登录功能测试
图 14 查看控制台输出的错误信息提示
在idea上部署的所有后端测试完毕后,查阅数据库验证。
(2) 错误1:无法连接到本地以及连接超时,缘于本系统是使用远程部署的,所以它找不到你的地址;即使将url地址改为本机的ip地址,也是无法找到的,导致出现以下错误:
图 15 前后端连接时遇到的错误1
图 16 前后端连接时遇到的问题1
(3) 错误2:端口冲突,一般由于有运行未停止的项目占用端口。
图 17 前后端连接时遇到的问题2
4.2. 错误分析:
以上的两个错误的产生是因为本系统是用远程模拟器来部署实现的,测试的本机地址一般为局域网地址,也就是内网地址,外网的机器无法访问内网的地址,所以需要把本机的地址映射成外网地址;或者另外一种方法便是将此部分部署至云平台上,然后通过访问其得以实现交互,由于此过程中需要多次调试,所以团队选择了在本地部署,将本机ip地址通过软件映射成外网地址。
解决方案如下:
首先下载软件花生壳,通过软件来进行内网穿透;自定义映射后需要先运行一下后端项目方可显示内网服务连接成功。
图 18 所需软件官网下载
图 19 内网穿透成功图
5. 测试结果(至少写3页)
图 9 用户登录功能测试
图 10 用户改名功能测试
图 11 测试添加设备功能
图 12 删除设备功能测试
图 13 查询本机号码的所有设备
图 14 测试添加家庭功能
图 15 测试修改家庭信息功能
图 16 测试查询天气预报功能
图 17 测试查询号码归属地功能
图 18 测试查询图书类别功能
6. 用户手册(至少写5页)
6.1. 登录注册功能:
首先打开软件,登录页面图如下:有账户的直接进行账户密码登录,没有账户密码的就进行注册,注册时候需要输入,手机号码,用户名,密码和确认密码,和加入的家庭号或者新建的家庭号;忘记密码的就点击忘记密码进行密码修改。
图 19 登录界面
图 20 注册界面
图 21 修改密码界面
6.2. 主界面介绍:
最上面会显示当前登录的账户名;页面上有三个按钮,第一个是进入系统,里面包括了早教算术题模块和益智游戏模块;第二个是更多功能模块,包括了三个小功能:手机号码归属地,天气预报,和图书电商数据;第三个按钮我的里面包括了:我的设备,我的家庭两个模块。总体组织结构图如下:
图 22 主页面图示
图 23 总体结构组织图示
6.3. 早教算术题功能:
点击进入系统按钮,随后点击早教算术题打开,可以在答题区域上训练题,也可以点击实时辅导,可以通过家庭设备列表来选择连接远程连接设备,实现远程辅导。
图 24 点击进入系统
图 25 早教算术题页面
图 26 早教算术题的答题区域
6.4. 益智拼图游戏功能
点击益智拼图游戏九宫格图片,可以进行拼图游戏,点击亲子协同,可以连接两台设备进行实时操作。如下展示了如何连接两台设备:在其中一台设备点击亲自协同,随后便通过弹出的设备列表框选择所连接的设备,随后,一台设备会在上方显示“本地端”字样,另一台设备上方显示“远程端”字样,此时,两台设备连接完成。便可进行实时的同步的亲子协同交互操作。
图 27 两台设备图示
图 28 益智拼图游戏页面
图 29 左边设备选择连接图
图 30 两台设备成功连接图
6.5. 小功能模块
小功能分别有天气预报功能,手机号码归属地查询功能和图书类别查询功能这三个功能比较便利解决一些问题。比如天气预报功能,由于本项目是可以部署在多样设备上的,当小朋友使用智能手表时,能快速查询今日的天气预报,以便出门带伞与否。使用天气预报功能时候,直接输入当地城市名进行查询;使用手机号码查询功能时直接输入手机号码进行查询;使用图书类别查询功能时直接点击展示图书类别即可。
图 31 小功能主界面
6.6. 我的设备和家庭管理
设备和家庭管理板块分为:设备管理和家庭管理,其中设备管理可以通过点击查询我的设备来查看用户登录过的设备,家庭管理可以查看家庭成员,拥有管理员权限的可以查看所有家庭。
图 32 我的主页面
图 33 查询设备管理功能
图 34 查询家庭管理功能
三、设计总结或结论
本设计作为初次接触鸿蒙OS系统开发手机APP,我们花了非常大的力度去学习新的内容,且由于鸿蒙OS开发平台DevEco的不成熟带来了非常多不明bug,但在我们的努力下还是克服了很多困难,多次实验和查询资料最终才发现由于鸿蒙OS的远程部署所带来的网络连接问题,这也顺带复习了计算机网络原理这门课程,最终的问题是远程部署的鸿蒙OS手机APP通过互联网访问不到本地的Spring Boot服务器,需要将本地的服务端做外网穿透,得到一个外网域名,这样才能进行网络通讯。
本系统作为分布式系统,有着一次开发,多端部署的极大优势,这是其他类似系统所比拟不了的,如安卓、谷歌或者微软,多端部署可以充分利用闲置的设备资源,集中使用到一台机器上,这也带来了解决老旧设备性能不足问题的方法。鸿蒙OS系统广阔前景大有所为。
本设计的缺点在于未能充分发挥出分布式的优势,只是在一些功能上存在分布式,其他诸如用户管理等等并没有涉及到分布式,且分布式系统占用资源较大,在开发过程中多次遇到模拟运行APP崩溃的问题。
本设计未能实现通过分布式来实现多端资源的集中使用,这也是极大的遗憾。
参考文献
[1] 宋奇.华为HarmonyOS 2.0不一样的体验[J].计算机与网络,2020,46(18):72.
[2] 张智强,郭龙,赵雷,赵伟,张自磊.分布式软件开发与系统集成平台的研究[J].物联网技术,2020,10(06):67-70+75.DOI:10.16667/j.issn.2095-1302.2020.06.020.
[3] 华为鸿蒙系统:引领万物互联突破科技封锁[J].股市动态分析,2021(12):6-11.
[4] 王蔚萍,章学周.基于分布式系统的县区政务数据治理的思考与实践[J].江苏科技信息,2021,38(26):28-31.
[5] 李冲.鸿蒙系统:万物互联将成现实[J].华东科技,2021(07):14-15.
[6] ***依河,刘远山,李恒怿.鸿蒙系统在支付领域的应用前景探析[J].金融科技时代,2022,30(06):68-71.
[7] 沈周锋,郑慧珍.基于鸿蒙系统的农业监测器的研究[J].九江学院学报(自然科学版),2022,37(01):59-62.DOI:10.19717/j.cnki.jjun.2022.01.013.
[8] 陈浩强,全永兵. 智能家电的华为鸿蒙系统应用研究[C]//.2021年中国家用电器技术大会论文集.,2021:2011-2016.DOI:10.26914/c.cnkihy.2021.025833.
[9] 中信银行软件开发中心课题组.布局鸿蒙应用生态 支持操作系统国产化[J].中国农村金融,2021(20):12-13.
[10]王鹏飞.鸿蒙操作系统进入高职教育的前景展望[J].科技风,2021(34):76-78.DOI:10.19392/j.cnki.1671-7341.202134026.
附录(其他必要资料,不需要源代码)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现