179 lines
5.6 KiB
Markdown
179 lines
5.6 KiB
Markdown
# 座位分配系统
|
||
|
||
智能座位分配工具,支持1-10人连坐需求,能够处理不连续座位的复杂情况。
|
||
|
||
## 🎯 功能特点
|
||
|
||
- ✅ **智能分配**: 支持1-10人的各种连坐需求
|
||
- ✅ **智能识别**: 自动识别Excel文件类型,支持默认文件名和智能识别两种模式
|
||
- ✅ **双重分组**: 支持备注分组和手机号分组两种模式
|
||
- ✅ **数据校验**: 完整的文件格式和逻辑校验,支持重名+身份证号校验
|
||
- ✅ **不连续座位**: 自动处理座位号间隙
|
||
- ✅ **详细日志**: 完整的操作记录和结果验证
|
||
- ✅ **跨平台**: 支持Windows、macOS、Linux
|
||
- ✅ **智能覆盖**: 人员信息覆盖座位表对应列,分配备注单独存储在第13列
|
||
|
||
## 📋 使用方法
|
||
|
||
### 准备Excel文件
|
||
|
||
1. **人员信息文件** - 包含以下列:
|
||
- 姓名、证件类型、证件号、手机号、备注
|
||
- **备注模式**: 备注数字表示连坐人数(如:备注4表示当前行+后3行共4人连坐)
|
||
- **手机号模式**: 相同手机号的人员自动识别为连坐组
|
||
|
||
2. **座位信息文件** - 包含以下列:
|
||
- 区域、楼层、排号、座位号
|
||
|
||
### 文件识别方式
|
||
|
||
程序启动时会提供两种文件识别方式:
|
||
1. **默认文件名** - 读取固定文件名 `人员信息.xlsx` 和 `座位信息.xlsx`
|
||
2. **智能识别** - 自动分析目录中的Excel文件并识别类型
|
||
- 根据列名特征自动判断文件类型
|
||
- 支持任意文件名(如 `1.xlsx`、`2.xlsx`)
|
||
- 提供手动选择功能作为备选
|
||
|
||
### 运行程序
|
||
|
||
#### Python环境运行
|
||
```bash
|
||
# 安装依赖
|
||
pip install pandas openpyxl
|
||
|
||
# 运行程序
|
||
python seat_allocation_system.py
|
||
```
|
||
|
||
#### 构建可执行文件
|
||
```bash
|
||
# 在当前平台构建
|
||
python simple_build.py
|
||
|
||
# 跨平台构建(macOS构建Windows版本)
|
||
python cross_platform_build.py
|
||
```
|
||
|
||
### 选择文件识别模式
|
||
|
||
程序运行时首先选择文件识别模式:
|
||
1. **默认文件名** - 读取 `人员信息.xlsx` 和 `座位信息.xlsx`
|
||
2. **智能识别** - 自动识别目录中的Excel文件
|
||
|
||
### 选择分组方式
|
||
|
||
然后选择连坐分组方式:
|
||
1. **备注分组** - 根据备注数字识别连坐组(默认)
|
||
2. **手机号分组** - 根据相同手机号识别连坐组
|
||
|
||
### 查看结果
|
||
|
||
程序运行后会生成:
|
||
- `log/座位信息_最终分配.xlsx` - 最终分配结果
|
||
- 第1-5列:座位基本信息(保持不变)
|
||
- 第6-10列:人员信息(覆盖原座位表数据)
|
||
- 第11-12列:原座位表其他列(保持不变)
|
||
- 第13列:分配备注(新增列)
|
||
- `log/最终座位分配日志.xlsx` - 详细分配记录
|
||
- `log/seat_allocation_log.txt` - 完整运行日志
|
||
|
||
## 🔧 构建选项
|
||
|
||
### 本地构建
|
||
```bash
|
||
# 简单构建(推荐)
|
||
python simple_build.py
|
||
```
|
||
|
||
### 跨平台构建
|
||
```bash
|
||
# 在macOS上构建Windows版本
|
||
python cross_platform_build.py
|
||
```
|
||
|
||
### 自动化构建
|
||
使用GitHub Actions自动构建多平台版本:
|
||
1. 将 `build_workflow.yml` 放入 `.github/workflows/` 目录
|
||
2. 推送到GitHub仓库
|
||
3. 自动构建Windows x86/x64和macOS版本
|
||
|
||
## 📁 文件说明
|
||
|
||
### 核心文件
|
||
- `seat_allocation_system.py` - 主程序
|
||
- `simple_build.py` - 简化构建脚本
|
||
- `cross_platform_build.py` - 跨平台构建脚本
|
||
- `requirements.txt` - Python依赖
|
||
|
||
### 配置文件
|
||
- `build_workflow.yml` - GitHub Actions工作流
|
||
- `人员信息.xlsx` - 示例人员数据
|
||
- `座位信息.xlsx` - 示例座位数据
|
||
|
||
## 🎯 支持的平台
|
||
|
||
### 直接运行
|
||
- Windows 7/8/10/11 (x86/x64/ARM64)
|
||
- macOS 10.14+ (Intel/Apple Silicon)
|
||
- Linux (x86_64/ARM64)
|
||
|
||
### 构建目标
|
||
- **Windows x86** - 32位兼容版本
|
||
- **Windows x64** - 64位主流版本
|
||
- **macOS** - Intel和Apple Silicon
|
||
- **Linux** - 主流发行版
|
||
|
||
## 📊 数据格式要求
|
||
|
||
### 人员信息格式
|
||
```
|
||
姓名 | 证件类型 | 证件号 | 手机号 | 备注
|
||
张三 | 身份证 | 123456789012345678 | 13800138000 | 2
|
||
李四 | 身份证 | 123456789012345679 | 13800138001 |
|
||
王五 | 身份证 | 12345678901234567X | 13800138002 | 3
|
||
赵六 | 身份证 | 123456789012345680 | 13800138003 |
|
||
钱七 | 身份证 | 123456789012345681 | 13800138004 |
|
||
```
|
||
|
||
### 座位信息格式
|
||
```
|
||
区域 | 楼层 | 排号 | 座位号
|
||
A区通道 | 一层 | 1排 | 1号
|
||
A区通道 | 一层 | 1排 | 2号
|
||
A区通道 | 一层 | 1排 | 3号
|
||
```
|
||
|
||
## ⚠️ 注意事项
|
||
|
||
1. **备注逻辑**: 备注数字表示连坐人数,只有组长填写备注,成员留空
|
||
2. **手机号逻辑**: 相同手机号的人员会被识别为连坐组
|
||
3. **重名处理**: 支持重名人员,通过姓名+身份证号组合进行唯一性校验
|
||
4. **证件号格式**: 支持包含X的身份证号,自动处理为字符串格式
|
||
5. **文字清理**: 自动清除姓名等字段的多余空格
|
||
6. **座位连续性**: 支持不连续座位号,算法会自动寻找合适的连续段
|
||
7. **智能覆盖**: 人员信息覆盖座位表对应列,分配备注单独存储
|
||
|
||
## 🔍 故障排除
|
||
|
||
### 常见问题
|
||
1. **文件格式错误**: 确保Excel文件包含必需的列
|
||
2. **编码问题**: 确保Excel文件使用UTF-8编码
|
||
3. **权限问题**: 确保有读写Excel文件的权限
|
||
4. **内存不足**: 处理大量数据时可能需要更多内存
|
||
|
||
### 技术支持
|
||
如遇问题,请查看生成的日志文件:
|
||
- `seat_allocation_log.txt` - 详细的运行日志
|
||
- 控制台输出 - 实时处理信息
|
||
|
||
## 📈 版本历史
|
||
|
||
- **v1.0** - 初始版本,支持基本座位分配
|
||
- **v1.1** - 添加数据校验和错误处理
|
||
- **v1.2** - 支持不连续座位处理
|
||
- **v1.3** - 优化数据类型处理,支持跨平台构建
|
||
|
||
## 📄 许可证
|
||
|
||
本项目采用MIT许可证,详见LICENSE文件。
|