2024秋软工实践 先天圣体软工队——项目原型设计和UML设计
作业所属课程 | 班级链接 |
---|---|
作业要求 | 第二次团队作业 |
作业目标 | 基于第一次团队作业需求,实现原型设计及概要设计。 |
团队名称 | 先天软工圣体队 |
团队成员 | 102201312-陈言泷 102201313-陈尚冰 052206123-柯鸿毅 102201311-张硕 102201531-周炳辉 102201308-何愉心 102201306-邱雨涵 102202133-郑奇键 102202125-陈思宇 102201237-赖锴彬 |
一、需求分析
见第一次团队作业链接:https://www.cnblogs.com/DriOgon/p/18498364
简要概括:开发福州大学历年卷资源共享平台软件——卷卷福,解决预习、复习、学习资料怎么找、去哪找的问题,同时接入AI接口实现软件创新及用户体验设计。
二、原型设计
原型设计工具:墨刀
原型展示链接:https://modao.cc/proto/f6s6bSWsljglkVCiXxVT/sharing?view_mode=read_only
2.1前端应用原型
2.1.1功能架构、逻辑分析
我们将功能架构按界面划分为五大点,分别为社区、资料库、AI、商城及我的。在每个大点中,实现相应的功能,具体如图。
除此之外,基于软件为资源平台的特性,保护逻辑运行的正常实现十分重要。因此,我们在后端提供可控字符实体化、查询语句预编译、文件上传白名单处理等功能,将一并与具体功能分析于下文阐述。
2.1.2登录注册界面
界面设计简洁美观,突出“卷卷福”项目是基于福州大学开发的特点。
系统提供注册、登录和忘记密码功能。在前端,对用户名和密码字段进行加密处理,同时添加图形验证码,以有效防止恶意爆破攻击。
2.1.3社区界面
界面描述:该界面为软件的主界面,用户可通过点击不同的功能点实现多样化操作,具体功能如下:
(1)用户可以利用福币发布悬赏(发布求助帖),向其他用户求助获取历年卷的资源。
(2)用户可以针对他人的求助帖(回复求助帖),提供自己的历年卷资源,并获得相应的福币奖励。
(3)用户可以提出与学习相关的问题,其他用户可留言进行回答,形成互动。
(4)用户可以上传和分享各种学习相关的资料,促进资源交流。
卷卷福设计排行榜功能,根据用户完成的求助单数量进行排名,展现用户的活跃度和贡献,调动资源聚合的积极性。
如图:
2.1.4资料库界面
该界面主要用于获取资料,包括但不限于各专业的教材PDF、PPT、历年卷及四六级相关资料。上传的资源将被系统按学科进行分类。
为了解决同学们在学习过程中遇到的历年卷没有答案或有答案但不理解的困难,我们引入了AI接口,提供用户与AI的交互功能,具体演示如下:
2.1.5AI界面
点击最下方导航栏中的“AI”按钮即可进入AI界面。AI助手小福将为用户提供软件使用指导,并根据数据库内容进行回答,例如生成相似题目等功能:
总结来说,AI助手小福的功能包括:
- 分析历年卷包含的知识点及整体难度。
- 提供某题目包含的知识点、解题思路和方法。
- 针对单个题目,给出相同知识点的题目,帮助用户进行强化训练。
- 用户在遇到不懂的地方时(如软件使用困惑等),可以向AI提问以获得指导。
2.1.6个人界面
点击最下方导航栏中的“我的”按钮即可进入个人界面。该界面主要包括个人信息、发布中心、我的下载等功能,具体说明如下:
-
支持数据可动性,用户可以查看和修改个人信息。
-
支持数据查询,用户可以查看自己已发布的资源。
-
支持资源空间整合,用户可以查看已下载的资源。
-
支持资源对象化,用户可以查看收藏的资源。
-
用户可以上传学习资源,并获得相应的福币奖励。
-
用户可以对本应用的使用感受进行反馈,助力软件的维护。
-
细节关照,用户可以在需要时打开夜间模式以保护视力。
如图所示,软件提供文件管理功能,自动对下载的文件进行分类,方便进行学习和复习。通过这一功能,用户能够更高效地整理和查找所需资料。
2.2后端管理原型
2.2.1工作台界面
2.2.2广告数据分析界面
2.2.3多维数据分析界面
2.2.4审核界面
2.2.5额外功能
此外,我们实现了对数据库的优化。
数据库安全防护功能
为防止SQL注入攻击,数据库采用字符实体化机制,对用户输入的数据进行转义处理,确保在数据库操作时,恶意输入不会被错误执行,从而提高了系统的安全性。
系统使用预编译查询语句的方式,预先将SQL语句发送到数据库进行编译,而将用户输入的参数单独传递。这种方式不仅提高了查询的执行效率,还有效防止了SQL注入,保护了数据库的完整性和安全性。
数据库触发器功能
触发器功能允许在特定事件发生时自动执行预定义的操作,通过设置触发器,系统可以自动记录用户对数据的操作,例如记录变更时间、操作用户及具体变更内容。
数据库索引功能
针对频繁查询的字段创建索引,加速了查询性能,降低数据库负担,确保系统在处理大量数据时的响应速度和效率。
通过使用复合索引,支持多字段的快速查询,处理复杂的查询请求。
三、概要设计
3.1UML设计
3.1.1用例图
在完成登录和注册后,学生将能够获取和上传历年的试卷,同时使用人工智能服务、兑换福币,并参与悬赏活动。管理员则负责审核注册信息、修改用户资料,并在管理平台上对历年试卷进行审核等管理工作。
3.1.2活动图
3.1.3类图
- 用户上传资源后,资源需经过管理员审核后才能发布。
- 用户可以在社区发布意见或内容,并接受其他用户的反馈或赞赏。
- 审核通过后,AI模型可以对资源进行处理或分析,并与用户进行交互问答。
- 管理员负责审核用户上传的资源或行为,并对系统进行管理。
3.1.4时序图
3.1.5协作图
本协作图展示了通过服务器中转、管理员操作、AI服务和消息队列等组件,为学生在平台上提供良好体验的整体架构。
3.2数据库设计
3.2.1ER图
全局E-R图如下:
用户模块
用户模块是系统的核心,负责管理所有用户的信息,包括:
1、用户凭证:确保用户身份的唯一性和安全性。
2、用户名:显示在用户界面上的名称,用户可自定义。
3、浏览历史:记录用户的活动,以便提供个性化推荐和方便用户查看过去的操作。
4、用户ID:系统自动生成的唯一标识符,用于识别和管理用户。
5、用户角色:定义用户在系统中的权限(如学生、管理员等),以确保不同角色访问不同的功能和数据。
学生认证模块
此模块专门用于学生身份的验证,确保只有注册学生能够访问特定功能。
1、学号:用于确认学生身份的唯一标识符,系统中不可重复。
2、密码:保护学生账户的安全,支持密码重置和加密存储以增强安全性。
社区模块
该模块提供一个学生互动的平台,促进信息交流和资源共享。
1、浏览求助:学生可以查看其他用户发布的求助信息,并提供帮助或建议。
2、上传资料:用户可以分享学习资料和资源,促进知识共享。
3、发布求职信息:用户可以发布与职业相关的机会,帮助同学们找到实习或工作。
4、排行榜:展示活跃用户、热门帖子或资料,激励用户参与社区活动,增强互动性。
发布帖子模块
用户可以在社区中发布信息,与其他用户分享想法和问题。
1、标签:为帖子添加标签以便于分类和搜索,使用户可以快速找到感兴趣的内容。
2、描述:提供帖子详细信息,帮助其他用户理解内容,促进有效沟通。
评论模块
该模块允许用户对帖子进行评论,增强互动性。
1、用户ID:记录发表评论的用户身份,便于追溯和管理。
2、评论内容:用户对帖子表达的意见或建议,可以是对内容的赞扬、质疑或补充。
搜索模块
用户可以通过此模块快速查找感兴趣的内容。
1、搜索目标:用户输入的关键词或选择的标签,以系统提供的选项为准。
2、标签:提供特定主题的过滤选项,帮助用户精确找到相关信息。
3、属性约束:搜索目标的标签仅限系统预设,用户无法自定义,以维护标签的统一性和有效性。
其中属性约束为:搜索目标为系统提供的标签选项,用户不能自己添加
资料库模块
此模块集中存储和管理学习资料,供学生查阅和下载。
1、题目总结:针对不同科目的题型进行总结,帮助学生掌握解题技巧。
2、题目解析:提供详细的解题步骤和思路,促进理解和应用。
3、举一反三:通过举例说明,帮助学生将知识扩展到其他相关问题上。
4、AI解答:利用人工智能技术为用户提供智能化解答,提高学习效率。
5、资料下载:用户可以下载所需的学习资料,方便离线学习。
浏览历史模块
该模块帮助用户管理其在系统中的活动记录,提升用户体验。
1、浏览记录:自动记录用户浏览的帖子和资料,方便用户快速回访。
2、我的收藏:用户可以收藏感兴趣的帖子和资料,便于后续查找和使用。
3.2.2关系数据模型
用户表 (Users)
字段名 | 数据类型 | 长度 | 主键 | 非空 | 描述 |
---|---|---|---|---|---|
UserID | INT | - | 是 | 是 | 用户唯一标识 |
Username | VARCHAR | 50 | 否 | 是 | 用户名 |
Password | VARCHAR | 255 | 否 | 是 | 用户密码(加密存储) |
Role | VARCHAR | 20 | 否 | 否 | 用户角色(用户、管理员等) |
资源表 (Resources)
字段名 | 数据类型 | 长度 | 主键 | 非空 | 描述 |
---|---|---|---|---|---|
ResourceID | INT | - | 是 | 是 | 资源唯一标识 |
ResourceName | VARCHAR | 100 | 否 | 是 | 资源名称 |
ResourceType | VARCHAR | 50 | 否 | 是 | 资源类型 |
OwnerID | INT | - | 否 | 是 | 资源拥有者(用户ID) |
LibraryID | INT | - | 否 | 是 | 资料库ID |
Description | TEXT | - | 否 | 否 | 资源描述 |
Status | VARCHAR | 20 | 否 | 是 | 资源状态 |
资料库表 (Libraries)
字段名 | 数据类型 | 长度 | 主键 | 非空 | 描述 |
---|---|---|---|---|---|
LibraryID | INT | - | 是 | 是 | 资料库唯一标识 |
LibraryName | VARCHAR | 100 | 否 | 是 | 资料库名称 |
Description | TEXT | - | 否 | 否 | 资料库描述 |
OwnerID | INT | - | 否 | 是 | 资料库拥有者(用户 ID) |
交互记录表 (Interactions)
字段名 | 数据类型 | 长度 | 主键 | 非空 | 描述 |
---|---|---|---|---|---|
InteractionID | INT | - | 是 | 是 | 交互记录唯一标识 |
ResourceID | INT | - | 否 | 是 | 资源ID(指向资源表) |
UserID | INT | - | 否 | 是 | 用户ID(指向用户表) |
InteractionType | VARCHAR | 50 | 否 | 是 | 交互类型(上传、下载等) |
InteractionDate | DATETIME | - | 否 | 是 | 交互日期 |
评论表 (Comments)
字段名 | 数据类型 | 长度 | 主键 | 非空 | 描述 |
---|---|---|---|---|---|
CommentID | INT | - | 是 | 是 | 评论唯一标识 |
ResourceID | INT | - | 否 | 是 | 资源ID(指向资源表) |
PostID | INT | - | 是 | 是 | 帖子ID (指向帖子表) |
UserID | INT | - | 否 | 是 | 用户ID(指向用户表) |
CommentText | TEXT | - | 否 | 是 | 评论内容 |
CommentDate | DATETIME | - | 否 | 是 | 评论日期 |
排行榜表 (Rankings)
字段名 | 数据类型 | 长度 | 主键 | 非空 | 描述 |
---|---|---|---|---|---|
RankingID | INT | - | 是 | 是 | 排行榜唯一标识 |
UserID | INT | - | 否 | 是 | 用户ID(指向用户表) |
Score | INT | - | 否 | 是 | 用户得分 |
Rank | INT | - | 否 | 是 | 用户在排行榜中的排名 |
UpdateDate | DATETIME | - | 否 | 是 | 排行榜更新时间 |
发帖表 (Posts)
字段名 | 数据类型 | 长度 | 主键 | 非空 | 描述 |
---|---|---|---|---|---|
PostID | INT | - | 是 | 是 | 帖子唯一标识 |
UserID | INT | - | 否 | 是 | 用户ID(指向用户表) |
Title | VARCHAR | 150 | 否 | 是 | 帖子标题 |
Content | TEXT | - | 否 | 是 | 帖子内容 |
PostDate | DATETIME | - | 否 | 是 | 帖子发布日期 |
CommunityID | INT | - | 否 | 是 | 社区ID(指向社区表) |
社区表 (Communities)
字段名 | 数据类型 | 长度 | 主键 | 非空 | 描述 |
---|---|---|---|---|---|
CommunityID | INT | - | 是 | 是 | 社区唯一标识 |
CommunityName | VARCHAR | 100 | 否 | 是 | 社区名称 |
Description | TEXT | - | 否 | 否 | 社区描述 |
CreateDate | DATETIME | - | 否 | 是 | 社区创建日期 |
3.2.3对象关系映射
- 创建
Users
表
CREATE TABLE Users (
UserID INT PRIMARY KEY NOT NULL, -- 用户的唯一标识符
Username VARCHAR(50) NOT NULL, -- 用户名,必须填写,长度不超过50个字符
Password VARCHAR(255) NOT NULL, -- 用户密码,采用加密方式存储,最大长度为255个字符
Role VARCHAR(20) -- 用户角色,例如学生、管理员等
);
描述:Users
表存储系统所有用户的信息,包括用户的基本身份信息和角色。UserID
是主键,确保每个用户在系统中的唯一性。
- 创建
Resources
表
CREATE TABLE Resources (
ResourceID INT PRIMARY KEY NOT NULL, -- 资源的唯一标识符
ResourceName VARCHAR(100) NOT NULL, -- 资源名称,必须填写,长度不超过100个字符
ResourceType VARCHAR(50) NOT NULL, -- 资源类型,例如文档、视频等
OwnerID INT NOT NULL, -- 资源所有者的用户ID,外键
LibraryID INT NOT NULL, -- 资源所属图书馆的ID,外键
Description TEXT, -- 资源描述,允许长文本
Status VARCHAR(20) NOT NULL -- 资源状态,例如可用、不可用等
);
描述:Resources
表记录所有资源的信息,包括资源名称、类型、所有者以及其状态。这些信息有助于用户快速查找和使用资源。
- 创建
Libraries
表
CREATE TABLE Libraries (
LibraryID INT PRIMARY KEY NOT NULL, -- 图书馆的唯一标识符
LibraryName VARCHAR(100) NOT NULL, -- 图书馆名称,必须填写,长度不超过100个字符
Description TEXT, -- 图书馆描述,允许长文本
OwnerID INT NOT NULL -- 图书馆所有者的用户ID,外键
);
描述:Libraries
表用于管理图书馆的信息,包括名称和描述。每个图书馆都有一个唯一的 LibraryID
。
- 创建
Interactions
表
CREATE TABLE Interactions (
InteractionID INT PRIMARY KEY NOT NULL, -- 交互的唯一标识符
ResourceID INT NOT NULL, -- 交互的资源ID,外键
UserID INT NOT NULL, -- 参与交互的用户ID,外键
InteractionType VARCHAR(50) NOT NULL, -- 交互类型,例如查看、下载、点赞等
InteractionDate DATETIME NOT NULL -- 交互发生的日期和时间
);
描述:Interactions
表记录用户与资源之间的交互行为,帮助分析用户行为和资源的使用情况。
- 创建
Comments
表
CREATE TABLE Comments (
CommentID INT PRIMARY KEY NOT NULL, -- 评论的唯一标识符
ResourceID INT NOT NULL, -- 评论所属资源的ID,外键
PostID INT NOT NULL, -- 评论所属帖子的ID,外键
UserID INT NOT NULL, -- 发表评论的用户ID,外键
CommentText TEXT NOT NULL, -- 评论内容,不能为空
CommentDate DATETIME NOT NULL -- 评论的日期和时间
);
描述:Comments
表用于存储用户对资源和帖子进行的评论,促进用户间的互动和讨论。
- 创建
Rankings
表
CREATE TABLE Rankings (
RankingID INT PRIMARY KEY NOT NULL, -- 排名的唯一标识符
UserID INT NOT NULL, -- 用户ID,外键
Score INT NOT NULL, -- 用户得分,用于计算排名
Rank INT NOT NULL, -- 用户的排名
UpdateDate DATETIME NOT NULL -- 排名更新时间
);
描述:Rankings
表用于存储用户的排名信息,包括用户得分和排名。该信息有助于增强用户的参与感和竞争性。
- 创建
Posts
表
CREATE TABLE Posts (
PostID INT PRIMARY KEY NOT NULL, -- 帖子的唯一标识符
UserID INT NOT NULL, -- 发布帖子的用户ID,外键
Title VARCHAR(150) NOT NULL, -- 帖子标题,必须填写,长度不超过150个字符
Content TEXT NOT NULL, -- 帖子内容,允许长文本
PostDate DATETIME NOT NULL, -- 帖子发布的日期和时间
CommunityID INT NOT NULL -- 所属社区的ID,外键
);
描述:Posts
表用于记录用户在社区中发布的帖子,包含标题、内容和发布日期,以便于用户查看和回复。
- 创建
Communities
表
CREATE TABLE Communities (
CommunityID INT PRIMARY KEY NOT NULL, -- 社区的唯一标识符
CommunityName VARCHAR(100) NOT NULL, -- 社区名称,必须填写,长度不超过100个字符
Description TEXT, -- 社区描述,允许长文本
CreateDate DATETIME NOT NULL -- 社区创建的日期和时间
);
描述:Communities
表存储社区的信息,包括名称和描述,提供一个用户进行讨论和分享的空间。
四、团队协作分工
第二次团队作业分工:
任务 | 负责人 |
---|---|
系统设计说明书制作 | 郑奇键 、陈思宇 |
UML图制作 | 周炳辉、柯鸿毅 |
数据库设计说明书制作 | 何愉心、邱雨涵、赖锴彬 |
PPT制作 | 张硕 |
原型设计 | 张硕 |
博客编写 | 陈尚冰、陈言泷 |
统筹汇总、快开发 | 陈言泷 |
开发人员总安排:
姓名 | 角色 | 负责的开发部分 |
---|---|---|
陈言泷 | 组长 | 项目整体规划与管理,协作沟通,统筹总结 |
柯鸿毅、周炳辉 | 前端开发人员 | 前端界面设计,用户交互功能实现 |
张硕 | 前端总负责人 | 统筹前端开发,协助管理 |
郑奇键、陈思宇 | 后端开发人员 | API设计与实现,数据库管理 |
陈尚冰 | 后端总负责人 | 后端功能实现,编写相关文档 |
何愉心、邱雨涵 | 测试人员 | 负责测试计划的制订与实现,后续运行的反馈与改进,编写测试相关文档 |
赖锴彬 | 运维及对接员 | 负责运行维护及前后端对接 |
开发计划:
周次 | 时间 | 计划 |
---|---|---|
第一周 | 10月15-10月23 | 需求分析 |
第二周 | 10月24-11月02 | 原型设计+概要设计 |
第三周 | 11月02-11月08 | 前端页面设计、后端基础功能实现 |
第四周 | 11月09-11月15 | 完成前后端开发,撰写相关文档 |
第五周 | 11月16-11月22 | 前后端集成,系统功能初步演示,完成测试报告 |
第六周 | 11月23-11月30 | 审查代码,修复bug并优化性能,交予用户使用,收集反馈再度优化 |
里程碑:
五、团队协作记录
这次我们的团队协作十分顺利,首先是使用了语雀这个团队协作平台。我们创建了一个语雀的团队空间,让大家能实时地交流自己完成的部分。不仅如此,语雀还能查看文档的历史版本,这让大家想法改变时找到原来的版本,非常不错~~
以下是语雀团队空间的展示:
-
公共区
-
协作完成的文档
同时我们也使用qq来共同反馈进度。
不仅如此,小组每个分组的同学也会线下讨论
最后展示一下我们的Github的Commits
六、成果链接
成果展示 | 链接 |
---|---|
Github团队仓库链接 | 卷卷福 |
先天软工圣体队_系统设计说明书.pdf | 系统设计说明书.pdf |
先天软工圣体队_数据库设计说明书.pdf | 数据库设计说明书.pdf |
先天软工圣体队_原型设计+概要设计答辩PPT.pdf | 原型设计+概要设计答辩PPT.pdf |