【界面設計】
【前言】
修改密碼窗體主要要實現兩個功能:
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();
}
}
思路很重要,理清思路,代碼就很容易實現了,衝鴨!!!