使用Vs2010版本新建客戶端(UIL)與登陸驗證功能的實現
一、新建客戶端(UIL)
1、新建項目
第一步:打開Vs2010界面,點擊左上角文件,點擊新建,選擇項目。如圖(圖1)
(圖1)
第二步:點擊Windows類型,選擇Windows窗體應用程序,在名稱中輸入項目名稱(解決方案名稱),位置可自行選擇存放該項目的路徑,完成後點擊確定,創建界面層(UIL)成功。如圖(圖2)
(圖2)
2、創建成功,添加窗體
第一步:看到這個效果圖。如圖(圖3)
(圖3)
第二步:添加其它新的窗體,工具箱中裝載着控件。如圖(圖4)
(圖4)
3、添加現有項
第一步:在解決方案右鍵,找到添加,點擊現有項。如圖(圖5)
(圖5)
第二步:找到現有項的位置,點擊添加,完成。如圖(圖6)
(圖6)
1、用戶登陸
系統的登陸界面,如圖(圖1)所示:
(圖1)
從界面上可以看到我們這裏用到的控件有
控件名稱 |
說明 |
容器控件(Panel) |
控件可以在工具箱直接拖動至窗體,拖至窗體後右擊屬性可以修改控件的樣式和各種屬性,還可以編輯事件。 |
下拉框
(ComboBox) |
|
文本(TextBox) |
|
按鈕(Button) |
|
文字(Label) |
2、登陸界面具體功能實現:
第一步:綁定下拉框
1、數據庫表與表關係。如圖(圖2)
表1:用戶表(UserList)
列名 |
數據類型 |
主鍵/外鍵 |
說明 |
UserID |
int |
主鍵 |
用戶ID |
AccountNumber |
nchar(20) |
|
用戶編號 |
UserPassWord |
nchar(20) |
|
用戶密碼 |
StaffID |
int |
外鍵 |
員工ID |
LimitsOfPowerGroupID |
int |
外鍵 |
權限ID |
2、數據庫的存儲過程
--查詢用戶名,綁定下拉框
if(@type='frmLogin_SelectYongHuMing')
begin
SELECT LTRIM(RTRIM(AccountNumber)) AS AccountNumber, UserPassWord, LimitsOfPowerGroupID, UserID
FROM UserList
End
3、邏輯層(BLL)代碼
DALPublic.DALMethod myDALMethod = new DALPublic.DALMethod();
#region 查詢用戶名,綁定下拉框
[OperationContract]
public DataSet frmLogin_SelectYongHuMing()
{
SqlParameter[] SQLCMDpas = { new SqlParameter("@Type", SqlDbType.Char) };
SQLCMDpas[0].Value = "frmLogin_SelectYongHuMing";
DataTable myDataTable = myDALMethod.QueryDataTable("登錄_frmLogin", SQLCMDpas);
DataSet myDataSet = new DataSet();
myDataSet.Tables.Add(myDataTable);
return myDataSet;
}
#endregion
4、界面層(UIL)代碼,在窗體Load事件中綁定下拉框數據
/// <summary>
/// 窗體加載的Load事件
/// </summary>
/// <param name="sender">觸發者</param>
/// <param name="e">觸發環境</param>
private void frm_Login_Load(object sender, EventArgs e)
{
//調用自定義方法
BangDingLoad();
}
public void BangDingLoad()
{
DataTable dtYongGongXingMing = myfrm_登錄_LoginClient.
frmLogin_SelectYongHuMing().Tables[0];
cboYongHuMing.DataSource = dtYongGongXingMing;
cboYongHuMing.DisplayMember = "AccountNumber";
cboYongHuMing.ValueMember = "UserID";
CreateYanZhengMa();//繪製驗證碼
}
第二步:生成驗證碼
public string yanzhengma = "";
Panel pyanzhengma = new Panel();//實例化Panel控件
public frm_Login()
{
InitializeComponent();
pyanzhengma.Paint += new PaintEventHandler(pyanzhengma_Paint);//委託生成pyanzhengma重繪事件
pyanzhengma.Click += new EventHandler(pyanzhengma_Click);//委託生成pyanzhengma單擊事件
}
void pyanzhengma_Click(object sender, EventArgs e)
{
CreateYanZhengMa();
}
void pyanzhengma_Paint(object sender, PaintEventArgs e)
{
CreateImage(yanzhengma, e);
}
string strYanZhengMa;//聲明一個驗證碼全局變量
private string CreateRanDomCode(int codeCount)
{
string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";//設置驗證碼可以出現字符
string[] allCharArray = allChar.Split(',');//賦值給一個字符串數組allCharArray
string randomCode = "";//聲明一個變量,拼接驗證碼
Random rand = new Random();//實例化一個隨機生成器的對象
//進入for循環,i=0//爲初始值,i<codeCount爲滿足條件,i++爲步長值。i++與i=i+1相同
for (int i = 0; i < codeCount; i++)
{
int t = rand.Next(61);//隨機抽取62個數的其中一個
randomCode += allCharArray[t];//在字符串數組allCharArray對應的數字/字母
}
strYanZhengMa = randomCode;
return randomCode;//返回驗證碼
}
public void CreateYanZhengMa()
{
this.panel3.Controls.Clear();//清空panel控件
pyanzhengma.Location = new Point(0, 0);//設置驗證碼座標
pyanzhengma.Size = new Size(86, 26);//設置驗證碼大小
this.panel3.Controls.Add(pyanzhengma);//panel控件集合加入驗證碼
yanzhengma = CreateRanDomCode(4);//調用CreateRanDomCode()方法
}
/// <summary>
/// 繪製圖片
/// </summary>
private void CreateImage(string checkCode, PaintEventArgs e)
{
if (checkCode == null || checkCode.Trim() == String.Empty)
return;
Bitmap image = new Bitmap(checkCode.Length * 15 + 10, 24);
Graphics g = Graphics.FromImage(image);
try
{
Random random = new Random();//生成隨機生成器
g.Clear(Color.White);//清空圖片背景色
//畫圖片的背景噪音線
for (int i = 0; i < 25; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);
g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
}
Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));//文字類型,加粗,傾斜
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.BlueViolet, Color.Crimson, 1.2f, true);
g.DrawString(checkCode, font, brush, 2, 2);
//畫圖片的前景噪音線
for (int i = 0; i < 100; i++)
{
int x = random.Next(image.Width);
int y = random.Next(image.Height);
image.SetPixel(x, y, Color.FromArgb(random.Next()));
}
//畫圖片的邊框線
g.DrawRectangle(new Pen(Color.Blue), 0, 0, image.Width - 1, image.Height - 1);
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
e.Graphics.DrawImage(image, new Point(1, 0));
}
}
finally
{
bolStar = false;
g.Dispose();
image.Dispose();
}
}
第三步:界面登陸
1、存儲過程
--通過用戶名,密碼驗證登陸
if(@type='frmLogin_SelectYongHuID')
begin
SELECT UserID, AccountNumber, LimitsOfPowerGroupID
FROM UserList
WHERE (AccountNumber = @用戶名) AND (UserPassWord = @密碼)
end
2、邏輯層(BLL)
#region 驗證登錄
[OperationContract]
public DataSet frmLogin_SelectYongHuID(string 用戶名, string 密碼)
{
SqlParameter[] SQLCMDpas = {
new SqlParameter("@Type", SqlDbType.Char),
new SqlParameter("@用戶名", SqlDbType.Char),
new SqlParameter("@密碼", SqlDbType.Char)
};
SQLCMDpas[0].Value = "frmLogin_SelectYongHuID";
SQLCMDpas[1].Value = 用戶名;
SQLCMDpas[2].Value = 密碼;
DataTable myDataTable = myDALMethod.QueryDataTable("登錄_frmLogin", SQLCMDpas);
DataSet myDataSet = new DataSet();
myDataSet.Tables.Add(myDataTable);
return myDataSet;
}
#endregion
3、界面(UIL)登陸
/// <summary>
/// 登陸按鈕的單擊事件
/// </summary>
private void btnDengLu_Click(object sender, EventArgs e)
{
string YongHuMing = cboYongHuMing.Text;//獲取下拉框用戶名
string MiMa = txtMiMa.Text;//獲取文本框密碼
if (this.cboYongHuMing.Text != "" && this.txtMiMa.Text != "")//判斷用戶名和密碼不爲空
{
DataTable dtYanZheng = myfrm_登錄_LoginClient.frmLogin_SelectYongHuID(YongHuMing, MiMa).Tables[0];//查詢登陸名,密碼。
if (dtYanZheng.Rows.Count > 0)//判斷dtYanZheng的行數是否大於0
{
StringComparison type = StringComparison.CurrentCultureIgnoreCase;//在當前區域比較字符串,忽略大小寫
if (txtYanZhengMa.Text.ToString().Trim().Equals(yanzhengma.ToString().Trim(), type) == true)//文本框驗證碼區域處忽略大小寫,並驗證輸入的驗證是否正確
{
DataTable dtYongHuID = myfrm_登錄_LoginClient.frmLogin_SelectYongHuID(YongHuMing, MiMa).Tables[0];
int YongHuID = Convert.ToInt16(dtYongHuID.Rows[0]["UserID"].ToString().Trim());
YongHuMing = dtYongHuID.Rows[0]["AccountNumber"].ToString().Trim();
int YongHuQuanXianZuID = Convert.ToInt32(dtYongHuID.Rows[0]["LimitsOfPowerGroupID"].ToString().Trim());
frm_Main2 myfrm_Main = new frm_Main2();//實例化主界面對象
myfrm_Main.ShowDialog();//showDialog窗體
this.Dispose();//當前窗體釋放資源
this.Close();//當前窗口界面關閉
}
else
{
MessageBox.Show("驗證碼不正確!");
txtMiMa.Text = "";
txtYanZhengMa.Text = "";
CreateYanZhengMa();
}
}
else
{
MessageBox.Show("用戶名或密碼不正確!");
txtMiMa.Text = "";
txtYanZhengMa.Text = "";
CreateYanZhengMa();
}
}
else
{
MessageBox.Show("用戶名或密碼不能爲空!");
CreateYanZhengMa();
}
}