陸文玲 劉新光 竇立君 王立琦
摘要:該文通過(guò)對(duì)校園報(bào)亭銷售管理系統(tǒng)的需求、校園一卡通的研究背景、內(nèi)容及意義進(jìn)行了詳細(xì)的分析,利用JSP技術(shù)結(jié)合MVC模型,詳細(xì)介紹基于一卡通的校園報(bào)亭管理系統(tǒng)的設(shè)計(jì)全過(guò)程。
關(guān)鍵詞:一卡通;校園報(bào)亭;管理系統(tǒng)
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)31-0087-02
1 概述
目前高校的學(xué)生生活中,學(xué)校為了方便統(tǒng)一的管理,基本都是實(shí)現(xiàn)刷卡管理,包括消費(fèi)方面的學(xué)校食堂、教育超市、浴室、洗衣機(jī)等;管理方面的圖書(shū)館書(shū)籍借閱、體育刷卡、門禁刷卡等方面。校園報(bào)亭是我校學(xué)生勤工助學(xué)的重要基地,本文針對(duì)校園一卡通在本校報(bào)亭銷售系統(tǒng)中的應(yīng)用,采用JSP技術(shù),基于Mysql數(shù)據(jù)庫(kù),設(shè)計(jì)了一個(gè)報(bào)亭銷售管理系統(tǒng),體現(xiàn)了校園一卡通在方便學(xué)生生活中的一方面的實(shí)際應(yīng)用。
2 系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)
2.1 功能需求分析
校園報(bào)亭銷售系統(tǒng)是以在服務(wù)在校學(xué)生為目標(biāo),其主要的功能就是可以方便學(xué)生直接網(wǎng)上購(gòu)買報(bào)亭內(nèi)的各類書(shū)刊、雜志等。因此本系統(tǒng)主要的用戶分為普通用戶和系統(tǒng)管理員這兩類。
系統(tǒng)管理員的主要功能有:
對(duì)報(bào)亭銷售的商品進(jìn)行管理,主要包括:商品上架、商品信息修改、商品刪除、商品信息查詢;
對(duì)個(gè)人信息的管理,包括:查詢個(gè)人的賬戶信息、修改個(gè)人信息、修改密碼等基本的功能;
對(duì)商品銷售情況的管理:查詢商品的銷售信息,按時(shí)間統(tǒng)計(jì)銷售額,銷售報(bào)表的輸出與打印。
對(duì)校園用戶的管理,主要包括:查詢校園用戶的基本信息、刪除校園用戶信息、查詢校園用戶的交易記錄等。
校園用戶的主要功能有:
查看報(bào)亭的商品信息;個(gè)人信息管理,主要有:賬戶管理、信息查看、密碼修改等;商品選擇、購(gòu)物車管理、結(jié)算等功能,可以批量也可以單獨(dú)購(gòu)買網(wǎng)站里的任何的商品,現(xiàn)場(chǎng)購(gòu)物用戶可直接刷校園卡結(jié)算。
2.2 數(shù)據(jù)庫(kù)設(shè)計(jì)
校園報(bào)亭銷售管理系統(tǒng)的數(shù)據(jù)庫(kù)是通過(guò)MySql建立的,根據(jù)功能分析,理清了數(shù)據(jù)流向及實(shí)體之間的各種關(guān)鍵后,建立了管理員表、校園用戶表、報(bào)亭商品表、購(gòu)物車表、校園用戶購(gòu)買記錄表。
首先,對(duì)于用戶的管理方面,必須要有管理員信息表和用戶信息表,將管理員用戶和普通用戶的信息都存在這些表內(nèi)。同時(shí)商品信息也要單獨(dú)存放。另外因?yàn)橐獙?shí)現(xiàn)用戶可以同時(shí)購(gòu)買多種商品,所以也添加了一張購(gòu)物車信息表,用來(lái)保存購(gòu)買過(guò)程中的信息,同時(shí)方便在后臺(tái)中批量管理。最后還有一張用戶購(gòu)買記錄表,這張表存放了用戶的交易信息,方便查看用戶的信息。
在這些數(shù)據(jù)表中,相互關(guān)聯(lián)的主要有用戶信息表字段、商品信息表字段和購(gòu)物車信息表字段之間的有關(guān)聯(lián);用戶信息表字段、商品信息表字段和用戶購(gòu)買記錄表字段之間有關(guān)聯(lián),下面介紹部分關(guān)鍵的表。
1) 管理員信息表
管理員信息表,用來(lái)存儲(chǔ)管理員賬戶的基本信息,包括管理員ID、姓名、密碼、密碼鹽(為增強(qiáng)密碼保密性,而創(chuàng)建管理員時(shí)隨機(jī)生成的一串字符,與用戶密碼運(yùn)算后保存在用戶密碼字段)、報(bào)亭ID,并留一個(gè)備用字段。管理員信息表的設(shè)計(jì)信息如表1所示。
2) 商品信息表
商品信息表主要是用來(lái)保存商品信息。其字段主要有:商品ID、商品名、商品圖片的鏈接、商品單價(jià)、商品的詳細(xì)說(shuō)明、發(fā)布的時(shí)間、商品庫(kù)存,并留兩個(gè)備用字段作為將來(lái)的其他功能的使用。商品信息表的設(shè)計(jì)如表2所示。
3 一卡通第三方介紹
一卡通系統(tǒng)中,為統(tǒng)一數(shù)據(jù)格式,對(duì)持卡人所屬部門做了定義:一卡通定義的持卡人的部門對(duì)應(yīng)的代碼,長(zhǎng)度18個(gè)字節(jié),下面是代碼對(duì)應(yīng)的意義:1~3:校區(qū)代碼,4~6:一級(jí)部門代碼,4~9:二級(jí)部門代碼,4~12:三級(jí)部門代碼,4~15:四級(jí)部門代碼,4~18:五級(jí)部門代碼。
為提高校園一卡通的安全性,除一卡通自身業(yè)務(wù)外,其它第三方的業(yè)務(wù)都是通過(guò)校園一卡通系統(tǒng)提供的第三方接口安全接入一卡通系統(tǒng),下面簡(jiǎn)要介紹幾個(gè)重要的接口:
3.1 第三方接入初始化函數(shù)
Bool TA_Init(string ServerIP , int PortNumber , int SysCode, int TerminalNo, boolean *ProxyOffline, long *MaxSno)
該接口的功能是實(shí)現(xiàn)第三方的業(yè)務(wù)系統(tǒng)初始化與第三方代理服務(wù)器的連接,其中:ServerIP表示第三方代理服務(wù)器的IP地址;PortNumber表示第三方代理服務(wù)器的端口號(hào);SysCode表示一卡通系統(tǒng)給第三方業(yè)務(wù)系統(tǒng)分配的系統(tǒng)代碼;TerminalNo表示第三方系統(tǒng)當(dāng)前連接第三方的終端編號(hào);出口參數(shù)ProxyOffline表示代理服務(wù)是否脫機(jī);MaxSno表示當(dāng)前第三方業(yè)務(wù)系統(tǒng)已有的最大流水號(hào)。返回True表示該接口調(diào)用成功,返回False表示接口調(diào)用失敗。
3.2 跟讀卡器操作相關(guān)的函數(shù)
1) int TA_CRInit(char CdReaderType,int ReaderPort,long BaudRate);
該接口的功能是實(shí)現(xiàn)讀卡器的初始化,其中:CdReaderType表示讀卡器類型,0表示接口為USB,1表示接口為串口,ReaderPort表示串口讀卡器的串口號(hào),0~1分別代表串口1~4;
BaudRate表示串口讀卡器的波特率。返回0表示初始化讀卡器成功,非0值表示讀卡器初始化失敗。
2) BOOL TA_CRClose();
該接口的功能是關(guān)閉當(dāng)前會(huì)話中的讀卡器,返回True表示關(guān)閉成功,F(xiàn)alse表示關(guān)閉失敗。
3) int TA_FastGetCardNo(int *CardPhyNo);
該接口的功能用來(lái)快速輪詢讀取卡片內(nèi)的物理序列號(hào),通過(guò)出口參數(shù)記錄當(dāng)前讀到的物理序列號(hào),如果沒(méi)有卡在上面則出口參數(shù)里面記錄為-1。
通過(guò)該接口結(jié)合程序設(shè)計(jì)中的循環(huán)結(jié)構(gòu),可以輕松實(shí)現(xiàn)讀卡器的無(wú)限輪詢,讓讀卡器隨時(shí)讀取上面的卡片。
4) int TA_CRBeep(int BeepTime);
該接口的功能是用來(lái)啟動(dòng)讀卡器的蜂鳴功能,通過(guò)該接口來(lái)提醒用戶本次讀卡已經(jīng)完成,不表明讀卡成功或失敗,BeepTime表示讀卡器蜂鳴的時(shí)間長(zhǎng)度,單位為毫秒。
4 關(guān)鍵代碼分析
代碼設(shè)計(jì)對(duì)系統(tǒng)的安全性和性能都有著直接的影響,因此,代碼設(shè)計(jì)也是整個(gè)設(shè)計(jì)中關(guān)鍵部分。數(shù)據(jù)庫(kù)連接是系統(tǒng)具體實(shí)現(xiàn)與數(shù)據(jù)存儲(chǔ)之間的橋梁,系統(tǒng)中的增、刪、改、查都是基于這個(gè)橋梁,在系統(tǒng)的設(shè)計(jì)過(guò)程中,把數(shù)據(jù)庫(kù)的四大基本操作都集成到一個(gè)模塊中。具體代碼如:
4.1 數(shù)據(jù)庫(kù)連接代碼,系統(tǒng)中所有的數(shù)據(jù)庫(kù)操作都基于這個(gè)連接。
public ComDbOpt()
{ if( ds == null )
{ try
{ Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:comp/env");
ds = (DataSource) envContext.lookup("jdbc/mysql");// 這里根據(jù)配置更改 }
catch (Exception e)
{ System.err.println(e.getMessage()); }
}
}
4.2 數(shù)據(jù)庫(kù)中數(shù)據(jù)的四大基本操作是最平常的,系統(tǒng)里通過(guò)一定的集成,將數(shù)據(jù)庫(kù)的基本融合到一個(gè)函數(shù)里,其它地方需要時(shí)只需簡(jiǎn)單的調(diào)用
public boolean update() throws java.io.UnsupportedEncodingException
{ try {
if (query_statement.equals("")) return false;
if(IsConnClosed()) this.getConnection();
if (null == this.con) {
throw new NullPointerException("未獲得數(shù)據(jù)連接");
}
PreparedStatement update_stm = con.prepareStatement(query_statement);
if (param != null) {
for (int i = 0; i < param.length; i++) {
update_stm.setString(i + 1, param[i]); }
}
int rowsaffected = update_stm.executeUpdate();
update_stm.close();
this.param = null;
return true;
} catch (SQLException ex) {
System.out.println(ex.getMessage());
return false;
} catch (NamingException ex) {
System.out.println(ex.getMessage());
return false;
} finally {// 這里可以關(guān)閉,不會(huì)有錯(cuò)!
this.param = null;
try { this.con.close();
} catch (SQLException ex) {
System.out.println("數(shù)據(jù)連接關(guān)閉失敗");
}
}
}
5 結(jié)束語(yǔ)
基于校園一卡通的報(bào)亭銷售管理系統(tǒng)是根據(jù)軟件開(kāi)發(fā)的流程來(lái)設(shè)計(jì)和實(shí)現(xiàn)的,通過(guò)系統(tǒng)需求分析、系統(tǒng)設(shè)計(jì)來(lái)分析劃分系統(tǒng)功能,并且以此為基礎(chǔ)內(nèi)容來(lái)設(shè)計(jì)并實(shí)現(xiàn)數(shù)據(jù)庫(kù)。系統(tǒng)的投入使用,更加方便地實(shí)現(xiàn)同學(xué)們及時(shí)了解某個(gè)校園報(bào)亭的書(shū)籍、雜志、報(bào)紙、飲料等商品情況的需求,通過(guò)該系統(tǒng)可以在線下單并使用校園一卡通在線支付或者到報(bào)亭刷卡支付,提高了校園報(bào)亭的勤工助學(xué)同學(xué)的工作效率,同時(shí)對(duì)校園報(bào)亭的銷售額的提升也做出了一定的貢獻(xiàn)。