肖卓宇++陳俊旭++楊鑫維++楊邦平++胡振濤
摘要:該文構(gòu)建了基于B/S架構(gòu)的電子商城信息系統(tǒng),通過對客戶調(diào)研獲取了詳細(xì)的用戶需求,以此為基礎(chǔ)逐步對系統(tǒng)功能進(jìn)行細(xì)化,并對電子商城系統(tǒng)的功能模塊進(jìn)行了劃分,進(jìn)而挖掘了模塊之間的聯(lián)系,通過對概要設(shè)計(jì)與詳細(xì)設(shè)計(jì)的實(shí)施方案進(jìn)行了多輪驗(yàn)證,最后使用面向?qū)ο蟮腏ava語言與SQL Server數(shù)據(jù)庫實(shí)現(xiàn)了系統(tǒng),經(jīng)過多階段測試,最終獲得了用戶的認(rèn)可,項(xiàng)目取得了較好的效果。
關(guān)鍵詞:程序設(shè)計(jì)能力;設(shè)計(jì)模式;B/S;MVC; SQLserver;B2C
中圖分類號:TP3 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2016)32-0285-04
電子商務(wù)是基于internet、以線上交易的用戶與商家為基礎(chǔ)、以電子貨幣的形式對購買商品進(jìn)行支付與結(jié)算,這種新型方式有助于將客戶與商家緊密地聯(lián)系起來,并可快速及時了解客戶需求,也有助于線上商家在互聯(lián)網(wǎng)上針對性地選擇最優(yōu)供應(yīng)商,甚至融入全球范圍內(nèi)產(chǎn)品銷售[1]。電子商城為方便用戶進(jìn)行在線購物,提供一種可交互的網(wǎng)絡(luò)在線購物平臺,通過對電子商務(wù)網(wǎng)站的研發(fā),從而實(shí)現(xiàn)對傳統(tǒng)零售業(yè)的信息化監(jiān)控與管理,電子商城網(wǎng)站是一種典型的B2C模式,主要包括如下模塊:網(wǎng)上訂貨、購物、商品目錄、用戶注冊、商品查詢等[2]。
在對國內(nèi)外相關(guān)工作進(jìn)行研究后,設(shè)計(jì)實(shí)現(xiàn)一個基于設(shè)計(jì)模式的B/S的在電子商城。鑒于項(xiàng)目組先前工作的相關(guān)性[3-7]。設(shè)計(jì)模式技術(shù)在項(xiàng)目得到了充分的應(yīng)用。
在開發(fā)該系統(tǒng)前需進(jìn)行相關(guān)的準(zhǔn)備工作,用戶可通過Internet登錄商城,瀏覽商品的信息,查看商品詳細(xì)情況。并將感興趣的產(chǎn)品加入購物車,如果決定購買可以直接下單,之后需要填寫聯(lián)系方式,收貨地址和運(yùn)送方式等信息,最后提交訂單。管理員登錄后臺后可以對商品信息進(jìn)行增加、刪除與修改,對新聞公告模塊進(jìn)行添加、修改和刪除;對友情鏈接模塊也可進(jìn)行添加、修改和刪除;管理注冊用戶信息;管理商品訂單,修改發(fā)貨的狀態(tài)。該系統(tǒng)將實(shí)現(xiàn)用戶登錄,購物車、新聞公告、注冊、商品瀏覽、商品導(dǎo)航、下訂單(模擬實(shí)現(xiàn))等。
1 相關(guān)技術(shù)
1.1 MyEclipse
MyEclipse 是一款優(yōu)秀的用于開發(fā)的Java運(yùn)行環(huán)境,MyEclipse功能強(qiáng)大,可與眾多技術(shù)兼容,特別對于開源產(chǎn)品的支持獲得較好的效果[8]。MyEclipse目前支持Spring,AJAX,JSP,Servlet,Struts2,Java,Hibernate,EJB3等,JDBC數(shù)據(jù)庫連接工具等多種技術(shù)??梢哉J(rèn)為MyEclipse幾乎包括了目前所有主流開源產(chǎn)品的專屬eclipse開發(fā)工具。
1.2 SQL Server數(shù)據(jù)庫
SQL Server 是Microsoft公司研發(fā)的一款關(guān)系數(shù)據(jù)庫管理系統(tǒng)。最初是由Sybase等三家公司共同研發(fā)的,并于上世紀(jì)80年代推出其第一個OS/2 版本。在Microsoft公司的Windows 系列操作系統(tǒng)推出后,Sybase 公司于Microsoft公司與在SQL Server 的研發(fā)上出現(xiàn)了分歧,此后Microsoft 將SQL Server 移植到Windows NT操作系統(tǒng)上,并專注于開發(fā)推廣SQL Server 的Windows NT 版本[9]。
Microsoft SQL Server 2005 是一類主流的數(shù)據(jù)庫平臺,使用集成的商業(yè)智能 (BI) 工具提供了企業(yè)級的數(shù)據(jù)管理。Microsoft SQL Server 2005 數(shù)據(jù)庫引擎為關(guān)系型數(shù)據(jù)和結(jié)構(gòu)化數(shù)據(jù)提供了更安全可靠的存儲功能,使您可以構(gòu)建和管理用于業(yè)務(wù)的高可用和高性能的數(shù)據(jù)應(yīng)用程序。
1.3 MVC模式
MVC是一種軟件架構(gòu)設(shè)計(jì)的思想,將軟件的組成部分劃分成如下三個不同的層次:
1)Model(模型)
用來封裝業(yè)務(wù)邏輯(業(yè)務(wù)邏輯指的是對業(yè)務(wù)數(shù)據(jù)的處理過程以及為保證處理能夠正常執(zhí)行的一些基礎(chǔ)服務(wù),比如事務(wù)、安全、日志等等,封裝指的是模型應(yīng)該提供接口,調(diào)用者使用接口來調(diào)用模型的功能)[10]。
2)View(視圖)
表示邏輯的實(shí)現(xiàn)(視圖要對模型處理后,所返回的數(shù)據(jù)提供恰當(dāng)?shù)谋憩F(xiàn)形式,此外,也需提供用戶操作的界面)。
3)Controller(控制器)
將模型與視圖進(jìn)行耦合。即視圖發(fā)出的請求先交由控制器來處理,控制器會根據(jù)請求選擇恰當(dāng)?shù)哪P蛠韺φ埱筮M(jìn)行處理,并依據(jù)模型返回的結(jié)果選擇合適的視圖,從而生成相應(yīng)的界面返回給用戶。MVC最初的設(shè)計(jì)目的是為了讓一個模型可以被多個不同的視圖共享[11]。
圖1 MVC流程圖
2 系統(tǒng)設(shè)計(jì)
2.1 系統(tǒng)用例圖
圖2 前臺流程
普通用戶可以進(jìn)行注冊,登錄。登錄的時候要輸入正確的密碼以及驗(yàn)證碼,然后進(jìn)入商品瀏覽頁面,可以點(diǎn)擊商品進(jìn)入商品詳細(xì)頁面點(diǎn)擊加入購物車。進(jìn)入購物車,增加購買商品的數(shù)量,刪除商品,以及清空購物車。點(diǎn)擊提交我的訂單,進(jìn)入收貨地址頁面。
圖3 后臺流程
2.2 系統(tǒng)功能圖
系統(tǒng)前臺功能主要分為5個主要模塊:商品展示、購物車、訂單、公告等,如圖4所示:
圖4 前臺功能
后臺涉及商品管理,會員管理,公告管理等模塊,詳見圖5:
3 系統(tǒng)實(shí)現(xiàn)
3.1 目錄圖
系統(tǒng)配置圖如圖6所示:
圖6 相關(guān)文件配置目錄圖
3.2 表關(guān)系圖
本系統(tǒng)采用的是SQL Server2005數(shù)據(jù)庫,SQL語句可以用來執(zhí)行各種各樣的操作,例如更新數(shù)據(jù)庫中的數(shù)據(jù),從數(shù)據(jù)庫中提取數(shù)據(jù)等。絕大多數(shù)流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),如Oracle,Sybase,Microsoft SQL Server, Access等都采用了SQL語言標(biāo)準(zhǔn)。如下是根據(jù)用戶需求設(shè)定的表結(jié)構(gòu),以及簡單的說明。系統(tǒng)涉及的主要表關(guān)系如圖7、圖8所示:
圖7 部分表關(guān)系圖
圖8 后臺表關(guān)系圖
4 系統(tǒng)實(shí)現(xiàn)
注冊界面由用戶名輸入框、密碼輸入框、密碼確認(rèn)框組成和“提交注冊信息”按鈕組成,這些組件都包含在表單中,如圖9所示。
主要源程序:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String name = request.getParameter("name");
String password = request.getParameter("password");
Member member = new com.entity.Member(name, password);
member.setName(name);
member.setPassword(password);
System.out.println(member.getName());
if(ShoppingFactory.getMemberDAOImplInstance().addMember(member)){
request.getSession().setAttribute("member", member);
response.sendRedirect("chat/login.jsp"); }
else{
response.sendRedirect("chat/register1.jsp");}}
圖9 注冊界面
圖10 商品瀏覽頁面
部分源程序:
public class Cart extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
// 獲得購買物品的Id
String id = request.getParameter("id");
//調(diào)添加到購物車的方法addgwc()
addgwc(request, response, id);
// request.getSession().setAttribute("method", method);
// 跳轉(zhuǎn)地址cart.jsp
String path = "cart.jsp";
response.sendRedirect(path);
}
// 添加到購物車
private void addgwc(HttpServletRequest request,
HttpServletResponse response, String id) throws ServletException, IOException {
//獲得購物車shoppinglist里的購物記錄
ArrayList
//通過Id(商品編號)獲得此條商品的具體信息
Goods good = ShoppingFactory.getGoodsDAOImplInstance().selectGoodsById(id);
//定義boolean型的flag,用來標(biāo)識是否此條商品購物車?yán)锸欠翊嬖冢J(rèn)flag為false(不存在相同記錄))
boolean flag=false;
//如果購物車為空
if (shoppinglist == null) {
//則new一個Arraylist,用來裝購物清單
shoppinglist = new ArrayList
//添加此條購物記錄
shoppinglist.add(good);
} else {
//如果存在shoppinglist,則遍歷里面的購物記錄
for (Goods goods : shoppinglist) {
//如果存在相同的購物物品(商品編號相同),則數(shù)量+1,并把flag賦值為真(表示存在相同記錄)
if(goods.getId()==Integer.parseInt(id)){
goods.setQuantity(goods.getQuantity()+1);
flag=true;
}}
//如果不存在相同記錄,則添加此條商品
if(!flag){
shoppinglist.add(good);
}}
//將購物車存放到session
request.getSession().setAttribute("shoppinglist", shoppinglist);
//調(diào)count()方法,統(tǒng)計(jì)購物總金額
double money=count(request, response);
//設(shè)置double型的總金額money的格式。保留到小數(shù)點(diǎn)后兩位
DecimalFormat df = new DecimalFormat("#.##");
//將總金額存放到session
request.getSession().setAttribute("money",df.format(money));
}
public Double count(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//獲得購物車shoppinglist里的購物記錄
ArrayList
//定義一個money。用來存放總金額
double money=0;
//循環(huán)遍歷每一個購物車的購買記錄
for (Goods goods : shoppinglist) {
//總金額=之前的金額+此條商品的free價格*數(shù)量
money=money+goods.getFreePrice()*goods.getQuantity();
}
return money;
}}
5 結(jié)論
電子購物系統(tǒng)目前取得一定的成效,并初步進(jìn)行了運(yùn)營,在今后的工作中將針對用戶個性化需求新增新的模塊,同時完善現(xiàn)有功能,以期待系統(tǒng)達(dá)到更好的使用效果。
參考文獻(xiàn):
[1] 方志遠(yuǎn), 許肖生. 電子商務(wù)技術(shù)[M]. 北京: 中國社會科學(xué)出版社, 2004.
[2] 崔紅娟. 網(wǎng)上書店建設(shè)分析[J]. 農(nóng)業(yè)圖書情報(bào)學(xué)刊, 2005(11).
[3] 肖卓宇, 黎妍, 何锫, 陳俊旭. 基于矩陣積分評估的設(shè)計(jì)模式檢測研究[J]. 小型微型計(jì)算機(jī)系統(tǒng), 2016,37(7).
[4] 肖卓宇, 何锫, 余波, 黎妍, 楊鑫維. 一種形式化上下無關(guān)文法關(guān)系驅(qū)動的設(shè)計(jì)模式檢測方法[J]. 工程科學(xué)學(xué)報(bào), 2016,38(10).
[5] 肖卓宇, 何锫, 余波, 黎妍, 胡振濤. 基于FCA與CBR的設(shè)計(jì)模式檢測[J]. 山東大學(xué)學(xué)報(bào)(工學(xué)報(bào)), 2016,46(2).
[6] 肖卓宇, 何锫, 黎妍. 基于設(shè)計(jì)模式角色的附加關(guān)系檢測研究[J]. 計(jì)算機(jī)應(yīng)用研究, 2015, 32(7).
[7] 肖卓宇, 何锫, 黎妍. 基于DPS 表達(dá)式類圖的設(shè)計(jì)模式檢測[J]. 計(jì)算機(jī)工程與設(shè)計(jì), 2015, 36(10).
[8] 鄒竹彪. JSP網(wǎng)絡(luò)編程從入門到精通[M]. 北京: 清華大學(xué)出版社, 2007.
[9] 辛峰. 基于JSP的網(wǎng)上購物系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 哈爾濱職業(yè)技術(shù)學(xué)院報(bào), 2010,14(1).
[10] 李赤林, 王琳. Model-View-Controller設(shè)計(jì)模式實(shí)例研究[J]. 計(jì)算機(jī)與現(xiàn)代化, 2003,19(3).
[11] 肖卓宇, 何锫. 設(shè)計(jì)模式在系統(tǒng)集成中的應(yīng)用與研究[J]. 計(jì)算機(jī)工程與設(shè)計(jì), 2007,28(17).