You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#数据库考勤系统中实现指定列跨表复制与存系统时间

当然有实现方法啦!我来给你拆解具体步骤和代码示例,不管你用的是Web应用还是桌面程序,核心逻辑都是相通的:

实现方案详解

1. 条码输入的前端/交互处理

条码阅读器本质是模拟键盘输入,绝大多数设备会在扫描完成后自动发送一个回车键。所以交互层只需要做两件事:

  • 提供一个输入框让用户扫描条码(完全不需要手动输入)
  • 监听输入框的回车事件,触发数据提交动作

示例(HTML+JavaScript)

<input type="text" id="admissionInput" placeholder="请扫描监督员条码..." autofocus>
<script>
document.getElementById('admissionInput').addEventListener('keydown', function(e) {
  if (e.key === 'Enter') {
    const admissionNumber = this.value.trim();
    if (!admissionNumber) return;
    
    // 调用后端接口提交数据
    fetch('/save-attendance', {
      method: 'POST',
      headers: {'Content-Type': 'application/json'},
      body: JSON.stringify({ admissionNumber })
    })
    .then(res => res.json())
    .then(result => {
      if (result.success) {
        alert('考勤记录已成功保存!');
        this.value = ''; // 清空输入框准备下一次扫描
      } else {
        alert('未找到该监督员信息,请检查条码是否正确!');
      }
    });
  }
});
</script>

2. 后端+数据库核心逻辑

核心流程就是查询Prefect表提取信息 → 获取系统时间 → 插入Attendence表,这里以Python+MySQL为例(其他语言逻辑完全一致):

步骤1:从Prefect表查询监督员信息

import mysql.connector
from datetime import datetime

def get_prefect_detail(admission_number):
    # 建立数据库连接
    conn = mysql.connector.connect(
        host='你的数据库地址',
        user='数据库用户名',
        password='数据库密码',
        database='你的数据库名'
    )
    cursor = conn.cursor(dictionary=True)
    
    # 查询并拼接姓名
    query = """
        SELECT CONCAT(First_Name, ' ', Last_Name) AS Full_Name, Grade, Class
        FROM Prefect
        WHERE Admission_number = %s
    """
    cursor.execute(query, (admission_number,))
    prefect_data = cursor.fetchone()
    
    # 关闭连接
    cursor.close()
    conn.close()
    return prefect_data

步骤2:将数据插入Attendence表

def save_attendance_record(prefect_data):
    if not prefect_data:
        return False
        
    conn = mysql.connector.connect(
        host='你的数据库地址',
        user='数据库用户名',
        password='数据库密码',
        database='你的数据库名'
    )
    cursor = conn.cursor()
    
    # 获取系统当前日期和时间
    current_date = datetime.now().date()
    current_time = datetime.now().time()
    
    # 插入记录
    insert_query = """
        INSERT INTO Attendence (Full_Name, Grade, Class, Attendance_Date, Attendance_Time)
        VALUES (%s, %s, %s, %s, %s)
    """
    values = (
        prefect_data['Full_Name'],
        prefect_data['Grade'],
        prefect_data['Class'],
        current_date,
        current_time
    )
    cursor.execute(insert_query, values)
    conn.commit()
    
    cursor.close()
    conn.close()
    return True

整合为接口(Flask示例)

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/save-attendance', methods=['POST'])
def handle_attendance():
    req_data = request.get_json()
    admission_num = req_data.get('admissionNumber')
    
    if not admission_num:
        return jsonify({'success': False, 'msg': '请提供有效的Admission_number'})
    
    prefect_info = get_prefect_detail(admission_num)
    if save_attendance_record(prefect_info):
        return jsonify({'success': True})
    else:
        return jsonify({'success': False, 'msg': '考勤记录保存失败'})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

3. 数据库优化小技巧(可选)

  • 给Prefect表的Admission_number字段加唯一索引,大幅提升查询速度
  • 可以让数据库自动生成日期时间,不用后端手动处理:
-- 修改Attendence表结构,设置日期时间默认值
ALTER TABLE Attendence
MODIFY COLUMN Attendance_Date DATE DEFAULT CURDATE(),
MODIFY COLUMN Attendance_Time TIME DEFAULT CURTIME();

这样插入语句可以简化为:

INSERT INTO Attendence (Full_Name, Grade, Class)
VALUES (%s, %s, %s)

注意事项

  • 确保扫描时输入框处于焦点状态,避免条码内容输入到其他控件
  • 一定要处理「查询不到监督员信息」的异常场景,给用户明确提示
  • 如果是桌面应用,逻辑完全一致:监听键盘输入捕获条码内容,再执行数据库操作

内容的提问来源于stack exchange,提问作者user9311551

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:11:28