C#机房重构之修改密码

【界面设计】

【前言】

修改密码窗体主要要实现两个功能:

1.查询原密码是否正确

2.将新密码更新到数据库当中

如何查询原密码是否正确是一个关键,可以根据登录时的卡号,去数据库表中查找到该卡号对应的密码。那么如何获取登录时候的卡号呢?在登陆代码中设置一个static静态变量,用来存储卡号,在修改密码窗体中去使用。

下图是在登录代码设置的静态变量:

 

 【代码实现】:有两条线(查找原密码,更新新密码)

IDAL层

    public interface CardInfoIDAL
    {
        //查询原密码
        DataTable checkPassword(string cardNo);

        //更新新密码
        int changePassword(string cardNo,string passWord);
    }

Factory层

    public class CardInfoFactory
    {
        //获取配置文件
        string strDB = System.Configuration.ConfigurationManager.AppSettings["DB"];
        //应用反射来获取DAL层操作
        public CardInfoIDAL cardInfo()
        {
            //程序集+类名
            string className = strDB + "." + "CardInfoDAL";
            //反射+工厂
            return (CardInfoIDAL)Assembly.Load(strDB).CreateInstance(className);
        }
    }

 DAL层

  public class CardInfoDAL : CardInfoIDAL
    {
        //实例化一个SqlHelper类
        SqlHelper sqlHelper = new SqlHelper();

        //更新新密码
        public int changePassword(string cardNo, string passWord)
        {
            //进行数据库更新,返回结果
            SqlParameter[] sqlParams =
            {
                    new SqlParameter("@cardno",cardNo),
                    new SqlParameter("@password",passWord),

             };
            string sqlUpdate = "UPDATE Card_Info SET password=@password WHERE cardno=@cardno";
            int res = sqlHelper.ExecuteNonQuery(sqlUpdate, sqlParams, CommandType.Text);
            return res;
        }

        //查询原密码
        public DataTable checkPassword(string cardNo)
        {
            SqlParameter[] sqlParams =
            {
                new SqlParameter("@cardno",cardNo)
            };
            string sqlQuery = @"SELECT * FROM [Card_Info] WHERE cardno=@cardno";
            DataTable table = sqlHelper.ExecuteQuery(sqlQuery, sqlParams, CommandType.Text);
            return table;
        }
    }

BLL层

 public class CardInfoBLL
    {
        //实例化一个工厂层
        CardInfoFactory cardFactory = new CardInfoFactory();

        //更新新密码
        public Boolean changePassword(string cardNo, string passWord)
        {
            //用idal接收工厂方法的返回值
            CardInfoIDAL idal = cardFactory.cardInfo();
            int res = idal.changePassword(cardNo,passWord);
            return isCheck(res);

        }

        //查询原密码,判断原密码是否正确
        public Boolean checkPassword(string cardNo,string passWord)
        {
            //用idal接收工厂返回值
            CardInfoIDAL idal= cardFactory.cardInfo();
            //用table接收接口方法的返回值
            DataTable table= idal.checkPassword(cardNo);
            string dt = table.Rows[0]["password"].ToString();
            if (passWord==dt.Trim())
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }

Facade层

    public class CardInfoFacade
    {
        //实例化B层
        CardInfoBLL cardBll = new CardInfoBLL();

        //更新新密码
        public Boolean changePassword(string cardNo,string passWord)
        {
            Boolean flag = cardBll.changePassword(cardNo,passWord);
            return flag;
        }

        //查询原密码
        public Boolean checkPassword(string cardNo, string passWord)
        {
            Boolean flag = cardBll.checkPassword(cardNo,passWord);
            return flag;
        }
    }

UI层

        private void btnOK_Click(object sender, EventArgs e)
        {
            //判断文本框是否为空
            if (txtOldCode.Text.Trim()=="" ||txtNewCode1.Text.Trim()==""||txtNewCode2.Text.Trim()=="")
            {
                MessageBox.Show("文本框不能为空,请输入!");
                return;
            }

            //判断两次密码是否一致
            if (txtNewCode1.Text.Trim()!=txtNewCode2.Text.Trim())
            {
                MessageBox.Show("两次密码输入的不一致,请重新输入!");
                txtNewCode1.Text = "";
                txtNewCode2.Text = "";
                txtNewCode1.Focus();
                return;
            }
            
            //实例化一个外观层
            CardInfoFacade changeCodeFacade = new CardInfoFacade();
            //登录时的卡号
            string cardNo = CardInfoLogin.userId;
            string passWord = txtOldCode.Text.Trim();
            Boolean flag = changeCodeFacade.checkPassword(cardNo,passWord);
            //判断原密码是否正确
            if (flag==false)
            {
                MessageBox.Show("原密码不正确,请重新输入!");
                txtOldCode.Text = "";
                txtOldCode.Focus();
                return;
            }
            //接收信息
            passWord = txtNewCode1.Text.Trim();
            Boolean flag1= changeCodeFacade.changePassword(cardNo,passWord);
            if (flag1==true)
            {
                MessageBox.Show("修改密码成功!");
                txtOldCode.Text="";
                txtNewCode1.Text = "";
                txtNewCode2.Text = "";
            }
            else
            {
                MessageBox.Show("密码修改失败,请重试!");
                txtOldCode.Text = "";
                txtNewCode1.Text = "";
                txtNewCode2.Text = "";
                txtOldCode.Focus();
            }
        }

思路很重要,理清思路,代码就很容易实现了,冲鸭!!!

猜你喜欢

转载自blog.csdn.net/wtt15100/article/details/107020667