考勤系统功能实现——登录、注册
1、界面
1.1登录界面
1.2注册界面
2、主要代码
2.1登录主要代码
// 连接数据库
sqlConn.Open();
// 构造命令发送给数据库
String sqlStr = "select * from staff where ID=@id and pwd=@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.userName = dr["name"].ToString();
UserInfo.userPwd = dr["pwd"].ToString();
UserInfo.userRole = dr["role"].ToString();
MessageBox.Show(UserInfo.userRole + "登录成功");
if (UserInfo.userRole == "管理员")
{
// 显示收银员主界面
MainFormAdmin formAdmin = new MainFormAdmin();
formAdmin.Show();
// 隐藏登录界面
this.Hide();
}
if (UserInfo.userRole == "职员")
{
// 显示库管员主界面
MainFormUser formUser = new MainFormUser();
formUser.Show();
// 隐藏登录界面
this.Hide();
}
}
else
{
MessageBox.Show("用户名或密码错误", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (Exception exp)
{
MessageBox.Show("访问数据库错误:" + exp.Message);
}
finally
{
sqlConn.Close();
}
}
2.2注册用户信息主要代码
连接数据库;构造查询命令
// 连接数据库
sqlConn.Open();
// 构造命令
String sqlStr = "insert into staff(ID, NAME, PWD, SEX, PAR, ROLE) values(@id, @name, @pwd, @sex, @par, @role)";
SqlCommand cmd = new SqlCommand(sqlStr, sqlConn);
SQL字符串参数赋值
// SQL字符串参数赋值
cmd.Parameters.Add(new SqlParameter("@id", id));
cmd.Parameters.Add(new SqlParameter("@name", name));
cmd.Parameters.Add(new SqlParameter("@pwd", pwd));
cmd.Parameters.Add(new SqlParameter("@sex",sex));
cmd.Parameters.Add(new SqlParameter("@par", par));
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();
}
}
考勤系统功能实现——打卡
主要代码
private void Form1_Load(object sender, EventArgs e)
{
string[] ports = SerialPort.GetPortNames();//获取计算机可用串口
if(ports.Length > 0)//有可用串口
{
comboBoxCOMList.Items.AddRange(ports);//添加到下拉列表
comboBoxCOMList.SelectedIndex = 0;//默认选择第一项
}
comboBoxHandle.SelectedIndex = 0;
}
private void InitSerialPort()//初始化串口
{
serialPort1.BaudRate = 115200;//波特率115200
serialPort1.DataBits = 8;
serialPort1.Parity = Parity.None;
serialPort1.StopBits = StopBits.One;
serialPort1.ReceivedBytesThreshold = 1;
}
考勤系统功能实现——查询
1.界面展示
1.1员工登陆查询后的界面
2.主要代码
连接数据库;构造命令发送给数据库
// 连接数据库
sqlConn.Open();
// 构造命令发送给数据库
String sqlStr = "select * from record where date>=@start and date<=@end and s_id = @id";
SqlCommand cmd = new SqlCommand(sqlStr, sqlConn);
cmd.Parameters.Add(new SqlParameter("@start", this.start.Value.ToShortDateString()));
cmd.Parameters.Add(new SqlParameter("@end", this.end.Value.ToShortDateString()));
cmd.Parameters.Add(new SqlParameter("@id", UserInfo.userId));
SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand = cmd;
将DataSet和DataAdapter绑定
// 将DataSet和DataAdapter绑定
DataSet ds = new DataSet();
自定义一个表(MyGoods)来标识数据库的GOODS表
// 自定义一个表(MyGoods)来标识数据库的GOODS表
adp.Fill(ds, "MyGoods");
指定DataGridView的数据源为DataSet的MyGoods表
// 指定DataGridView的数据源为DataSet的MyGoods表
this.dgv_Goods.DataSource = ds.Tables["MyGoods"];
考勤系统功能实现——统计
1.界面展示
1.1管理员界面
1.2考勤统计
1.3部门迟到早退名单统计结果界面
2.主要代码
构造命令,统计一个部门中有哪些员工工作时间不满540分钟
//构造命令,统计一个部门中有哪些员工工作时间不满540分钟
string sqlStr = @"select t4.par, COUNT(*) as count from
(
select t3. *,t.name,t.par from
(
select t1.s_id,t1.date,datediff(n,t1.time,t2.time) as diff from record t1
inner join record t2
on t1.date=t2.date
and t1.s_id=t2.s_id
and t1.p_id=1
and t2.p_id=2
and t1.date>=@start
and t1.date<=@end
)t3,staff t where t3.s_id=t.id
)t4 where t4.diff<540 group by t4.par";
添加查询条件
// 添加查询条件
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()));
将该查询过程绑定到DataAdapte
// 将该查询过程绑定到DataAdapter
SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand = cmd;
将DataSet和DataAdapter绑定
// 将DataSet和DataAdapter绑定
DataSet ds = new DataSet();
自定义一个表(MyGoods)来标识数据库的GOODS表
// 自定义一个表(MyGoods)来标识数据库的GOODS表
adp.Fill(ds, "MyAttendance");
指定DataGridView的数据源为DataSet的MyGoods表
// 指定DataGridView的数据源为DataSet的MyGoods表
this.dataGridView1.DataSource = ds.Tables["MyAttendance"];
}
catch (Exception exp)
{
MessageBox.Show("访问数据库错误:" + exp.Message);
}
finally
{
sqlConn.Close();
}