Translate

2010年3月23日 星期二

中台 - 98-2 物件導向程式設計 03/23練習



身份證檢查程式


範例:[ Download ]


學習重點

  • Procedure 設計
  • Function 設計
  • Array 陣列使用與操作
  • 字串、字元、ASCII 碼轉換

身份證認證公式

驗證規則 ( Source:戶證事務所) 
       身份證統一編號共計10 位,其中第一位為英文字母,後共有九個數字;
       而最後一位數字為檢查碼( Check Digit ) ,表示如下表:

       L1 D1 D2 D3 D4 D5 D6 D7 D8 D9 

L1: 英文字母, 代表出生地的縣/市代號
A=10 台北市 J=18 新竹縣 S=26 高雄縣
B=11 台中市 K=19 苗栗縣 T=27 屏東縣
C=12 基隆市 L=20 台中縣 U=28 花蓮縣
D=13 台南市 M=21 南投縣 V=29 台東縣
E=14 高雄市 N=22 彰化縣 * W=32 金門縣
F=15 台北縣 * O=35 新竹市 X=30 澎湖縣
G=16 宜蘭縣 P=23 雲林縣 Y=31 陽明山
H=17 桃園縣 Q=24 嘉義縣 * Z=33 連江縣
* I=34 嘉義市 R=25 台南縣

       D1: 性別,1=男, 2=女
       D2~D9: 檢查碼

       L1 對照表:
         字母A   B  C   D   E   F   G   H   J   K   L   M  N 
         代號10 11 12 13 14 15 16 17 18 19 20 21 22 
         -------------------------------------------
         字母P   Q   R   S   T   U   V   X   Y  W   Z    I   O
         代號23 24 25 26 27 28 29 30 31 32 33 34 35 

       令其十位數為X1 ,個位數為X2 ;( 如A=10:X1=1 , X2=0 )

       依其公式計算結果:
       Y= X1 + 9*X2 + 8*D1 + 7*D2 + 6*D3 + 5*D4 + 4*D5 + 3*D6 + 2*D7 + D8 + D9

       驗證
       假如Y能被10 整除,則表示該身份證號碼為正確,否則為錯誤。
即如以10 為模數,檢查號碼為( 10 - Y- D9 ) / 10 的餘數,
如餘數為0 時,則檢查碼為0 。



製作流程



○ 建立專案
○ 製作按鈕與Label、Edit元件
○ 建立全域一維陣列: NumberArray 大小為26 (NumberArray : array[0.. 25] of Integer ; )
○ 建立初使化程序 procedure initArray;

  • 進行NumberArray 初始化,其值以查表方式建立
    EX: NumberArray[0] := 10 ; //A
○ 建立輸入字串檢查函式驗證是否符合格式
   function CheckErr( idnum : String): Boolean;
  • 判斷是否長度相同 (使用Length()找出字串長度)
  • 判斷第一字母是否為大寫英文 (使用  if not( idnum[1] in ['A' .. 'Z']) then 判斷 )
  • 判斷第二個字是否為1(男),2(女)
  • 判段輸入是否為數字 (使用 if not(idnum[x] in ['0' .. '9']) then 判斷)

○ 建立身份證檢查函式
   function CheckID( IDstr : String): boolean


  • 取出第一個字母對應到NumberArray 的值 (以ASCII code 判斷做對照,byte(IDstr[1]) - byte('A');)
  • 取出該字母於array的對應值
  • 取出X1, X2值
  • 套入公式 :Y= X1 + 9*X2 + 8*D1 + 7*D2 + 6*D3 + 5*D4 + 4*D5 + 3*D6 + 2*D7 + D8 + D9
  • 若可被10除盡表該身份證為對
○ 輸出結果







BP: 這次的題目比較難,各位同學挑戰看看! 加油




2010年3月22日 星期一

中台 - 98-2 物件導向程式設計 03/29期末專題題目報告

Dear 同學

03/29 要請各組報告你們想做的程式題目,報告請使用Google Docs投影片,

內容如下:
  • 小組成員
  • 題目
  • 製作動機
  • 製作目的
  • 程式操作方式
  • 預計遭遇的挑戰

03/29請由一位同學上台報告(報告人有加分),
投影片請使用Google Docs投影片製作,並將連結貼到本篇文章回覆中
各組題目請勿重覆,回覆範例如下:


小 組:No.0
成 員:學號, 姓名
學號, 姓名
學號, 姓名
題 目:XXXXX
投影片:
http://docs.google.com/present/edit?id=0AcoQevXXmTncZGQ4Mm56ZzdfMTE2ZDlzZzk0amo&hl=zh_TW



BP:各位同學加油吧!

2010年3月19日 星期五

中台 - 98-2 物件導向程式設計 03/22 作業繳交

Dear 同學

03/22 課堂要登記分數的作業有以下兩個:

  • 以BMI計算為範本的個人設計程式
  • 實作Click Game 

而以Click Game為範本的個人設計程式,
則在03/29 繳交。

請同學別忘了。
加油。

                 BP

中台 - 98-2 決策支援系統 03/26報告專題與其他網站比較

Dear 各位同學:

請同學在03/26 簡報各組尋找的網站or程式,
並進一步介紹該網站or程式,與該網站與你們小組的決策支援系統有何差異。



投影片請接續之前的檔案,
主要增加項目:


1.該網站介紹
  • 目的
  • 功能
  • 操作畫面 (截圖)
  • 輸入資料
  • 輸出資料
2.進行小組系統與該網站or程式的比較,請用表格表示,比較項目為:
  • 系統目的
  • 系統功能
  • 創新功能項目
  • 優點
  • 缺點



下次報告開始進行各組評分,
未到場同學該次分數為零分。

BP:若同學比較後發現該網站or程式的功能已太強大,也可以換題目,但換題目後也要繳交新題目的比較網站or程式

2010年3月15日 星期一

中台 - 98-2 物件導向程式設計 03/15練習

Click Game


範例下載:[ Link ]


學習重點

  • Mouse Event
  • 座標截取
  • Timer 元件
  • Random() 函式



製作流程與提示項目


○ 建立專案
○ 建立結束按鈕
○ 建立全域變數
  • total_time : 整數    ,做為倒數計時用
  • click_score : 整數 ,紀錄擊點分數
○ 建立 " 座標顯示 "  Label與Edit 元件 ( Edit_xy )
○ 建立 " 分數 "  Label與Edit 元件 (Edit_score)
○ 建立 " 倒數計時 "  Label與Edit 元件 (Edit_time)
○ 建立 Panel 元件
○ 在Panel 內 OnMouseMove事件中撰寫程式,將滑鼠座標指定到Edit_xy
(使用 OnMouseMove事件中預設 X, Y 變數即可取得)

○ 在Panel內建立一Button物件(Button_clickme)並設定顯示標題
○ 設定Button_clickme 的click事件
  • 擊點分數加一 並顯示於 Edit_score
  • 設定一個亂數座標變數 RndLeft ,目的在產生按紐的Left值  
  • 設定一個亂數座標變數 RndTop ,目的在產生按紐的Top值
  • 使用Random()函式設定RndLeft,並限制不得超出Panel大小
  • 使用Random()函式設定RndTop,並限制不得超出Panel大小
  • 將Button_clickme 位址設定為新的座標 ( Left, Top)
  • 將Button_clickme 大小改變 ( Width , Height )
○ 增加一個Timer元件,時間單位設為1秒 (設定單位為毫秒),預設為不啟動
○ 撰寫Timer中的OnTimer事件
  • 全域變數時間加1
  • 將更新的時間設定到Edit_time上.
  • 時間為 0 時( If then 判斷 )
    • 停止遞減 
    • 將按紐功能關閉
    • 將Timer功能關閉
    • 使用showMessage()顯示得分數
○ 修改Button_clickme ,於按下時啟動Timer
○ 增加招呼語,於程式起始時使用InputBox() 讓使用者設定遊戲時間
○ 增加提示訊息,告知使用者按下按鈕後開始計時
○ 完成!



BP:
這算是將上學期學過的做一個基本整合,
請同學加油,務必成功做出來而且瞭解!


2010年3月9日 星期二

中台 - 98-2 物件導向程式設計 03/09 作業

請以

  『中台 - 98-2 物件導向程式設計 03/09練習 』

為範本,設計出屬於你自己的程式。
需要使用元件與函式:
  • 元件
    • Label
    • Edit
    • Memo
    • GroupBox
    • Button
  • 函式
    • showmessage()
    • Inputbox()
    • MessageBox()
    • PChar()
    • StrToInt() 轉型系列
    • IF then else
    • 迴圈 ( while, for皆可)
分數高低依據
  • 創意
  • 函式與元件使用程度
  • 美觀度

請於2010.03.16  上課給老師評分。


                     BP

2010年3月8日 星期一

中台 - 98-2 物件導向程式設計 03/09練習

BMI Caculator 

請同學製作出一個 BMI值計算程式,版面與操作過程如範例,
範例下載:[ Download ]


製作流程與提示項目

○新增專案
○設定Form底色
○設定Form的Events中的OnActive事件 (此為讀取該form時自動引發)
○撰寫歡迎程序
  1. ShowMessage() 顯示歡迎頁面
  2. InputBox) 輸入使用者名稱 (利用一個全域變數儲存)
  3. MessageBox() 確認使用者名稱( 請使用PChar()函式進行名稱確認))
    1. 若正確,即進入頁面 
    2. 若錯誤,回到InputBox重新輸入 
    3.  (使用While進行迴圈確認)
○製作版面項目
  1. 設定標題Label並編輯內容
  2. 設定Edit 以輸入身高體重
  3. 製作Button做為分析與結束使用
  4. 設定一個GroupBox元件做為輸出
    1. 製作Label並設定標題內容,label有以下幾個:
      • 打招呼標題 
      • BMI值顯示
      •  (預設一開始看不見 Visible = false )
    2.  製作一個Memo元件做為結果判斷使用 (預設一開始看不見 Visible = false )
    ○撰寫結束Button程式 (使用close()函式)
    ○撰寫分析Button程式
      1. 建立全域變數 : 
        1. result : String;
        2. bmi : Real;
      2. 判斷兩個Edit元件是否有輸入值 (使用IF ELSE 判斷式)
        1. 若無,便以showmessage()告知
        2. 若有,便繼續
      3. 取得兩個Edit元件中的值並將文字型態轉為Float型態(StrToFloat() )
      4. 計算BMI值,公式如下: 
        • BMI = 體重 (KG) / 身高 (M^2)
        • Hints:
          • M為公尺,故輸入為公分必須先除以100
          • 平方請用 sqr() 函式
      5. 打開GroupBox中的Label招呼元件,並顯示出使用者名稱招呼 ( 要加上username)
      6. 打開BMI顯示Label,並顯示BMI值 (需將Float轉回Str才能輸出)
      7. 打開招呼Label與Memo
      8. 依據BMI值設定輸出於Memo的文字,(使用IF判斷,並以一個string變數儲存):
        • bmi < 15   ,Memo顯示:'過於飢餓 Starvation'
        • bmi > =15    且 bmi < 18.5,Memo顯示:'體重不足 Underweight'
        • bmi >= 18.5 且 bmi < 24   ,Memo顯示:'一般體重 Normal'
        • bmi >= 24    且 bmi < 30   ,Memo顯示:'超重 Overweight'
        • bmi >= 30    且 bmi < 40   ,Memo顯示:'嚴重超重 Obese'
        • bmi >= 40 ,Memo顯示:'極度超重 Morbidly Obese'
      9. 將String變數設定至Memo元件
      10. 完成!  請找老師登記


        BP:
        這算是將上學期學過的做一個基本整合,
        請同學加油,務必成功做出來而且瞭解!



        2010年3月6日 星期六

        中台 - 98-2 決策支援系統 03/19報告專題題目

        Dear 各位同學:

        請同學在03/19 簡報各組的專題題目,

        主題為你們小組想做的決策支援系統:

        投影片三頁

        第一頁: 小組成員、組長
        第二頁:題目,選擇此題目的動機
        第三頁:此題目的目的,預計達成的成果

        請使用Google Docs中的簡報製作投影片
        範例如: [ Link ]

        也可以參考同學的: [ Link ]

        另外,組別已經分配好 [ Link ]
        請同學檢查自己的組別,也請未分組的同學盡快填寫。


        BP

        2010年3月2日 星期二

        中台 - 98-2 物件導向程式設計 03/02練習

        中台 - 98-2 物件導向程式設計 03/02 練習

        Motivation: 練習使用以下三個函式:
        • ShowMessage()
        • InputBox()
        • MessageBox()
        Objective : 組合上述三個函式設計一段程式


                            BP