# ClassMG - 互动式课堂管理系统

[English](README.md) | [中文版（当前）](README_CN.md)

## 概述

ClassMG是一款全面的课堂管理应用程序，专为互动式教学和学习设计。该系统支持教师和学生之间的实时通信、互动问答环节和即时反馈机制，所有这些功能都在统一的数字课堂环境中实现。

## 系统架构

ClassMG基于客户端-服务器架构：

- **客户端应用**：使用HarmonyOS ArkTS开发，确保跨设备兼容性
- **通信服务器**：基于Node.js的服务器，支持实时消息传递和状态同步
- **本地数据存储**：用于安全存储用户凭证和会话数据

## 核心功能

### 1. 课堂管理
- **创建课堂**：教师可以创建具有唯一访问码的虚拟课堂
- **加入课堂**：学生可以使用课堂码加入
- ~~**课堂状态**：实时监控活跃参与者~~
- **结束课堂**：教师可以终止会话，并向所有参与者发送通知

### ~~2. 实时通信~~
- **即时消息**：教师和学生之间的双向通信
- **消息同步**：具有自动重试机制的可靠消息传递
- **连接状态**：连接状态的可视化指示器，提供故障排除选项

### 3. 互动问答
- **问题发布**：教师可以创建并发布多选题
- **定时响应**：可配置的答题时间限制
- **提交答案**：学生可以提交答案并获得即时确认
- **结果分析**：以可视化方式呈现回答统计和正确率

### 4. 用户体验
- **自适应布局**：适应不同屏幕尺寸的响应式界面
- **视觉反馈**：所有操作的清晰状态指示
- **错误处理**：全面的错误通知和恢复选项
- **主题定制**：个性化的视觉外观设置

## 操作逻辑

### 认证流程
1. 用户使用用户名和密码注册（安全存储）
2. 根据本地凭据进行登录验证
3. 角色分配（教师或学生）决定可用功能

### 课堂会话流程
1. 教师创建具有唯一码的课堂
2. 学生使用提供的课堂码加入
3. 实时同步建立课堂环境
4. 教师和学生可以交换消息并参与问答环节
5. 教师可以结束课堂会话，系统会通知所有参与者

### 消息系统
1. 从输入区域撰写和发送消息
2. 本地预览立即显示，提供响应式用户体验
3. 消息传输到服务器
4. 服务器向所有连接的设备广播消息
5. 轮询机制确保消息传递，即使在临时断开连接后也能同步

### 问题管理
1. 教师创建带有多个选项的问题
2. 学生收到问题，并看到可配置的倒计时
3. 收集并跨设备同步回答
4. 问题结束后计算并显示结果
5. 教师可以查看详细统计，而学生能看到个人结果

## 技术实现

### 通信协议
- 基于HTTP的API用于课堂操作
- 轮询机制用于状态同步
- JSON消息格式用于数据交换

### 数据安全
- 本地凭证存储带有加密功能
- 通过唯一码控制课堂访问
- 对所有操作进行会话验证

### 同步机制
- 服务器维护课堂状态的权威来源
- 客户端轮询确保数据一致性
- 针对并发操作的冲突解决策略

### 错误处理
- 连接状态监控
- 自动重连尝试
- 用户友好的错误消息和恢复选项

## 服务器设置

### 前提条件
- Node.js（v12或更高版本）
- NPM（Node包管理器）

### 安装
1. 安装Node.js和NPM
2. 克隆或下载存储库
3. 使用`npm install`安装依赖项

### 运行服务器
1. 使用`npm start`或`node server.js`启动
2. 服务器默认运行在5243端口
3. 记下计算机的IP地址，用于客户端配置

## 客户端配置

### 开发环境
- DevEco Studio（推荐）
- HarmonyOS SDK

### 连接设置
1. 确保所有设备在同一网络上
2. 在客户端应用程序中配置服务器地址
3. 编译并部署到测试设备

## 故障排除

### 连接问题
- 验证所有设备是否在同一网络上
- 检查服务器IP地址和端口配置
- 使用应用程序内置的连接状态检查器

### 消息同步
- 如果消息未跨设备显示，检查连接状态
- 验证服务器是否正常运行
- 尝试使用应用内故障排除按钮重新连接

### 布局问题
- 如果UI元素未对齐或在屏幕外显示，请重启应用程序
- 不同设备屏幕尺寸可能需要在重大布局更改后重启应用程序

## 开发者注意事项

- 系统出于兼容性考虑使用轮询机制而非WebSockets
- 实现了消息去重以处理潜在的重复传递
- UI布局针对平板电脑和智能手机形态进行了优化
- 可以启用调试日志进行故障排除

---

**注意**：本文档提供了ClassMG系统的概述。有关详细的API文档和开发者指南，请参阅技术文档。 