從乙個例項看程式設計水平的步步提高

2021-09-05 23:52:02 字數 4436 閱讀 2196

很久很久前就想寫這個話題的文章了,但是,總是找不到合適的例子。例子簡單不足於說明問題,例子複雜可讀性就會降低,就會達不到文章的目的。兩難總讓人激發解決問題的鬥志,於是乎自己試著寫寫這個例子吧。這個例子就是學籍管理中增加學籍資訊的乙個功能。我想通過這個例子的不同的解決思路,來說明程式設計的層次步步提高。(注意:文中所有函式都是即興編寫,沒有通過除錯驗證,僅用於說明)

已知:1)資料庫名為:

mydb

,密碼:

1234

2) 主表名為:

student

3)student

欄位名:

id char(6

);學籍編號

name char(10)   

;學生姓名

*** char(2)    

;學生性別

born_date char(8) 

;學生出生日期

f1    char(10)   

;其他字段

1 f2    char(20)   

;其他字段

2 f3    char(30)   

;其他字段

3 f4    char(40)   

;其他欄位4

求:將介面上的學生資訊增加到資料庫中。

注意:此功能不考慮學籍編號的重複等問題,不考慮例外處理,採用

insert

語句進行資訊插入,為了便於簡化問題,以上欄位都採用

char

型等。方法

1

1、 設計介面拖拉

8個控制項用於接收

8個學生資訊。控制項名為:

ctrl1

、ctrl2

、ctrl3...ctrl8

2、 假定控制項均為文字框。

3、 設計乙個增加命令按鈕

4、 命令按鈕程式:用

c#編寫:將控制項中的資訊寫入到資料庫

student

表中。 public void add_data()

方法1分析:

此程式設計為最常見,特點就是就事論事,一氣呵成,達到設計要求。此為一般之水平。

方法

2同方法

1,但是編寫時注意到了方法

1沒有邏輯劃分,不便於閱讀。於是改進之處是:將程式進行邏輯劃分,通過函式呼叫來清晰功能的結構。主函式只有三行語句。

其命令按鈕程式為:

public void add_data()

public 

oledbconnection open_db(string db_name,string password)

public string get_insert_str()

public void exec_sql(string sql_str,

oledbconnection

conn)

方法2分析: 方法2

強調了邏輯劃分,將乙個功能分成了

3個函式。可讀性大大加強。初步地使用了引數和引數呼叫,為函式公用打下了基礎,但是,在

get_insert_str()

中,還是和方法

1一樣,沒有什麼技巧。

方法

3

同方法2

,但是要解決

get_insert_str()

中語句簡單、語句行數過多問題,以及字段變化對程式的影響問題。其方法是,對控制項命名進行重新命名:

txt_id,txt_name,txt_***,txt_born_date,txt_f1,txt_f2,txt_f3,txt_f4

。使之包含欄位名。

public

string

get_insert_str()

public

string

get_insert_str1(string

flds)

values_str= values_str + ")"

; string

sql = fld_str + " values "

+ values_str;

return

sql;

} public

string

get_ctrl_value(string

ctrl_name,system.web.ui.page

page) }

} return"";

} 方法3

分析:

通過重新命名控制項名,建立欄位名和控制項名的關係,利用欄位名的字串,將控制項中的值通過迴圈語句,逐一的計算處理,並形成了

insert

語句。這個技巧的好處在於,當欄位增加和減少時,只要通過編輯

filds

的字串便可解決了。不需要增加減少任何語句。當欄位增加很多時,語句行數仍然不變。另外,

get_ctrl_value()

函式成了公共函式,與實際功能只存在被呼叫的關係。

方法

4

以上方法都是著眼於本功能的優化。分離出的函式只滿足本功能使用,眼界很低。我們可以擴充套件我們的眼界將函式用於我們的整個系統。因為系統中還有很多地方有類似的資料插入功能的。

這個時候,我們可以考慮編寫乙個程式,將功能中的一些子函式打造成通用函式,例如:

open_db,exec_sql,

get_insert_str1,

get_ctrl_value

等,並將它變成

dll,供整個系統的呼叫。 方法

4分析: 方法

4是一種革命性的變革,程式設計師終於將自己目光投向整個系統,也就是說,編制一段程式不僅僅是用於乙個功能,而是用於整個系統中相同的功能。很多程式設計師很難跨出這一步,他們懶得考慮程式的復用性,相同功能可能因時間的不同,而導致程式的不同,更多的程式設計師則滿足於複製貼上這種簡單的複製,當源程式出錯的時候,所有貼上的地方都要改變。我們說程式的復用性樹立是程式設計師水平提高的重要標誌。

方法

5方法4

的眼界雖然提高到整個系統,但是,眼界還是比較低。因為有太多的應用系統都用到資料插入的功能。因此,我們可以考慮到將函式用於多個系統。

如果我們還是採用

dll方式,我們還可以在引數上作些文章,由於呼叫這些函式時,有關使用者名稱、密碼和欄位名串都寫在程式中,因此,可以將這些引數放置在程式之外。

一種寫在檔案之中,例如

congfig

檔案,自定義的引數文字檔案,自定的引數

xml檔案,另一種將引數放置在資料庫的參數列中。

方法5分析: 方法5

將函式的復用提高到多系統之中,這就意味著這個函式講用於多個系統,程式設計師開發的效率將會有很大的提高,程式的復用性大提公升;並且引數化的運用,提公升了程式的靈活性和擴充套件性。方法

5體現了程式設計師較高的水平。

方法

6方法5

雖然,提公升了函式的復用範圍和提高了引數化程度,但是,軟體的構架還是處於乙個靜態思考階段。函式和系統還處於緊耦合方式,函式還僅用於自己開發的系統。我們可試著將這些函式功能變成

webservice

方式加以使用。即編寫功能的

webservice

放在網上,讓程式進行非耦合式呼叫。這樣其他程式設計師也可以輕鬆的呼叫了。(當然許多函式是很難變成

webservices

,例如引數需要格式化等要求)

方法6分析:大大提高的函式功能的使用範圍。使得函式變自己使用為大家使用。程式設計師此時已經達到很高的水平。

方法

7

儘管方法

6已經使得程式設計師達到了乙個很高的水平,但是這種水平還是停留在技術層面和實用層面。程式設計師要想在此基礎上有所提高,就要對這個功能進行理論上的分析,分析這個功能與其他功能的關係,分析這個功能在整個系統或多個系統中的地位,並且將這個功能上公升到標準功能高度,建立這個功能和其他功能的介面,使得這個功能於其他功能有機的融為一體。 方法

7,體現了程式設計師的理論分析的水平,他不是單單從單一功能上考慮問題,而是從標準化和其他功能的相互關係上考慮問題了。通過這個思路再去改造這個函式,這樣將大大擴充套件了其功能的使用範圍。

以上從乙個資料插入的例項來說明了程式設計水平的步步提高。我們看到程式設計師的水平與函式的邏輯劃分有關、與程式設計技巧有關、與程式的引數化有關、與程式的復用範圍和形式有關、與程式設計師的理論意識有關、與程式的標準化有關、與多功能統一考慮有關。我們雖然寫到了方法

7這個層次,但這個層次決不是最高層次,學無止境,藝無止境,在此之上還有更大的天空。這就需要程式設計師不懈地努力、不懈地進取。唯有這樣我們的程式設計師的視野才會更開闊,我們程式設計師的水平才會有更加提高。

從乙個例項看程式設計水平的步步提高

很久很久前就想寫這個話題的文章了,但是,總是找不到合適的例子。例子簡單不足於說明問題,例子複雜可讀性就會降低,就會達不到文章的目的。兩難總讓人激發解決問題的鬥志,於是乎自己試著寫寫這個例子吧。這個例子就是學籍管理中增加學籍資訊的乙個功能。我想通過這個例子的不同的解決思路,來說明程式設計的層次步步提高...

《從乙個例項看程式設計水平的步步提高》

很久很久前就想寫這個話題的文章了,但是,總是找不到合適的例子。例子簡單不足於說明問題,例子複雜可讀性就會降低,就會達不到文章的目的。兩難總讓人激發解決問題的鬥志,於是乎自己試著寫寫這個例子吧。這個例子就是學籍管理中增加學籍資訊的乙個功能。我想通過這個例子的不同的解決思路,來說明程式設計的層次步步提高...

從乙個物件例項看資料抽象與封裝

本章目標 1 用c的方式實現棧2 用c 資料抽象的方式實現棧 3 比較兩者的差異性 棧的插入用頭插法,這樣子訪問最快 不採用頭節點。c include include include 定義棧中的元素 struct link 定義乙個棧結構體 只需要頭指標 沒有頭結點 還有結構體的大小維護 struc...