C#程式設計 第二部分 第5-6章 C# 程式設計 - 南華大學資管系
基於物件的程式設計 (Object-based Programming)1/2 使用(現存的)物件來建立應用程式。 必須先設計類別(藍圖),才能根據類別建立物件(實體,有各自獨立的記憶體)。 類別(Class)是定義物件內容的模子(藍圖)。內容包括屬性(properties)和相關的方法(methods)。 (a) 屬性:描述物件的性質和狀態 - 文字盒的Name, Text等屬性。 (b) 方法:執行特定功能的函數(或程序) - 例外物件的ToString()函數 - Convert類別的ToInt32(~)函數 C# 程式設計 - 南華大學資管系
基於物件的程式設計 (Object-based Programming)2/2 不用知道物件內部屬性和方法的實作方式,只需知道提供那些屬性和方法,以及如何使用。 物件(類別)名稱.屬性、物件(類別)名稱.方法() .NET Framework 類別函式庫提供龐大多樣的類別庫。 (a) System.Windows.Forms 是表單控制項的父名稱空間。 (b) [說明]→[內容/索引]→MSDN Library完整的使用說明文件。 (c) MSDN Online Library: http://msdn.microsoft.com/library 控制項類別,Convert類別,Console類別的使用。 C# 程式設計 - 南華大學資管系
物件變數和物件實體 物件是以參考型態(Reference Type)來處理。 宣告物件變數(假設有一個Date類別) Date d; 此時,只是告訴系統,變數 d 會參考到一個Date類別的 物件,但尚未有真正的Date物件實體。 建立物件實體(利用new operator) new Date(); 將物件實體的位址存到物件變數中以便後續的使用。 d = new Date(); 可以宣告和建立寫在同一敘述 Date d = new Date(); 在執行階段,可改變參考的物件實體。 Date t = new Date();// 另一個物件 d = t ; // d 和 t 參考同一個物件 C# 程式設計 - 南華大學資管系
DateTime類別和Timer控制項 建立DateTime物件實體(使用new運算子)。 DateTime dt = new DateTime (2010, 9, 23, …); 取得目前電腦時間資料的DateTime物件。 DateTime.Now 利用Hour、Minute、Second屬性值取得時、分、秒。 從工具箱建立Timer控制項。 (a) 利用Enabled屬性啟動計時器。 (b) 利用Interval屬性設定觸發Tick事件的間隔時間 (單位:毫秒,1秒 = 1000毫秒)。 (c) 處理Tick事件,以更新畫面。 C# 程式設計 - 南華大學資管系
練習:簡易時間顯示器 介面 在clock_load 和 timer1_Tick取得現在時間並顯示 電子鐘 : : Label Control: AutoSize: False TextAlign: MiddleCenter BorderStyle: Fixed3D 加入Timer Control控制項 Enabled: true Interval: 1000 (毫秒) 在clock_load 和 timer1_Tick取得現在時間並顯示 DateTime dt = DateTime.Now; lblHour.Text = dt.Hour.ToString(); lblMin.Text = dt.Minute.ToString(); lblSec.Text = dt.Second.ToString(); 電子鐘 : : lblHour lblMin lblSec 14 10 45 C# 程式設計 - 南華大學資管系
區域變數(Local Variable) 變數有其勢力(使用)範圍(scope)以及生命週期(記憶 體的存在時間,life time) 在方法或Block(區塊)內宣告的變數稱為區域變數。 只在方法或區塊內有效,離開區塊或方法之後,變數 不存在,因此,也不能被使用。 C# 程式設計 - 南華大學資管系 Button1_Click(….){ int x = 0 ; x = x + 1 ; lblResult.Text = "x = “ + x; }
實體成員 (Instance Member) 它是類別的屬性(資料)成員,在方法之外宣告。只要物 件存在,實體成員就存在,而且所有類別內的方法都可 以使用。 Class MyForm … { int y = 0 ; button1_Click(…) { y = y + 1 ; lblResult.Text = "y = “ + y ; } button2_Click(…) { (可保留或共享變數值) C# 程式設計 - 南華大學資管系
練習:時間顯示器 1/2 介面 在Form1_load取得現在時間並顯示 Label Control: 電子鐘 : : lblHour lblMin lblSec 介面 Label Control: AutoSize: False TextAlign: MiddleCenter BorderStyle: Fixed3D 在Form1_load取得現在時間並顯示 DateTime dt = DateTime.Now; /* h, m, s 必須宣告為實體成員(Instance member) 變數,以便後續自行維護變數內容值 */ h = dt.Hour ; m = dt.Minute; s = dt.Second ; lblHour.Text = h.ToString(); ... 14 10 45 C# 程式設計 - 南華大學資管系
練習:時間顯示器 2/2 動態更新時間(每秒更新一次) (a) 從工具箱→元件 加入Timer Control物件 timer1.Enabled=true ; timer1.Interval=1000 ; // 一秒通知一次 (b) 每一秒透過Tick事件通知一次(事件處理) s = s + 1 ; if (s >= 60){ m++; // m = m + 1; s = 0; } … C# 程式設計 - 南華大學資管系
練習:猜數字遊戲 1/3 隨機產生一個二位數(0~99),讓使用者猜,系統會 提示大小,過程以文字盒顯示。 TextBox MultiLine: True ScrollBar: Both - ReadOnly: True - WordWrap: False - 使用”\r\n”跳行 C# 程式設計 - 南華大學資管系
練習:猜數字遊戲 2/3 Random 類別 在表單載入或按下”產生數字”鈕時,產生新的數字 (0 ~ 99) (a) Random rd = new Random(); (b) rd.Next (0, 100) // 0 ~ 99 在表單載入或按下”產生數字”鈕時,產生新的數字 (0 ~ 99) (a) 此數字必須存起來,方便之後比對 answer = rd.Next (0, 100) ; // answer是一個整數 (b) answer 必須宣告為Instance member, Why? 將答案欄和訊息欄清空 txtAnswer.Text = ""; txtMessage.Text = ""; C# 程式設計 - 南華大學資管系
練習:猜數字遊戲 3/3 答案鈕: 確定鈕(比較大小) 練習:猜數字遊戲 3/3 答案鈕: MessageBox.Show(answer.ToString(),“答案", …OK, …Information); 確定鈕(比較大小) (a) if (txtAnswer.Text == "") { MessageBox.Show("沒有輸入答案“, …) ; return; } (b) int input = Convert.ToInt32(txtAnswer.Text) ; // 取得輸入 string output = “”; // 進行大小比較 if (input == answer) output = “你答對了!答案是“ +answer ; if (input < answer) output = "答案比“ + input + "大"; if (input > answer) output = "答案比“ + input + "小"; (c) // 將結果串接在目前文字盒資料的後面 txtMessage.Text += output + “\r\n"; (d) txtAnswer.Text = “”; //將答案欄清空 txtAnswer.Focus(); //取得輸入焦點 C# 程式設計 - 南華大學資管系
複雜的條件運算式 (Conditional Expressions) 邏輯運算子(Logical operator) A B !A (NOT) A&& (AND)B A || (OR) B true true false true true false false true false false C# 程式設計 - 南華大學資管系 [例] ! (15 > 13) → false 15 > 13 && 14 <= 12 → false (兩者都要成立) 15 > 13 || 14 <= 12 → true (一個成立即可)
選擇結構:二選一 (if ~ else ~) // 兩個互斥的單選 if ( C ) { ST } if ( !C ) { SF } (b) if ( C ) { ST } else { SF } True False C SF ST C# 程式設計 - 南華大學資管系
判斷成績是否及格 int score; string result; … (a) // 兩個互斥的單選 if (score >= 60) result = "及格"; if (score < 60) result = "不及格"; // if( !(score >= 60) ) result = "不及格";亦可 (b) if (score >= 60) result = "及格"; else result = "不及格"; C# 程式設計 - 南華大學資管系
判斷成績是否落在Ø和100之間,符合則判斷是否及格,不符合則顯示錯誤 1/2 判斷成績是否落在Ø和100之間,符合則判斷是否及格,不符合則顯示錯誤 1/2 (a) if (score > 100){ /* 顯示錯誤訊息,不處理 */ return ; } if (score < 0) { return; // 處理及格與否 if (score >= 60) . . . else . . . C# 程式設計 - 南華大學資管系
判斷成績是否落在Ø和100之間,符合則判斷是否及格,不符合則顯示錯誤 2/2 判斷成績是否落在Ø和100之間,符合則判斷是否及格,不符合則顯示錯誤 2/2 (b) 使用複合條件 if (score > 100 || score < 0){ /* 錯誤訊息 */ return ; /* 不處理 */ } /* 處理及格與否 */ if (score >= 60) /*及格*/ … ; else /*不及格*/ … ; (c) 使用巢狀 if - else if (score <= 100 && score >= Ø) { } else /* 錯誤訊息、不處理 */ (d) . . . C# 程式設計 - 南華大學資管系
練習:程式改寫 四則運算範例 if (num1 < 0) { lblResult.Text = "錯誤:數字一小於Ø"; return ; } if (num1 > 99) { lblResult.Text = "錯誤:數字一超過99" ; return ; } (a) if (num1 < 0 || num1 > 99) { lblResult.Text = “數字一範圍不符,必須0到99"; return; } (b) 用if - else改寫亦可 C# 程式設計 - 南華大學資管系
選擇結構:多選一 成績等級:100~90 (A) , 89~80 (B) , 79~70 (C) , 69~60 (D) , 60以下 (E)。 (a) if (score >= 90) /*等級A*/ ; if (score <= 89 && score >= 80) /*B*/ ; … if (score < 60) /*E*/ ; (b) if (score >= 90) /*A*/ ; else if (score >= 80) /*B*/ ; else if (score >= 70) /*C*/ ; else if (score >= 60) /*D*/ ; else /*E*/ ; C# 程式設計 - 南華大學資管系
多選一:switch 敘述 switch( 運算式 /*整數或字串*/) { case 值1:區塊1 ; break; . [ default: 區塊N; break; ] } // 成績等級 switch( (int) (score / 10) ) { case 10 : case 9 : /* A */ break ; case 8 : /* B */ break ; case 7 : /* C */ break ; case 6 : /* D */ break ; default : /* E */ break ; } C# 程式設計 - 南華大學資管系
程式練習 (a) 猜數字遊戲之數字比較(三選一) (程式改寫) if (input == answer ) output = “你答對了!” ; else if (input < answer) output = “…..大” ; else output = “……小” ; (b) 輸入5個成績,計算幾人及格,各等級有多少人, 平均幾分。 ( 實數的格式:實數.ToString(“##.##”) ) C# 程式設計 - 南華大學資管系
程式練習:點餐系統 1/4 選擇控制項(True/False)搭配條件敘述。 介面設計。 Fries Small Big Fish Drink Coke Coffee BlackTea Fish Chicken SPizza BPizza C# 程式設計 - 南華大學資管系
練習:點餐系統 2/4 群組方塊控制項 (GroupBox) 選項按鈕控制項(RadioButton, rdb) 所需的控制項 (群組,排它性)。 (b) Text屬性 (群組標題)。 選項按鈕控制項(RadioButton, rdb) (a) 多個選項中只能選一個 (互斥)。 (b) Name, Text, Checked (選取與否)。 C# 程式設計 - 南華大學資管系
練習:點餐系統 3/4 核取方塊控制項(CheckBox, chk) “點餐”鈕的事件處理 (a) 允許複選 (各自獨立)。 練習:點餐系統 3/4 核取方塊控制項(CheckBox, chk) (a) 允許複選 (各自獨立)。 (b) Name, Text, Checked。 “點餐”鈕的事件處理 (a) 令總金額為0:int totalAmount = 0; (b) 檢查漢堡/披薩 if (chkFish.Checked) totalAmount += 59; if (chkChicken.Checked) totalAmount += 69; if (chkSPizza.Checked) totalAmount += 259; if (chkBPizza.Checked) totalAmount += 429; C# 程式設計 - 南華大學資管系
練習:點餐系統 4/4 “點餐”鈕的事件處理 (c) 檢查薯條 (d) 檢查飲料 (e) 輸出結果 if (chkFries.Checked) { if (rdbSmall.Checked) totalAmount += 25; else totalAmount += 35; } (d) 檢查飲料 if (chkDrink.Checked) { if (rdbCoke.Checked) totalAmount += 25; else if(rdbCoffee.Checked) totalAmount += 30; else totalAmount += 20; (e) 輸出結果 lblOutput.Text = “NT $” + totalAmount; C# 程式設計 - 南華大學資管系