孫號夕+胡偉+楊中宇
摘要:針對傳統(tǒng)單機訂單管理系統(tǒng)存在的功能簡單、數(shù)據(jù)共享困難、使用不便等問題,提出采用B/S結構、PHP和Mysql技術,設計并實現(xiàn)了一個方便、實用,包含合同管理、客戶管理、財務管理、產(chǎn)品管理、入庫發(fā)貨管理、退換貨管理、生產(chǎn)執(zhí)行跟蹤管理、系統(tǒng)基礎管理等功能的銷售管理系統(tǒng),以滿足實際銷售管理工作的需要。運行結果表明,系統(tǒng)完整實現(xiàn)了既定功能,并有效提高了數(shù)據(jù)共享的便捷性。
關鍵詞: PHP; Mysql; Codeigniter; 銷售系統(tǒng); 權限控制
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2014)23-5393-06
銷售活動在企業(yè)的經(jīng)營過程中起著相當大的作用,隨著網(wǎng)絡技術和信息技術的不斷發(fā)展,應用軟件在銷售管理中也得到越來越多的使用。傳統(tǒng)的單機訂單管理系統(tǒng)僅能進行單機操作,不支持聯(lián)網(wǎng)操作,且功能不足,影響使用。這類系統(tǒng)在數(shù)據(jù)共享、功能實用性、用戶體驗及后期擴展等方面都存在著嚴重的局限性。因此,建立一個基于網(wǎng)絡訪問的“銷售管理系統(tǒng)”對銷售的各個流程及數(shù)據(jù)進行管理,提高工作效率,是非常必要的。
1 系統(tǒng)設計
1.1 系統(tǒng)設計思路
目前主流的網(wǎng)絡應用程序的結構有兩種,一種是C/S,一種是B/S。C/S結構即客戶端/服務器結構,通過將任務分配到客戶端和服務器端來實現(xiàn)軟件的使用[1]。這種結構下的軟件雖然服務器端負荷較輕,但開發(fā)成本和維護成本都很高,軟件長期使用的代價較高。B/S結構即瀏覽器/服務器結構,是一種新興的程序結構,目前已成為大多數(shù)軟件系統(tǒng)的選擇。該結構將系統(tǒng)核心功能集中到了服務器端,用戶只需要通過瀏覽器就能進行訪問、操作,簡化了系統(tǒng)的開發(fā)、維護和使用。綜合考慮銷售管理系統(tǒng)的網(wǎng)絡訪問、數(shù)據(jù)共享、使用便捷和后期維護等因素,系統(tǒng)采用B/S結構進行開發(fā)。
PHP(Hypertext Preprocessor)是一種通用開源腳本語言,具備跨平臺運行、敏捷開發(fā)、廣泛數(shù)據(jù)庫支持、使用免費等特點[2],主要應用在開發(fā)動態(tài)交互式的WEB系統(tǒng)。Mysql是一個主流的關系型數(shù)據(jù)庫管理系統(tǒng),它體積小、速度快、功能強大、免費開源,已被廣泛應用在中小型網(wǎng)站和各類應用系統(tǒng)中[3]。在實際應用中,PHP與Mysql完美配合,已成為WEB開發(fā)的優(yōu)秀組合[4]。
PHP開發(fā)領域中存在著豐富的框架,利用框架的 MVC模式[5]、CURD(封裝數(shù)據(jù)庫操作)、輸入處理(校驗過濾)、類庫擴展等功能,可以大量減少代碼編寫量從而節(jié)省開發(fā)時間。利用框架,開發(fā)者只需要將精力投入到軟件的創(chuàng)造性開發(fā)上。Zend Framework、Cake PHP、Think PHP、YII Framework等框架都是優(yōu)秀的PHP框架,也足以支撐銷售系統(tǒng)的開發(fā),但在這里,選擇Codeigniter作為系統(tǒng)的開發(fā)框架。Codeigniter是一個輕量級、簡潔、功能強大且適合敏捷開發(fā)的PHP開源框架,目前由Ellislab提供技術支持,它使用MVC(Model,View,Controller)模型使表現(xiàn)層和邏輯層分離,且內置豐富的類庫,能為系統(tǒng)開發(fā)提供極大便利。
基于PHP、Mysql的跨平臺特性,系統(tǒng)可以運行在Windows、Linux、Mac OS等平臺,但為方便開發(fā)工具的使用,系統(tǒng)開發(fā)環(huán)境采用Windows+Apache+Mysql+PHP的方案[6],開發(fā)設計工具主要有Zend studio、Mysql workbench、PHPMyadmin、Dreamweaver和Fireworks。
1.2 功能模塊設計
銷售管理系統(tǒng)的主要目的是將企業(yè)在實際的銷售活動中的各項工作根據(jù)管理要求納入系統(tǒng)管理,實現(xiàn)合同“發(fā)起、審核、執(zhí)行、完結”各環(huán)節(jié)涉及到的產(chǎn)品、客戶、物流、財務等數(shù)據(jù)的規(guī)范化、系統(tǒng)化管理。通過對銷售管理系統(tǒng)的需求分析,系統(tǒng)按功能模塊劃分為產(chǎn)品管理、合同管理、生產(chǎn)管理、退換貨管理、財務管理、客戶管理和系統(tǒng)管理,具體的功能模塊如圖1所示。
1) 合同管理
合同管理主要提供對合同文本信息的管理功能,包括合同添加、合同修改、合同作廢、合同審核、合同變更和按時間、所屬部門、銷售人員、合同狀態(tài)等條件的統(tǒng)計查詢。添加合同時,由于部分協(xié)議不能寫入格式條款,還需提供上傳附件的功能以滿足合同的完整性需求。附件分為“商務附件”和“技術附件”,附件的分類可以方便不同權限的用戶查看相應的內容,利于權限控制。
2) 退換貨管理
退換貨管理包含退貨管理和換貨管理,退貨和換貨都需要經(jīng)過“申請、審批、執(zhí)行”的流程。不同的是,換貨過程不涉及財務處理,只需將通過審批的換貨合同對應產(chǎn)品重新入庫、發(fā)貨即可;而退貨過程涉及到財務處理,對已開發(fā)票的合同,退貨后還需要開紅字發(fā)票(負數(shù)發(fā)票)抵沖,這個功能在“財務管理”中實現(xiàn)。該功能模塊提供產(chǎn)品在發(fā)送給客戶后需要進行退貨或換貨的主要功能。
3) 產(chǎn)品管理
產(chǎn)品管理主要提供對產(chǎn)品本身信息的管理,如:產(chǎn)品分類、產(chǎn)品主材、結算公式管理等功能。設置產(chǎn)品結算公式后,用戶在添加合同時系統(tǒng)自動生成對應產(chǎn)品的銷售單價(建議性單價,用戶可自行修改),方便價格管理。
4) 生產(chǎn)管理
生產(chǎn)管理是對已簽訂合同的產(chǎn)品進行排產(chǎn)、生產(chǎn)進度跟蹤、生產(chǎn)信息反饋以及對產(chǎn)成品的入庫、退庫、發(fā)貨等操作提供管理功能。生產(chǎn)跟蹤包含“待審批合同查閱”和“生效合同跟蹤”功能,前者為方便生產(chǎn)部門提前安排產(chǎn)品生產(chǎn)所需的條件和材料,后者還包括合同對應產(chǎn)品生產(chǎn)進度的跟蹤及信息反饋。產(chǎn)品生產(chǎn)完成后,根據(jù)合同編號進行入庫,當銷售人員提出發(fā)貨申請并通過審批后,進行發(fā)貨操作。如遇到需要延期交貨的情況,還可以對已入庫的產(chǎn)品做退庫處理,產(chǎn)品進入庫存。
5) 財務管理
財務管理包括來款管理、應收賬款管理和開票管理。來款管理是將客戶的來款按類別(如:現(xiàn)款、承兌等)錄入系統(tǒng)形成待認領來款記錄,銷售人員在來款記錄中認領屬于自己的款項。認領后,對應的來款與客戶和銷售人員綁定。如果認領出錯,可以將已認領的信息解除綁定,來款進入待認領記錄庫以便重新認領。應收賬款管理包含每次發(fā)貨形成的應收賬款明細和按客戶名稱形成的應收賬款匯總統(tǒng)計,所有記錄在產(chǎn)品發(fā)貨開票后自動生成。開票管理是產(chǎn)品在提交產(chǎn)品發(fā)貨申請的同時形成的開票申請在通過相應的審批后所做的開具發(fā)票操作,同時還包括產(chǎn)品退貨后形成的紅字發(fā)票的開具。endprint
6) 客戶管理
客戶管理提供客戶資料的添加、編輯、禁用等功能,客戶基礎信息包括“客戶類型、名稱、所在地、聯(lián)系電話、聯(lián)系人、營業(yè)執(zhí)照號碼、組織機構代碼”等??蛻粜畔㈨毰c銷售部門、銷售人員進行關系對應,這種對應關系影響到合同的簽訂、執(zhí)行、銷售考核、來款管理等方面。
7) 系統(tǒng)管理
系統(tǒng)管理是系統(tǒng)的基礎管理,提供系統(tǒng)運行的基礎設置,包括部門管理、用戶管理、角色管理、權限管理、供方基本信息管理等功能。由于銷售管理系統(tǒng)中許多信息都較為敏感,因此各功能模塊的操作和信息的查看都需要進行專門的授權,這些管理都在“角色管理和權限管理”中實現(xiàn)。系統(tǒng)采用基于角色的權限設計,對不通的角色授權,將用戶劃分到某角色后就具備了該角色的所有權限。
1.3 數(shù)據(jù)庫設計
系統(tǒng)所有數(shù)據(jù)存儲在名為hetong的數(shù)據(jù)庫中,該庫包含71張表,分別存儲產(chǎn)品、合同、客戶、產(chǎn)品入庫、產(chǎn)品發(fā)貨、發(fā)票、用戶、角色等信息,涉及到系統(tǒng)的各個功能。數(shù)據(jù)庫的設計綜合考慮了三范式[8]并做了適當?shù)娜哂啵褂猛怄I,讓不同的數(shù)據(jù)表在協(xié)同工作的同時保證數(shù)據(jù)的一致性和完整性。
由于數(shù)據(jù)表較多而篇幅有限,此處僅以用戶添加合同的E-R圖[9](如圖2所示)為例作簡要說明。系統(tǒng)用戶包含登錄名、真實姓名、所在部門、角色組等屬性,真實姓名是為了將用戶在系統(tǒng)中所做的操作進行實名制記錄,滿足管理需要;合同包含合同編號、客戶名稱(需方)、產(chǎn)品名稱(合同對應產(chǎn)品)、收貨地址等屬性。系統(tǒng)用戶在添加合同時,將對應的信息寫入相應的數(shù)據(jù)表。在系統(tǒng)中,“系統(tǒng)用戶”使用users表存儲,“合同”使用contract表存儲數(shù)據(jù),字段包括但不限于圖2中兩個實體分別列出的屬性(屬性較多,未完全列出)。
1.4 安全設計
1) 基于用戶名、密碼的訪問
與大多數(shù)軟件一樣,系統(tǒng)也采用了基于用戶名、密碼的登錄訪問,用戶只能在輸入正確的用戶名和密碼后才能進入系統(tǒng)。用戶名和密碼的驗證過程采用了PHP的SESSION會話機制,SESSION信息經(jīng)過加密后存儲在數(shù)據(jù)庫中,防止瀏覽器端的信息偽造,提高系統(tǒng)安全性。
2) 異常登錄驗證碼
3) 敏感信息加密存儲
數(shù)據(jù)庫是數(shù)據(jù)的核心,如果數(shù)據(jù)庫被攻破,數(shù)據(jù)會暴露,甚至被非法利用或破壞。數(shù)據(jù)庫系統(tǒng)的安全是非常重要的,但對數(shù)據(jù)庫管理系統(tǒng)的安全措施,本次不作討論。系統(tǒng)將部分存儲敏感信息的表字段進行了加密存儲(如:用戶密碼、權限資源等),盡量降低系統(tǒng)數(shù)據(jù)風險。在系統(tǒng)后期升級中,還可以考慮采用可逆加密和不可逆加密的算法將不同敏感程度的信息分別加密后存儲,增強安全性。
4) 對用戶提交的信息作前后端雙重驗證
前端即用戶瀏覽器端,通過JS程序對用戶的輸入進行是否必填、非法字符過濾等驗證,防止無效數(shù)據(jù)直接提交到后端程序。后端即服務器處理端,使用PHP程序對用戶提交的表單信息進行無效字符過濾、字符類型、字符長度、非法提交等驗證處理,保證最終提交到Mysql數(shù)據(jù)庫的數(shù)據(jù)是安全、可靠的。用戶在提交數(shù)據(jù)時,如果前端驗證未通過,則會直接在頁面上進行提示;如果后端驗證未通過,則會以錯誤代碼提示用戶。通過對程序前端、后端的綜合驗證,提高了程序自身的安全性。
2 系統(tǒng)實現(xiàn)
Index(index.php)是系統(tǒng)的入口,初始化運行系統(tǒng)所需要的基本資源; URI路由負責檢查HTTP請求,確定由哪個控制器(Controller)來處理用戶請求;如果緩存文件存在,則將緩存文件直接發(fā)送給瀏覽器;控制器(Controller)負責裝載模型(Model)、核心庫、輔助函數(shù)及所需的其它資源,在控制器(Controller)裝載之前,HTTP 請求和任何用戶提交的數(shù)據(jù)都將被安全過濾;控制器(Controller)處理完用戶請求后,則將視圖(View)發(fā)送到用戶瀏覽器,如開啟緩存,視圖首先被緩存,用于以后的請求。
系統(tǒng)由模型(Model)、控制器(Controller)、視圖(View)和其他類庫(Library)、插件(Plugins)等組成。其中,模型負責處理系統(tǒng)中的數(shù)據(jù)邏輯部分,直接與數(shù)據(jù)庫進行數(shù)據(jù)處理;控制器處理系統(tǒng)中用戶交互的部分,用于分派用戶的請求并選擇相應的視圖呈獻給用戶,同時也負責將用戶的輸入解釋成模型可以執(zhí)行的操作,是模型和視圖之間的橋梁;視圖則用于系統(tǒng)前端的處理,提供直觀的界面給用戶[10]。本系統(tǒng)還采用了部分第三方類庫和插件,如:Jquery用于處理前端頁面的顯示效果和AJAX操作、PHPExcel用于處理系統(tǒng)中excel格式數(shù)據(jù)的導入、導出等操作[11]。
由于本系統(tǒng)功能模塊較多,代碼量也較大,不便將所有開發(fā)過程及代碼一一展示,下面就主要將合同添加功能涉及到的模型、控制器及視圖進行列舉并說明。
2.1模型實現(xiàn)
此處摘取了contracts模型中的部分代碼,__construct()為構造函數(shù),允許contracts具備父類CI_Model的功能。create_contract()函數(shù)可將傳遞過來的參數(shù)$data中的值按插入到contract數(shù)據(jù)表,當控制器調用該函數(shù)并有效傳值時,則數(shù)據(jù)存儲到表中。get_all()函數(shù)的功能是獲取所有已經(jīng)保存到數(shù)據(jù)表的合同,參數(shù)$num和$offset允許設置每頁記錄數(shù)和結果集的偏移,這個在做分頁顯示的時候需要用到,參數(shù)$order允許設置數(shù)據(jù)庫查詢返回記錄的順序,默認為desc降序排列。
2.2 控制器實現(xiàn)
add_contract()函數(shù)實現(xiàn)合同添加的功能,$val是表單驗證函數(shù),為用戶的輸入提供驗證,trim表示空格過濾,xss_clean表示啟動防止跨站腳本攻擊,required表示該字段為必填項。在用戶提交的數(shù)據(jù)通過驗證后,將所有數(shù)據(jù)組合成$contract_data數(shù)組,并將該數(shù)組通過contracts模型的create_contract()函數(shù)添加到數(shù)據(jù)庫中對應的表字段,完成數(shù)據(jù)插入工作。
2.3 視圖實現(xiàn)
2.4 系統(tǒng)運行示例
3 結束語
經(jīng)過反復測試與修改,系統(tǒng)實現(xiàn)了銷售各個流程及數(shù)據(jù)的系統(tǒng)化管理,方便了信息的共享,能在生產(chǎn)環(huán)境中正常運行。次外,在系統(tǒng)開發(fā)過程中對部分數(shù)據(jù)表的字段做了預留,程序設計也考慮了擴展接口,以便系統(tǒng)的后期升級。系統(tǒng)設計開發(fā)過程中用到的技術對類似B/S結構系統(tǒng)的開發(fā)也具有一定的參考意義。
參考文獻:
[1] 金理清,殷國真,張正做.基于B/S架構辦公管理信息系統(tǒng)設計與開發(fā)[J].辦公自動化,2011,199(2):50-51.
[2] 王石,楊英娜.精通PHP+Mysql應用開發(fā)[M].北京:人民郵電出版社,2006:2-6.
[3] Vikram Vaswani.Mysql完全手冊[M].北京:電子工業(yè)出版社,2008:40-55.
[4] 王娜娜.基于PHP技術的辦公自動化系統(tǒng)的設計與實現(xiàn)[J].科技視界,2012,51(36):36-38.
[5] Quentin Zervaas.PHP Web2.0開發(fā)實戰(zhàn)[M].北京:人民郵電出版社,2008:16-19.
[6] 余肖生,易偲.基于PHP的開發(fā)環(huán)境搭建與網(wǎng)站設計實現(xiàn)[J].重慶理工大學學報:自然科學版,2011,25(3):74-77.
[7] 楊桂麗,黎敬濤.基于PHP的一個家庭理財系統(tǒng)的設計與實現(xiàn)[J].計算機應用與軟件,2013,30(2):259-261.
[8] 于中遠,王亞平.應用環(huán)境中最優(yōu)數(shù)據(jù)庫模式的構建[J].河南科技,2011,21(21):54-55.
[9] 吳曼霞.企業(yè)訂單跟蹤管理系統(tǒng)的設計與實現(xiàn)[D].成都:電子科技大學,2012.
[10] 戴一平.MVC設計模式在PHP開發(fā)中的應用[J].計算機與現(xiàn)代化,2011,187(3):33-37.
[11] 李謀平.基于PHP的圖書設備管理系統(tǒng)研究與開發(fā)[D].合肥:安徽大學,2011.endprint
6) 客戶管理
客戶管理提供客戶資料的添加、編輯、禁用等功能,客戶基礎信息包括“客戶類型、名稱、所在地、聯(lián)系電話、聯(lián)系人、營業(yè)執(zhí)照號碼、組織機構代碼”等??蛻粜畔㈨毰c銷售部門、銷售人員進行關系對應,這種對應關系影響到合同的簽訂、執(zhí)行、銷售考核、來款管理等方面。
7) 系統(tǒng)管理
系統(tǒng)管理是系統(tǒng)的基礎管理,提供系統(tǒng)運行的基礎設置,包括部門管理、用戶管理、角色管理、權限管理、供方基本信息管理等功能。由于銷售管理系統(tǒng)中許多信息都較為敏感,因此各功能模塊的操作和信息的查看都需要進行專門的授權,這些管理都在“角色管理和權限管理”中實現(xiàn)。系統(tǒng)采用基于角色的權限設計,對不通的角色授權,將用戶劃分到某角色后就具備了該角色的所有權限。
1.3 數(shù)據(jù)庫設計
系統(tǒng)所有數(shù)據(jù)存儲在名為hetong的數(shù)據(jù)庫中,該庫包含71張表,分別存儲產(chǎn)品、合同、客戶、產(chǎn)品入庫、產(chǎn)品發(fā)貨、發(fā)票、用戶、角色等信息,涉及到系統(tǒng)的各個功能。數(shù)據(jù)庫的設計綜合考慮了三范式[8]并做了適當?shù)娜哂?,使用外鍵,讓不同的數(shù)據(jù)表在協(xié)同工作的同時保證數(shù)據(jù)的一致性和完整性。
由于數(shù)據(jù)表較多而篇幅有限,此處僅以用戶添加合同的E-R圖[9](如圖2所示)為例作簡要說明。系統(tǒng)用戶包含登錄名、真實姓名、所在部門、角色組等屬性,真實姓名是為了將用戶在系統(tǒng)中所做的操作進行實名制記錄,滿足管理需要;合同包含合同編號、客戶名稱(需方)、產(chǎn)品名稱(合同對應產(chǎn)品)、收貨地址等屬性。系統(tǒng)用戶在添加合同時,將對應的信息寫入相應的數(shù)據(jù)表。在系統(tǒng)中,“系統(tǒng)用戶”使用users表存儲,“合同”使用contract表存儲數(shù)據(jù),字段包括但不限于圖2中兩個實體分別列出的屬性(屬性較多,未完全列出)。
1.4 安全設計
1) 基于用戶名、密碼的訪問
與大多數(shù)軟件一樣,系統(tǒng)也采用了基于用戶名、密碼的登錄訪問,用戶只能在輸入正確的用戶名和密碼后才能進入系統(tǒng)。用戶名和密碼的驗證過程采用了PHP的SESSION會話機制,SESSION信息經(jīng)過加密后存儲在數(shù)據(jù)庫中,防止瀏覽器端的信息偽造,提高系統(tǒng)安全性。
2) 異常登錄驗證碼
3) 敏感信息加密存儲
數(shù)據(jù)庫是數(shù)據(jù)的核心,如果數(shù)據(jù)庫被攻破,數(shù)據(jù)會暴露,甚至被非法利用或破壞。數(shù)據(jù)庫系統(tǒng)的安全是非常重要的,但對數(shù)據(jù)庫管理系統(tǒng)的安全措施,本次不作討論。系統(tǒng)將部分存儲敏感信息的表字段進行了加密存儲(如:用戶密碼、權限資源等),盡量降低系統(tǒng)數(shù)據(jù)風險。在系統(tǒng)后期升級中,還可以考慮采用可逆加密和不可逆加密的算法將不同敏感程度的信息分別加密后存儲,增強安全性。
4) 對用戶提交的信息作前后端雙重驗證
前端即用戶瀏覽器端,通過JS程序對用戶的輸入進行是否必填、非法字符過濾等驗證,防止無效數(shù)據(jù)直接提交到后端程序。后端即服務器處理端,使用PHP程序對用戶提交的表單信息進行無效字符過濾、字符類型、字符長度、非法提交等驗證處理,保證最終提交到Mysql數(shù)據(jù)庫的數(shù)據(jù)是安全、可靠的。用戶在提交數(shù)據(jù)時,如果前端驗證未通過,則會直接在頁面上進行提示;如果后端驗證未通過,則會以錯誤代碼提示用戶。通過對程序前端、后端的綜合驗證,提高了程序自身的安全性。
2 系統(tǒng)實現(xiàn)
Index(index.php)是系統(tǒng)的入口,初始化運行系統(tǒng)所需要的基本資源; URI路由負責檢查HTTP請求,確定由哪個控制器(Controller)來處理用戶請求;如果緩存文件存在,則將緩存文件直接發(fā)送給瀏覽器;控制器(Controller)負責裝載模型(Model)、核心庫、輔助函數(shù)及所需的其它資源,在控制器(Controller)裝載之前,HTTP 請求和任何用戶提交的數(shù)據(jù)都將被安全過濾;控制器(Controller)處理完用戶請求后,則將視圖(View)發(fā)送到用戶瀏覽器,如開啟緩存,視圖首先被緩存,用于以后的請求。
系統(tǒng)由模型(Model)、控制器(Controller)、視圖(View)和其他類庫(Library)、插件(Plugins)等組成。其中,模型負責處理系統(tǒng)中的數(shù)據(jù)邏輯部分,直接與數(shù)據(jù)庫進行數(shù)據(jù)處理;控制器處理系統(tǒng)中用戶交互的部分,用于分派用戶的請求并選擇相應的視圖呈獻給用戶,同時也負責將用戶的輸入解釋成模型可以執(zhí)行的操作,是模型和視圖之間的橋梁;視圖則用于系統(tǒng)前端的處理,提供直觀的界面給用戶[10]。本系統(tǒng)還采用了部分第三方類庫和插件,如:Jquery用于處理前端頁面的顯示效果和AJAX操作、PHPExcel用于處理系統(tǒng)中excel格式數(shù)據(jù)的導入、導出等操作[11]。
由于本系統(tǒng)功能模塊較多,代碼量也較大,不便將所有開發(fā)過程及代碼一一展示,下面就主要將合同添加功能涉及到的模型、控制器及視圖進行列舉并說明。
2.1模型實現(xiàn)
此處摘取了contracts模型中的部分代碼,__construct()為構造函數(shù),允許contracts具備父類CI_Model的功能。create_contract()函數(shù)可將傳遞過來的參數(shù)$data中的值按插入到contract數(shù)據(jù)表,當控制器調用該函數(shù)并有效傳值時,則數(shù)據(jù)存儲到表中。get_all()函數(shù)的功能是獲取所有已經(jīng)保存到數(shù)據(jù)表的合同,參數(shù)$num和$offset允許設置每頁記錄數(shù)和結果集的偏移,這個在做分頁顯示的時候需要用到,參數(shù)$order允許設置數(shù)據(jù)庫查詢返回記錄的順序,默認為desc降序排列。
2.2 控制器實現(xiàn)
add_contract()函數(shù)實現(xiàn)合同添加的功能,$val是表單驗證函數(shù),為用戶的輸入提供驗證,trim表示空格過濾,xss_clean表示啟動防止跨站腳本攻擊,required表示該字段為必填項。在用戶提交的數(shù)據(jù)通過驗證后,將所有數(shù)據(jù)組合成$contract_data數(shù)組,并將該數(shù)組通過contracts模型的create_contract()函數(shù)添加到數(shù)據(jù)庫中對應的表字段,完成數(shù)據(jù)插入工作。
2.3 視圖實現(xiàn)
2.4 系統(tǒng)運行示例
3 結束語
經(jīng)過反復測試與修改,系統(tǒng)實現(xiàn)了銷售各個流程及數(shù)據(jù)的系統(tǒng)化管理,方便了信息的共享,能在生產(chǎn)環(huán)境中正常運行。次外,在系統(tǒng)開發(fā)過程中對部分數(shù)據(jù)表的字段做了預留,程序設計也考慮了擴展接口,以便系統(tǒng)的后期升級。系統(tǒng)設計開發(fā)過程中用到的技術對類似B/S結構系統(tǒng)的開發(fā)也具有一定的參考意義。
參考文獻:
[1] 金理清,殷國真,張正做.基于B/S架構辦公管理信息系統(tǒng)設計與開發(fā)[J].辦公自動化,2011,199(2):50-51.
[2] 王石,楊英娜.精通PHP+Mysql應用開發(fā)[M].北京:人民郵電出版社,2006:2-6.
[3] Vikram Vaswani.Mysql完全手冊[M].北京:電子工業(yè)出版社,2008:40-55.
[4] 王娜娜.基于PHP技術的辦公自動化系統(tǒng)的設計與實現(xiàn)[J].科技視界,2012,51(36):36-38.
[5] Quentin Zervaas.PHP Web2.0開發(fā)實戰(zhàn)[M].北京:人民郵電出版社,2008:16-19.
[6] 余肖生,易偲.基于PHP的開發(fā)環(huán)境搭建與網(wǎng)站設計實現(xiàn)[J].重慶理工大學學報:自然科學版,2011,25(3):74-77.
[7] 楊桂麗,黎敬濤.基于PHP的一個家庭理財系統(tǒng)的設計與實現(xiàn)[J].計算機應用與軟件,2013,30(2):259-261.
[8] 于中遠,王亞平.應用環(huán)境中最優(yōu)數(shù)據(jù)庫模式的構建[J].河南科技,2011,21(21):54-55.
[9] 吳曼霞.企業(yè)訂單跟蹤管理系統(tǒng)的設計與實現(xiàn)[D].成都:電子科技大學,2012.
[10] 戴一平.MVC設計模式在PHP開發(fā)中的應用[J].計算機與現(xiàn)代化,2011,187(3):33-37.
[11] 李謀平.基于PHP的圖書設備管理系統(tǒng)研究與開發(fā)[D].合肥:安徽大學,2011.endprint
6) 客戶管理
客戶管理提供客戶資料的添加、編輯、禁用等功能,客戶基礎信息包括“客戶類型、名稱、所在地、聯(lián)系電話、聯(lián)系人、營業(yè)執(zhí)照號碼、組織機構代碼”等??蛻粜畔㈨毰c銷售部門、銷售人員進行關系對應,這種對應關系影響到合同的簽訂、執(zhí)行、銷售考核、來款管理等方面。
7) 系統(tǒng)管理
系統(tǒng)管理是系統(tǒng)的基礎管理,提供系統(tǒng)運行的基礎設置,包括部門管理、用戶管理、角色管理、權限管理、供方基本信息管理等功能。由于銷售管理系統(tǒng)中許多信息都較為敏感,因此各功能模塊的操作和信息的查看都需要進行專門的授權,這些管理都在“角色管理和權限管理”中實現(xiàn)。系統(tǒng)采用基于角色的權限設計,對不通的角色授權,將用戶劃分到某角色后就具備了該角色的所有權限。
1.3 數(shù)據(jù)庫設計
系統(tǒng)所有數(shù)據(jù)存儲在名為hetong的數(shù)據(jù)庫中,該庫包含71張表,分別存儲產(chǎn)品、合同、客戶、產(chǎn)品入庫、產(chǎn)品發(fā)貨、發(fā)票、用戶、角色等信息,涉及到系統(tǒng)的各個功能。數(shù)據(jù)庫的設計綜合考慮了三范式[8]并做了適當?shù)娜哂?,使用外鍵,讓不同的數(shù)據(jù)表在協(xié)同工作的同時保證數(shù)據(jù)的一致性和完整性。
由于數(shù)據(jù)表較多而篇幅有限,此處僅以用戶添加合同的E-R圖[9](如圖2所示)為例作簡要說明。系統(tǒng)用戶包含登錄名、真實姓名、所在部門、角色組等屬性,真實姓名是為了將用戶在系統(tǒng)中所做的操作進行實名制記錄,滿足管理需要;合同包含合同編號、客戶名稱(需方)、產(chǎn)品名稱(合同對應產(chǎn)品)、收貨地址等屬性。系統(tǒng)用戶在添加合同時,將對應的信息寫入相應的數(shù)據(jù)表。在系統(tǒng)中,“系統(tǒng)用戶”使用users表存儲,“合同”使用contract表存儲數(shù)據(jù),字段包括但不限于圖2中兩個實體分別列出的屬性(屬性較多,未完全列出)。
1.4 安全設計
1) 基于用戶名、密碼的訪問
與大多數(shù)軟件一樣,系統(tǒng)也采用了基于用戶名、密碼的登錄訪問,用戶只能在輸入正確的用戶名和密碼后才能進入系統(tǒng)。用戶名和密碼的驗證過程采用了PHP的SESSION會話機制,SESSION信息經(jīng)過加密后存儲在數(shù)據(jù)庫中,防止瀏覽器端的信息偽造,提高系統(tǒng)安全性。
2) 異常登錄驗證碼
3) 敏感信息加密存儲
數(shù)據(jù)庫是數(shù)據(jù)的核心,如果數(shù)據(jù)庫被攻破,數(shù)據(jù)會暴露,甚至被非法利用或破壞。數(shù)據(jù)庫系統(tǒng)的安全是非常重要的,但對數(shù)據(jù)庫管理系統(tǒng)的安全措施,本次不作討論。系統(tǒng)將部分存儲敏感信息的表字段進行了加密存儲(如:用戶密碼、權限資源等),盡量降低系統(tǒng)數(shù)據(jù)風險。在系統(tǒng)后期升級中,還可以考慮采用可逆加密和不可逆加密的算法將不同敏感程度的信息分別加密后存儲,增強安全性。
4) 對用戶提交的信息作前后端雙重驗證
前端即用戶瀏覽器端,通過JS程序對用戶的輸入進行是否必填、非法字符過濾等驗證,防止無效數(shù)據(jù)直接提交到后端程序。后端即服務器處理端,使用PHP程序對用戶提交的表單信息進行無效字符過濾、字符類型、字符長度、非法提交等驗證處理,保證最終提交到Mysql數(shù)據(jù)庫的數(shù)據(jù)是安全、可靠的。用戶在提交數(shù)據(jù)時,如果前端驗證未通過,則會直接在頁面上進行提示;如果后端驗證未通過,則會以錯誤代碼提示用戶。通過對程序前端、后端的綜合驗證,提高了程序自身的安全性。
2 系統(tǒng)實現(xiàn)
Index(index.php)是系統(tǒng)的入口,初始化運行系統(tǒng)所需要的基本資源; URI路由負責檢查HTTP請求,確定由哪個控制器(Controller)來處理用戶請求;如果緩存文件存在,則將緩存文件直接發(fā)送給瀏覽器;控制器(Controller)負責裝載模型(Model)、核心庫、輔助函數(shù)及所需的其它資源,在控制器(Controller)裝載之前,HTTP 請求和任何用戶提交的數(shù)據(jù)都將被安全過濾;控制器(Controller)處理完用戶請求后,則將視圖(View)發(fā)送到用戶瀏覽器,如開啟緩存,視圖首先被緩存,用于以后的請求。
系統(tǒng)由模型(Model)、控制器(Controller)、視圖(View)和其他類庫(Library)、插件(Plugins)等組成。其中,模型負責處理系統(tǒng)中的數(shù)據(jù)邏輯部分,直接與數(shù)據(jù)庫進行數(shù)據(jù)處理;控制器處理系統(tǒng)中用戶交互的部分,用于分派用戶的請求并選擇相應的視圖呈獻給用戶,同時也負責將用戶的輸入解釋成模型可以執(zhí)行的操作,是模型和視圖之間的橋梁;視圖則用于系統(tǒng)前端的處理,提供直觀的界面給用戶[10]。本系統(tǒng)還采用了部分第三方類庫和插件,如:Jquery用于處理前端頁面的顯示效果和AJAX操作、PHPExcel用于處理系統(tǒng)中excel格式數(shù)據(jù)的導入、導出等操作[11]。
由于本系統(tǒng)功能模塊較多,代碼量也較大,不便將所有開發(fā)過程及代碼一一展示,下面就主要將合同添加功能涉及到的模型、控制器及視圖進行列舉并說明。
2.1模型實現(xiàn)
此處摘取了contracts模型中的部分代碼,__construct()為構造函數(shù),允許contracts具備父類CI_Model的功能。create_contract()函數(shù)可將傳遞過來的參數(shù)$data中的值按插入到contract數(shù)據(jù)表,當控制器調用該函數(shù)并有效傳值時,則數(shù)據(jù)存儲到表中。get_all()函數(shù)的功能是獲取所有已經(jīng)保存到數(shù)據(jù)表的合同,參數(shù)$num和$offset允許設置每頁記錄數(shù)和結果集的偏移,這個在做分頁顯示的時候需要用到,參數(shù)$order允許設置數(shù)據(jù)庫查詢返回記錄的順序,默認為desc降序排列。
2.2 控制器實現(xiàn)
add_contract()函數(shù)實現(xiàn)合同添加的功能,$val是表單驗證函數(shù),為用戶的輸入提供驗證,trim表示空格過濾,xss_clean表示啟動防止跨站腳本攻擊,required表示該字段為必填項。在用戶提交的數(shù)據(jù)通過驗證后,將所有數(shù)據(jù)組合成$contract_data數(shù)組,并將該數(shù)組通過contracts模型的create_contract()函數(shù)添加到數(shù)據(jù)庫中對應的表字段,完成數(shù)據(jù)插入工作。
2.3 視圖實現(xiàn)
2.4 系統(tǒng)運行示例
3 結束語
經(jīng)過反復測試與修改,系統(tǒng)實現(xiàn)了銷售各個流程及數(shù)據(jù)的系統(tǒng)化管理,方便了信息的共享,能在生產(chǎn)環(huán)境中正常運行。次外,在系統(tǒng)開發(fā)過程中對部分數(shù)據(jù)表的字段做了預留,程序設計也考慮了擴展接口,以便系統(tǒng)的后期升級。系統(tǒng)設計開發(fā)過程中用到的技術對類似B/S結構系統(tǒng)的開發(fā)也具有一定的參考意義。
參考文獻:
[1] 金理清,殷國真,張正做.基于B/S架構辦公管理信息系統(tǒng)設計與開發(fā)[J].辦公自動化,2011,199(2):50-51.
[2] 王石,楊英娜.精通PHP+Mysql應用開發(fā)[M].北京:人民郵電出版社,2006:2-6.
[3] Vikram Vaswani.Mysql完全手冊[M].北京:電子工業(yè)出版社,2008:40-55.
[4] 王娜娜.基于PHP技術的辦公自動化系統(tǒng)的設計與實現(xiàn)[J].科技視界,2012,51(36):36-38.
[5] Quentin Zervaas.PHP Web2.0開發(fā)實戰(zhàn)[M].北京:人民郵電出版社,2008:16-19.
[6] 余肖生,易偲.基于PHP的開發(fā)環(huán)境搭建與網(wǎng)站設計實現(xiàn)[J].重慶理工大學學報:自然科學版,2011,25(3):74-77.
[7] 楊桂麗,黎敬濤.基于PHP的一個家庭理財系統(tǒng)的設計與實現(xiàn)[J].計算機應用與軟件,2013,30(2):259-261.
[8] 于中遠,王亞平.應用環(huán)境中最優(yōu)數(shù)據(jù)庫模式的構建[J].河南科技,2011,21(21):54-55.
[9] 吳曼霞.企業(yè)訂單跟蹤管理系統(tǒng)的設計與實現(xiàn)[D].成都:電子科技大學,2012.
[10] 戴一平.MVC設計模式在PHP開發(fā)中的應用[J].計算機與現(xiàn)代化,2011,187(3):33-37.
[11] 李謀平.基于PHP的圖書設備管理系統(tǒng)研究與開發(fā)[D].合肥:安徽大學,2011.endprint