以下是學習筆記:
一,考勤打卡
打卡效果如下:
打卡器:刷卡后,自動回車鍵
打卡成功:
實現:
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); } }