# 基于Rust+Tauri开发的桌面成绩分析系统 **Repository Path**: ucanner/score-analyzer ## Basic Information - **Project Name**: 基于Rust+Tauri开发的桌面成绩分析系统 - **Description**: 基于Rust+Tauri开发的桌面成绩分析系统 - **Primary Language**: Rust - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-03-29 - **Last Updated**: 2026-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 高中生成绩分析系统 ## 项目简介 高中生成绩分析系统是一个基于 Tauri 2.0 开发的桌面应用,支持本地和 NAS 双模式运行,纯内网环境下使用,无需外网依赖。系统旨在为学校教务场景提供高效的成绩管理和分析功能,帮助教师更好地了解学生的学习情况。 ## 技术栈 - **桌面框架**: Tauri 2.0 - **前端**: Vue 3 + JavaScript + Element Plus + ECharts - **后端**: Rust - **数据库**: SQLite3(tauri-plugin-sql) - **Excel 处理**: Rust calamine 库 ## 核心功能 ### 双数据库模式 - **本地模式**: 使用本地 SQLite 数据库,支持读写操作,开放全部功能 - **NAS 模式**: 使用局域网 UNC 路径(\\NAS_IP\共享路径\score.db),只读模式,隐藏编辑/导入按钮 - **智能切换**: 启动时自动优先连接 NAS,失败则切换到本地模式;顶部栏可手动切换,配有状态提示 - **NAS 路径配置**: 支持配置并保存 NAS 路径 ### Excel 智能导入 - **智能识别**: 读取 Excel 文件前 5 行智能识别表头 - **自动匹配**: 自动匹配姓名/学号/班级/年级/各科分数/赋分/排名/等级 - **列映射弹窗**: 识别失败时触发前端列映射弹窗 - **数据清洗**: 自动去空格、缺考/空值转 0、空排名转 0 - **批量处理**: 学生按学号去重更新,成绩按唯一约束覆盖,批量事务插入 ### 前端 UI - **经典后台布局**: 顶部栏(标题 + 全局学号/姓名搜索 + 模式切换)+ 左侧侧边栏 + 主内容区 - **侧边菜单**: 数据概览、成绩导入(仅本地模式可见)、学生查询、成绩统计 - **学生查询页**: 支持筛选年级/班级/考试,表格展示成绩,点击行右侧滑出抽屉 - **抽屉内容**: 学生信息、各科成绩、科目雷达图、历次考试折线图 ### 权限与部署 - **权限管理**: NAS 端文件夹管理员读写,其他电脑只读 - **安装版打包**: 支持 Windows 安装版打包,内网 NAS 分发,一次更新全校同步 ## 数据库表结构 系统包含 3 张表,含外键与唯一约束: ### students 表 | 字段名 | 类型 | 描述 | |-------|------|------| | id | INTEGER | 主键,自增 | | student_no | TEXT | 唯一学号 | | name | TEXT | 学生姓名 | | class_name | TEXT | 班级名称 | | grade | TEXT | 年级(高一/高二/高三) | | created_at | DATETIME | 创建时间 | ### exams 表 | 字段名 | 类型 | 描述 | |-------|------|------| | id | INTEGER | 主键,自增 | | exam_name | TEXT | 考试名称 | | exam_date | TEXT | 考试日期 | | exam_type | TEXT | 考试类型(周考/月考/联考/普通考试) | | created_at | DATETIME | 创建时间 | ### scores 表 | 字段名 | 类型 | 描述 | |-------|------|------| | id | INTEGER | 主键,自增 | | student_id | INTEGER | 外键,关联 students.id | | exam_id | INTEGER | 外键,关联 exams.id | | subject | TEXT | 科目 | | original_score | REAL | 原始分 | | scored_score | REAL | 赋分成绩 | | grade_level | TEXT | 赋分等级(A/B/C/D/E) | | school_rank | INTEGER | 校排名 | | class_rank | INTEGER | 班排名 | | union_rank | INTEGER | 联考排名 | | 唯一约束 | - | student_id + exam_id + subject | ## 安装教程 ### 前提条件 - Windows 10 或 Windows 11 操作系统 - 已安装 Node.js 16.0 或更高版本 - 已安装 Rust 工具链 - 已安装 Visual Studio Build Tools(用于 Rust 编译) ### 安装步骤 1. **克隆项目** ```bash git clone https://github.com/your-repo/score-analyzer.git cd score-analyzer ``` 2. **安装前端依赖** ```bash npm install ``` 3. **构建前端项目** ```bash npm run build ``` 4. **构建桌面应用** ```bash npm run tauri build ``` 5. **安装应用** - 构建完成后,在 `src-tauri/target/release/bundle/msi` 目录下找到生成的 MSI 安装包 - 双击 MSI 文件进行安装 ## 使用说明 ### 首次启动 1. 系统会自动尝试连接 NAS 数据库 2. 如果连接失败,会自动切换到本地模式 3. 首次使用本地模式时,系统会自动创建数据库文件 `score.db` ### 功能使用 #### 数据概览 - 查看学生总数、考试次数、成绩记录数、班级数量 - 查看成绩分布饼图和考试趋势折线图 #### 成绩导入 1. 点击左侧菜单 "成绩导入"(仅本地模式可见) 2. 填写考试信息(考试名称、考试日期、考试类型) 3. 选择 Excel 文件 4. 系统自动识别表头,如识别失败,会弹出列映射弹窗 5. 确认映射关系后,点击 "开始导入" 6. 导入完成后,系统会显示导入结果 #### 学生查询 1. 点击左侧菜单 "学生查询" 2. 使用筛选条件(年级、班级、考试) 3. 点击查询按钮 4. 在表格中点击学生行,右侧会滑出学生详情抽屉 5. 查看学生基本信息、各科成绩、科目雷达图、历次考试折线图 #### 成绩统计 1. 点击左侧菜单 "成绩统计" 2. 使用筛选条件(年级、考试) 3. 查看班级平均分柱状图和科目成绩分布堆叠图 ### 数据库模式切换 1. 点击顶部栏右侧的模式切换下拉菜单 2. 选择 "本地模式" 或 "NAS模式" 3. 如需配置 NAS 路径,选择 "NAS路径配置" 4. 输入 NAS 路径(例如:\\192.168.1.100\share\score.db) 5. 点击 "保存" 按钮 ## 开发环境搭建 ### 前端开发 1. **启动开发服务器** ```bash npm run dev ``` 2. **启动 Tauri 开发模式** ```bash npm run tauri dev ``` ### 后端开发 - 后端代码位于 `src-tauri/src` 目录 - 主要文件: - `main.rs`:应用入口 - `db.rs`:数据库操作 - `excel.rs`:Excel 处理 - `model.rs`:数据模型 ## 构建和部署 ### 构建步骤 1. **构建前端项目** ```bash npm run build ``` 2. **构建桌面应用** ```bash npm run tauri build ``` 3. **部署到 NAS** - 将生成的 MSI 安装包复制到 NAS 共享文件夹 - 通知教师从 NAS 下载并安装 ### 版本更新 1. 修改代码后,重新构建应用 2. 将新的 MSI 安装包上传到 NAS 3. 教师重新安装即可更新 ## 贡献指南 1. **Fork 本仓库** 2. **新建 Feat_xxx 分支** 3. **提交代码** 4. **新建 Pull Request** ## 许可证 本项目采用 MIT 许可证 - 详情请参阅 LICENSE 文件 ## 联系方式 - 项目维护者:[Jason] - 邮箱:[jasoninternational@qq.com] - 问题反馈:请在 GitHub Issues 中提交 --- **注意**:本系统仅用于内网环境,不依赖外网服务,确保数据安全。