十光年团队_项目原型设计+概要设计
作业所属的课程 | 软件工程2024 |
---|---|
作业要求 | 2024秋软工实践团队作业-第二次 |
作业的目标 | 完成原型设计和概要设计 |
团队名称 | 十光年 |
团队成员学号-姓名 | 施靖杰-102201327 邓才慧-102201102 陈宇尧-102201119 陆旭东-102201118 黄宇舟-102201331 邱予-102202121 高鑫源-102201635 黄森福-102201636 洪金举-102202136 朱思颖-102201106 |
1.原型设计
前台应用原型
链接:前端设计
1. 登录界面
- 功能:该界面为系统的入口,只有授权用户才能访问。用户在此界面输入用户名和密码并通过图片滑动验证码验证后,完成身份验证。此界面还包括必要的安全性措施,保障用户数据的安全。
2. 首页
- 功能:首页作为系统的主要导航界面,用户可以在此快速跳转到各个功能模块(例如个性化推荐、行程调整、客服支持等),方便快捷地找到所需的服务。
3. 个性化推荐界面
- 功能:用户可以在此输入旅行的目的地、日期、预算和个人偏好。系统通过调用大语言模型(如 ChatGPT API)生成个性化的旅行方案,并根据用户历史旅行记录提供推荐。用户可以手动修改和优化推荐方案,确保旅行体验更符合个人需求。
4. 天气调整行程界面
- 功能:该界面提供实时天气查询和天气预警功能。用户可以查看目的地的当前及未来天气,系统会根据天气变化动态调整行程安排,为用户提供更安全、舒适的出行体验。
5. 客服界面
- 功能:用户在该界面可以提出各种咨询需求,AI客服会根据用户问题提供即时回复,协助解决出行相关问题。这一功能通过自然语言处理技术,为用户提供智能化的客服体验。
后台管理原型
后端采用云数据库(Dcloud)进行管理
- 功能:后端采用 Dcloud 云数据库进行数据存储与管理,包括用户数据、行程记录、天气数据等。管理界面提供便捷的数据管理和分析工具,管理员可以通过该界面对用户和系统数据进行增删查改、权限控制和日志查看,保证数据的安全和系统的稳定运行。
2.概要设计
系统总体设计
系统架构简要分析
(1)服务器端
本项目的服务器端基于 Node.js 构建,并使用 UniCloud 作为后端平台。UniCloud 提供了后端一体化服务,集成了数据库、云函数等功能模块,适合开发快速响应的应用。在 API 集成方面,服务器端调用了多个外部 API(如百度文心一言 API、OpenWeatherMap API 和 LocationIQ API),用于获取天气、地理位置信息及其他智能数据支持,以提供丰富的出行信息服务。
(2)客户端
客户端采用 Vue.js 框架开发,用于构建高效、响应式的用户界面。客户端通过 RESTful API 与服务器端进行数据交互,以实时更新出行信息、个性化推荐等数据。通过 Vue 的动态渲染能力,确保用户可以获得流畅的交互体验。
(3)数据库平台
数据库方面,持久化数据库采用了 MySQL,提供高效的结构化数据存储,适合记录用户数据、历史出行信息和系统日志。同时,Redis 被用作缓存数据库,适合频繁读取的数据,以提高系统的响应速度。此架构在确保数据可靠存储的同时,也提升了系统的性能。
(4)消息队列
系统使用了消息队列(MQ)来处理异步任务,确保用户请求能高效地进行并发处理。MQ 适用于处理系统中的通知、日志记录和长时间任务,进一步提升了系统的扩展性和可靠性。
(5)功能模块
行趣系统的功能模块包括用户身份验证模块、个性化旅行推荐模块、气象感知行程模块、和紧急事件处理助手。通过这些功能模块,系统可以实现用户管理、推荐旅行方案、实时天气预报、以及紧急情况的快速响应,保障用户的安全。
(6)日志与权限管理
系统集成了权限控制和日志记录模块,确保用户数据的安全性及操作的可追溯性。权限控制模块负责对用户操作进行权限限制,防止未授权访问,而日志记录模块会记录用户操作信息,便于系统维护和问题追踪。
(7)操作系统
该系统的操作系统选择Windows 服务器。Linux 适合高稳定性和大规模并发处理的部署,而 Windows 提供了广泛的兼容性,可满足不同硬件环境的需求。
(8)开发工具介绍
前端开发工具采用 uni-app 和 Visual Studio Code,后端开发使用 Node.js 与 UniCloud,同时结合 MySQL Workbench 和 Redis Desktop Manager 进行数据库管理。接口管理工具使用 Apifox,用于设计、测试和管理 API,确保客户端与服务器端的数据交互准确无误。
UML设计
用例图
活动图
用户身份验证模块
个性化旅行推荐
紧急事件处理
客服与反馈
行程修改
类图
时序图
协作图
数据库设计
ER图
关系数据模型
表名 | 主键 | 外键 | 字段 | 关系描述 |
---|---|---|---|---|
用户信息表 (User_Info) | UserID | - | Username, UserProfilePic, Password, Email, CreationDate, LastLoginDate, Status | 与用户偏好表、行程状态表为一对多关系 |
管理员信息表 (Administrator_Info) | AdminID | - | AdminName, Password, Email, Role, CreationDate, LastLoginDate, Status | - |
用户偏好表 (Preferences_Info) | PreferenceID | UserID | Destination, BarrierFree, ParentChild, PetFriendly, MinBudget, MaxBudget, PreferredNatureSce, PreferredSocialSce, PreferredDietary, OtherRequirements, CreationDate, Status | 外键关联用户信息表 |
旅游景点表 (Scenic_Info) | ScenicID | - | ScenicName, Description, Location, ImageURL, Status与天气表为一对多关系 | |
天气表 (Weather_Info) | WeatherID | Destination | Date, WeatherCondition, Temperature, Rainfall, WindSpeed | 外键关联旅游景点表 |
行程状态表 (Trip_Info) | TripID | UserID | TripDate, TripSchedule, TripWarning, Status, CreationDate, Notes | 外键关联用户信息表 |
- 用户信息表
-- 用户信息表
CREATE TABLE User_Info (
UserID INT PRIMARY KEY AUTO_INCREMENT,
Username VARCHAR(50) NOT NULL,
UserProfilePic VARCHAR(255),
Password VARCHAR(255) NOT NULL,
Email VARCHAR(100) NOT NULL UNIQUE,
CreationDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
LastLoginDate TIMESTAMP,
Status ENUM('Active', 'Inactive') DEFAULT 'Active'
);
- 管理员信息表
-- 管理员信息表
CREATE TABLE Administrator_Info (
AdminID INT PRIMARY KEY AUTO_INCREMENT,
AdminName VARCHAR(50) NOT NULL,
Password VARCHAR(255) NOT NULL,
Email VARCHAR(100) NOT NULL UNIQUE,
Role ENUM('SuperAdmin', 'Admin') DEFAULT 'Admin',
CreationDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
LastLoginDate TIMESTAMP,
Status ENUM('Active', 'Inactive') DEFAULT 'Active'
);
- 用户偏好表
-- 用户偏好表
CREATE TABLE Preferences_Info (
PreferenceID INT PRIMARY KEY AUTO_INCREMENT,
UserID INT,
Destination VARCHAR(100),
BarrierFree BOOLEAN DEFAULT FALSE,
ParentChild BOOLEAN DEFAULT FALSE,
PetFriendly BOOLEAN DEFAULT FALSE,
MinBudget DECIMAL(10, 2),
MaxBudget DECIMAL(10, 2),
PreferredNatureSce VARCHAR(100),
PreferredSocialSce VARCHAR(100),
PreferredDietary VARCHAR(100),
OtherRequirements TEXT,
CreationDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
Status ENUM('Active', 'Inactive') DEFAULT 'Active',
FOREIGN KEY (UserID) REFERENCES User_Info(UserID)
);
- 旅游景点表
-- 旅游景点表
CREATE TABLE Scenic_Info (
ScenicID INT PRIMARY KEY AUTO_INCREMENT,
ScenicName VARCHAR(100) NOT NULL,
Description TEXT,
Location VARCHAR(100),
ImageURL VARCHAR(255),
Status ENUM('Open', 'Closed') DEFAULT 'Open'
);
- 天气表
-- 旅游景点表
CREATE TABLE Weather_Info (
WeatherID INT PRIMARY KEY AUTO_INCREMENT,
Destination VARCHAR(100),
Date DATE NOT NULL,
WeatherCondition VARCHAR(50),
Temperature DECIMAL(5, 2),
Rainfall DECIMAL(5, 2),
WindSpeed DECIMAL(5, 2),
FOREIGN KEY (Destination) REFERENCES Scenic_Info(Location)
);
- 行程状态表
CREATE TABLE Trip_Info (
TripID INT PRIMARY KEY AUTO_INCREMENT,
UserID INT,
TripDate DATE NOT NULL,
TripSchedule TEXT,
TripWarning TEXT,
Status ENUM('Planned', 'Ongoing', 'Completed', 'Cancelled') DEFAULT 'Planned',
CreationDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
Notes TEXT,
FOREIGN KEY (UserID) REFERENCES User_Info(UserID)
);
对象关系映射
ORM 类名 | 属性 | 关系描述 |
---|---|---|
User | user_id, username, user_profile_pic, password, email, creation_date, last_login_date, status | 与Preference类 |
Administrator | admin_id, admin_name, password, email, role, creation_date, last_login_date, status | - |
Preference | preference_id, destination, barrier_free, parent_child, pet_friendly, min_budget, max_budget, preferred_nature_sce, preferred_social_sce, preferred_dietary, other_requirements, creation_date, status | 外键关联到User类 |
Scenic | scenic_id, scenic_name, description, location, image_url, status | 与Weather类建立一对多关系 |
Weather | weather_id, date, weather_condition, temperature, rainfall, wind_speed | 外键关联到Scenic类 |
Trip | trip_id, trip_date, trip_schedule, trip_warning, status, creation_date, notes | 外键关联到User类 |
class UserInfo(Base):
__tablename__ = 'User_Info'
user_id = Column(Integer, primary_key=True, autoincrement=True)
username = Column(String(50), nullable=False)
user_profile_pic = Column(String(255))
password = Column(String(255), nullable=False)
email = Column(String(100), unique=True, nullable=False)
creation_date = Column(TIMESTAMP, default='CURRENT_TIMESTAMP')
last_login_date = Column(TIMESTAMP)
status = Column(Enum('Active', 'Inactive'), default='Active')
preferences = relationship("PreferencesInfo", back_populates="user")
trips = relationship("TripInfo", back_populates="user")
class AdministratorInfo(Base):
__tablename__ = 'Administrator_Info'
admin_id = Column(Integer, primary_key=True, autoincrement=True)
admin_name = Column(String(50), nullable=False)
password = Column(String(255), nullable=False)
email = Column(String(100), unique=True, nullable=False)
role = Column(Enum('SuperAdmin', 'Admin'), default='Admin')
creation_date = Column(TIMESTAMP, default='CURRENT_TIMESTAMP')
last_login_date = Column(TIMESTAMP)
status = Column(Enum('Active', 'Inactive'), default='Active')
class PreferencesInfo(Base):
__tablename__ = 'Preferences_Info'
preference_id = Column(Integer, primary_key=True, autoincrement=True)
user_id = Column(Integer, ForeignKey('User_Info.UserID'))
destination = Column(String(100))
barrier_free = Column(Boolean, default=False)
parent_child = Column(Boolean, default=False)
pet_friendly = Column(Boolean, default=False)
min_budget = Column(DECIMAL(10, 2))
max_budget = Column(DECIMAL(10, 2))
preferred_nature_sce = Column(String(100))
preferred_social_sce = Column(String(100))
preferred_dietary = Column(String(100))
other_requirements = Column(Text)
creation_date = Column(TIMESTAMP, default='CURRENT_TIMESTAMP')
status = Column(Enum('Active', 'Inactive'), default='Active')
user = relationship("UserInfo", back_populates="preferences")
class ScenicInfo(Base):
__tablename__ = 'Scenic_Info'
scenic_id = Column(Integer, primary_key=True, autoincrement=True)
scenic_name = Column(String(100), nullable=False)
description = Column(Text)
location = Column(String(100))
image_url = Column(String(255))
status = Column(Enum('Open', 'Closed'), default='Open')
weather_records = relationship("WeatherInfo", back_populates="scenic")
class WeatherInfo(Base):
__tablename__ = 'Weather_Info'
weather_id = Column(Integer, primary_key=True, autoincrement=True)
destination = Column(String(100), ForeignKey('Scenic_Info.Location'))
date = Column(Date, nullable=False)
weather_condition = Column(String(50))
temperature = Column(DECIMAL(5, 2))
rainfall = Column(DECIMAL(5, 2))
wind_speed = Column(DECIMAL(5, 2))
scenic = relationship("ScenicInfo", back_populates="weather_records")
class TripInfo(Base):
__tablename__ = 'Trip_Info'
trip_id = Column(Integer, primary_key=True, autoincrement=True)
user_id = Column(Integer, ForeignKey('User_Info.UserID'))
trip_date = Column(Date, nullable=False)
trip_schedule = Column(Text)
trip_warning = Column(Text)
status = Column(Enum('Planned', 'Ongoing', 'Completed', 'Cancelled'), default='Planned')
creation_date = Column(TIMESTAMP, default='CURRENT_TIMESTAMP')
notes = Column(Text)
user = relationship("UserInfo", back_populates="trips")
3.团队协作
预期开发计划时间安排
周次 | 日期范围 | 里程碑 | 产出 |
---|---|---|---|
第一周 | 11月2日 - 11月8日 | 前端开发初步完成,建立数据库 | 根据原型设计完成大部分前端开发,初步建立数据库 |
第二周 | 11月9日 - 11月15日 | 前端开发基本完成,后端开发初步完成 | 根据API接口文档初步完成后端开发 |
第三周 | 11月16日 - 11月22日 | 前后端集成开发 | 初步实现系统演示,进行测试 |
第四周 | 11月23日 - 11月29日 | 代码审查,测试组对系统进行测试与反馈 | 完成代码审查,根据测试结果与反馈修改程序漏洞,完善功能 |
预计开发计划分工安排
姓名 | 角色 | 负责开发部分 |
---|---|---|
施靖杰 | 组长 | 项目管理与分工,撰写文案 |
朱思颖 | 设计组负责人 | 负责系统的整体UI设计,界面布局规划 |
洪金举 | 设计组人员 | 协助UI设计,图标和图片资源设计 |
高鑫源 | 前端组负责人 | 前端架构设计与关键页面开发,指导前端组 |
邓才慧 | 前端组人员 | 负责实现旅行规划和推荐模块的前端界面 |
黄森福 | 前端组人员 | 负责用户管理、登录注册等前端界面 |
黄宇舟 | 后端组负责人 | 后端架构设计,主要功能模块的API开发 |
邱予 | 后端组人员 | 实现行程管理、天气数据等功能接口 |
陈宇尧 | 测试组负责人 | 测试计划的制定,组织测试用例编写和执行 |
陆旭东 | 测试组人员 | 负责前端、后端模块的功能测试及反馈 |
协作记录
使用Github Desktop进行项目协作
Github贡献记录
- GitHub团队仓库链接:https://github.com/114John114/Ten_Lightyears
- 十光年_系统设计说明书:https://pan.quark.cn/s/15e3fd5a711b
- 十光年_数据库设计说明书:https://pan.quark.cn/s/179a42d981e5
- 十光年_原型设计+概要设计答辩PPT:https://pan.quark.cn/s/eb64b4f1bd2d