[摘 要] 當前中小連鎖超市信息化管理水平比較落后,各分店信息交流不及時,商品配置不合理,運營監控困難,缺少合適的信息化管理系統。本課題的研究目的在于開發一個專門面向中小連鎖超市,實現商品統一調度,人員合理分配,降低管理成本,提高效率,增加收益的信息化管理系統。整個系統基于B/S架構,采用ASP與Access技術相結合,實現連鎖超市分類信息發布,商品統一管理、調度。系統有很強的實用性。
[關鍵詞] ASP;連鎖超市;數據庫;信息化管理
[中圖分類號]F270.7;TP311[文獻標識碼]A[文章編號]1673-0194(2008)15-0095-04
當前中小連鎖超市在居民小區、城鎮越來越普及,給居民生活帶來了很大便利。雖然中小連鎖超市采用統一商品采購、配送的連鎖管理方式,但是在管理上還是停留在人工信息傳遞管理階段,各分店之間商品配置不合理,信息不及時,人員難以合理分配,這為中小連鎖超市帶來了很多不便。現在雖然大型連鎖超市信息化管理比較成熟,而且有一個完善的管理系統,但是運轉耗資非常昂貴,很多功能也不適用于中小連鎖超市的業務。因此,需要專門針對中小連鎖超市開發一套信息化管理系統。
1 系統架構
目前網絡應用系統一般有C/S和B/S兩種架構模式。C/S架構,即Client/Server(客戶機/服務器)結構,通過將任務合理分配到Client端和Server端,降低系統的通訊開銷,可以充分利用兩端硬件環境的優勢[1]。但是該模式基于Intranet技術,適用于局域網環境,可連接用戶數有限,而且客戶端需要安裝專用的客戶端軟件。B/S架構,即Browser/Server(瀏覽器/服務器)結構,是隨著Internet技術的興起,對C/S架構的一種變化或者改進的架構。在這種架構下,客戶機上只要安裝一個瀏覽器(Browser),如Netscape Navigator或Internet Explorer,服務器安裝Oracle、Sybase、Informix或 SQL Server等數據庫。瀏覽器通過Web Server 同數據庫進行數據交互。它最大的優點就是可以在任何地方進行操作而不用安裝任何專門的軟件,客戶端零維護。該架構的系統擴展非常容易,可以在線申請,通過公司內部的安全認證(如CA證書)后,系統自動分配給用戶一個賬號進入系統。考慮到中小連鎖超市門店數量多且分散的特點,本系統的開發采用B/S架構,后臺開發采用ASP平臺結合Access數據庫技術。
2 系統設計
2. 1系統功能模塊設計
根據對家家樂連鎖超市的一般業務流程的考察了解到,中小連鎖超市信息化管理系統至少必須具備4個功能模塊:信息發布模塊、無紙化辦公模塊、用戶管理模塊和庫存管理模塊(如圖1所示)。

信息發布模塊:提供面向普通客戶的新商品介紹、促銷活動、公告等信息發布功能。在信息的排序上,采用置頂+時間的方式(ORDER BY Settop ASC,Ctime DESC),重要信息在前,其他信息置后。
無紙化辦公模塊:面向超市員工和管理層提供超市往來文件的傳遞、顯示,重要通知的發布等功能。
用戶管理模塊:主要面向超市員工和管理層實現用戶信息新建、編輯、刪除,用戶權限驗證功能。在用戶管理模塊中將用戶劃分為3種類型,不同類型的用戶具有不同的權限,并且提供不同的功能菜單。
(1)匿名用戶,該類用戶只能查看超市的新聞,沒有什么特別的權限。
(2)超市管理員,該類用戶可以給上級母超市發送信息或申請,或給平級的超市發送信息,查看上級母超市調撥給本超市的貨品。
(3)總超市管理員,這種用戶可以維護超市新聞(添加,刪除,編輯,置頂),給下級超市發送信息(可以群發信息)或批文,維護貨品倉庫數據,給下級超市調貨。
庫存管理模塊:主要實現商品入庫、調度分配、統計、查詢等功能。
2. 2數據庫設計
根據以上功能模塊設計,系統需創建6張數據表,分別是:
(1)User表:存儲用戶名和密碼,用戶權限。用戶名無須進行加密,密碼需要采用MD5加密,用戶權限特征用一個邏輯字段(isadmin)來實現,當isadmin=true時,表示這個用戶是總管理員,可以進行高級的操作;當isadmin=1時,表示這個用戶是超市管理員,只能進行一些基本操作。
(2)News表:存儲新聞。title字段(為文本類型,最大長度可達255個字符),用來儲存新聞標題;content(備注字段,最大長度可達
65 535個字符)用來存儲新聞內容;settop(邏輯型)用來區分置頂新聞與非置頂新聞,true表示置頂,1表示不置頂,默認為1;admin(文本)用來存儲創建新聞的管理員姓名;count(整型)用來存儲訪問次數;ctime(時間)用來存儲添加新聞的時間。
(3)Messages表:用來存儲無紙化辦公信息。fromid(整型) 字段用來記錄是哪個用戶id發送了批文;toid(整型)字段用來記錄該批文是發給哪個用戶的,如果該值為0時,表示這是一個群發的信息;title(文本)字段用來記錄批文的標題;content(備注)字段用來記錄批文的內容,opened(邏輯)字段用來記錄是否被讀取過;ctime(時間) 字段用來記錄批文創建的時間。
(4)Sptype表:用來存儲商品名稱,因為在商品庫里面肯定有很多的商品名稱是相同的,為了統一存儲商品數據的方便,系統把商品的名稱都存儲在一個表里,在商品庫表里面通過這個表的索引id來讀取商品名稱。
(5)Storeroom表:是商品庫。spid(整型)字段與sptype表里的id字段相對應,表示商品名稱;num(整型)字段用來記錄商品的數量;dw(文本)字段用來記錄商品的單位;other(備注類型)字段用來記錄商品的備注信息;ctime字段表示商品的入庫時間。
(6)Dh表:存儲調貨的歷史。fromid(整型)存儲的是系統進行上下級調貨的管理員ID,toid是系統存儲接受調貨的管理員id;other(備注類型)存儲著調貨的備注信息;ctime(時間)表示調貨的時間[3]。
3 系統實現
3. 1信息發布模塊的實現
信息發布模塊實現借鑒了一些論壇的站內消息的設計思路,采用了現成的編輯器,通過一個News表來存儲信息內容。其中系統把信息的標題存儲在title字段里,信息的內容放在content字段里。前臺通過編輯器所見即所得地編輯頁面,并且自動生成HTML代碼提交到后臺,后臺通過REWORKE重構前臺傳過來的代碼,把一些能產生Access注入的代碼替換掉(這部分代碼在rework函數里面實現),通過Connection對象接口,把數據寫入到數據庫里面去。在信息里面,系統設置settop字段和ctime字段, settop字段存儲著信息的置頂信息,ctime字段存儲著信息的發布時間,通過對這兩個字段進行排序,從而實現對信息的排序。信息發布界面如圖2所示。

call csdbopen() //打開數據庫,創建Connection對象
StrSQL=\"insert into news (title,content,ctime,admin,settop) values('\"StrTitle\"′,′\"StrContent\"′,′\"StrTime\"′,′\"Session(\"yhm\")\"′\"
if StrSettop=\"true\" then
StrSQL=StrSQL\",true)\"http://處理置頂問題
else
StrSQL=StrSQL\",1)\"
End if
ObjConn.Execute(StrSQL) //添加新聞
3. 2無紙化辦公模塊的實現
無紙化辦公的實現與新聞發布一樣,添加一個編輯器實現高級文檔編輯。系統把該批文內容放在Messages這個表里面,title字段存儲著辦公的標題信息,content字段存儲著辦公的詳細內容,其中系統用一個opened邏輯字段來標記是否打開,fromid和toid這兩個字段是與users這個表里面的id字段是關聯的,fromid是標記著送出該辦公批文的用戶id,toid是接受該辦公批文的id,同時,當toid是0時,該信息就會被群發。
批文的寫入和修改,系統通過ASP頁面接受post過來的數據,然后通過生成Access語句,把數據寫入到數據庫里面。
3. 3用戶管理模塊的實現
用戶管理模塊的重點是密碼的管理和用戶權限的驗證。密碼記錄在數據庫中,系統采用MD5加密的方式對密碼進行加密,如果修改密碼,系統會要求他輸入兩次,這樣可減少誤輸入密碼的概率。
對于用戶權限的驗證,系統采用了SSI語法,通過文件嵌入的形式來進行驗證,如果驗證方式改動,只需要改動嵌入文件就可以實現一改全改。
if (isempty(Session(\"yhm\")) or (Session(\"isadmin\")=1)) then
Response.Redirect(\"index.asp\")
3. 4庫存管理
庫存管理界面如圖3所示。

3. 4. 1商品入庫
入庫的商品系統要與庫存的商品進行匹配,如果庫存的商品中有入庫的商品,并且商品的單位是一樣的,系統就把入庫的商品與原來庫存有的商品進行疊加,這樣保證了管理的高效性。
StrSQL=\"select * from storeroom where id=\"Strspid//
Set ObjRS=ObjConn.Execute(StrSQL) //生成記錄集
if (ObjRS.eof) then //與庫存的商品不匹配,增加記錄
StrSQL=\"insert into storeroom(spid,num,dw,other,keywords) values(\"Strspid\",\"Strnum\",′\"Strdw\"′,′\"Strother\"′,′\"getspname(Strspid)\"′)\"
else
if (ObjRS(\"dw\")=Strdw) then//與庫存的商品相匹配,增加數量
StrSQL=\"update storeroom set num=num+\"Strnum\" where spid=\"strspid
else
StrSQL=\"insert into storeroom(spid,num,dw,other,keywords) values(\"Strspid\",\"Strnum\",′\"Strdw\"′,′\"Strother\"′,′\"getspname(Strspid)\"′)\"
end if
end if
3. 4. 2商品分發到各分店、更新
如果上級超市要把商品分發到各個分店,系統通過給Dh表寫入記錄,來實現商品的分發和更新,同時隨著商品的流通,系統還相應配送一個商品的公文。庫存管理界面如圖3所示。
StrSQL=\"select * from storeroom where id=\"Numid
Set ObjRS0=ObjConn.Execute(StrSQL)
if (ObjRS0.eof=1) then
StrSQL=\"update storeroom set num=num-\"Numnum\" where id=\"Numid
Objconn.execute(StrSQL)
StrSQL=\"insert into dh(fromid,toid,spid,num,dw,other) values(\"Session(\"id\")\",\"Numtoid\",\"ObjRS0(\"spid\")\",\"Numnum\",′\"ObjRS0(\"dw\")\"′,′\"Strother
\"′)\"
Objconn.execute(StrSQL)
end if
3. 4. 3商品查詢
對一個比較大的商品庫存進行管理,不可避免地要進行商品查詢。商品搜索要模仿人類的自然語言來進行搜索,要進行模糊匹配、關鍵字分割等高級技術搜索,通過函數封裝、統一接口的方式實現。
關鍵字分割由函數splitkeyword()實現。
模糊匹配搜索由makelogicsentence()實現。
function (makelogicsentence_keyword,field,logicsentence) //將關鍵字進行邏輯組合生成SQL字串的函數
dim makelogicsentence_Numi,makelogicsentence_
logic,makelogicsentence_logic2
makelogicsentence_logic=\" or \" //關鍵字匹配邏輯
makelogicsentence_logic2=\" or \" //關鍵字匹配邏輯
makelogicsentence=\"\"
if (isempty(logicsentence)=1 and len(logicsentence)>0) then makelogicsentence=makelogicsentence_logic
makelogicsentence=makelogicsentence\"(\"
//以下是進行關鍵字數組模糊搜索語句生成的循環
for numi=0 to Ubound(makelogicsentence_keyword)
if (numi>0) then
makelogicsentence=makelogicsentence
makelogicsentence_logic2
makelogicsentence=makelogicsentence\"(\"field\" like
′%\"makelogicsentence_keyword(Numi)\"%′)\" //組建模糊搜索的語句
next ′numi
makelogicsentence=makelogicsentence\")\"
end function
4 總 結
本系統基于B/S架構,安裝、調試、使用方便,功能簡約而全面,開發、運行成本低,適應中小連鎖超市的信息化管理的需求,有利于實現商品統一調度,人員合理分配,降低管理成本,提高效率,增加收益。
主要參考文獻
[1] [美] J Zeldman. 網站重構——應用Web標準進行設計[M]. 北京:電子工業出版社,2004:351-362,369-382.
[2] 張興淵 等. Active Server Pages 動態網頁設計精粹[M]. 北京:兵器工業出版社,2000:38-242,320-326.
[3] 蘭貴秋,張玉改. 關于我國連鎖超市物流管理的思考[J]. 商場現代化, 2007(1):6-7.