這是備份,原文請看我的網站:[習題]ASP.NET製作網頁版的[小]計算機

http://www.dotblogs.com.tw/mis2000lab/archive/2008/12/17/web_calculator_asp_net_1217.aspx

 

 

 

我在 Yahoo知識+上面(ASP版)看到一個問題,

對方想作一個網頁版的計算機

 

我看了以後,第一個反映是嗤之以鼻(這問題也好意思拿出來問

但今天早上我搭車上班時,想了一下,我發現在 ASP.NET上面要做出計算機的功能,

真的有一點小難度!

 

因為網頁程式是一種「無狀態(Stateless)」的程式設計,

對於習慣傳統Windows程式的人來說,很難接受的!

或許這習題在VB上面撰寫 Windows Form並不難,但在網頁上撰寫,就會出現不同的狀況了。

 

這個小範例,我只完成一小部份(+、=的按鈕是可用的,其他的應該會自己寫了,就改一下而已。)

這個範例對初學者來說,有幾個小重點:

1.    可以讓學生練習「按下 Button按鈕,便會啟動 Button_Click()事件

2.    初學者最容易遇見的程式問題,就是變數的值,在這範例中將會不斷變化。

    因為VB語法的「等於」與「給予變數一個值」,都用了相同的「=」符號。 

    C#與比較嚴謹,「== (等於)」與「= (給予變數一個值)」是不同的意思。

    學慣了N年數學的程式初學者,第一次遇見(VB語法)程式裡面的「=」去修改 / 更換變數值,是很難適應的。要花一點時間。    例如: 
    Dim A as Integer = 0     '--A的初始值是 0
          A = 888        '--又把A的值改成888了!
          A = A + 222

    最後的答案,A是多少?
    初學者第一次寫程式,真的很難適應這一段變化。(或許是我不聰明,我當初很不適應這件事)

    後來我把它 "翻譯" 如下,才過了這一關。
    A <= 888    (註:把888 塞到A變數裡面)
    A <= A + 222  (註:把A變數加上222的「成果」,塞到A變數裡面)

3.    但要記錄下運算的過程,我用了狀態管理中的 ViewState(用Session也行啦)。

       方法很多,說不定您作得更好。

=======================================================

 

HTML設計畫面用了很多按鈕,剛好是一個很好的練習。

除了按鈕之外,我也用了 TextBox 與 Label,都是最基礎的東西。 

先說好,我偷懶,只完成上面「有顏色」的按鈕功能

其他的請自己改。

 

後置程式碼如下(VB語法):

01     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
02         If Not Page.IsPostBack Then
03             '--第一次執行程式
04             ViewState("cal_input") = ""      '-- 使用者輸入的數字
05             ViewState("cal_singal") = "0"   '-- 有無按下運算符號(+ / - / * / %)
06             ViewState("cal_sum") = 0       '-- 運算後的結果
07         End If
08
09         '-- 寫程式的時候,我會即時把[變數值]列印到銀幕上,觀察程式有無寫錯。
10         'Response.Write(ViewState("cal_input").ToString() & "<br>")
11         'Response.Write(ViewState("cal_singal").ToString() & "<br>")
12         'Response.Write(ViewState("cal_sum").ToString() & "<br>")
13     End Sub

14
15     Protected Sub ButtonCE_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonCE.Click
16         ViewState("cal_input") = ""
17         ViewState("cal_singal") = "0"
18         ViewState("cal_sum") = 0
19         '-- 按下 [CE清除]按鍵,數字歸零
20
21         TextBox1.Text = 0    '-- 畫面歸零
22         Label1.Text = "歸零"
23     End Sub

24
25     Protected Sub ButtonEnd_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonEnd.Click
26         '-- 運算完畢,輸入「=」計算出結果。
27         Label1.Text = "運算完畢 !!"
28
29         ViewState("cal_sum") = CInt(ViewState("cal_sum")) + CInt(ViewState("cal_input"))
30         TextBox1.Text = CInt(ViewState("cal_sum"))
31
32         '--運算完畢,按下「=」符號後,如果要繼續運算的話....
33         ViewState("cal_input") = CInt(ViewState("cal_sum"))
34         ViewState("cal_singal") = "0"
35     End Sub

36
37     Protected Sub Button_x1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button_x1.Click
38         '--加法--
39         Label1.Text = "加法(+)運算"
40         TextBox1.Text = CInt(ViewState("cal_input"))
41
42         If ViewState("cal_singal") = "0" Then
43             '-- 第一次按下「+ 加法」按鈕
44             ViewState("cal_sum") = CInt(ViewState("cal_input"))
45         Else
46             ViewState("cal_sum") = CInt(ViewState("cal_sum")) + CInt(ViewState("cal_input"))
47         End If
48
49         TextBox1.Text = ViewState("cal_sum")  '--畫面更新
50
51         ViewState("cal_singal") = "+"
52         ViewState("cal_input") = "0"   '--數字歸零,等待下一次輸入
53     End Sub

54
55
56
57     '== 數 字 ============================================================
58     Protected Sub Button0_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button0.Click
59         ViewState("cal_input") = ViewState("cal_input").ToString() & "0"
60         TextBox1.Text = CInt(ViewState("cal_input"))
61     End Sub

62
63     Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
64         ViewState("cal_input") = ViewState("cal_input").ToString() & "1"
65         TextBox1.Text = CInt(ViewState("cal_input"))
66     End Sub

67
68     Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
69         ViewState("cal_input") = ViewState("cal_input").ToString() & "2"
70         TextBox1.Text = CInt(ViewState("cal_input"))
71     End Sub

72
73     Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
74         '--以此類推,以下省略!!!
75     End Sub

76
77         '--以此類推,以下省略!!!

 

雖然這不是一個好範例 (因為這題目有點悶,不實用、不有趣、不會主動吸引人去作),

但對於初學者來說,是可以學到東西的小範例。

尤其是「變數」在不斷的運算中,必須不斷修改數值。

對於初學者來說,有認真思考過,會學到一些東西喔!

 

2008/12/22補充:上面的程式,因為使用了 ViewState(或Session),加上變數之間不斷傳遞數值,

                                所以非常紊亂。   我們可以參考這兩篇文章加以改進:

 

 

 

 完畢(The End)

 ----------- 分 隔 線 (下面有美女圖)-----------------------------------------------------------------------------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

今日值班正妹,柚木 Rio。很可愛喔!是愛情動作片的女優..........

圖片:http://images.google.com/images?hl=zh-TW&rls=com.microsoft:zh-TW:IE-SearchBox&rlz=1I7GGIH_zh-TW&q=%E6%9F%9A%E6%9C%A8%20Rio&lr=&um=1&ie=UTF-8&sa=N&tab=wi

 

 

 

(謎之聲:為什麼講完範例以後,很不搭嘎地出現AV女優的圖片啊?  這不會破壞形象嗎?

    嗯......我只能說,你願意看柚木Rio的圖呢?還是底下這張「撕髮佈公」的圖?

 

我個人是對於「高雄馬英九」的撕髮不公,沒啥興趣啦。

      關於號稱「高雄的馬英九」資料來源如下---- http://www.wretch.cc/blog/corndesu/17842180

      這篇文章很難找了,你一定要看啊...  http://rebirth.pixnet.net/blog/post/1735973

圖片來源:http://images.plurk.com/1856775_5b7fa44bce5e857a456849099e7e8f1e.jpg

 

.....................................................................................................................................................................................
ASP.NET專題實務ASP.NET專題實務(文魁出版 / P8187)

2008/八月份 天瓏書局排行榜前十名

.............................................................................................................. 寄信給我    mis2000lab (at) 雅虎.com.台灣 ........

arrow
arrow
    全站熱搜

    MIS2000 Lab 發表在 痞客邦 留言(0) 人氣()