【インターフェース設計】
【序文】
パスワードフォームを変更する2つの主要な機能があります。
1.元のパスワードが正しいかどうかを確認します
2.データベースの新しいパスワードを更新します
元のパスワードが正しいかどうかを確認する方法が重要です。ログイン時にカード番号からデータベーステーブルでカード番号に対応するパスワードを見つけることができます。ログイン時にカード番号を取得するにはどうすればよいですか?ログインコードに静的な静的変数を設定して、カード番号を保存し、パスワード変更ウィンドウで使用します。
次の図は、ログインコードに設定された静的変数です。
[コードの実装]:2つの行があります(元のパスワードを検索し、新しいパスワードを更新します)
IDAL层
public interface CardInfoIDAL
{
//查询原密码
DataTable checkPassword(string cardNo);
//更新新密码
int changePassword(string cardNo,string passWord);
}
ファクトリーレイヤー
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;
}
}
}
ファサード层
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();
}
}
アイデアは非常に重要です。アイデアを明確にすると、コードの実装が簡単になります。!!