我愛你,與你無關——登錄系統的邏輯與結構


源代碼:13033480群共享

如果我說,“編程,與編程無關”,你一定覺得不可思議;那,你又如何理解網上那句非常流行的名言,“我愛你,與你無關”?

 

講一個真實的故事吧,我原來在企業的時候,單位有個專職翻譯,他曾把一個有2萬詞匯量的詞典交給我,讓我隨便問。我問了,他真的一個都沒記錯。

后來,總工把一個設備使用說明交給我,讓我翻譯,我一個晚上,9點—12點,3個小時,很輕松地翻好,交給了總工。(為此,總工欣賞了我好幾年,直到我調走,仍然無私關懷,這里,再次深深地說一聲:謝謝!)

后來,我又知道,在我之前,這個翻譯,已經翻了一個月了,沒翻出來......

 

難道,翻譯,與翻譯無關????

 

我英語,自然爛得很,這個,不是謙虛;而這套設備,我差不多已經玩爛了,這個也不是謙虛!

這是讓我翻這個使用說明,我用了三個小時,如果讓我自己寫一個使用說明,我一個小時都不需要!

 

這個故事告訴我,玩爛一個東西,再寫這個東西,比什么都重要。

 

現在,讓我們玩玩這個登錄系統吧......

 

一、登錄系統的使用邏輯

運行一下這個登錄程序,其實邏輯是這樣的:

1、在文本框如分別輸入用戶名和密碼;

2、點擊“注冊”按鈕,如果:

(1)用戶名、密碼正確,就跳轉到了Default.aspx;

(2)用戶名或密碼不正確,就彈出一個消息框,提示用戶名或密碼錯誤。

 

二、登錄系統的實現邏輯

熟悉了登錄系統的使用邏輯,也就有了它的實現邏輯:

在點擊“登錄”按鈕時,

1、獲取用戶名和密碼對應文本框中輸入的值txtUserName.Text和txtPassword.Text;

2、查詢數據庫NetShop中表Users中用戶名為txtUserName.Text,密碼為txtPassword.Text的項,獲得一個SqlDataReader;

3、判斷這個SqlDataReader是否為空,如果:

(1)SqlDataReader不為空,就跳轉到Default.aspx;

(2)SqlDataReader為空,就彈出消息框,提示“用戶名或密碼錯誤!”。

 

很多語言都有登錄系統,這些登錄的邏輯,都是這個邏輯。也就是說,你按照這個邏輯編程,而與使用什么語言編,一點關系都沒有,不是嗎??

有人已經看出來了,這個邏輯,其實就是“算法”,譚浩強早就指出“算法才是編程的靈魂”!

(其實,我更喜歡把這種所謂的算法,叫做“解決問題的步驟”)

 

下面我們看看,ASP.NET使用C#是怎么實現這個邏輯的:

 

protected void btnLogin_Click(object sender, EventArgs e)
{
    bool blIsAuthenticated = false;

    string strConnection = ConfigurationManager.ConnectionStrings["NetShopConnString"].ConnectionString.ToString();

    SqlCommand cmd = new SqlCommand();
    using (SqlConnection conn = new SqlConnection(strConnection))
    {
        conn.Open();

        cmd.Connection = conn;
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = "SELECT UserName FROM Users WHERE UserName='" + txtUserName.Text + "' AND Password='" + txtPassword.Text + "'";

        SqlDataReader rdr = cmd.ExecuteReader();
        if (rdr.Read())
        {
            blIsAuthenticated = true;
        }
        rdr.Close();
    }

    if (blIsAuthenticated == true)
    {
        Session["UserName"] = txtUserName.Text;
        Response.Redirect("Default.aspx");
    }
    else
    {
        Response.Write("<script>alert('用戶名或密碼錯誤!')</script>");
    }
}

 

這個代碼里,我使用了using()結構;使用了比較成熟的登錄系統特有的一個變量blIsAuthenticated來判斷是否登錄成功;使用了類ConfigurationManager從Web.config中讀取連接字符串。如果,我直接使用前面講的最基本的數據庫連接代碼,你會看到,那將會是直接使用計算機語言來翻譯我前面的實現邏輯了。

這個登錄系統的結構,在這里,就略一下吧......

 

寫詩的人常會說,“功夫在詩外”,相信這句話吧,編程,功夫在編程之外......

版權所有©2012,WestGarden.歡迎轉載,轉載請注明出處.更多文章請參閱博客http://www.cnblogs.com/WestGarden/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM