WCF廣州本田整車銷售系統技術解析(一) 新建項目與登陸驗證功能實現

使用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)


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







本文僅供學習,禁止用於商業用途,否則後果自負!!!















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