ASP.NET 網頁程式設計 (使用 C#)
講師︰唐士軒
CSIE, NTU
2
Outline
z
課程簡介z
資料核對z
網頁類型簡介z
軟體安裝說明z
C# 基本語法複習課程資訊
z
課程講師:唐士軒 Tang, Shih-Hsuanz
上課時間:z 2006/07/26 ~ 2006/09/02 z週三及週六 PM 7:00 ~ 9:30
z
聯絡方式:zives.net@gmail.com
z
課程網頁:www.csie.ntu.edu.tw/~r93057/aspnet134
4
教材與進度
z
課程先修z具備 C# 基礎程式設計能力 z對程式設計有興趣者
z
上課教材z以投影片為主,無指定用書 z上課投影片可於課程網頁下載
z
課程進度z依照學習情況做動態調整
課程內容
z
環境安裝與介紹z
C# 基礎語法複習z
Web 基本控制項z
SQL 語法z
資料庫應用程式z
DataGrid 控制項z
DataList 控制項z
使用者自訂控制項6
參考書目
z
ASP.NET 1.0 教學手冊–使用 C#,鍾俊 仁 譯,碁峯出版z
用實例學 ASP.NET,章立民 編著,碁峯 出版z
C# 範例精要解析,呂文達 編著,松崗 出版z
Visual C# .NET 程式設計經典,曹祖 聖、吳明哲、林兆燊 主編,松崗出版評分方式
z
缺曠情形–20%z請務必準時上課 z儘可能不要缺課
z
期中測驗–30%z約在第六次至第八次上課期間 z課程進度落後則改為課後練習
z
期末測驗–50%z最後一堂上課時間舉行
z請務必參加
8
Outline
z
課程簡介z
資料核對z
網頁類型簡介z
軟體安裝說明z
C# 基本語法複習Outline
z
課程簡介z
資料核對z
網頁類型簡介z
軟體安裝說明z
C# 基本語法複習10
網頁伺服器
z
網頁伺服器是一個管理網頁的軟體,可 透過網路提供網頁內容至用戶端瀏覽器z
常見的網頁伺服器zInternet Information Services (IIS)
zApache
靜態網頁
z
靜態網頁的內容,不論任何人任何時間 連結至此網頁,所得到的內容皆相同要求網頁 網頁資料
12
動態網頁 (1)
z
動態網頁是在使用者要求後才動態產生z
動態網頁類型z用戶端動態網頁 (JavaScript、VBScript…)
要求網頁
靜態網頁及指令
分析指令 產生網頁
動態網頁 (2)
z
動態網頁類型z伺服端動態網頁 (PHP、ASP、ASP.NET…)
動態產生網頁 要求網頁
傳送網頁
14
Outline
z
課程簡介z
資料核對z
網頁類型簡介z
軟體安裝說明z
C# 基本語法複習軟體價位
z Microsoft Visual Studio.NET Professional 2003 中文專業版 ( 60天評估版 )
z $ 400
z Microsoft Visual C# .NET 2003 中文標準版
z $ 3000 ~ 4000
z Microsoft Visual Studio .NET Professional 2003 中文專業版
z $ 27500
(Yahoo 拍賣 2005/05)
16
安裝注意事項
z
若要使用 Web Form 請先安裝IISz
XP 帳號不要使用中文z
不要同時放二張 .NET 安裝光碟於實體或 虛擬光碟機內z
安裝磁碟空間約佔 1.5GIIS 伺服器 (1)
z 要執行 ASP.NET Web 應用程式必須先安裝 IIS 伺服器
z 至 [控制台] 選擇 [新增或移除程式] 即會跳出下
圖視窗,點選左方 [新增/移除 Windows 元件]
18
IIS 伺服器 (2)
z 點選 [新增/移除 Windows 元件] 後會出現 [Windows 元 件精靈] 視窗,將 IIS 選項打勾點選下一步即可進行安 裝動作
IIS 伺服器 (3)
z
當 IIS 伺服器安裝完成後,開啟瀏覽器連 結至本機網址 http://localhost/ ,若 IIS 伺 服器順利安裝完成即可看到下圖網頁20
軟體安裝 (1)
軟體安裝 (2)
22
軟體安裝 (3)
軟體安裝 (4)
24
軟體安裝 (5)
軟體安裝 (6)
26
軟體安裝 (7)
執行程式 (1)
28
執行程式 (2)
Outline
z
課程簡介z
資料核對z
網頁類型簡介z
軟體安裝說明z
C# 基本語法複習30
字串數值型別轉換
z 數值轉成字串型別
z 利用 ToString() 方法來完成 z 例如︰
int a = 321;
string b = a.ToString();
z 字串轉數值型別
z 利用數值型別 Parse() 方法來完成 z 例如︰
string b = "321";
int a = int.Parse(b);
選擇結構流程控制 (一)
z 可利用關係及條件運算子,來描述是否執行流 程中的程式區塊
z 語法
if (判斷條件) {
條件成立時執行內容;
} else {
條件不成立時執行內容;
}
32
多選項流程控制
z 當程式具有多個判斷條件時,可利用 if … else if … else if … else 來完成
z 語法
if (判斷條件1) {
程式區塊1;
}
else if (判斷條件2) {
程式區塊2;
}
else if (判斷條件3) {
程式區塊3;
} else {
程式區塊4;
}
三元運算子
z
三元運算子可用來取代 if … else 流程控 制,使得程式碼更為簡潔z
語法z變數 = 判斷條件 ? 變數值1 : 變數值2
z
用法z string a = 7>4 ? "7 比 4 大是對的" : "7 比 4 大是錯的";
z輸出結果︰ 7 比 4 大是對的
z string b = 1>4 ? "1 比 4 大是對的" : "1 比 4 大是錯的";
z輸出結果︰ 1 比 4 大是錯的
34
選擇結構流程控制 (二) (1)
z 程式中若具有多個判斷條件時,除了 if … else if … else 流程控制外,還可以選擇 switch 敘述
z 語法
switch (判斷條件) {
case 條件值1:
程式區塊1 break;
case 條件值2:
程式區塊2 break;
default:
預設程式區塊 break;
}
選擇結構流程控制 (二) (2)
z switch 流程控制不但簡潔更易維護
z switch 的判斷條件可為變數、數值或字串等等 z 判斷條件結果之資料型別要與所有條件值的資
料型別一致
z 若條件值 1 滿足時,便會執行程式區塊 1 的程 式內容,直到 break 為止離開 switch 敍述
z 若所有條件值皆不滿足時,便會執行 default 的
預設程式區塊內容
36
重複結構流程控制 (一) (1)
z 當我們需要重複執行某段程式區塊時,就可以 利用重複結構流程控制來達成
z 語法
for ( 初值; 判斷式; 遞增值 ) {
程式區塊;
}
z 用法
for (int i=0; i<10; i++) {
Console.Write (i + " ");
}
//輸出結果︰0 1 2 3 4 5 6 7 8 9
重複結構流程控制 (一) (2)
z 迴圈執行時,會先判斷初值是否滿足判斷式,若滿足 則執行程式區塊,程式區塊執行完畢後會回到遞增值 部份,遞增值結束後再一次回到判斷式中,檢查遞增 後的值是否滿足判斷式,滿足再次執行程式區塊,完 成後再次回到遞增值部份,直到判斷式不滿足為止離 開迴圈
z 程式區塊只有一行時,可省略大括號
z 假設初值與遞增值有二個以上的運算式,中間必須以 逗號分隔
z for (int i=0, j=0; i*j <10; i++, j++)
z 初值、判斷式及遞增值必須仔細考量設定,以防造成
『無窮迴圈』
z 若初值、判斷式及遞增值皆省略,即為無窮迴窮
z for ( ; ; )
38
變數生命週期
z
變數的生命週期根據變數所屬的有效範 圍來決定z
我們可以簡單的把一組大括號所包含的 範圍稱為一段『程式碼區塊』z
程式碼區塊界定變數的有效範圍z
實例z在迴圈中宣告的變數,在迴圈外的程式碼區
塊中便無法存取該變數
Break 與 Continue
z
breakz在 for 執行迴圈中,若遇到 break 陳述句 時,會立即逃離迴圈
z
continuez在 for 執行迴圈中,若遇到 continue 陳述句
時,會立即跳至遞增值部份
40
重複結構流程控制 (二) (1)
z for 迴圈中必須先設定迴圈執行次數,而 while 迴圈只 須設定執行迴圈的條件即可,當條件滿足時,即會不 斷重複執行
z 語法
while (判斷條件) {
程式區塊 }
z 用法
int i = 0;
while (i < 10) {
i++;
Console.Write(i + " ");
}
//輸出結果︰ 1 2 3 4 5 6 7 8 9 10
重複結構流程控制 (二) (2)
z while 迴圈在執行時,會先檢查條件是否成
立,當條件成立時才會執行迴圈中的程式區塊 z while 迴圈中,一樣可以使用 break 及 continue z 程式區塊中,必須有將判斷條件變成 false 的
陳述句,否則將導致無窮迴圈
z while 迴圈判斷條件後加上時,表示迴圈中不 需執行任何程式區塊
z while (Console.ReadLine() != "yes");
42
重複結構流程控制 (三) (1)
z while 迴圈執行時,會先檢查條件是否成立,
進而決定是否執行迴圈中的程式區塊。而
do … while 迴圈第一次執行時並不會先檢查判 斷條件,直接執行迴圈中的程式區塊,執行完 畢後才會檢查條件是否滿足
z 語法
do {
程式區塊
} while ( 判斷條件 );
重複結構流程控制 (三) (2)
z
用法do {
Console.WriteLine("1");
}while (false);
//輸出結果︰ 1
z
do … while 迴圈中,一樣可以使用 break 及 continue44
陣列
z
何謂陣列z陣列可想成是一群資料型別相同的變數所成 的集合
z
為何需要陣列z當我們需要儲存班上一百位同學的學生姓名 資料時,必須宣告一百個字串變數來儲存,
相當的麻煩。但若使用陣列來儲存,我們僅
需宣告一個一維陣列即可
常用陣列維度 (1)
z 一維陣列
z 二維陣列
4 3
2 1
0
20 19
18 17
16
15 14
13 12
11
10 9
8 7
6
5 4
3 2
1
46
陣列宣告
z
語法z 資料型別[ ] 陣列名稱 = new 資料型別[陣列大小];
z 一維陣列用法
z int[] myArray = new int[10];
z string[] studentName = new string[100];
z int[] a = new int[5] {0,1,2,3,4};
z 二維陣列用法
z int[,] b = new int[2,3];
z int[,] c = new int[2,3] {{1,2,3},{4,5,6}};
重複結構流程控制 (四)
z 當我們需要一筆一筆讀取 (無法儲存) 陣列的內 容時,可利用 foreach 迴圈來簡化程式
z 語法
foreach(陣列元素資料型別 變數名 in 陣列變數名) {
程式區塊;
}
z 用法
int[] arrayA = new int[5] {10,1,2,3,4};
foreach(int a in arrayA) {
Console.WriteLine(a);
48
命名空間 (1)
z 使用命名空間的好處可以將功能類似的類別組 織在一起
z 命名空間允許巢狀的結構,形成階層式的架 構,更容易分類管理
z 若在同一個程式檔中宣告二個名稱一樣的類別 時,編譯會發生錯誤,我們可以利用命名空間 來解決此問題
z 利用 using 關鍵字來指定需要的命名空間 z 語法
namespace 命名空間名稱
{
類別;
}
命名空間 (2)
z 用法
namespace IBM
{
class Notebook
{ } }
namespace Compaq
{
class Notebook
{ }
50
類别
z
類別主要的功能是用來描述定義物件的 模樣z
類別主要包含下列成員z欄位 (field)
z屬性 (property)
z方法 (method)
z事件 (event)
物件
z 我們可以把類別想像成是車子架構的設計圖,
而物件就是根據車子架構設計圖所設計出來的 車子
z 類別的使用需產生該類別的實體物件,我們可 以透過 new 關鍵字來完成
z 語法
z 類別名稱 物件名稱 = new 類別名稱();
z 用法
z car myCar = new car();
z car myCar;
52
方法成員 (1)
z
方法是用來定義類別提供的特定功能z
實體物件可透過 "." 來呼叫方法成員,但 在方法成員名稱後需加上 () 來說明傳入 的參數值z
語法存取修飾詞 回傳值 方法名稱 (傳入參數) {
方法內容程式區塊;
}
方法成員 (2)
z
用法public void hello() {
Console.WriteLine("您好");
}
z
說明zvoid 表示沒有回傳值
z() 內為空白時,表示不需要傳作參數
54
參數傳遞與回傳值 (1)
z 類別的方法可以定義傳入的參數及回傳值,因 此我們可以把需要運算的參數傳給方法,在方 法中計算完畢後再回傳結果
z 語法
存取修飾詞 回傳值型別 方法名稱
(參數1型別 參數1名稱, 參數2型別 參數2名稱, …) {
方法內容程式區塊;
}
參數傳遞與回傳值 (2)
z
用法public int add(int a, int b) {
return a + b;
}
z
說明z利用 return 關鍵字來傳遞要回傳的值
z注意型別須一致
56
靜態成員 (1)
z
類別中的靜態成員不需要產生實體物件 即可直接存取引用z
靜態成員必須使用 static 關鍵字進行宣告z
引用靜態成員方式,直接使用類別名稱再利用 "." 連接靜態成員名稱即可
z
Main 就是一個靜態方法成員靜態成員 (2)
z 語法
存取修飾詞 static 回傳值 方法名稱 (傳入參數) {
方法內容程式區塊;
}
z 用法
z static void Main(string[] args)
z 說明
z Main 方法為靜態成員,傳入值為一字串陣列,沒有 回傳值、存取限制為預設的 private
58
方法多載
z
方法多載允許我們將傳入參數不同的方 法,定義成相同的名稱z
當我們在定義二數相加的方法時,藉由 方法多載可讓我們不需定義二個不同名 稱的方法,以區隔為二個整數相加或二 個浮點數相加Object 型別
z object 型別是所有參考型別的基礎,因此所有 類別都是直接或間接繼承自 object 型別
z 任何參考型別的值皆可指定至 object 型別 z Boxing
z 將實值型別轉換成參考型別的動作稱為 boxing z ex︰object o = (int) 1;
z UnBoxing
z 將物件的值轉換成實值型別的值的過程稱之為 UnBoxing
z ex︰int i = (int) o;
60
ArrayList 類別 (1)
z 使用陣列時我們必須先設定好陣列的大小才 可以使用,相當不方便
z ArrayList 屬於集合,集合大小會隨資料量大 小動態改變
z 陣列與集合比較
較慢 較快
執行速度
不同 相同
儲存型別
可 不可
自動調整大小
集合 陣列
項目
ArrayList 類別 (2)
z 命名空間
z System.Collections;
z 常用屬性
z Count–實際包含的元素個數
z 常用方法
z Add–將物件加入至末端
z Insert–將物件插入至指定位置
z Remove–移除第一個符合指定物件的元素 z Clear–清除所有元素
z Sort–以遞增方式排序元素