C#--C/S--学员管理系统--9--考勤打卡和管理员修改密码

以下是学习笔记:

一,考勤打卡

打卡效果如下:

打卡器:刷卡后,自动回车键

 

 打卡成功:

 

 实现:

1,后台部分:

在DAL--StudentService学员信息访问类添加代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#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部分:

 二,管理员修改密码:

 1,后台部分

在DAL--SysAdminService管理数据访问类中添加

  2,前端UI:

确认修改的按钮事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//修改密码
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);
    }
}

  

 

posted @   包子789654  阅读(682)  评论(3编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示