Flutter 框架跨平台鸿蒙开发 - 课程评价与选课推荐
运行效果图课程评价与选课推荐是一款教育服务应用,为学生提供课程评价和选课参考服务。支持课程评价浏览、选课推荐、课程搜索等功能,让用户轻松选择适合自己的课程。应用内置真实评价、智能推荐、课程对比等功能,帮助学生做出明智的选课决策。应用以清新的紫色为主色调,象征知识与智慧。涵盖课程评价、选课推荐、课程搜索、个人中心四大模块。用户可以浏览课程评价、查看推荐课程、搜索课程信息、管理个人选课。序号类型名称E
课程评价与选课推荐应用
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
一、项目概述
运行效果图



1.1 应用简介
课程评价与选课推荐是一款教育服务应用,为学生提供课程评价和选课参考服务。支持课程评价浏览、选课推荐、课程搜索等功能,让用户轻松选择适合自己的课程。应用内置真实评价、智能推荐、课程对比等功能,帮助学生做出明智的选课决策。
应用以清新的紫色为主色调,象征知识与智慧。涵盖课程评价、选课推荐、课程搜索、个人中心四大模块。用户可以浏览课程评价、查看推荐课程、搜索课程信息、管理个人选课。
1.2 核心功能
| 功能模块 | 功能描述 | 实现方式 |
|---|---|---|
| 课程评价 | 浏览课程评价信息 | 列表展示 |
| 选课推荐 | 智能推荐课程 | 算法推荐 |
| 课程搜索 | 搜索课程信息 | 关键词匹配 |
| 评价发布 | 发布课程评价 | 表单提交 |
| 课程收藏 | 收藏感兴趣课程 | 标记功能 |
1.3 课程类型定义
| 序号 | 类型名称 | Emoji | 描述 |
|---|---|---|---|
| 1 | 必修课 | 📚 | 专业必修课程 |
| 2 | 选修课 | 📖 | 专业选修课程 |
| 3 | 通识课 | 🌍 | 通识教育课程 |
| 4 | 体育课 | ⚽ | 体育健身课程 |
| 5 | 实验课 | 🔬 | 实验实践课程 |
| 6 | 实践课 | 💼 | 实习实践课程 |
1.4 课程难度等级
| 序号 | 难度等级 | Emoji | 描述 |
|---|---|---|---|
| 1 | 简单 | 🟢 | 容易通过 |
| 2 | 中等 | 🟡 | 需要努力 |
| 3 | 困难 | 🔴 | 具有挑战性 |
| 4 | 极难 | 🟣 | 需要很强基础 |
1.5 技术栈
| 技术领域 | 技术选型 | 版本要求 |
|---|---|---|
| 开发框架 | Flutter | >= 3.0.0 |
| 编程语言 | Dart | >= 2.17.0 |
| 设计规范 | Material Design 3 | - |
| 状态管理 | setState | - |
| 数据存储 | 内存存储 | - |
| 目标平台 | 鸿蒙OS / Web | API 21+ |
1.6 项目结构
lib/
└── main_course_evaluation.dart
├── CourseEvaluationApp # 应用入口
├── CourseType # 课程类型枚举
├── DifficultyLevel # 难度等级枚举
├── Course # 课程模型
├── CourseEvaluation # 课程评价模型
├── Teacher # 教师模型
├── User # 用户模型
├── CourseEvaluationHomePage # 主页面(底部导航)
├── _buildEvaluationPage # 评价页面
├── _buildRecommendPage # 推荐页面
├── _buildSearchPage # 搜索页面
├── _buildProfilePage # 个人中心页面
├── CourseCard # 课程卡片组件
├── EvaluationCard # 评价卡片组件
└── RatingStars # 评分星星组件
二、系统架构
2.1 整体架构图
2.2 类图设计
2.3 页面导航流程
2.4 评价发布流程
三、核心模块设计
3.1 数据模型设计
3.1.1 课程类型枚举 (CourseType)
enum CourseType {
required(label: '必修课', emoji: '📚'),
elective(label: '选修课', emoji: '📖'),
general(label: '通识课', emoji: '🌍'),
pe(label: '体育课', emoji: '⚽'),
lab(label: '实验课', emoji: '🔬'),
practice(label: '实践课', emoji: '💼');
final String label;
final String emoji;
}
3.1.2 课程模型 (Course)
class Course {
final String id; // 课程ID
final String name; // 课程名称
final String code; // 课程代码
final CourseType type; // 课程类型
final int credit; // 学分
final DifficultyLevel difficulty; // 难度等级
final Teacher teacher; // 授课教师
final double rating; // 综合评分
final int evaluationCount; // 评价数量
final List<String> tags; // 标签
}
3.1.3 课程评价模型 (CourseEvaluation)
class CourseEvaluation {
final String id; // 评价ID
final String courseId; // 课程ID
final String userId; // 用户ID
final String userName; // 用户名
final double rating; // 评分
final String content; // 评价内容
final List<String> pros; // 优点列表
final List<String> cons; // 缺点列表
final int likes; // 点赞数
final DateTime createdAt; // 创建时间
}
3.1.4 教师模型 (Teacher)
class Teacher {
final String id; // 教师ID
final String name; // 教师姓名
final String department; // 所属院系
final String title; // 职称
final double rating; // 评分
final int courseCount; // 授课数量
}
3.1.5 课程类型分布
3.2 页面结构设计
3.2.1 主页面布局
3.2.2 评价页结构
3.2.3 推荐页结构
3.2.4 搜索页结构
3.3 推荐算法逻辑
3.4 评价发布逻辑
四、UI设计规范
4.1 配色方案
应用以清新的紫色为主色调,象征知识与智慧:
| 颜色类型 | 色值 | 用途 |
|---|---|---|
| 主色 | #9C27B0 (Purple) | 导航、主题元素 |
| 辅助色 | #BA68C8 | 按钮高亮 |
| 第三色 | #CE93D8 | 卡片背景 |
| 强调色 | #E1BEE7 | 标签背景 |
| 背景色 | #FAFAFA | 页面背景 |
| 卡片背景 | #FFFFFF | 课程卡片 |
4.2 难度等级颜色
| 难度 | 色值 | 视觉效果 |
|---|---|---|
| 简单 | #4CAF50 | 清新绿色 |
| 中等 | #FFC107 | 明亮黄色 |
| 困难 | #F44336 | 鲜艳红色 |
| 极难 | #9C27B0 | 深邃紫色 |
4.3 字体规范
| 元素 | 字号 | 字重 | 颜色 |
|---|---|---|---|
| 页面标题 | 24px | Bold | 主色 |
| 课程名称 | 18px | Bold | #000000 |
| 教师名称 | 14px | Medium | #333333 |
| 评价内容 | 14px | Regular | #666666 |
| 评分显示 | 16px | Bold | 主色 |
4.4 组件规范
4.4.1 课程卡片
┌─────────────────────────────────────┐
│ ┌─────────────────────────────┐ │
│ │ 📚 数据结构与算法 │ │
│ │ │ │
│ │ 课程代码: CS201 │ │
│ │ 教师: 张教授 │ │
│ │ 学分: 4.0 │ │
│ │ │ │
│ │ ⭐⭐⭐⭐⭐ 4.5 (128条评价) │ │
│ │ │ │
│ │ 🟡 中等难度 │ │
│ │ │ │
│ │ [查看评价] [收藏课程] │ │
│ └─────────────────────────────┘ │
└─────────────────────────────────────┘
4.4.2 评价卡片
┌─────────────────────────────────────┐
│ 课程评价 │
│ │
│ ┌─────────────────────────────┐ │
│ │ 👤 张同学 │ │
│ │ ⭐⭐⭐⭐⭐ 5.0 │ │
│ │ 📅 2024-01-15 │ │
│ │ │ │
│ │ 课程内容丰富,老师讲解清晰 │ │
│ │ │ │
│ │ ✅ 优点: │ │
│ │ • 讲解清晰 │ │
│ │ • 作业适量 │ │
│ │ │ │
│ │ ❌ 缺点: │ │
│ │ • 考试较难 │ │
│ │ │ │
│ │ 👍 32 │ │
│ └─────────────────────────────┘ │
└─────────────────────────────────────┘
4.4.3 评分星星
┌─────────────────────────────────────┐
│ 课程评分 │
│ │
│ ⭐⭐⭐⭐⭐ 5.0 │
│ │
│ 综合评分: 4.5分 │
│ 评价数量: 128条 │
│ │
│ 评分分布: │
│ 5星 ████████░░ 80% │
│ 4星 ███░░░░░░░ 15% │
│ 3星 █░░░░░░░░░ 3% │
│ 2星 ░░░░░░░░░░ 1% │
│ 1星 ░░░░░░░░░░ 1% │
└─────────────────────────────────────┘
4.4.4 搜索筛选
┌─────────────────────────────────────┐
│ 搜索课程 │
│ │
│ ┌─────────────────────────────┐ │
│ │ 搜索课程名称或代码... 🔍 │ │
│ └─────────────────────────────┘ │
│ │
│ 课程类型 │
│ [📚必修] [📖选修] [🌍通识] │
│ │
│ 难度等级 │
│ [🟢简单] [🟡中等] [🔴困难] │
│ │
│ 学分范围 │
│ ──────●────── 2-4学分 │
│ │
│ [重置] [搜索] │
└─────────────────────────────────────┘
4.4.5 发布评价
┌─────────────────────────────────────┐
│ 发布评价 │
│ │
│ 课程: 数据结构与算法 │
│ │
│ 评分 │
│ ⭐⭐⭐⭐⭐ │
│ │
│ 评价内容 │
│ ┌─────────────────────────────┐ │
│ │ 请输入评价内容... │ │
│ └─────────────────────────────┘ │
│ │
│ 优点 │
│ ┌─────────────────────────────┐ │
│ │ 添加优点... │ │
│ └─────────────────────────────┘ │
│ │
│ 缺点 │
│ ┌─────────────────────────────┐ │
│ │ 添加缺点... │ │
│ └─────────────────────────────┘ │
│ │
│ [取消] [发布] │
└─────────────────────────────────────┘
五、核心功能实现
5.1 课程评价发布实现
class EvaluationService {
static Future<CourseEvaluation> publishEvaluation({
required String courseId,
required String userId,
required String userName,
required double rating,
required String content,
required List<String> pros,
required List<String> cons,
}) async {
// 验证评价内容
if (content.isEmpty) {
throw Exception('评价内容不能为空');
}
if (rating < 1 || rating > 5) {
throw Exception('评分必须在1-5之间');
}
// 创建评价
final evaluation = CourseEvaluation(
id: 'eval_${DateTime.now().millisecondsSinceEpoch}',
courseId: courseId,
userId: userId,
userName: userName,
rating: rating,
content: content,
pros: pros,
cons: cons,
likes: 0,
createdAt: DateTime.now(),
);
// 更新课程评分
await updateCourseRating(courseId, rating);
return evaluation;
}
}
5.2 推荐算法实现
class RecommendEngine {
static List<Course> getRecommendations({
required User user,
required List<Course> allCourses,
required RecommendType type,
}) {
switch (type) {
case RecommendType.hot:
return _getHotCourses(allCourses);
case RecommendType.personal:
return _getPersonalRecommendations(user, allCourses);
case RecommendType.similar:
return _getSimilarUserRecommendations(user, allCourses);
}
}
static List<Course> _getHotCourses(List<Course> courses) {
return courses
.where((c) => c.evaluationCount > 10)
.toList()
..sort((a, b) => b.evaluationCount.compareTo(a.evaluationCount));
}
static List<Course> _getPersonalRecommendations(User user, List<Course> courses) {
// 基于用户历史选课和评价进行推荐
final selectedIds = user.selectedCourses.toSet();
return courses
.where((c) => !selectedIds.contains(c.id))
.toList()
..sort((a, b) => b.rating.compareTo(a.rating));
}
}
5.3 课程搜索实现
class CourseSearchService {
static List<Course> search({
required String keyword,
required List<Course> courses,
CourseType? type,
DifficultyLevel? difficulty,
double? minRating,
}) {
var results = courses.where((course) {
// 关键词匹配
final matchesKeyword = keyword.isEmpty ||
course.name.toLowerCase().contains(keyword.toLowerCase()) ||
course.code.toLowerCase().contains(keyword.toLowerCase());
// 类型筛选
final matchesType = type == null || course.type == type;
// 难度筛选
final matchesDifficulty = difficulty == null || course.difficulty == difficulty;
// 评分筛选
final matchesRating = minRating == null || course.rating >= minRating;
return matchesKeyword && matchesType && matchesDifficulty && matchesRating;
}).toList();
return results;
}
}
5.4 评分计算实现
class RatingCalculator {
static double calculateAverageRating(List<CourseEvaluation> evaluations) {
if (evaluations.isEmpty) return 0.0;
final totalRating = evaluations.fold<double>(0, (sum, e) => sum + e.rating);
return totalRating / evaluations.length;
}
static Map<int, double> calculateRatingDistribution(List<CourseEvaluation> evaluations) {
final distribution = <int, int>{1: 0, 2: 0, 3: 0, 4: 0, 5: 0};
for (var evaluation in evaluations) {
final rating = evaluation.rating.round();
if (distribution.containsKey(rating)) {
distribution[rating] = distribution[rating]! + 1;
}
}
final total = evaluations.length;
return distribution.map((key, value) =>
MapEntry(key, total > 0 ? (value / total * 100) : 0)
);
}
}
5.5 点赞功能实现
class LikeManager {
final Map<String, Set<String>> _userLikes = {};
bool isLiked(String evaluationId, String userId) {
return _userLikes[evaluationId]?.contains(userId) ?? false;
}
void toggleLike(String evaluationId, String userId, CourseEvaluation evaluation) {
if (_userLikes[evaluationId] == null) {
_userLikes[evaluationId] = {};
}
if (_userLikes[evaluationId]!.contains(userId)) {
_userLikes[evaluationId]!.remove(userId);
evaluation.likes--;
} else {
_userLikes[evaluationId]!.add(userId);
evaluation.likes++;
}
}
}
六、交互设计
6.1 课程浏览流程
6.2 评价发布流程
6.3 搜索筛选流程
七、扩展功能规划
7.1 后续版本规划
7.2 功能扩展建议
7.2.1 智能推荐功能
推荐功能:
- 基于学习风格推荐
- 基于时间安排推荐
- 基于毕业要求推荐
- 基于就业方向推荐
7.2.2 数据分析功能
分析功能:
- 选课趋势分析
- 评分变化趋势
- 热门课程排行
- 选课建议报告
7.2.3 社交功能
社交功能:
- 好友选课查看
- 选课小组讨论
- 评价分享
- 选课攻略
八、注意事项
8.1 开发注意事项
-
评价真实性:需验证用户是否选修过课程
-
评分公正性:防止恶意刷分行为
-
数据更新:课程信息需及时更新
-
用户隐私:保护用户个人信息
-
推荐准确性:优化推荐算法提高准确度
8.2 常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 评价不显示 | 未审核通过 | 等待审核 |
| 推荐不准确 | 数据不足 | 增加评价数据 |
| 搜索无结果 | 筛选过严 | 放宽条件 |
| 评分异常 | 数据错误 | 重新计算 |
| 无法点赞 | 已点赞过 | 取消后重试 |
8.3 使用技巧
📚 选课技巧 📚
查看评价
- 多看几条评价了解全貌
- 关注优缺点分析
- 参考评分分布
- 查看最新评价
使用推荐
- 完善个人信息
- 标记感兴趣的领域
- 参考热门推荐
- 结合自身情况
发布评价
- 客观真实评价
- 详细描述优缺点
- 提供实用建议
- 遵守评价规范
选课决策
- 综合考虑多方面因素
- 参考学长学姐建议
- 平衡课程难度
- 合理安排时间
九、运行说明
9.1 环境要求
| 环境 | 版本要求 |
|---|---|
| Flutter SDK | >= 3.0.0 |
| Dart SDK | >= 2.17.0 |
| 鸿蒙OS | API 21+ |
| Web浏览器 | Chrome 90+ |
9.2 运行命令
# 查看可用设备
flutter devices
# 运行到Web服务器
flutter run -d web-server -t lib/main_course_evaluation.dart --web-port 8144
# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_course_evaluation.dart
# 代码分析
flutter analyze lib/main_course_evaluation.dart
十、总结
课程评价与选课推荐应用是一款教育服务应用,通过课程评价、选课推荐、课程搜索、个人中心四大模块,为学生提供课程评价和选课参考服务。应用支持课程评价浏览、选课推荐、课程搜索等功能,让用户轻松选择适合自己的课程。
核心功能涵盖课程评价、选课推荐、课程搜索、评价发布四大模块。课程评价支持查看详细评价和评分分布;选课推荐提供热门推荐和个性推荐;课程搜索支持多条件筛选和排序;评价发布支持评分、内容、优缺点填写。
应用采用 Material Design 3 设计规范,以清新的紫色为主色调,象征知识与智慧。通过本应用,希望能够帮助学生做出明智的选课决策,提高学习效率,优化选课体验。
课程评价与选课推荐——明智选课,高效学习
更多推荐




所有评论(0)