• 沒有找到結果。

使用工具簡介

2-1 Flash MX

Flash 是由美國 Macromedia 公司所研發出來的軟體,由於它的 問世,為網頁設計者提供了另一種製作動態網頁的新選擇,它結合了

缺點 大量像素資料,檔案

2-2 PhotoImpact 有 Photoshop 操作功能複雜度高;相較於 Painter,PhotoImpact 則 有較多的圖形美化處理,也不比 Painter 單調。

PhotoImpact 與 Photoshop 和 Painter 比較的特點如下:

1. Photoshop 物件的選取較 PhotoImpact 靈敏,Painter 則較為遲鈍 的。

2. Photoshop 與 PhotoImpact 文字的選用也較靈敏,而 Painter 的 文字使用介面則較簡陋。

3. Photoshop 與 PhotoImpact 畫刷的分類較清楚,且易用;Painter 則少且簡易。

4. Photoshop Screen Capture 可用以擷取畫面,Painter 亦可用 Print Screen 鍵植入擷取畫面,但動態影像無法擷取,如影片檔 之類(mpeg、dat、avi、…)。

5. Photoshop 與 PhotoImpact 畫刷模式可以產生新圖層,Painter 則 無。

6. 文字的特效 Photoshop 與 PhotoImpact 皆有,但前者較後者專業 且變化多,Painter 則無特效。

7. 工具皆在工具列清楚顯示,但前二者較繁多。

因此我們選用 PhotoImpact 此較中階的軟體來作初步的圖形設計跟 一般的文字特效,與用來作圖片的美化,提供其他軟體美化的圖形使 用配合。

2-3 PHP

PHP (Hypertext Preprocessor) 是一種 Open Source 的 Server 端 HTML 嵌入式 Script 語言。它是由 Rasmus Lerdorf 這位軟體工程 師所開發的 Personal Home Page Tools 所演進而來的。PHP 可以完 成任何 CGI 程式所能做的工作,例如收集並處理 HTML form 表單的資 料、產生動態的網頁內容和處理瀏覽器的 Cookie…等,並且它具有 功能十分強大的應用程式設計介面(API)。特別是對於 Server 端的資 料庫存取,不論是市面上主流或是非主流的資料庫系統,它都有非常 完整的支援度和資料庫存取函數介面。

在 Client-Server 的架構中,PHP 所扮演的角色如圖 2-1 所示。

PHP 核心接受由 Client 端機器發出的 HTTP 請求,到 Server 端的檔 案系統中讀取 test.php 程式檔,然後再把執行完後所輸出的 HTML 網 頁回傳到 Client 端的瀏覽器顯示。因此 Client 端的使用者看到的是 test.php 執行後所輸出的 HTML 呈現的網頁。

圖 2-1 PHP 在 Client-Server 架構中所拌演的角色

我們會選用 PHP 做為我們 Server 端的 Script 語言,主要是因為 PHP 的執行速度非常快。而且,和傳統的 CGI 以及同類型產品 - Microsoft 的 ASP 來比較,它還有許多其他的優點,請參考表 2-2。

表 2-2 各種 Server 端程式語言的優缺點比較 程式界面 ASP CGI

作業平台 均可 Win32 均可 Web Server 支援 數種 IIS 均可 執行效率 快 快 慢 穩定性 佳 中等 最高 開發時間 短 短 中等 使用語言 PHP VB 不限 網頁結合性 佳 佳 差 函數支援度 多 少 不定 系統安全性 佳 極差 最佳 使用網站 多 多 多 改版速度 快 慢 無

PHP

除此之外,它還是免費的,並且完全 Open Source,因此有很多 熱心的開發者為它開發資源。而且,它對 MySQL 資料庫系統的支援度 極佳,因此我們選擇了 PHP 作為我們的 Server 端 Script 語言。

2-4 JavaScript

JavaScript 是由網景(Netscape)公司所研發出來的。相對於 PHP,JavaScript 是一種在 Client 端執行的 HTML 嵌入式 Script 語 言,透過 JavaScript 可以做到回應使用者的需求事件而不用經由網 路來傳輸資料。比方說,當一位使用者經由 form 表單輸入資料時,

它可以不用將資料傳給 Server 端處理後再回傳結果給 Client 端,只 要直接交給 Client 端的應用程式就可以處理了。

雖然 JavaScript 是由網景公司開發出來的,但是由於它在 Client 端處理動態的互動式網頁功能上極為強大,十分受到使用者 的喜愛,所以 Microsoft 公司也在 Internet Explorer 第四版之後開 始支援 JavaScript。JavaScript 的語法和正統的 Java 程式語言十分 類似,以物件為基礎。但它主要應用在動態網頁的處理上,不像 Java 那麼複雜,因此功能沒有 Java 那麼強大。JavaScript 本身也有跨平 台的特性,而且市面上大部份的 Web 瀏覽器都有支援。

在我們的教學系統中,JavaScript 也扮演了重要的角色。透過 它,我們可以增強系統與使用者之間的互動性,加強使用者的學習效 率。雖然藉由 PHP 也可以達到互動網頁的效果,可是因為 PHP 是在 Server 端執行的,因此必須在 Client 端和 Server 端之間傳送資料,

這點造成了很多限制,使得設計上較為困難。而且在網頁特效的應用 上,PHP 的功能也不如 JavaScript。因此,JavaScript 正好可以用 來補 PHP 的不足之處,而且兩者的相容性極高,在實作上比較容易整 合。

2-5 MySQL

MySQL 是一個使用結構化查詢語言(Structured Query Language) 的資料庫系統,它本身是一種 Client-Server 架構的應用程式。大概

3. 以作業系統的 Kernel Thread 來達到多執行緒(Multi-Thread)。

4. 系統的密碼和個人使用權限設定,非常的安全而且靈活。

在 Client-Server 的架構裡,MySQL 就是用來提供外界存取資料的 Server 端資料庫,如圖 2-1 所示。

2-6 Apache HTTP Server

Apache HTTP Server 是由 Apache Software Foundation(ASF)所 開發管理的一項專案,目的在完成一個安全、有效率、而且具有彈性

Apache HTTP Server 雖然主要是由 ASF 負責管理的專案,但是仍 然完全依造自由軟體的原則與特色。任何人只要有興趣,都可以加入 Apache 的開發行列。而且可以依照自己的喜好修改原始碼,並且擁 有修改後的軟體版權。像 Apache HTTP Server 這樣依造自由軟體原 則所開發出來的軟體,通常都具有以下的優點:

1. 可靠 (Reliable) 而且穩定性佳 2. 高效能(High Performance) 3. 高度的安全性 (Security) 4. 高度的伸縮性 (Scalability) 5. 升級快速

6. 低成本

Apache HTTP Server 透過讀取各種模組的 Dynamic Linking Library(DLL)來支援各式各樣的功能。圖 2-2 是以 Apache 做為 Web Server 的架構。

圖 2-2 以 Apache 為基礎的 Web Server 架構

Apache 的穩定性,當然不在話下。瑞士的網路效能監視專家 SysControl AG 公司在 2000 年 2 月份,公佈了他們對瑞士最受歡迎 的一百大網站可靠度評比結果。SysControl AG 花了三個月的時間從 四個不同的地方每五分鐘探測一次每個受測網站,每個月的當機時間 結果如表 2-3 所示。顯然 Apache 的穩定性比其他須付費的 Web Server 軟體要高上許多。

表 2-3 各種 Web Server 軟體效能測試評比 當機時間 Apache IIS Netscape Andere 九月 5.21 10.41 3.85 8.72 十月 2.66 8.39 2.80 12.05 十一月 1.83 14.28 3.39 6.85 平均 3.23 11.03 3.35 9.21

從 1996 年到目前為止,Apache 已經成為了世界上最受歡迎的 Web Server 軟體。Netcraft Web Server Survey 在 2002 年八月宣稱已經 有 63%的網站使用的 Web Server 就是 Apache。不論是應用在商用的 網站系統或是應用在像我們這樣的網路教學環境,Apache 無疑是最 好的選擇。

2-7 FrontPage

FrontPage 是一套比 Notepad 還好用的 HTML 編輯器,它包含您 熟悉的所視即所得環境,還可以顯示 HTML 標籤於所視即所得及 HTML 畫面中您可以在所視即所得相似於 Microsoft Word 的編輯畫面中快 速地建立網頁內容,例如輸入文字、插入圖片、建立超連結及繪製表

近來最新的技術則包括編輯 HTML、動態 HTML、Script、ASP 和 階層樣式表 (CSS) — 只要在單一的 FrontPage 應用程式視窗內就 可以輕輕搞定。Microsoft Script 編輯器提供快速建立、編輯

Scripts 及偵錯的功能。Microsoft Visual Basic for Applications 6.0 允許建立強大的 FrontPage 解決方案整合 Microsoft Office 應 用軟體。可利用 Microsoft Visual Studio 開發系統的 Design Time Control 擴充 FrontPage 功能。

看完如上述大概的優點之後,是否覺得寫網頁很容易呢,的確 是,但存在著一項缺點,即是 FrontPage 的使用程式形式固定,容易 造成程式碼多而複雜且不易判斷的結果,因此在使用人性化編輯網頁 之後,若要從原始碼修改網頁,將對使用者造成莫大的不便。

三、教學內容概要

接下我們把教學內容大致整理出來,詳細如下:

3-1 堆疊

堆疊(Stack)是一種特殊的有序串列,它限制所有資料的加入與 取出(或刪除)僅在串列的一端進行,而此端稱為頂端(Top);好比 一個圓筒容器,只能在此容器固定的一端放入或取出物件,如同堆疊 運算上暗示了如果我們依序將 A,B,C,D,E 加入堆疊中,則 E 一定 是第一個自堆疊中取出的元素,如圖 3-1 表示:

圖 3-1 Stack 資料結構示意圖

(最頂端資料即是 TOP 所指的資料)

由圖 3-1 可看出資料加入完畢後,資料 E 的確是第一個被取出 的。因此我們可知堆疊的資料進出乃是採用後進先出(Last In First Out,LIFO)的模式,相對的我們也可以說它是先進後出(First In Last Out,FILO)的模式。

我們可以分別利用加入(push)和取出(pop)兩動作來存取資 料,堆疊結構繼續如下所述。

3-2 堆疊的教學與程式實作解說

3-2-1 一般靜態的實作

1. 陣列(Array)結構定義

堆疊採用一維陣列,其所需的陣列空間宣告即為

stack[MAX_STACK_SIZE],此 MAX_STACK_SIZE 為 stack 中所能儲 存的元素個數,其程式定義則如程式 3-1:

#define MAX_STACK_SIZE 100 /* 宣告堆疊的大小空間 */

typedef struct /*以結構體定義的堆疊元素*/

{

int key;

… /* 此處也可增加一些不同型別 的欄位 */

} element;

element stack[MAX_STACK_SIZE]; /* 宣告一個堆疊陣列 */

int top = -1; /* 將頂端的值設成少於堆疊 底部 1 陣列單位,即表示當

top 等於-1 時,此堆疊為空!

由此可知當 top 值等於 MAX_STACK_SIZE 減 1 時此堆疊已滿 */

stack[++*top]=item; /* 若 top 不符合上

printf(”Stack is full!! And can’t push any item!!\n”);

}

空,沒有東西可取出 */

printf(”Stack is empty!! You can’t pop any item!!\n”);

TOP item link item link item link 。。。

typedef struct stack *stack_pointer;

/* 宣告堆疊的指標結構 */

typedef struct stack { /* 將堆疊元素的雛型定出,

element item; 一個是資料項 item,

stack_pointer link; 一個是指標項 link */

};

stack_pointer top[MAX_STACK] /* 宣告出 top 指標,即頂端 */

程式 3-6 動態堆疊的鏈結串列(Linked-list)結構定義程式

2. 加入動作 Push:

加入動作主要是新增一符合結構體定義的記憶體空間,並利 用指標將資料項(也就是新增的堆疊元素)鏈結起來,完成如堆 疊定義的連續資料,並將該新增資料項由 top 指標指向之,即指 定其為頂端,其程式如程式 3-7 所示:

void push(stack_pointer *top,element item) /* 宣告要傳入 的參數型態 */

{stack_pointer temp = (stack_pointer)malloc(sizeof (stack));

/* 動態產生一

個記憶體空間 來使用 */

if( IS_FULL(temp)){ /*判別記憶體空 間是否已滿*/

fprintf(stderr,”The memory is full!!\n”);

exit(1);

空間釋放掉,因為程式一直不將資料釋放時,將極有可能造成記憶體 空間被佔而越來越少,恐造成無法預期之結果。其程式如程式 3-8 所 示:

element pop(stack_pointer *top){ /* 告需要傳遞的參 數型態 */

stack_pointer temp = *top; /* 宣告一指標 */

element item; /* 宣告一變數 */

if(IS_EMPTY(temp)){ /* 判別堆疊是否空 無元素 */

fprintf(stderr,”The stack is empty!!\n”);

exit(1); 的元素。佇列資料的進出採用先進先出(First In First Out,FIFO) 模式,我們可以利用 addq 和 deleteq 函式,分別處理存入和取出資

exit(1); 的元素。佇列資料的進出採用先進先出(First In First Out,FIFO) 模式,我們可以利用 addq 和 deleteq 函式,分別處理存入和取出資

相關文件