课程评价与选课推荐应用


欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net

一、项目概述

运行效果图

image-20260410230816750

image-20260410230821268

image-20260410230828677

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 整体架构图

Data Layer

Business Layer

Presentation Layer

主页面
CourseEvaluationHomePage

评价页

推荐页

搜索页

个人中心

课程列表

评价详情

发布评价

推荐算法

热门课程

个性推荐

搜索框

筛选条件

搜索结果

我的选课

我的评价

收藏课程

评价管理器
EvaluationManager

推荐引擎
RecommendEngine

搜索服务
SearchService

Course
课程

CourseEvaluation
评价

Teacher
教师

User
用户

2.2 类图设计

has

has

references

references

references

CourseEvaluationApp

+Widget build()

«enumeration»

CourseType

+String label

+String emoji

+required()

+elective()

+general()

+pe()

+lab()

+practice()

«enumeration»

DifficultyLevel

+String label

+String emoji

+int value

+easy()

+medium()

+hard()

+extreme()

Course

+String id

+String name

+String code

+CourseType type

+int credit

+DifficultyLevel difficulty

+Teacher teacher

+double rating

+int evaluationCount

+List<String> tags

CourseEvaluation

+String id

+String courseId

+String userId

+String userName

+double rating

+String content

+List<String> pros

+List<String> cons

+int likes

+DateTime createdAt

Teacher

+String id

+String name

+String department

+String title

+double rating

+int courseCount

User

+String id

+String username

+String studentId

+String department

+List<String> selectedCourses

+List<String> favoriteCourses

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 课程类型分布
30% 25% 20% 10% 10% 5% 课程类型分布示例 必修课 选修课 通识课 体育课 实验课 实践课

3.2 页面结构设计

3.2.1 主页面布局

CourseEvaluationHomePage

IndexedStack

评价页

推荐页

搜索页

个人中心

NavigationBar

评价 Tab

推荐 Tab

搜索 Tab

我的 Tab

3.2.2 评价页结构

评价页

SliverAppBar

课程类型筛选

课程列表

排序选项

必修课

选修课

通识课

课程卡片

课程信息

评分显示

评价数量

按评分排序

按热度排序

按时间排序

3.2.3 推荐页结构

推荐页

SliverAppBar

热门推荐

个性推荐

选课建议

热门课程列表

高分课程

基于兴趣

基于专业

基于历史

选课策略

避坑指南

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 后续版本规划

2024-01-07 2024-01-14 2024-01-21 2024-01-28 2024-02-04 2024-02-11 2024-02-18 2024-02-25 2024-03-03 2024-03-10 2024-03-17 2024-03-24 2024-03-31 基础UI框架 课程评价功能 搜索筛选功能 推荐算法优化 评价互动功能 数据统计分析 选课提醒功能 课程对比功能 社交分享功能 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 课程评价与选课推荐应用开发计划

7.2 功能扩展建议

7.2.1 智能推荐功能

推荐功能:

  • 基于学习风格推荐
  • 基于时间安排推荐
  • 基于毕业要求推荐
  • 基于就业方向推荐
7.2.2 数据分析功能

分析功能:

  • 选课趋势分析
  • 评分变化趋势
  • 热门课程排行
  • 选课建议报告
7.2.3 社交功能

社交功能:

  • 好友选课查看
  • 选课小组讨论
  • 评价分享
  • 选课攻略

八、注意事项

8.1 开发注意事项

  1. 评价真实性:需验证用户是否选修过课程

  2. 评分公正性:防止恶意刷分行为

  3. 数据更新:课程信息需及时更新

  4. 用户隐私:保护用户个人信息

  5. 推荐准确性:优化推荐算法提高准确度

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 设计规范,以清新的紫色为主色调,象征知识与智慧。通过本应用,希望能够帮助学生做出明智的选课决策,提高学习效率,优化选课体验。

课程评价与选课推荐——明智选课,高效学习


Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐