在开始构建档案培训跟踪系统之前,必须先配置好Python运行环境。本方案基于Python 3.8及以上版本开发,利用其内置的sqlite3库实现数据持久化,无需安装额外的数据库服务,确保零门槛落地。
打开终端或命令提示符,输入以下命令检查Python版本。如果未安装,请前往Python官网下载安装包并完成安装,安装时务必勾选“Add Python to PATH”。
```bash python --version ```为了实现美观的表格化输出,我们需要安装第三方库tabulate。请在终端执行以下安装命令:
安装完成后,新建一个项目文件夹,例如命名为training_tracker。后续的所有代码文件和配置文件都将存放在此目录下。
为了实现系统的灵活性,我们将培训模块的名称和考核标准通过配置文件进行管理,而不是硬编码在脚本中。在项目根目录下创建一个名为config.ini的文件,并填入以下内容。该配置文件定义了两个必选的培训模块及其对应的满分分数。
通过上述配置,系统会自动读取“档案安全保密制度”和“电子档案归档实操规范”作为两个跟踪维度,并将80分设为及格线。这种设计使得后续修改培训项目时,无需改动代码逻辑,只需更新此配置文件即可。
系统采用SQLite数据库存储数据,我们需要设计三张表:employees(员工表)、modules(培训模块表)和records(培训记录表)。在项目目录下创建init_db.py文件,写入以下代码。执行该脚本即可自动生成数据库文件和表结构。
在终端运行python init_db.py。如果看到“数据库初始化完成”的提示,且目录下出现了training_data.db文件,说明数据库环境搭建成功。
接下来编写系统的核心业务逻辑。我们将所有功能封装在app.py中,包括员工录入、成绩登记、进度查询和自动催办提醒。请创建app.py并完整复制以下代码。

此功能用于将参训人员导入系统。代码中包含了工号查重逻辑,避免重复录入。
```python import sqlite3 from tabulate import tabulate from datetime import datetime def add_employee(): conn = sqlite3.connect('training_data.db') cursor = conn.cursor() print("\n 录入员工信息 ") emp_id = input("请输入工号: ").strip() name = input("请输入姓名: ").strip() dept = input("请输入部门: ").strip() if not emp_id or not name: print("错误:工号和姓名不能为空!") return try: cursor.execute("INSERT INTO employees (emp_id, name, department) VALUES (?, ?, ?)", (emp_id, name, dept)) conn.commit() print(f"成功录入员工:{name}") except sqlite3.IntegrityError: print("错误:该工号已存在,请勿重复录入。") finally: conn.close() ```此模块用于记录员工的培训成绩。系统会自动读取配置文件中的及格分数线,判断状态是“合格”还是“不合格”,并更新数据库。
```python def update_training_record(): import configparser config = configparser.ConfigParser() config.read('config.ini', encoding='utf-8') pass_score = int(config['settings']['pass_score']) conn = sqlite3.connect('training_data.db') cursor = conn.cursor() print("\n 登记培训成绩 ") emp_id = input("请输入员工工号: ").strip() 检查员工是否存在 cursor.execute("SELECT name FROM employees WHERE emp_id = ?", (emp_id,)) emp = cursor.fetchone() if not emp: print("错误:系统中不存在该工号,请先录入。") conn.close() return 显示可选模块 cursor.execute("SELECT module_name FROM modules") modules = cursor.fetchall() print("可选培训模块:") for idx, mod in enumerate(modules): print(f"{idx + 1}. {mod[0]}") try: choice = int(input("请选择模块编号: ")) if choice < 1 or choice > len(modules): print("错误:选择无效。") return module_name = modules[choice - 1][0] score = int(input(f"请输入 {module_name} 考核分数: ")) 判断状态 status = "合格" if score >= pass_score else "不合格" 插入或更新记录 cursor.execute(''' INSERT INTO records (emp_id, module_name, score, status, update_time) VALUES (?, ?, ?, ?, ?) ON CONFLICT(emp_id, module_name) DO UPDATE SET score=?, status=?, update_time=? ''', (emp_id, module_name, score, status, datetime.now(), score, status, datetime.now())) conn.commit() print(f"更新成功:{emp[0]} 的 {module_name} 状态为 {status}") except ValueError: print("错误:请输入有效的数字。") finally: conn.close() ```这是解决“跟踪不到位”的核心功能。它会查询所有员工对所有模块的完成情况,并生成一份直观的表格。重点在于筛选出“未开始”或“不合格”的记录,并在控制台高亮显示。
```python def generate_report(): conn = sqlite3.connect('training_data.db') cursor = conn.cursor() print("\n 培训进度跟踪报表 ") 获取所有员工和模块 cursor.execute("SELECT emp_id, name, department FROM employees ORDER BY department") employees = cursor.fetchall() cursor.execute("SELECT module_name FROM modules") modules = [m[0] for m in cursor.fetchall()] table_data = [] alert_count = 0 for emp in employees: emp_id, name, dept = emp row = [emp_id, name, dept] for mod in modules: cursor.execute("SELECT status, score FROM records WHERE emp_id=? AND module_name=?", (emp_id, mod)) record = cursor.fetchone() if record: status, score = record display_text = f"{status}({score})" if status == "不合格": display_text = f"{status}({score})" 标记重点 alert_count += 1 else: display_text = "未开始" 标记重点 alert_count += 1 row.append(display_text) table_data.append(row) 构建表头 headers = ["工号", "姓名", "部门"] + modules 打印表格 print(tabulate(table_data, headers=headers, tablefmt="grid")) print(f"\n统计:共发现 {alert_count} 项未完成或不合格的培训记录(已加粗显示)。") conn.close() ```将上述功能函数整合,添加一个主循环菜单,方便用户操作。将以下代码追加到app.py文件的末尾。
代码编写完成后,按照以下步骤进行全流程测试,确保系统逻辑无误。
步骤1:启动系统
在终端执行命令python app.py。系统会自动检测数据库,如果缺失会调用初始化脚本。进入主菜单后,输入1选择“录入员工信息”。
步骤2:录入测试数据
依次录入三名员工:
工号:1001,姓名:张三,部门:财务部
工号:1002,姓名:李四,部门:技术部
工号:1003,姓名:王五,部门:综合部
步骤3:登记部分成绩
返回主菜单,输入2选择“登记培训成绩”。
为张三(1001)登记“档案安全保密制度”成绩90分(合格)。
为李四(1002)登记“档案安全保密制度”成绩60分(不合格)。
王五暂不登记任何成绩。
步骤4:查看跟踪报表
返回主菜单,输入3选择“生成跟踪报表”。
此时屏幕应输出一张包含所有员工和两个模块的表格。观察输出结果:
1. 张三在“档案安全保密制度”列应显示“合格(90)”,在“电子档案归档实操规范”列应显示加粗的“未开始”。
2. 李四在“档案安全保密制度”列应显示加粗的“不合格(60)”。
3. 王五两列均应显示加粗的“未开始”。
底部统计信息应准确显示未完成项的总数。
通过以上实操,您已经拥有了一个轻量级、无需服务器、可直接运行的档案培训跟踪工具。管理员只需每天运行一次“生成跟踪报表”功能,即可精准掌握全员培训进度,彻底解决跟踪不到位的问题。
档案数字化,政府档案保密要求高怎么办?别慌,这有“通关秘籍”