以下是學習筆記:
一,考勤打卡
打卡效果如下:
打卡器:刷卡后,自動回車鍵

打卡成功:

實現:
1,后台部分:
在DAL--StudentService學員信息訪問類添加代碼
#region 查詢學員【根據班級、學號、卡號】
/// <summary>
/// 根據班級名稱查詢學員信息
/// </summary>
/// <param name="className"></param>
/// <returns></returns>
public List<StudentExt> GetStudentByClass(string className)
{
string sql = "select StudentName,StudentId,Gender,Birthday,ClassName from Students";
sql += " inner join StudentClass on Students.ClassId=StudentClass.ClassId";
sql += " where ClassName='{0}'";
sql = string.Format(sql, className);
SqlDataReader objReader = SQLHelper.GetReader(sql);
List<StudentExt> list = new List<StudentExt>();
while (objReader.Read())
{
list.Add(new StudentExt()
{
StudentId = Convert.ToInt32(objReader["StudentId"]),
StudentName = objReader["StudentName"].ToString(),
Gender = objReader["Gender"].ToString(),
Birthday = Convert.ToDateTime(objReader["Birthday"]),
ClassName = objReader["ClassName"].ToString()
});
}
objReader.Close();
return list;
}
/// <summary>
///根據學號查詢學員對象
/// </summary>
/// <param name="studentId"></param>
/// <returns></returns>
public StudentExt GetStudentById(string studentId)
{
string sql = "select StudentId,StudentName,Gender,Birthday,ClassName,StudentIdNo,PhoneNumber,StudentAddress,CardNo from Students";
sql += " inner join StudentClass on Students.ClassId=StudentClass.ClassId";
sql += " where StudentId=" + studentId;
SqlDataReader objReader = SQLHelper.GetReader(sql);
StudentExt objStudent = null;
if (objReader.Read())
{
objStudent = new StudentExt()
{
StudentId = Convert.ToInt32(objReader["StudentId"]),
StudentName = objReader["StudentName"].ToString(),
Gender = objReader["Gender"].ToString(),
Birthday = Convert.ToDateTime(objReader["Birthday"]),
ClassName = objReader["ClassName"].ToString(),
CardNo = objReader["CardNo"].ToString(),
StudentIdNo = objReader["StudentIdNo"].ToString(),
PhoneNumber = objReader["PhoneNumber"].ToString(),
StudentAddress = objReader["StudentAddress"].ToString()
};
}
objReader.Close();
return objStudent;
}
/// <summary>
/// 根據卡號查詢學生信息(請思考如何將上面的方法合並,像下面的方法這么簡單)
/// </summary>
/// <param name="CardNo"></param>
/// <returns></returns>
public StudentExt GetStudentByCardNo(string CardNo)
{
string whereSql = string.Format(" where CardNo='{0}'", CardNo);
return this.GetStudent(whereSql);
}
private StudentExt GetStudent(string whereSql)
{
string sql = "select StudentId,StudentName,Gender,Birthday,ClassName,";
sql += "StudentIdNo,PhoneNumber,StudentAddress,CardNo from Students";
sql += " inner join StudentClass on Students.ClassId=StudentClass.ClassId ";
sql += whereSql;
SqlDataReader objReader = SQLHelper.GetReader(sql);
StudentExt objStudent = null;
if (objReader.Read())
{
objStudent = new StudentExt()
{
StudentId = Convert.ToInt32(objReader["StudentId"]),
StudentName = objReader["StudentName"].ToString(),
Gender = objReader["Gender"].ToString(),
Birthday = Convert.ToDateTime(objReader["Birthday"]),
ClassName = objReader["ClassName"].ToString(),
CardNo = objReader["CardNo"].ToString(),
StudentIdNo = objReader["StudentIdNo"].ToString(),
PhoneNumber = objReader["PhoneNumber"].ToString(),
StudentAddress = objReader["StudentAddress"].ToString()
};
}
objReader.Close();
return objStudent;
}
#endregion
2,前端UI部分:
public FrmAttendance()//窗體構造函數
{
InitializeComponent();
timer1_Tick(null, null);//避免時間顯示的延遲
}
//顯示當前時間
private void timer1_Tick(object sender, EventArgs e)
{
this.lblYear.Text = DateTime.Now.Year.ToString();
this.lblMonth.Text = DateTime.Now.Month.ToString();
this.lblDay.Text = DateTime.Now.Day.ToString();
this.lblTime.Text = DateTime.Now.ToLongTimeString();
switch (DateTime.Now.DayOfWeek)
{
case DayOfWeek.Tuesday:
this.lblWeek.Text = "二";
break;
case DayOfWeek.Wednesday:
this.lblWeek.Text = "三";
break;
case DayOfWeek.Thursday:
this.lblWeek.Text = "四";
break;
case DayOfWeek.Monday:
this.lblWeek.Text = "一";
break;
case DayOfWeek.Saturday:
this.lblWeek.Text = "六";
break;
case DayOfWeek.Friday:
this.lblWeek.Text = "五";
break;
case DayOfWeek.Sunday:
this.lblWeek.Text = "日";
break;
}
}
//學員打卡
private AttendanceService objAttendanceService = new AttendanceService();
private void txtStuCardNo_KeyDown(object sender, KeyEventArgs e)
{
if (this.txtStuCardNo.Text.Trim().Length != 0 && e.KeyValue == 13)
{
//顯示學員信息
StudentExt objStu = new StudentService().GetStudentByCardNo(this.txtStuCardNo.Text.Trim());
if (objStu == null)
{
MessageBox.Show("卡號不正確!", "信息提示");
this.txtStuCardNo.SelectAll();
return;
}
this.lblStuName.Text = objStu.StudentName;
this.lblStuClass.Text = objStu.ClassName;
this.lblStuId.Text = objStu.StudentId.ToString();
//添加打卡信息
string result = objAttendanceService.AddRecord(this.txtStuCardNo.Text.Trim());
if (result != "success")
{
this.lblInfo.Text = "打卡失敗!";
MessageBox.Show(result, "錯誤提示");
}
else
this.lblInfo.Text = "打卡成功!";
this.txtStuCardNo.Text = ""; //等待下一個打卡
this.txtStuCardNo.Focus();
}
}
二,管理員修改密碼:

1,后台部分
在DAL--SysAdminService管理數據訪問類中添加
namespace DAL
{
/// <summary>
/// 管理員數據訪問類
/// </summary>
public class SysAdminService
{
/// <summary>
/// 根據登錄賬號和密碼登錄
/// </summary>
/// <param name="objAdmin">封裝了登錄賬號和密碼的管理員對象</param>
/// <returns>返回包含管理員信息的對象</returns>
public SysAdmin AdminLogin(SysAdmin objAdmin)
{
//組合SQL語句
string sql = "select AdminName from Admins where LoginId={0} and LoginPwd='{1}'";
sql = string.Format(sql, objAdmin.LoginId, objAdmin.LoginPwd);
//從數據庫中查詢
SqlDataReader objReader = SQLHelper.GetReader(sql);
if (objReader.Read())
{
objAdmin.AdminName = objReader["AdminName"].ToString();
}
else
{
objAdmin = null;//如果登錄不成功,則將當前對象清空
}
objReader.Close();
//返回結果
return objAdmin;
}
/// <summary>
/// 修改管理員密碼
/// </summary>
/// <param name="objAdmin"></param>
/// <returns></returns>
public int ModifyPwd(SysAdmin objAdmin)
{
string sql = "update Admins set LoginPwd='{0}' where LoginId={1}";
sql = string.Format(sql, objAdmin.LoginPwd, objAdmin.LoginId);
try
{
return SQLHelper.Update(sql);
}
catch (SqlException)
{
throw new Exception("應用程序和數據庫連接出現問題!");
}
catch (Exception ex)
{
throw ex;
}
}
}
}
2,前端UI:
確認修改的按鈕事件
//修改密碼
private void btnModify_Click(object sender, EventArgs e)
{
#region 密碼驗證
if (this.txtOldPwd.Text.Trim().Length == 0)
{
MessageBox.Show("請輸入原密碼!", "提示信息");
this.txtOldPwd.Focus();
return;
}
if (this.txtOldPwd.Text.Trim() != Program.objCurrentAdmin.LoginPwd)
{
MessageBox.Show("請輸入的原密碼不正確!", "提示信息");
this.txtOldPwd.Focus();
this.txtOldPwd.SelectAll();
return;
}
if (this.txtNewPwd.Text.Trim().Length == 0)
{
MessageBox.Show("請輸入不少於6位的新密碼!", "提示信息");
this.txtNewPwd.Focus();
return;
}
if (this.txtNewPwd.Text.Trim().Length < 6)
{
MessageBox.Show("新密碼長度不能少於6位!", "提示信息");
this.txtNewPwd.Focus();
return;
}
if (this.txtNewPwdConfirm.Text.Trim().Length == 0)
{
MessageBox.Show("請再次輸入新密碼!", "提示信息");
this.txtNewPwdConfirm.Focus();
return;
}
if (this.txtNewPwdConfirm.Text.Trim() != this.txtNewPwd.Text.Trim())
{
MessageBox.Show("兩次輸入的新密碼不一致!", "提示信息");
return;
}
#endregion
//修改密碼
try
{
SysAdmin objAdmin = new SysAdmin()
{
LoginId = Program.objCurrentAdmin.LoginId,
LoginPwd = this.txtNewPwd.Text.Trim()
};
if (new SysAdminService().ModifyPwd(objAdmin) == 1)
{
MessageBox.Show("密碼修改成功,請妥善保管!", "成功提示");
//同時修改當前保存的用戶密碼
Program.objCurrentAdmin.LoginPwd = this.txtNewPwd.Text.Trim();
this.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
