# easypoi测试 **Repository Path**: wenicer/easypoi-testing ## Basic Information - **Project Name**: easypoi测试 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-22 - **Last Updated**: 2025-10-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 学生成绩管理系统 基于 Spring Boot 3 和 EasyPOI 的学生成绩管理系统,支持按班级查看和导出学生成绩单。 ## 功能特性 - 📊 按班级查看学生成绩 - 📥 导出Excel成绩单 - 🎯 支持单个班级或全部班级导出 - 📝 序列号按班级自动递增 - 💡 响应式前端界面 ## 技术栈 - **后端框架**: Spring Boot 3.1.5 - **JDK版本**: Java 17 - **Excel处理**: EasyPOI 4.4.0 - **构建工具**: Maven - **前端**: HTML + CSS + JavaScript ## 项目结构 ``` easypoi测试/ ├── pom.xml # Maven配置文件 ├── src/ │ └── main/ │ ├── java/ │ │ └── com/example/easypoi/ │ │ ├── EasypoiApplication.java # 启动类 │ │ ├── common/ │ │ │ ├── ResponseResult.java # 统一响应结果 │ │ │ └── ResultCode.java # 响应状态码枚举 │ │ ├── controller/ │ │ │ └── StudentScoreController.java # 控制器 │ │ ├── entity/ │ │ │ └── StudentScore.java # 学生成绩实体 │ │ ├── enums/ │ │ │ └── ClassCodeEnum.java # 班级代码枚举 │ │ └── service/ │ │ └── StudentScoreService.java # 业务逻辑层 │ └── resources/ │ ├── application.yml # 应用配置 │ └── static/ │ └── index.html # 前端页面 └── README.md # 项目说明 ``` ## 快速开始 ### 环境要求 - JDK 17+ - Maven 3.6+ ### 运行步骤 1. **克隆项目到本地** 2. **进入项目目录** ```bash cd easypoi测试 ``` 3. **使用Maven构建项目** ```bash mvn clean install ``` 4. **运行应用** ```bash mvn spring-boot:run ``` 或者直接运行主类: ```bash java -jar target/easypoi-demo-1.0.0.jar ``` 5. **访问应用** 打开浏览器访问:http://localhost:8080 ## 使用说明 ### 前端操作 1. **选择班级** - 打开首页,在下拉框中选择要查看的班级 - "全部班级"选项会显示所有班级的数据 2. **查看成绩** - 点击"查看成绩"按钮,页面会展示所选班级的成绩列表 - 成绩表格包含:序列号、所属班级、姓名、学号、语文、数学、英语、总分 3. **导出Excel** - 点击"导出Excel"按钮,会自动下载对应班级的成绩单 - 文件名格式:`{班级名称}成绩单.xlsx` ### API接口 #### 1. 获取班级列表 ``` GET /api/student-score/class-list ``` 响应示例: ```json { "code": 200, "message": "操作成功", "data": [ {"code": "00", "name": "全部班级"}, {"code": "01", "name": "班级1"}, {"code": "02", "name": "班级2"}, {"code": "03", "name": "班级3"} ] } ``` #### 2. 查询学生成绩 ``` GET /api/student-score/list?classCode={classCode} ``` 参数: - `classCode`: 班级代码(00-全部班级,01-班级1,02-班级2,03-班级3) 响应示例: ```json { "code": 200, "message": "操作成功", "data": [ { "serialNumber": 1, "className": "班级1", "name": "学生01-01", "studentId": "S010001", "chineseScore": 85.5, "mathScore": 90.2, "englishScore": 88.7, "totalScore": 264.4, "classCode": "01" } ] } ``` #### 3. 导出Excel ``` GET /api/student-score/export?classCode={classCode} ``` 参数: - `classCode`: 班级代码 返回:Excel文件流 ## 核心实现 ### 序列号递增逻辑 序列号按班级递增,不会跨班级。在导出时会自动按班级分组重新编号: ```java // 按班级代码分组 Map> groupedData = dataList.stream() .collect(Collectors.groupingBy(StudentScore::getClassCode)); // 重新设置序列号(每个班级从1开始) List exportList = new ArrayList<>(); for (Map.Entry> entry : groupedData.entrySet()) { List classScores = entry.getValue(); for (int i = 0; i < classScores.size(); i++) { classScores.get(i).setSerialNumber(i + 1); } exportList.addAll(classScores); } ``` ### EasyPOI注解使用 在实体类上使用 `@Excel` 注解标注导出字段: ```java @Excel(name = "序列号", orderNum = "0", width = 10) private Integer serialNumber; @Excel(name = "所属班级", orderNum = "1", width = 15) private String className; ``` ### 数据模拟 使用 `generateMockData()` 方法模拟每个班级10个学生的成绩数据,成绩随机生成在60-100分之间。 ## 注意事项 1. 当前版本使用模拟数据,实际使用时需要连接真实数据库 2. 导出功能基于浏览器下载,部分浏览器可能会拦截自动下载 3. Excel文件编码为UTF-8,支持中文文件名 ## 扩展建议 - [ ] 集成数据库(MySQL/PostgreSQL) - [ ] 添加用户认证和权限管理 - [ ] 支持成绩导入功能 - [ ] 添加成绩统计分析图表 - [ ] 支持多sheet导出 - [ ] 添加数据验证和异常处理 ## 许可证 MIT License ## 联系方式 如有问题或建议,欢迎反馈!