黃茜
摘要:隨著計(jì)算機(jī)和網(wǎng)絡(luò)技術(shù)的迅速發(fā)展,管理信息系統(tǒng)在連鎖超市的銷售管理中得到了廣泛的應(yīng)用。POS系統(tǒng)作為信息管理系統(tǒng)的重要組成部分,主要功能是完成商品銷售,并記錄銷售信息。該文以某超市為應(yīng)用背景,利用C++Builder 6.0和SQL Server 2000設(shè)計(jì)和開發(fā)了基于Windows 2000平臺的POS銷售系統(tǒng),并在某連鎖超市進(jìn)行了試驗(yàn),運(yùn)行結(jié)果良好、速度快,完全滿足用戶要求。
關(guān)鍵詞:POS;數(shù)據(jù)庫;ADO;無盤工作站
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2014)18-4158-03
Design and Development of POS Sale System in Supermarket
HUANG Qian
(Xuzhou Economic and Trade Branch of Jiangsu Union Techical Institute,Xuzhou 221004,China)
Abstract:With the rapid development of computer and network technology, Management Information System(MIS) has been widely used in the sell management of supermarket. POS is an important part of MIS.It mostly completes commodity sell and records sell information. For the supermarket, based on Windows 2000 is designed and developed by C++ Builder 6.0 and SQL Server 2000 in the paper, and the POS sale system was tested in the supermarket. It has been shown that its running speed is very fast, its effect is good and it can satisfied users need completely.
Key words:POS;database;ADO;diskless workstation
1 概述
隨著商業(yè)、零售業(yè),特別是連鎖超市的迅猛發(fā)展,管理信息系統(tǒng)(MIS)在商業(yè)的銷售管理中起著越來越重要的作用。POS系統(tǒng)即電子收款機(jī)系統(tǒng)(Point Of Sells),是MIS的重要組成部分。它的主要功能就是完成商品銷售,并全面地記錄銷售信息,為管理人員提供營銷數(shù)據(jù),是各種分析、統(tǒng)計(jì)和進(jìn)行決策的基礎(chǔ)和依據(jù)。結(jié)合某超市的實(shí)際情況,采用前臺POS機(jī)+后臺服務(wù)器的工作模式,設(shè)計(jì)和開發(fā)了基于Windows 2000的POS銷售系統(tǒng)[1]。
2 POS系統(tǒng)總體架構(gòu)
本文開發(fā)的POS銷售管理系統(tǒng)由前臺POS機(jī)和后臺服務(wù)器兩大部分組成。服務(wù)器由高性能的PC機(jī)完成全部管理功能,而前臺各個POS機(jī)只完成商品銷售所必須的輸入輸出功能,不再配備硬盤和操作系統(tǒng),采用無盤工作站模式工作。各POS機(jī)和后臺PC機(jī)通過局域網(wǎng)進(jìn)行數(shù)據(jù)交換,并將處理結(jié)果送到相應(yīng)的POS機(jī)顯示和打印。POS系統(tǒng)總體架構(gòu)如圖1所示。
圖1 POS系統(tǒng)總體架構(gòu)圖
前臺POS機(jī)(包括錢箱)連接著票據(jù)打印機(jī)、條形碼掃描儀和客顯(客戶價格顯示器)。后臺PC機(jī)連接著條形碼打印機(jī)、普通打印機(jī)和盤點(diǎn)機(jī)[1]。
3 POS系統(tǒng)后臺數(shù)據(jù)庫設(shè)計(jì)
POS系統(tǒng)的后臺數(shù)據(jù)庫用來存儲該系統(tǒng)的所有數(shù)據(jù)信息,包括商品資料、人員資料、銷售資料等,是銷售系統(tǒng)至關(guān)重要的組成部分。該文利用SQL Server 2000設(shè)計(jì)了POS系統(tǒng)的數(shù)據(jù)庫CSDATA,系統(tǒng)采用Windows NT與SQL Server認(rèn)證用戶身份,加強(qiáng)了數(shù)據(jù)庫的安全性。本數(shù)據(jù)庫主要包括以下一些核心數(shù)據(jù)庫表。
1)用戶信息表(CS_TBL_USERINFO):包含用戶編號、用戶姓名、用戶密碼、用戶級別(包括出納、出納組長、系統(tǒng)維護(hù)員和門店經(jīng)理)、用戶狀態(tài)(包括銷售、退貨和已交班)、交易狀態(tài)(銷售、退貨和出納結(jié)帳)、交易日期等字段。
2)門店人員信息表(CS_TBL_SHPPERSONINF):包含用戶編號、用戶姓名、POS機(jī)編號、用戶級別、正確的交易狀態(tài)等字段。
3)商品基本資料表(CS_TBL_GOODSINFO):包含商品條碼、商品店內(nèi)碼、商品簡稱、商品規(guī)格、商品名稱等字段。
4)商品定價表(CS_TBL_STOREDIFFPRIC):包含差價類別、商品店內(nèi)碼、指導(dǎo)價等字段。
5)門店信息表(CS_TBL_DEPARTINFO):包含門店編號、門店名稱、差價類別等字段。
6)POS機(jī)信息表(CS_TBL_POSINF):包含門店編號、POS機(jī)編號、錢箱金額、最近使用出納編號、 當(dāng)前狀態(tài)、POS機(jī)網(wǎng)卡地址等字段。
7)銷售流水主表(CS_TBL_SALDETAIL_MN):包含銷售流水、出納編號、商品數(shù)量、合計(jì)金額、支付金額、銷售/退貨、找零金額等字段。
8)銷售流水從表(CS_TBL_SALDETAIL_SUB):包含銷售流水、序號、店內(nèi)碼、商品條碼、商品數(shù)量、商品單價、商品小計(jì)等字段。
9)登陸流水信息表(CS_TBL_LOGON):包含出納編號、操作類型、門店編號、POS機(jī)號等字段。
10)商品庫存信息表(CS_TBL_SHPSTOK_SUM):包含門店編號、店內(nèi)碼、商品數(shù)量等字段。endprint
11)POS機(jī)維護(hù)信息表(CS_TBL_POSINF):包含門店代號、POS機(jī)號、 當(dāng)前狀態(tài)、POS機(jī)網(wǎng)卡地址等字段。
4 POS系統(tǒng)的功能設(shè)計(jì)
POS系統(tǒng)功能模塊的設(shè)計(jì)是系統(tǒng)的總體框架,是程序設(shè)計(jì)的指南。根據(jù)系統(tǒng)的用戶需求,在保證系統(tǒng)安全性的前提下,我們將POS系統(tǒng)劃分為以下八個功能模塊:權(quán)限認(rèn)證、出納銷售、出納結(jié)賬、商品退貨、POS機(jī)維護(hù)、打印機(jī)設(shè)置、POS系統(tǒng)設(shè)置和商品熱鍵設(shè)置。如圖2所示。下面就各個模塊的具體功能做詳細(xì)的闡述。
圖2 POS銷售系統(tǒng)流程圖
1)權(quán)限認(rèn)證:出于安全性考慮,POS系統(tǒng)必須實(shí)行嚴(yán)格的權(quán)限管理,各種類型的用戶只有驗(yàn)證身份后,才能使用各自權(quán)限范圍以內(nèi)的功能模塊,并且對每一次的POS機(jī)使用人、使用時間、權(quán)限級別和放入備用金額量等都會保存到數(shù)據(jù)庫中。
2)出納銷售:這是整個POS系統(tǒng)中最核心的部分,主要用來完成商品的銷售。它詳細(xì)地顯示了顧客的購物清單、總計(jì)金額、實(shí)收金額、找零以及結(jié)帳的方式等主要信息,還包括當(dāng)前出納編號、當(dāng)前日期、POS機(jī)編號和當(dāng)前門店編號等輔助信息。
3)出納結(jié)賬:當(dāng)換班或營業(yè)結(jié)束時,對本臺POS機(jī)或當(dāng)前出納的銷售情況進(jìn)行簡單查詢、詳細(xì)查詢、結(jié)算并打印出銷售清單。
4)商品退貨:當(dāng)顧客對所購商品要求退貨時,出納組長進(jìn)入商品退貨界面,輸入顧客購物小票上的銷售流水號,將顯示出該流水號下所有商品的詳細(xì)信息,然后就可以對所要求退貨的商品進(jìn)行退貨了。
5)POS機(jī)維護(hù):此模塊完成系統(tǒng)中添加、修改、刪除POS機(jī)的編號、MAC地址以及POS機(jī)的狀態(tài)等。
6)打印機(jī)設(shè)置:用來設(shè)置銷售小票的票頭(連鎖超市的名稱)和票尾(顧客的注意事項(xiàng)、超市的店址、電話等信息)。
7)POS系統(tǒng)設(shè)置:對POS銷售系統(tǒng)的一些設(shè)置,包括POS機(jī)基本鍵盤的設(shè)置、電子顯示牌端口、打印方式(銷售打印或結(jié)算打?。┖蚉OS編號的設(shè)置。
8)商品熱鍵設(shè)置:對某些熱銷商品,可以在POS機(jī)的鍵盤上設(shè)置熱鍵,銷售時不用輸入條碼而直接按此熱鍵就能輸入該商品,這樣可以提高銷售速度。在這個界面里,可以完成商品熱鍵的添加、刪除、清空和查詢等操作。
5 POS系統(tǒng)開發(fā)中的關(guān)鍵技術(shù)
5.1 無盤工作站
在計(jì)算機(jī)網(wǎng)絡(luò)中,由于無盤工作站具有網(wǎng)絡(luò)系統(tǒng)安全性高、對網(wǎng)絡(luò)資源有較大的控制權(quán)、易于維護(hù)、可對工作站所用的軟件同時升級、減少開支等特點(diǎn),無盤工作站在局域網(wǎng)中得到了廣泛的應(yīng)用。基于上述優(yōu)點(diǎn)以及POS機(jī)的特點(diǎn),該文所開發(fā)的POS銷售系統(tǒng)采用無盤工作站模式工作,POS機(jī)利用網(wǎng)卡上的遠(yuǎn)程啟動芯片RPL ROM引導(dǎo)后臺服務(wù)器上的操作系統(tǒng),從而啟動服務(wù)器上的POS應(yīng)用軟件來工作[2]。
5.2 ADO的使用
ADO(Microsoft ActiveX Data Objects)是一個數(shù)據(jù)對象的集合,是C++Builder和SQL server相關(guān)聯(lián)數(shù)據(jù)庫系統(tǒng)中一種數(shù)據(jù)訪問接口,它為應(yīng)用程序提供了通過OLE DB提供者存取數(shù)據(jù)的能力,其模型如圖3所示。C+Builder ADOExpress組件封裝了這些A D O對象的功能,并在C + + Builder中以面向?qū)ο蟮男问綄?shí)現(xiàn)其功能。在本系統(tǒng)的開發(fā)中,利用以下三個組件來實(shí)現(xiàn)應(yīng)用程序和SQL Server 數(shù)據(jù)庫直接的連接及數(shù)據(jù)交換[2]:
TADOConnection:用于與ADO數(shù)據(jù)庫建立連接;多個ADO數(shù)據(jù)集和命令組件能夠共享這個連接來執(zhí)行命令,獲取數(shù)據(jù)以及對數(shù)據(jù)進(jìn)行操作。
將ADOConnection的ConnectionString屬性設(shè)置為:
Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;
User ID=sa;Initial Catalog=CSData;Data Source=SBSERVER。
TADOQuery:用于獲取和操作由一條有效的SQL語句產(chǎn)生的數(shù)據(jù)集,可以直接或通過TADOConnection 組件連接到數(shù)據(jù)庫。 將ADOQuery的Connection屬性設(shè)置為:ADOConnection。
TDataSource:用來描述數(shù)據(jù)源。數(shù)據(jù)控制控件必須和TdataSource控件相聯(lián)系才能從數(shù)據(jù)庫中取得數(shù)據(jù)。將DataSource的DataSet屬性設(shè)置為:ADOQuery。
圖3 ADO模型
5.3 程序設(shè)計(jì)中的面向?qū)ο蠹夹g(shù)
由于面向?qū)ο蠹夹g(shù)集抽象性、封裝性、繼承性和多態(tài)性于一體,易于實(shí)現(xiàn)模塊化、可復(fù)用、易維護(hù)、易擴(kuò)充。類是面向?qū)ο蟪绦蛟O(shè)計(jì)中最重要的概念之一,它將相關(guān)的數(shù)據(jù)和函數(shù)封裝起來形成一個整體,相當(dāng)于一個數(shù)據(jù)結(jié)構(gòu)。因此,在POS銷售系統(tǒng)的開發(fā)過程中,針對此類軟件的特點(diǎn),從最基本的外圍類、實(shí)體類和控制基類開始,編寫了POS系統(tǒng)類庫,為POS系統(tǒng)的開發(fā)奠定了基礎(chǔ),并為以后的軟件維護(hù)和功能擴(kuò)展以及其它類似軟件的開發(fā)提供了豐富的資源。POS系統(tǒng)類庫中類的繼承關(guān)系如圖4所示。
圖4 POS系統(tǒng)開發(fā)中類的繼承關(guān)系
1)外圍類:主要完成電子顯示屏的數(shù)據(jù)顯示、打印機(jī)打印、彈開錢箱、打印機(jī)走紙和切紙等功能,具體函數(shù)如下:
bool __fastcall Show(AnsiString Content,AnsiString Com); //顯示
bool __fastcall Print(String Content,int x,int y,String FontName,int FontSize); //打印
bool __fastcall FlickCashBox(); //彈開錢箱endprint
bool __fastcall GoPaper(); //走紙
bool __fastcall CutPaper(); //切紙
2)實(shí)體類:創(chuàng)建一個數(shù)據(jù)模型窗口,用來放置ADO組件,完成數(shù)據(jù)庫連接和數(shù)據(jù)交換任務(wù)。
3)控制基類:完成數(shù)據(jù)庫開發(fā)程序常用的操作,主要包括日期操作、提示對話框、字符串操作、人民幣數(shù)字轉(zhuǎn)換漢字、數(shù)據(jù)庫操作等函數(shù)。
4)數(shù)據(jù)控制類:繼承控制基類,主要對數(shù)據(jù)庫操作,包括數(shù)據(jù)集操作函數(shù)、查詢語句函數(shù)等。
5)POS系統(tǒng)基類:主要完成POS系統(tǒng)的基本操作,具體函數(shù)如下:
bool__fastcall AddSellGlideMN(String SellGlide,String Code,int GoodsNum,float TotalMoney,float PaymentMoney,int Status,float SpareMoney);//添加銷售流水(主表)
bool__fastcall AddSellGlideSUB(String SellGlide,int OrderNum,String InsideCode,String BarCode,int Num,float Price,float SubTotal);//添加銷售流水(從表)
bool__fastcall ChaStockNum(String ShopCode,String InsideCode,int GoodsNum,bool Status);//修改庫存數(shù)量
bool__fastcall ChaStatus(String ShopCode,String Code,int CodeStatus);//修改出納狀態(tài)
bool__fastcall SetLogInfo(String Code,int Operator,String ShopCode,String POSCode);//添加操作流水
bool__fastcall ChaPosStatus(String ShopCode,String POSCode,int Status);//修改POS當(dāng)前狀態(tài)
float__fastcall CashBoxQuery(String ShopCode,String POSCode);//查詢錢箱金額
6 結(jié)束語
本文結(jié)合某連鎖超市的具體實(shí)際,以前臺POS機(jī)+后臺服務(wù)器模式開發(fā)了工作于無盤工作站下的POS銷售系統(tǒng),并在超市門店進(jìn)行了試驗(yàn),運(yùn)行結(jié)果良好,完全滿足客戶要求。另外,在系統(tǒng)的開發(fā)中,完全采用面向?qū)ο蠹夹g(shù),軟件具有良好的開放性,易于日后功能擴(kuò)展。
參考文獻(xiàn):
[1] 黃文鈺.Delphi構(gòu)建進(jìn)銷存系統(tǒng)—POS系統(tǒng)開發(fā)實(shí)例[M].北京:清華大學(xué)出版社,2002.
[2] 余席忠.無盤工作站組建及應(yīng)用[M].北京:人民郵電出版社,2001.endprint
bool __fastcall GoPaper(); //走紙
bool __fastcall CutPaper(); //切紙
2)實(shí)體類:創(chuàng)建一個數(shù)據(jù)模型窗口,用來放置ADO組件,完成數(shù)據(jù)庫連接和數(shù)據(jù)交換任務(wù)。
3)控制基類:完成數(shù)據(jù)庫開發(fā)程序常用的操作,主要包括日期操作、提示對話框、字符串操作、人民幣數(shù)字轉(zhuǎn)換漢字、數(shù)據(jù)庫操作等函數(shù)。
4)數(shù)據(jù)控制類:繼承控制基類,主要對數(shù)據(jù)庫操作,包括數(shù)據(jù)集操作函數(shù)、查詢語句函數(shù)等。
5)POS系統(tǒng)基類:主要完成POS系統(tǒng)的基本操作,具體函數(shù)如下:
bool__fastcall AddSellGlideMN(String SellGlide,String Code,int GoodsNum,float TotalMoney,float PaymentMoney,int Status,float SpareMoney);//添加銷售流水(主表)
bool__fastcall AddSellGlideSUB(String SellGlide,int OrderNum,String InsideCode,String BarCode,int Num,float Price,float SubTotal);//添加銷售流水(從表)
bool__fastcall ChaStockNum(String ShopCode,String InsideCode,int GoodsNum,bool Status);//修改庫存數(shù)量
bool__fastcall ChaStatus(String ShopCode,String Code,int CodeStatus);//修改出納狀態(tài)
bool__fastcall SetLogInfo(String Code,int Operator,String ShopCode,String POSCode);//添加操作流水
bool__fastcall ChaPosStatus(String ShopCode,String POSCode,int Status);//修改POS當(dāng)前狀態(tài)
float__fastcall CashBoxQuery(String ShopCode,String POSCode);//查詢錢箱金額
6 結(jié)束語
本文結(jié)合某連鎖超市的具體實(shí)際,以前臺POS機(jī)+后臺服務(wù)器模式開發(fā)了工作于無盤工作站下的POS銷售系統(tǒng),并在超市門店進(jìn)行了試驗(yàn),運(yùn)行結(jié)果良好,完全滿足客戶要求。另外,在系統(tǒng)的開發(fā)中,完全采用面向?qū)ο蠹夹g(shù),軟件具有良好的開放性,易于日后功能擴(kuò)展。
參考文獻(xiàn):
[1] 黃文鈺.Delphi構(gòu)建進(jìn)銷存系統(tǒng)—POS系統(tǒng)開發(fā)實(shí)例[M].北京:清華大學(xué)出版社,2002.
[2] 余席忠.無盤工作站組建及應(yīng)用[M].北京:人民郵電出版社,2001.endprint
bool __fastcall GoPaper(); //走紙
bool __fastcall CutPaper(); //切紙
2)實(shí)體類:創(chuàng)建一個數(shù)據(jù)模型窗口,用來放置ADO組件,完成數(shù)據(jù)庫連接和數(shù)據(jù)交換任務(wù)。
3)控制基類:完成數(shù)據(jù)庫開發(fā)程序常用的操作,主要包括日期操作、提示對話框、字符串操作、人民幣數(shù)字轉(zhuǎn)換漢字、數(shù)據(jù)庫操作等函數(shù)。
4)數(shù)據(jù)控制類:繼承控制基類,主要對數(shù)據(jù)庫操作,包括數(shù)據(jù)集操作函數(shù)、查詢語句函數(shù)等。
5)POS系統(tǒng)基類:主要完成POS系統(tǒng)的基本操作,具體函數(shù)如下:
bool__fastcall AddSellGlideMN(String SellGlide,String Code,int GoodsNum,float TotalMoney,float PaymentMoney,int Status,float SpareMoney);//添加銷售流水(主表)
bool__fastcall AddSellGlideSUB(String SellGlide,int OrderNum,String InsideCode,String BarCode,int Num,float Price,float SubTotal);//添加銷售流水(從表)
bool__fastcall ChaStockNum(String ShopCode,String InsideCode,int GoodsNum,bool Status);//修改庫存數(shù)量
bool__fastcall ChaStatus(String ShopCode,String Code,int CodeStatus);//修改出納狀態(tài)
bool__fastcall SetLogInfo(String Code,int Operator,String ShopCode,String POSCode);//添加操作流水
bool__fastcall ChaPosStatus(String ShopCode,String POSCode,int Status);//修改POS當(dāng)前狀態(tài)
float__fastcall CashBoxQuery(String ShopCode,String POSCode);//查詢錢箱金額
6 結(jié)束語
本文結(jié)合某連鎖超市的具體實(shí)際,以前臺POS機(jī)+后臺服務(wù)器模式開發(fā)了工作于無盤工作站下的POS銷售系統(tǒng),并在超市門店進(jìn)行了試驗(yàn),運(yùn)行結(jié)果良好,完全滿足客戶要求。另外,在系統(tǒng)的開發(fā)中,完全采用面向?qū)ο蠹夹g(shù),軟件具有良好的開放性,易于日后功能擴(kuò)展。
參考文獻(xiàn):
[1] 黃文鈺.Delphi構(gòu)建進(jìn)銷存系統(tǒng)—POS系統(tǒng)開發(fā)實(shí)例[M].北京:清華大學(xué)出版社,2002.
[2] 余席忠.無盤工作站組建及應(yīng)用[M].北京:人民郵電出版社,2001.endprint