源代碼: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中讀取連接字符串。如果,我直接使用前面講的最基本的數據庫連接代碼,你會看到,那將會是直接使用計算機語言來翻譯我前面的實現邏輯了。
這個登錄系統的結構,在這里,就略一下吧......
寫詩的人常會說,“功夫在詩外”,相信這句話吧,編程,功夫在編程之外......