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

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

 
bruce0211
版主


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-07-31 09:22:32 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
tonychow
一般會員


發表:5
回覆:25
積分:11
註冊:2002-05-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-08-06 09:27:13 IP:210.66.xxx.xxx 未訂閱
引言: 使用多個 Form 的 ShowModal 方式就還有點 DOS 的影子 例如 : 在 Form1 上選擇了某項功能後跳到 Form2 Form2 沒有按結束鈕前 , 絕不可能跳回 Form1 但若全部功能都集中在一個 Form 時 , 程序控制將非常複雜 user 可以以滑鼠將焦點移來移去 , 脫離你的程序控制 所以要加入一大堆的旗標做判斷..... 而以 Window 介面開發的程式 , 也沒人將全部程式碼印出觀賞的 , 因為若不對照操作介面 , 根本不知程式碼中之程序 以哪裡為開頭或結束 專業的 POS 前端系統(收銀機)是不允許有滑鼠來操作的
我覺得不論開發什麼系統 用Dos,出來就是Dos 的樣子 用Win,出來就是Win 的樣子 所以在Windows上用mouse是正常的 叫一個人學狗爬是很累人的 相對的,如果POS改成 internet 形式時 勢必用到 WEB 介面,那Form又可以丟掉了 所以,個人是認為程式愈短,焦點愈清楚 一陣紅光閃過 夾雜著V-Twin獨特的厚實聲浪 也聞到了高辛烷汽油燃燒後的焦油味 雙碟煞就像是戰神的雙翼-只祝福最剽悍的戰士 天生具有灼傷地表的能力 來吧!看到尾燈就算妳贏.......
------
一陣紅光閃過
夾雜著V-Twin獨特的厚實聲浪
也聞到了高辛烷汽油燃燒後的焦油味
雙碟煞就像是戰神的雙翼-只祝福最剽悍的戰士
天生具有灼傷地表的能力
來吧!看到尾燈就算妳贏.......
bruce0211
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-08-08 08:56:39 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 系統用滑鼠嗎 ? 並非不願用,而是環境限制不能用
asupeduer
初階會員


發表:36
回覆:49
積分:27
註冊:2002-11-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-11-08 16:17:55 IP:61.13.xxx.xxx 未訂閱
我也是資料庫系統開發人員, pos雖然在實做上以DOS平台做起來是好用,且速度快 但是也相對失去一些Win的好用功能與親和力 但是目前市面上有不少pos也都改用Win平台, 而新生代的程式設計師或前端使用者也都漸漸習慣 以WIN平台開發的資料庫系統, 我想這是一個免不了的趨勢吧...況且微軟對DOS的支援等等都已經顯示 dos將也畢竟有走入歷史的一天,除非你改走DB2或是其他終端形式主機 但是win平台的設計上,依然可以免用滑鼠,使用擷取按鈕的效果 來達成類似dos平台的運作模式,也有許多設計上的技巧可以代替dos的風格 ,這不是魚與熊掌可兼得嗎? 楊政憲
------
//------------------------------------------------
我常在想,寫程式跟爬格子到底有什麼不同呢???????????
//------------------------------------------------
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-11-08 18:05:08 IP:210.58.xxx.xxx 未訂閱
就我們程式設計師而言對於新的介面操作很容易適應, 但對於一些傳統產業的使用者可就不一定了, 小弟曾經作過的客戶, 就有提出全部不使用滑鼠, 因為他打字速度非常快, 用Dos久了雙手總是擺在鍵盤上, 當初一聽到時也是感覺怪怪的, 為何不使用像Windows如此方便操作的介面, 滑鼠很容易使用啊, 後來看到使用者的操作後我們還是決定照他們的需求, 確實是不用滑鼠快很多, 一直到現在我還是覺得要看做什麼樣的專案要隨時跟著變通, bruce0211大大所說的POS系統, 醫界醫師護士使用的系統, 書局的系統...等等不見得有滑鼠就好用, 他們還是習慣用鍵盤, 甚至配合光筆掃描使用, 效率反而快. 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
系統時間:2024-04-26 15:33:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!