美文网首页
考勤系统功能实现

考勤系统功能实现

作者: 惊蛰Zz | 来源:发表于2019-07-12 16:00 被阅读0次

一、实现登录功能

1、界面展示

普通员工登录
登录成功界面展示
管理员登陆
登陆成功界面展示

2、利用代码链接至数据库 并且从数据库中查询账号名称与密码来判断登陆的是管理员还是普通员工,或者是没有注册的账号就返回错误信息。

3、关键代码

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

                // 构造命令发送给数据库
                String sqlStr = "select * from EMPLOYEE where ID=@id and PASSWORD=@pwd";
                SqlCommand cmd = new SqlCommand(sqlStr, sqlConn);

                // 注意是用用户ID登录,而不是用户名,用户名可能会重复
                cmd.Parameters.Add(new SqlParameter("@id", this.tb_User.Text.Trim()));
                cmd.Parameters.Add(new SqlParameter("@pwd", this.tb_Password.Text.Trim()));

                SqlDataReader dr = cmd.ExecuteReader();

                // 如果从数据库中查询到记录,则表示可以登录
                if (dr.HasRows)
                {
                    dr.Read();
                    UserInfo.userId = int.Parse(dr["ID"].ToString());
                   
                    UserInfo.userPwd = dr["PASSWORD"].ToString();
                    UserInfo.userType = dr["ROLE"].ToString();


                    MessageBox.Show(UserInfo.userType + "登录成功");

                    if (UserInfo.userType == "普通員工")
                    {
                        // 显示收银员主界面
                        MainFormUser formUser = new MainFormUser();
                        formUser.Show();

                        // 隐藏登录界面
                        this.Hide();
                    }

                    if (UserInfo.userType == "管理員")
                    {
                        // 显示库管员主界面
                        MainFormAdmin formAdmin = new MainFormAdmin();
                        formAdmin.Show();

                        // 隐藏登录界面
                        this.Hide();
                    }
                }
                else
                {
                    MessageBox.Show("用户名或密码错误", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception exp)
            {
                MessageBox.Show("访问数据库错误:" + exp.Message);
            }
            finally
            {
                sqlConn.Close();
            }
        }

3、功能

通过代码连接数据库,并在数据库中验证数据是否正确,若正确则读取相关信息,若错误则提示用户名或密码错误,若数据库连接失败则提示访问数据库错误。

二、注册

1、窗口展示

注册员工窗口

2、由管理员进入来给为注册的普通员工注册新的账号

3、关键代码

        {
            String id = this.tb_Id.Text.Trim();
            String name = this.tb_Name.Text.Trim();
            String password = this.tb_Password.Text.Trim();
            String sex = this.tb_Sex.Text.Trim();
            String branch = this.tb_Branch.Text.Trim();
            String role = this.tb_Role.Text.Trim();
            
            float price = 0; /* 商品价格 */

            try
            {
                price = float.Parse(this.tb_Password.Text.Trim());
            }
            catch
            {
                MessageBox.Show("价格解析有误");
                this.tb_Password.Focus();      /* 光标定位到输入价格的地方 */
                this.tb_Password.SelectAll();  /* 全选文字,以提示出错的地方 */
                return;
            }

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

                // 构造命令
                String sqlStr = "insert into EMPLOYEE(ID, NAME, PASSWORD, SEX, BRANCH, ROLE) values(@id, @name, @password, @sex, @branch, @role)";
                SqlCommand cmd = new SqlCommand(sqlStr, sqlConn);

                // SQL字符串参数赋值
                cmd.Parameters.Add(new SqlParameter("@id", id));
                cmd.Parameters.Add(new SqlParameter("@name", name));
                cmd.Parameters.Add(new SqlParameter("@password", password));
                cmd.Parameters.Add(new SqlParameter("@sex", sex));
                cmd.Parameters.Add(new SqlParameter("@branch", branch));
                cmd.Parameters.Add(new SqlParameter("@role", role));

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

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

4、功能

通过连接数据库,将所需上传的数据上传至数据库中,上传过程会自动根据数据类型填入数据表中,若成功则显示信息录入成功,失败则显示录入失败。

三、打卡

1、界面展示

打卡界面一
打卡界面二

2、关键代码及其功能

自动获取串口列表
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ServiceForm_Load(object sender, EventArgs e)
        {
            // TODO: 在下拉列表中列出本机所有串口
            string[] ArryPort = SerialPort.GetPortNames();
            co###2mboBoxCOMList.Items.Clear();
            for (int i = 0; i < ArryPort.Length; i++)
            {
                comboBoxCOMList.Items.Add(ArryPort[i]);
            }
        }
打开或关闭串口
        /// 打开或关闭串口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonOpenCOM_Click(object sender, EventArgs e)
        {
            // 串口已打开,此时需要关闭
            if (serialPort1.IsOpen)
            {
                serialPort1.Close();
                this.toolStripStatusLabel1.Text = "已关闭串口" + serialPort1.PortName.ToString();
                buttonOpenCOM.Text = "打开";
                return;
            }
            // 否则打开串口
            else
            {
                serialPort1.PortName = comboBoxCOMList.Text;
初始化串口数据并发送接收数据
                {
                    serialPort1.BaudRate = 115200;
                    serialPort1.DataBits = 8;
                    serialPort1.Parity = Parity.None;
                    serialPort1.StopBits = StopBits.One;

                }
                try
                {
                    serialPort1.Open();
                    this.toolStripStatusLabel1.Text = "已打开串口" + serialPort1.PortName.ToString();
                    buttonOpenCOM.Text = "关闭";
                }
                catch (Exception ex)
                {
                    this.toolStripStatusLabel1.Text = "打开串口失败,原因:" + ex.Message;
                    return;
                }
            }
        }

        /// <summary>
        /// 发送数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void bt_Send_Click(object sender, EventArgs e)
        {
            try
            {
                // TODO: 将`待发送数据`发送出去

                serialPort1.Write(tbWrite.Text);


            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.ToString());
            }
        }

        /// <summary>
        /// 接收数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                // TODO: 接收数据,并在`接收数据`区域显示出来
                
                tbRead.Text = serialPort1.ReadExisting();


            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.ToString());
            }
        }
清空数据并关闭窗口
        /// 清空接收区域
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void bt_Clear_Click(object sender, EventArgs e)
        {
            // TODO: 清空接收区域
        }

        /// <summary>
        /// 窗口关闭时,要关闭串口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ServiceForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            // 如果关闭窗口时,串口仍然为打开状态,则需要关闭串口
            if (serialPort1.IsOpen)
            {
                serialPort1.Close();
            }
        }

四、查询与统计

1、界面展示

管理员查询统计界面
员工查询统计界面

2、在员工和管理员界面中查询个人的考勤记录并且点击详情中的查看可以查到具体的打卡记录和出勤情况。

2、关键代码及主要功能

查询数据并修改删除数据
        private void bt_Query_Click(object sender, EventArgs e)
        {
            String connStr = ConfigurationManager.ConnectionStrings["Attendance"].ConnectionString;
            SqlConnection sqlConn = new SqlConnection(connStr);
            try
            {
                // 连接数据库
                sqlConn.Open();

                // 构造命令发送给数据库
                String sqlStr = "select * from record where date>=@start and date<=@end and employee_id = @id";
                SqlCommand cmd = new SqlCommand(sqlStr, sqlConn);

                cmd.Parameters.Add(new SqlParameter("@start", this.dtp_Start.Value.ToShortDateString()));
                cmd.Parameters.Add(new SqlParameter("@end", this.dtp_End.Value.ToShortDateString()));
                cmd.Parameters.Add(new SqlParameter("@id", UserInfo.userId));

                

                SqlDataAdapter adp = new SqlDataAdapter();

                adp.SelectCommand = cmd;

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

                // 指定DataGridView的数据源为DataSet的MyGoods表
                this.dgv_Goods.DataSource = ds.Tables["MyGoods"];

            }
            catch (Exception exp)
            {
                MessageBox.Show("访问数据库错误:" + exp.Message);
            }
            finally
            {
                sqlConn.Close();
            }
        }

        // 数据修改,删除
        private void dgv_Goods_CellContentClick(object sender, DataGridViewCellEventArgs e)

相关文章

  • 考勤系统功能实现

    一、实现登录功能 1、界面展示 2、利用代码链接至数据库 并且从数据库中查询账号名称与密码来判断登陆的是管理员还是...

  • 考勤系统功能实现

    1.登陆界面 1.1登陆界面效果图 员工登录 1.2登陆界面实现的功能描述 登录界面可连接数据库,判断登录信息是否...

  • 考勤系统功能实现——打卡

    1.打卡界面 2.相关代码 自动获取串口列表 向卡中写入数据 打开或关闭串口 窗口关闭时,要关闭串口 “读取卡片”...

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

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

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

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

  • 考勤系统功能实现——注册

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

  • 考勤系统功能实现——注册

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

  • 考勤系统功能实现——打卡

    1.打卡界面 ID卡放到读卡器上后点击如图上的寻卡 选择串口然后写入职员编号 2.相关代码 自动获取串口列表 向卡...

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

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

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

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

网友评论

      本文标题:考勤系统功能实现

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