实训报告(第四组)

一. 需求说明书

1.需求概述

  • 1.1 项目背景

该考勤管理系统是为了解决员工考勤管理而设计的,目的是建立一个能够实现企业考勤管理系统的智能化管理,提高考勤管理系统效率,工作人员能够在各个岗位上的工作状态得到及时的反馈,因而在一个系统内实现尽可能多的功能,满足工作环境的各种需求。

  • 1.2 系统目的

  • (1)提供简单、方便的操作
  • (2)通过考勤管理系统实现,使企业的考勤管理更加科学规范
  • (3)提高考勤管理的透明度和效率。

2.功能模块图

功能模块图.png

3.其他需求

有以下四点
①具有友好的用户界面
②人机界面友好,操作简单
③界面适应屏幕
④界面加上公司LOGO

4.系统网络拓扑图

系统网络拓扑图.png

5.系统不足之处

该软件在c#上开发所以只能运行在windows系统上,并且windows要有.NET 框架。#一.识别实体
1.员工:工号、姓名、性别、部门、年龄、职位
2.打卡机:编号、位置

二.考勤系统E-R图

ER图.png

三.数据表
数据表.PNG

四.数据序表

1.员工


员工.PNG

2.打卡机


打卡机.PNG

3.打卡
打卡.PNG

五.考勤系统功能实现——登录

5.1效果图

登录界面设计.gif

5.2实现代码

 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.textBox1.Text.Trim()));
                    cmd.Parameters.Add(new SqlParameter("@pwd", this.textBox2.Text.Trim()));

                    SqlDataReader dr = cmd.ExecuteReader();

                    // 如果从数据库中查询到记录,则表示可以登录
                    if (dr.HasRows)
                    {
                        dr.Read();

                        staffinfo.userId = int.Parse(dr["ID"].ToString());
                        staffinfo.userName = dr["NAME"].ToString();
                        staffinfo.userPwd = dr["PASSWORD"].ToString();
                        staffinfo.usergender = dr["GENDER"].ToString();
                        staffinfo.userRole = dr["ROLE"].ToString();


                        MessageBox.Show(staffinfo.userRole + "登录成功");

                        if (staffinfo.userRole == "职员")
                        {
                            // 显示收银员主界面
                            Form3 Form3 = new Form3();
                            Form3.Show();

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

                        if (staffinfo.userRole == "管理员")
                        {
                            // 显示库管员主界面
                            Form4 Form4 = new Form4();
                            Form4.Show();

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


5.3注意事项

(1)连接到数据库, 写入数据
(2)用用户ID登录,而不是用户名,用户名可能会重复

六.考勤系统功能实现——注册

6.1效果图

注册界面.png

6.2实现代码

        private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {

        }

        private void 统计打卡记录ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            zhuce recordForm = new zhuce();

            recordForm.Show();
        }

6.3注意事项

(1)连接到数据库,实现注册界面登录 写入数据

七.考勤系统功能实现——打卡

7.1效果图

打卡.png

7.2实现代码

 第一步:  // 初始化串口参数
                serialPort1.DataBits = 8;
                serialPort1.BaudRate = 115200;
                serialPort1.Parity = Parity.None;
                serialPort1.StopBits = StopBits.One;
第二步: /// 读取卡号
        /// 
        /// 
        /// 
        private void bt_Reader_Click(object sender, EventArgs e)
        {
            // 检测端口是否开启
            if (!serialPort1.IsOpen)
            {
                MessageBox.Show("串口未打开!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
第三步:// 寻卡
            cards = SearchCards();

            // 判断到的卡片数量
            if (!(cards.Count > 0))
            {
                MessageBox.Show("未寻到卡!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

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

            // 判断是否读取成功
            if (number.Equals("-1"))
            {
                MessageBox.Show("读取失败!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
第四步:            // 判断是否寻到卡
            if (!(timerCards.Count > 0))
            {
                lastNumber = "";
                return;
            }

            string number = ReadSingleBlock(
                ISO15693CardHandler.CovertEndian(timerCards[0].ID), "00"
                );

第五步:  // 判断是否与上一个卡一致
            if (lastNumber.Equals(number))
            {
                return;
            }
            lastNumber = number;
}
第六步:     // 记录
            recordSQL(number);
        }

7.3注意事项

(1)记得连接到数据库

八.考勤系统功能实现——查询

8.1效果图

查询界面.gif

8.2实现代码

 // 连接字符串,注意与实际环境保持一致
            String connStr = ConfigurationManager.ConnectionStrings["kaoqin"].ConnectionString;
            SqlConnection sqlConn = new SqlConnection(connStr);
            try
            {
                // 连接数据库
                sqlConn.Open();

                // 构造命令
                String sqlStr = "select * from record ";

                // 添加查询条件
                if (!this.comboBox1.Text.Trim().Equals(""))
                {
                    sqlStr += "where employee_id='"+ this.comboBox1.Text.Trim() + "'";
                }

          
                

                SqlCommand cmd = new SqlCommand(sqlStr, sqlConn);

                // 将该查询过程绑定到DataAdapter
                SqlDataAdapter adp = new SqlDataAdapter();
                adp.SelectCommand = cmd;

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

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

8.3注意事项

(1)连接到数据库,访问数据库数据
(2)选择条件,查询考勤记录

九.考勤系统功能实现——统计

9.1效果图

统计界面.gif

9.2实现代码

  try
            {
                // 连接数据库
                sqlConn.Open();

                // 构造命令,统计一个部门中有哪些员工工作时间不满540分钟
                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>=@start
                                    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("@start", this.start));
                cmd.Parameters.Add(new SqlParameter("@end", this.end));
                cmd.Parameters.Add(new SqlParameter("@department", this.department));

                // 将该查询过程绑定到DataAdapter
                SqlDataAdapter adp = new SqlDataAdapter();
                adp.SelectCommand = cmd;

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

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

9.3注意事项

(1)连接到数据库,写出合适的选择语句,列出必要条件

十.项目发布

10.1过程步骤

第一步:编写出格式
发布.png

第二步:在相关界面放入此代码
关于1.PNG

第三步:发布
发布1.png

第四步:查看相关信息
关于.png

你可能感兴趣的:(实训报告(第四组))