【界面设计】
【前言】
修改密码窗体主要要实现两个功能:
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();
}
}
思路很重要,理清思路,代码就很容易实现了,冲鸭!!!