全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2594
推到 Plurk!
推到 Facebook!

由 POS 系統談 Windows 程式開發的風格

 
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-07-31 09:16:54 IP:210.208.xxx.xxx 未訂閱
談 Windows 程式開發的風格 ■ DOS 程式的開發風格 : 主程式本身是個大迴圈 , 不停的等待按鍵輸入 , 然後依照按鍵指定功能跳到副程式(或稱次迴圈), 程序掌控容易 , 因為只有一個入口和一個出口 , 副程序必須執行完或符合某種條件才能結束 , 程序執行由上而下,故可將全部程式碼印出研究 ■ Windows 程式的開發風格 : 所有程序的執行依照訊息觸發來執行 , 沒有所謂 的迴圈型副程序(即用 do...while 來控制某一程序 的執行與結束條件) 以目前 GUI 介面的操作風格及滑鼠使用來看 已經沒有什麼問題 , 但某些程式以這種方式來寫 將會非常累 (如 POS 程式) Windows 的事件觸發程序已改變了我們設計程式的風格 , 但有些程式還是得依照"線性程序結構"來執行 , 無法也不能用事件觸發來破壞或轉向程式流程.... 使用多個 Form 的 ShowModal 方式就還有點 DOS 的影子 例如 : 在 Form1 上選擇了某項功能後跳到 Form2 Form2 沒有按結束鈕前 , 絕不可能跳回 Form1 但若全部功能都集中在一個 Form 時 , 程序控制將非常複雜 user 可以以滑鼠將焦點移來移去 , 脫離你的程序控制 所以要加入一大堆的旗標做判斷..... 而以 Window 介面開發的程式 , 也沒人將全部程式碼印出觀賞的 , 因為若不對照操作介面 , 根本不知程式碼中之程序 以哪裡為開頭或結束 專業的 POS 前端系統(收銀機)是不允許有滑鼠來操作的 (市面上那兩本VB & Delphi 介紹 POS 的書籍內容居然有滑鼠介面...) 輸入裝置僅有 POS 之"可程式化鍵盤"以及"條碼掃描器" POS 收銀機操作機能是有所謂層級的觀念 雖然鍵盤簡單(僅有 1234...[清除],[確認]鍵和一些 FUNCTION Key) 但所有機能都是一層一層下去 再一層一層退回 所以 POS 系統反而以 DOS 來開發比較簡單 舉例來說 , 以退貨這個機能來說 , 其動作流程為 : ---------------------------------------------------------------------- (第一層,系統閒置時) 1.按下[退貨]鍵 (第二層,進入退貨機能-輸入欲退貨之交易序號) 2.畫面訊息欄顯示"請輸入交易序號" 3.按 1,2,3,4..... 4.按[確認]進行步驟 6. 5.或按[清除]鍵,但此時有兩個要判斷的條件: (a.)若按[清除]前,輸入之數字(交易序號)有值,表要重新輸入交易序號故 回到步驟 2. (b.)若按[清除]前,輸入之數字(交易序號)是空的,表取消退貨機能, 直接回到第一層,系統閒置狀態 (第三層,進入退貨機能-選擇退貨方式) 6.畫面訊息欄顯示"1.部分退貨 2.全部退貨" 7.按 1,2,3,4..... 8.按[確認]進行判斷 , 若按的是 1 或 2 則進行步驟 10. , 若按其他數字則秀錯誤訊息並回到步驟 6. 重輸 9.或按[清除]鍵,此時也有兩個要判斷的條件: (a.)若按[清除]前,輸入之數字(交易序號)有值,表要重新輸入退貨方式故 回到步驟 6. (b.)若按[清除]前,輸入之數字(交易序號)是空的,表取消選擇輸入退貨方式, 回到前一層(第二層),輸入欲退貨之交易序號 10.實際執行 1.部分退貨 或 2.全部退貨 退貨程序 (若輸入的交易序號找不到 , 還會跳至另一個錯誤處理程序...) 以上大家可注意一點 , 以最常用的[清除]&[確定]鍵來說 , 同樣的[清除]&[確定] 在不同的時機有不同的意義... ---------------------------------------------------------------------- ■ 以上機能以 DOS 來寫 , 各層一個副程序即可 , 每個副程序處理個別的按鍵意義 , 程式流程嚴謹 , 不會被 user 亂跳 ■ 以上機能若以 Windows 多 Form 方式來寫 , 第一層是主 Form (Form1) 第二層是 Form2 (退貨機能-輸入欲退貨之交易序號) , 第三層是 Form3 (退貨機能-選擇退貨方式) 每層有每層的 KeyDown 判斷 , 每層有每層的邏輯限制 , 合條件則跳至下一層 不合條件則在原層 , 反悔或取消則回上一層 , User 也無法任意轉移 Focus ■ 但問題來了....POS 機能少說也有十幾二十種 , 每一機能都可能有好幾層 每層的邏輯也不同 , 總不能為每一層開一個 Form 吧 , 收銀機上又沒滑鼠及標準 pc 鍵盤, 也不能用 MessageBox 或 InputBox 或 QueryBox 來代替輸入 , 所以只能用一個主 Form , 各位可以想想 , 在同一個主 Form 的 KeyDown 事件中要如何可以依照各機能進入的層級及時機 來共用 KeyDown ? 那就是使用旗標來判斷 , 事實上很多 Windows POS 系統(包含我們公司開發 的 POS 系統)使用這種方式 , 但也因此程式無論在開發規劃或將來維護 , 都是一個很吃重的負擔 .... 我有想到一個好方法 , 雖還沒實做過但我還沒想到缺點 , (當然不是用 Do....While 去模擬 DOS 的線性程序結構 , 在 Windows 上雖有 Application.process 可讓迴圈不致死繞 , 但總是不好)不過...在公佈我想到的方法之前,我想看看前輩們有無好的方法或架構 , 在 Windows 上針對這類"線性程序結構"程式開發上的意見.... ■ 再補充描述一下 DOS vs. Windows 風格的不同: □ Dos 程式以程序為主,事件(鍵盤事件)為輔,即進入某一程序後就一直等在那邊隨時監測你的鍵盤輸入,沒有符合這個程序離開的條件絕不會離開此程序 □ Windows 程式以事件(鍵盤事件)為主,程序為輔 , 按了鍵(OnKeyDown)後,再看看(依旗標控制)要進到哪個程序(而且不能一直卡在那個程序中 , 否則將接不到下一次鍵盤觸發事件) 程序的完成是分週期的 (OnKeyDown -> 旗標決定 -> 程序甲 -> 執行完成否 ? 完成則改變旗標值(下次 KeyDown 就不會再進來程序甲),未完成則 return 繼續等待下一個 KeyDown ; 換句話說 : 副程序在執行期間 , 程式流程仍要返回 KeyDown 事件以等待下一個 KeyDown 事件 , 且要確保 下一個 KeyDown 事件發生後流程會回到原先未完成的程序 , 而不會被別的程序搶走 □ POS 系統畫面不能有可以被 Focus 的元件 , 所以也不能用 Edit 來等待使用者按鍵的輸入 , 況且 POS 鍵盤是所謂的"可程式化鍵盤" , 按下 "1" 這個數字並不是標準 "1" 的 ASCII 碼 , 所以根本不能用一般編輯元件來接收鍵盤碼 , 而要直接抓 ScanCode 來處理 POS 架構比較適合用 DOS 的模式喔 ... 本主題在本站之討論區 : http://delphi.ktop.com.tw/topic.php?TOPIC_ID=19269
dirboy
一般會員


發表:7
回覆:16
積分:9
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-07-31 18:34:51 IP:202.175.xxx.xxx 未訂閱
可不可以大量使用 Wizard 風格的 form. 內有Tab, Tab 中有很多 SubTab, SubTab 中可以獨立設計, 或繼承各Form class, main form 中有一個大邏輯控制各個SubTab 之間的切換. 不知行不行, 各位高手指教. [不好意思, 忘了Logon, 再貼一次]
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-08-01 20:57:56 IP:163.32.xxx.xxx 未訂閱
與其用大量相同的元件 (大量的 Form 或 Tab (您應該指的是 PageControl 之類的東西)等等) 那不如想一招"以不變應萬變" 的方法 我還是覺得用一層 Form 就可以了 只是苦思如何管理不同時機,不同功能而按鍵確是相同的方法 ....
dirboy
一般會員


發表:7
回覆:16
積分:9
註冊:2002-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-08-05 13:52:05 IP:202.175.xxx.xxx 未訂閱
我記得有一種 Windows 程式, 但其操作起來和 Dos mode 一樣, 比如 Oracle 的 SQL-plus, 和 Terminal application 中的 BBS, 這我想可以 100% 地模擬 Dos mode 的操作和設計環境, 不過近年來這種程式很少人開發. 合適的component也不多,可能要自已改改Richtext或重寫一個.
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-08-08 09:02:23 IP:210.208.xxx.xxx 未訂閱
引言: ........ 我覺得不論開發什麼系統 用Dos,出來就是Dos 的樣子 用Win,出來就是Win 的樣子 所以在Windows上用mouse是正常的 ........
這是在我五,六年前剛從 DOS 轉 Windows 時 就跟那些喜歡把 Windows 寫成像 DOS 介面 同事所講過的話 但為何 五,六年 後的今天我為何又回頭稿這種飛機 ? 原因 1.程式的問題 : 功能的擴充已不是有640K 記憶體限制的 DOS 所能符合 2.網路的問題 : 在 Windows 下 TCP/IP 是民生用品,在 DOS 下 TCP/IP 是奢侈品(但又不能不用) 3.連資料庫的問題 4.最重要的原因 , 客戶的問題 , 客戶要求新一代 POS 系統使用 Windows , 我們的 POS 系統是要開發給數千家連鎖商店使用的 POS , 金額甚達上億 , 不是那種幾千元的套裝 POS 系統... 但您看過類似家樂福,7-11,這種大流量的 POS 系統用滑鼠嗎 ? 並非不願用,而是環境限制不能用
dirboy
一般會員


發表:7
回覆:16
積分:9
註冊:2002-07-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-08-08 11:31:50 IP:202.175.xxx.xxx 未訂閱
其實 Bruce0221 兄你也不必定段POS 一定不能用類mouse 的device, 我看新型的POS應支持touch monitor, 不就解決了POS用類mouse device 的煩惱問題! keyboard 都在monitor中了, 連keyboard 都省了, 哈哈! 到時在裡面寫什麼介面也可以了, 可以想想啊!
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-08-08 14:38:35 IP:210.208.xxx.xxx 未訂閱
我在日商公司 這些 Solution 我都知道(日本早已行之有年) 我們的 POS 也有 touch monitor 但主要操作還是以鍵盤為主.... 況且系統分析的文件(式樣書)厚達上千頁 不是由我或任何一個人就能決定操作介面的方向 只是跟大家討論看看這種架構的系統 有無更好的按鍵處理方式(簡單的按鍵,適用於多種機能層)
cccheng
一般會員


發表:8
回覆:19
積分:5
註冊:2002-05-30

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-08-16 12:53:52 IP:211.74.xxx.xxx 未訂閱
日前去參觀一家台灣號稱最大的POS製造廠,一個月有五千台產量,它是沒有用鍵盤輸入的而是用touch screen,而這家廠商多數外銷至日本.
系統時間:2024-05-15 16:40:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!