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();
            }
        }

思路很重要,理清思路,代碼就很容易實現了,衝鴨!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章