美文网首页
六、打卡,查询,统计系统功能实现

六、打卡,查询,统计系统功能实现

作者: 深海屿鹿_bd50 | 来源:发表于2019-07-12 14:53 被阅读0次

1、打卡

1)效果图
捕获.PNG
2)画面实现效果

可以打开串口,进行卡片信息写入并读取卡号实现打卡功能。

3)重要代码片段及详细描述

1、寻卡,将RFID的卡号读出来

string response = "";
            serialPort1.Write(ISO15693Card.COMMAND_WRITE_REG);
            Thread.Sleep(MILLISECOND_IN_SLEEP);
            if (serialPort1.BytesToRead > 0) response = serialPort1.ReadExisting();

            serialPort1.Write(ISO15693Card.COMMAND_SET_AGC);
            Thread.Sleep(MILLISECOND_IN_SLEEP);
            if (serialPort1.BytesToRead > 0) response = serialPort1.ReadExisting();

            serialPort1.Write(ISO15693Card.COMMAND_SET_RECV_MODE);
            Thread.Sleep(MILLISECOND_IN_SLEEP);
            if (serialPort1.BytesToRead > 0) response = serialPort1.ReadExisting();

            serialPort1.Write(ISO15693Card.COMMAND_INVEN_CARD);// 寻卡
            Thread.Sleep(MILLISECOND_IN_SLEEP);
            if (serialPort1.BytesToRead > 0) response = serialPort1.ReadExisting();

            List<ISO15693Card> cards = ISO15693CardHandler.InventoryCard(response);

2、读取卡上第00块的数据,获得职员编号

 String stuffId = ReadSingleBlock(ISO15693CardHandler.CovertEndian(cards[0].ID), "00"); 

3、向数据库中插入一条打卡记录,插入成功后显示打卡成功

 String connStr = ConfigurationManager.ConnectionStrings["Attendance system"].ConnectionString;
            SqlConnection sqlConn = new SqlConnection(connStr);
            try
            {
                // 连接数据库
                sqlConn.Open();

                // 构造命令
                String sqlStr = "insert into  record(employee_id, date, time, machine_id) VALUES(@Employee_id, @date,@time, @machine_id)";
                
                SqlCommand cmd = new SqlCommand(sqlStr, sqlConn);

                // SQL字符串参数赋值
                cmd.Parameters.Add(new SqlParameter("@employee_id", stuffId));
                cmd.Parameters.Add(new SqlParameter("@date", DateTime.Now.ToString("yyyy - MM - dd").ToString()));
                cmd.Parameters.Add(new SqlParameter("@time", DateTime.Now.ToString("HH: mm:ss").ToString()));
                cmd.Parameters.Add(new SqlParameter("@machine_id", '1'));


                // 将命令发送给数据库
                int res = cmd.ExecuteNonQuery();

                // 根据返回值判断是否插入成功
                if (res != 0)
                {
                    MessageBox.Show("打卡成功");
                }
                else
                {
                    MessageBox.Show("打卡失败");
                }
            }
            catch (Exception exp)
            {
                MessageBox.Show("访问数据库错误:" + exp.Message);
            }
            finally
            {
                sqlConn.Close();
            }
            

        }

2、查询

1)效果图
员工查询.gif
2)画面实现效果

员工登录系统后可查询自己的历史打卡记录;
管理员登录系统后可查询所有员工的打卡记录。

3)重要代码片段及详细描述

1、窗口加载时,显示当前时间,显示当前用户名

  private void MainForm_Load(object sender, EventArgs e)
        {
           
            // TODO: 这行代码将数据加载到表“AttendanceDataSet.record”中。您可以根据需要移动或删除它。
            this.recordTableAdapter.Fill(this.AttendanceDataSet.record);
            this.tssl_CurrentTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            this.tssl_User.Text = UserInfo.userQx + UserInfo.userName;
        }

2、员工查询打卡信息

  private void tsmi_Search_Click(object sender, EventArgs e)
        {
            RecordForm recordForm = new RecordForm();
            recordForm.MdiParent = this;
            recordForm.WindowState = FormWindowState.Maximized;
            recordForm.Show();
        }

3、工作时长计算

String sqlStr = @"select t4.department, t4.name, t3.date, t3.start_time, t3.end_time, t3.diff from (
                                   select t1.employee_id, t1.date, t1.time as start_time, t2.time as end_time, datediff(n,t1.time,t2.time) as diff 
                                   from record t1
                                   inner join record t2 
                                   on t1.date = t2.date 
                                   and t1.employee_id=t2.employee_id 
                                   and t1.machine_id=1 
                                   and t2.machine_id=2
                                   and t1.date>=@begin
                                   and t1.date<=@end
                               ) t3, employee t4 where t3.employee_id=t4.id and t3.diff<540 and t4.department=@department";

3、统计

1)效果图
统计.PNG
详情.PNG
2)画面实现效果

管理员登录系统,可以查看统计部门考勤情况

3)重要代码片段及详细描述

1、查看部门考勤


        private void 统计部门考勤DToolStripMenuItem_Click(object sender, EventArgs e)
        {
            BmRecordForm bmrecordForm = new BmRecordForm();
            bmrecordForm.MdiParent = this;
            bmrecordForm.WindowState = FormWindowState.Maximized;
            bmrecordForm.Show();
        }

2、连接到数据库

 String connStr = ConfigurationManager.ConnectionStrings["Attendance"].ConnectionString;
            SqlConnection sqlConn = new SqlConnection(connStr);

            try
            {
                sqlConn.Open();
                {
                    String sqlStr = @"select t4.department, t4.name, t3.date, t3.start_time, t3.end_time, t3.diff from (
                                    select t1.employee_id, t1.date, t1.time as start_time, t2.time as end_time, datediff(n,t1.time,t2.time) as diff 
                                    from record t1
                                    inner join record t2 
                                    on t1.date = t2.date 
                                    and t1.employee_id=t2.employee_id 
                                    and t1.machine_id=1 
                                    and t2.machine_id=2
                                    and t1.date>=@begin
                                    and t1.date<=@end
                                ) t3, employee t4 where t3.employee_id=t4.id and t3.diff<540 and t4.department=@department";

 SqlCommand cmd = new SqlCommand(sqlStr, sqlConn);
                    cmd.Parameters.Add(new SqlParameter("@begin", this.begin.ToShortDateString()));
                    cmd.Parameters.Add(new SqlParameter("@end", this.end.ToShortDateString()));
                    cmd.Parameters.Add(new SqlParameter("@department", this.department));

                    SqlDataAdapter adp = new SqlDataAdapter();
                    adp.SelectCommand = cmd;

3、绑定数据表

                 DataSet ds = new DataSet();
                    // 自定义一个表(MyGoods)来标识数据库的GOODS表
                    adp.Fill(ds, "Attendance");

                    // 指定DataGridView的数据源为DataSet的MyGoods表
                    this.dataGridView1.DataSource = ds.Tables["Attendance"];
                }
            }
            catch (Exception exp)
            {
                MessageBox.Show("访问数据库错误:" + exp.Message);

            }
            finally
            {
                sqlConn.Close();
            }
        }

相关文章

  • 六、打卡,查询,统计系统功能实现

    1、打卡 1)效果图 2)画面实现效果 可以打开串口,进行卡片信息写入并读取卡号实现打卡功能。 3)重要代码片段及...

  • 封装webSQL(六)封装 统计和查询

    下一步要做什么呢?要为分页做准备,首先实现统计和查询的功能。 sql 封装 统计功能比较简单,只是需要处理一下查询...

  • 基于C++的教室管理系统

    1 需求分析 核心需求:实现教室管理系统,完成对学校教室的维护、查询、预约、统计功能。程序拥有权限控制,分为管理员...

  • Redis高级功能之 - bitmap

    亿级活跃用户场景 实现日活跃统计 实现周活跃统计 为了增强用户粘性,增加一个连续打卡发放积分功能,怎么实现连续打卡...

  • 考勤系统功能实现——统计

    1.描述项目操作流程动图功能和步骤 第一步:调试该程序然后弹出登录界面;第二步:输入管理员账号和密码点击登录;第三...

  • 考勤系统功能实现——统计

    1.项目操作流程 2.2.描述项目操作流程动图功能和步骤; 第一步:调试该程序然后弹出登录界面;第二步:输入管理员...

  • 考勤系统功能实现——查询

    1.描述项目操作流程动图功能和步骤 第一步:调试该程序然后弹出登录界面;第二步:输入管理员账号和密码点击登录;第三...

  • 考勤系统功能实现——查询

    1.项目操作流程 2.2.描述项目操作流程动图功能和步骤; 第一步:调试该程序然后弹出登录界面;第二步:输入管理员...

  • 2018-10-14 Day 11 学生管理系统

    要求: 实现系统界面,功能界面,学号由迭代器或者生成器自动添加,实现添加学生、查询学生(按照姓名/学号查询)、修改...

  • 2020-06-19

    一、通勤车刷卡系统主要实现功能: 本系统主要实现乘客刷卡管理、数据采集、后台报表查询等功能: 1、支持读取芯片号的...

网友评论

      本文标题:六、打卡,查询,统计系统功能实现

      本文链接:https://www.haomeiwen.com/subject/smsjkctx.html