这个作业属于哪个课程 | 2302软件工程 |
---|---|
这个作业要求在哪里 | 团队作业 概要设计和数据库设计 |
团队名称 | 爱背单词不摆烂 |
这个作业的目标 | 1篇博客随笔、1份《系统设计说明书》、 1份《数据库设计说明书》、1份《系统设计和数据库设计答辩PPT》 |
其他参考文献 | 《构建之法》 |
一、相关链接
二、系统和数据库设计
2.1、体系结构设计
体系结构采用三层设计。分别为控制层、业务逻辑层、数据层。
- 控制层:1、负责接收和解析用户的前端请求;2、根据请求类型,将任务委托给业务逻辑层,确保请求得到妥善处理;3、根据业务逻辑层的反馈,控制层负责决策页面跳转逻辑或直接向用户返回响应结果。
- 业务逻辑层:1、作为系统的核心,负责实现具体的业务规则和逻辑;2、接收控制层转发的请求,并调用相应的功能模块进行处理。
- 数据层:1、负责与数据库进行交互,执行数据的增删改查(CRUD)操作;2、通过事务管理和安全性控制,保障数据的完整性和安全性。
2.2、功能模块层次
2.2.1、前台功能模块层次
前台功能模块层次图
设计思路
主页模块:
- 轮播图热点——使用图片自动轮播,每张图片链接到具体的单词学习页面或社区活动页面。图片具有吸引力,能够快速传达信息。
- 每日单词推荐——推荐单词根据用户的学习进度和兴趣进行个性化推荐。采用卡片式布局,每个单词卡片包含单词、音标、释义和AI例句。点击单词卡片可以进入单词详情页面。
- 每日美句推荐——使用大模型提供含有推荐单词的例句,帮助用户在语境中记忆和理解单词。
社区模块:
- 轮播图热点——使用图片自动轮播,每张图片链接到具体的单词学习页面或社区活动页面。图片应具有吸引力,能够快速传达信息。
- 查看文章列表——展示社区中的文章列表,方便用户快速查找感兴趣的内容。
- 查看文章详情——用户点击文章列表中的某篇文章后,进入文章详情页面,可以进行阅读全文、收藏等操作。
- 我的文章——展示用户自己发布的文章列表,允许用户进行编辑、删除等操作。
我的模块:
- 登陆——提供用户登录界面,支持账号密码登录。
- 注册——允许新用户创建账号,需要填写基本信息如用户名、密码等。
单词模块:
- 背诵单词——根据用户的学习计划,展示需要背诵的单词信息,提供发音、释义、AI例句、收藏单词等学习功能,帮助用户记忆新单词。
- 复习单词——根据遗忘曲线,结合大模型推荐,安排用户复习已学过的单词,通过重复记忆加强记忆效果。提供收藏单词、查看单词详情等功能。
- AI对话——结合大语言模型创建模拟对话场景,让用户在实际对话中使用和练习单词,提高语言运用能力。支持语音输入、文字输入。
- 单词测试——通过小测验的形式,检测用户对单词的掌握程度,提供单项选择、单词填空、文本英译汉、答案解析功能。
- 我的记词本——用户可以创建个人记词本,记录在学习过程中遇到的生词或重要词汇,方便随时复习。
- 词汇书选择——提供多种词汇书供用户选择,如四六级词汇、雅思托福词汇等,用户可以根据自己的需求和水平选择合适的词汇书进行学习。
2.2.2、后台功能模块层次
后台功能模块层次图
设计思路
登录模块:
- 作为后台管理系统的入口,用户需要输入正确的用户名和密码才能获得访问权限。通常包含用户名和密码输入框以及登录按钮。
- 进入后台主页——登录成功后,用户会被引导到后台主页,这里是所有后台功能的中心枢纽,提供了导航菜单,方便用户快速切换到不同的管理模块。
用户详情页模块:
- 调整用户参数——管理员可以修改用户账户的配置,如大模型参数等,以适应不同用户的个性化需求。
文章管理模块:
- 包含文章的创建、编辑、发布、删除等操作。管理员可以管理文章的整个生命周期,确保内容的质量和合规性。
- 展示文章——列出所有的文章,管理员可以查看每篇文章的标题、作者、发布时间等信息。
- 预览文章——在不编辑的情况下查看文章的详细内容,包括文本、图片、视频等,以便于管理员进行内容审核。
- 删除文章——在删除文章前,应提供确认提示,以防止误操作。同时,考虑提供回收站功能,允许误删后恢复。
- 编辑文章——提供所见即所得的编辑器,允许管理员方便地编辑文章内容。
- 新建文章——提供一个简洁的表单,允许管理员输入文章的标题、正文等内容,并支持添加媒体。
用户管理模块:
查询用户
- 使用编号——通过用户的唯一编号来快速查找和管理用户,适用于批量操作或快速定位特定用户。
- 使用名称——允许管理员通过用户的全名或用户名来搜索和管理用户。
- 使用日期——允许管理员根据日期筛选用户活动或文章发布记录。
用户信息
- 展示用户信息——展示用户的基本信息,包括用户名、积分等,帮助管理员了解用户的使用情况。
- 将不合规的用户关小黑屋——对违反平台规则的用户进行惩罚,如限制其功能或完全禁止其账户,以维护平台秩序。
- 审核用户——对新注册用户的信息或用户提交的内容进行审核,确保符合平台规定和标准。
- 进入用户详情页——通过点击用户列表中的用户名或编号,管理员可以进入该用户的详情页。
2.3、ER分析
2.3.1、ER图
设计思路:
- 实体识别:识别出系统中所涉及的数据存储对象,这些对象将作为数据模型中的基本单元。
- 属性分配:为每个识别出的实体详细列出其包含的数据特征,这些特征描述了实体的具体信息。
- 关系界定:明确实体间的相互关联,包括它们如何相互连接,以及连接的类型(如一对一、一对多或多对多)。
- 图形化表示:采用图形化方法绘制 ER 图,通过特定的图形符号来表示实体、属性和它们之间的关系。
- 模型精炼:对初步完成的 ER 图进行审视和调整,以提高模型的清晰度和效率,可能包括去除冗余实体或优化实体间的关系。
- 数据库映射:将 ER 图中的实体、属性和关系转换为数据库的具体实现,创建相应的数据库表结构,并定义外键以体现实体间的关系。
- 验证与迭代:通过实际应用场景对数据库进行测试,验证其功能是否满足设计要求,并根据反馈进行必要的调整和优化。
2.3.2、数据库表结构设计
用户表
文章表
单词表
词汇表
收藏表
管理员表
设计思路
- 实体识别与需求分析:通过分析“爱背单词不摆烂”App的业务需求,识别出关键实体,包括用户(User)、文章(Article)、单词(Word)、词汇(Vocabulary)、收藏(Favorite)和管理员(Admin)。
- 属性定义与数据类型选择:为每个实体确定必要的属性,并根据属性的特性选择合适的数据类型。例如,用户表中的用户名(username)使用VARCHAR(50)以存储字符串,而用户编号(user_id)则使用INT类型。
- 关系分析与外键确定:分析实体间的关系,如用户(User)与文章(Article)之间的一对多关系,并通过外键(user_id)在文章表中关联用户信息。
三、类图、系统安全和权限设计
3.1、类图
设计思路:
- 按系统层次规划类设计:依据系统架构,将类按照逻辑层级或模块划分进行组织,以展现系统的模块化结构。
- 基于数据模型选取初始类:参照数据库设计,选择具有代表性的实体作为类图构建的基础。
- 提炼共性构建基类:针对结构相似的类,识别并抽取出共同特征,形成基类,以减少冗余并提升代码复用性。
- 补充关联类以满足需求:依据系统功能需求,设计与核心实体相关的辅助类,如集合类(如XXXList)等,用于实现特定数据结构或业务逻辑。
- 依据实体关系构建类间关联:参照数据库实体间的关系(如一对多、多对多等),在类图中准确描绘类与类之间的连接,如关联、聚合、组合等。
- 后期优化以增强系统质量:完成初步类图设计后,对其进行审查与调整,旨在提高系统的可维护性和可扩展性,确保设计符合软件工程原则与最佳实践。
管理员:
管理员类:管理员类主要使用web的后台对app的用户信息进行管理,有审核帖子,调整大模型参数等操作
管理员功能包括博客管理,等级管理,用户管理。需进行登录,注册,退出,所以同student一样继承User类
博客管理:主要为审核,具体包括:编辑,查找,浏览,创建,删除
用户管理:包括查找用户,创建用户,封禁用户(封号)
等级管理:设置用户等级
学生用户:
学生类:学生类主要是我们产品的客户,有记忆背诵单词,完成测试,社区交流,发布帖子等操作
学生用户功能交互涉及博客,单词,语音助手,测试。需进行登录,注册,退出,所以同admin一样继承User类
博客功能:主要为编辑,创建博客
单词:单词是记忆的最小单位,单词控制器主要操作为view
测试:op主要为进行测试doTest(),以及判断测试正误judge()
助手:不同用户等级对应不同功能强度的助手,op主要包括设置助手等级和召唤(使用)助手
Service:
软件主功能包括:单词记忆,测验,助手,博客,大模型
单词记忆:
Word类:单词类是我们记忆的最小单元,其包括属性信息有:音标,中文释义,翻译和例句等,多个单词类可以组成词库类
Vocab类:词库类,由单词类组成,主要属性包括:单词数目numofwords和单词列表;主要op为获取特定单词
测验:
TestItem类:习题类,对应单道习题,属性包括题目编号和难度等级,op包括做题和判断正误。
继承自TestItem有三种题型,对应三个类……
多道习题可组成类似试卷(Test类)
助手Assistant:助手类使用大模型类来构建,实现与学生进行交流,具有接收信息和语音发送等操作
大模型类LLM:大模型类是我们app的创新功能展示,他通过调用api实现对话信息传播,同时具有等级属性,可以根据用户的需求进行调整
3.2、系统安全设计
安全问题:
- SQL注入
- 跨站脚本攻击
- 跨站请求伪造
- JSON劫持
解决办法:
- SQL注入:使用参数化查询,确保用户输入被当作数据而非SQL代码执行
- 跨站脚本攻击:对所有用户输入进行编码:在输出到浏览器之前,对用户输入进行HTML编码或使用其他适当的编码方法
- 跨站请求伪造:使用CSRF令牌,为每个用户会话生成一个唯一的令牌,并将其与每个表单和Ajax请求一起发送。
- JSON劫持:使用HTTPS,通过加密传输,减少中间人攻击的风险。并设置适当的HTTP头部。例如,使用Content-Type:
application/json来明确响应的内容类型。
3.3、系统权限设计
具体权限设计:
- 访客:未登陆,只可以使用基础功能,无法进行点赞/收藏/AI对话等。
- 用户:登陆用户,具备全部功能,包括发布笔记/AI对话等。
- 管理员:具备管理功能。
权限说明:
- 使用基本功能,包括每日- -词/每日一句/单词学习1单词复习/浏览帖子等功能(所有用户)。
- 使用定制化单词功能,包括收藏单词等( 登陆用户)。
- 社区功能,包括发布/点赞/收藏/评论帖子(登陆用户)。
- AI相关功能,包括AI例句/ AI对话等(登陆用户)。
- 后台管理相关,包括用户权限管理/社区数据维护/删除帖子等(管理员用户)。
四、接口设计
4.1、前台接口设计
4.1.1、首页模块
获取每日单词
获取每日一句
获取首页轮播图
4.1.2、文章模块
获取文章页面轮播图
获取文章列表
获取文章详情
点赞文章
发表文章
4.1.3、用户模块
用户登录
用户注册
获取用户信息
更新用户信息
获取用户喜欢的文章
获取用户发表的文章
4.1.4、学习模块
获取学习单词列表
回答单词
获取单词详情
收藏单词
获取复习单词列表
4.1.5、测试模块
获取测试题目及答案
4.1.6、AI模块
AI对话
获取AI例句
4.2、后台接口设计
4.2.1、登录接口
4.2.2、用户模块
4.2.3、文章模块
五、改进分析
5.1、问题一
Q1:每本词书的内容是通过外部导入还是存储在后台数据库的?
A1:我们是将单词存储在数据库中的,这样做的好处是能够实现数据的即时更新、统一管理、安全性保护、性能优化、数据备份以及跨平台支持。
改进部分:数据索引和搜索优化
问题:随着数据量的增长,用户在查找特定单词时可能会遇到性能瓶颈。
改进过程:
- 性能分析:使用数据库管理系统提供的工具分析当前查询的性能瓶颈。识别耗时较长的查询操作,以及需要优化索引的表和字段。
- 索引优化:对于频繁作为查询条件的字段,创建合适的索引。为单词表中的单词内容、释义等字段建立全文索引,以便快速检索。
- 查询优化:重写查询语句,使用更高效的SQL语法。通过避免使用全表扫描的操作,利用索引进行条件筛选,减少数据加载量。
- 缓存策略:引入Redis缓存机制,对常用查询结果进行缓存,减少对数据库的直接访问。
5.2、问题二
Q2:管理员如何知道每位用户背单词的进度和情况的?这些数据是如何存储的?会不会丢失?
A2:我们团队一开始并没有为管理员设计了解每位用户背单词的进度和情况这项功能。但考虑到有这方面的需求,我们团队计划后续为管理员开发一个新的后台管理界面来监控用户的进度。用户学习数据存放在数据库中的,我们团队会通过定期备份,确保数据安全,降低丢失风险。
改进部分:提升后台管理界面的功能性和使用体验
改进过程:
- 界面响应性:使用媒体查询和响应式设计框架优化前端代码,确保后台管理界面在不同分辨率的显示器和移动设备上均能提供良好的使用体验。
- 数据可视化: 采用ECharts库,实现关键数据可视化。并设计交云互动式图表,使管理员可以通过点击图表上的特定数据点或区域,即时获取该用户群体或单个用户详细的学习进度报告。
六、团队绩效
6.1、工作流程
在作业要求发布后,我们通过腾讯会议讨论并进行了初步的分工。
改进部分:
体系结构:
ER图和前台思维导图:
接口设计:
数据库设计和后台接口设计:
数据库设计说明书:
权限设计:
改进的类图:
时间安排:
6.2、组员分工和组员贡献度比例
学号 | 工作内容 | 贡献度 |
---|---|---|
052101413任广湃 | 数据库设计说明书整理 | 6 |
112101225吴淇 | 数据库表、接口设计、开发计划安排 | 13 |
182000214廖文焘 | 类图、安全权限、开发计划安排 | 13 |
222100122洪冠诚 | 改进分析部分、博客撰写、系统设计说明书整合 | 14 |
222100308向至尚 | 体系结构图、团队绩效、PPT、开发计划安排 | 15 |
222100318张璟楠 | 后台思维导图、ER图 | 13 |
222100303陈昕 | 类图、安全权限 | 13 |
222100305庞财莹 | 前台思维导图、开发计划安排 | 13 |