1.9 查詢統(tǒng)計模塊設計
查詢統(tǒng)計模塊是進銷存管理系統(tǒng)中不可或缺的重要組成部分之一,主要提供了基礎信息、進貨信息、銷售信息、退貨信息的查詢和銷售排行功能。
1.9.1 查詢統(tǒng)計模塊概述
企業(yè)進銷存管理系統(tǒng)中的查詢統(tǒng)計模塊包括客戶查詢、商品查詢、供應商查詢、銷售查詢、銷售退貨查詢、入庫查詢、入庫退貨查詢和銷售排行功能。由于本書的篇幅所限,本節(jié)將以銷售查詢功能為主,介紹查詢統(tǒng)計模塊對本系統(tǒng)的意義和實現(xiàn)的業(yè)務邏輯。
銷售查詢功能主要用于查詢系統(tǒng)中的銷售信息,其查詢方式可以按照客戶全稱、銷售票號進行匹配查詢和模糊查詢。另外,還可以指定銷售日期查詢。程序界面如圖1.29所示。
1.9.2 查詢統(tǒng)計模塊技術分析
查詢統(tǒng)計模塊必須為用戶提供豐富的查詢功能,當查詢某一商品的銷售或者退貨等信息時,需要提供按客戶全稱、銷售票號、退貨票號、指定日期等多種查詢條件和查詢對象,進行普通查詢或者模糊查詢。對于普通查詢條件可以簡單地使用SQL語句的“=”進行判斷,但是模糊查詢稍微復雜一些,需要使用SQL語句中的LIKE關鍵字。LIKE關鍵字需要使用通配符在字符串內查找指定的模式,所以讀者需要了解通配符及其含義。通配符的含義如表1.9所示。
? “%”通配符
“%”通配符能匹配零個或更多個字符的任意長度的字符串。
? “_”通配符
“_”號表示任意單個字符,該符號只能匹配一個字符。利用“_”號可以作為通配符組成匹配模式進行查詢。
? “[ ]”通配符
在模糊查詢中可以使用“[ ]”符號來查詢一定范圍內的數(shù)據(jù)?!癧 ]”符號用于表示一定范圍內的任意單個字符,它包括兩端數(shù)據(jù)。
? “[^ ]”通配符
在模式查詢中可以使用“[^ ]”符號來查詢不在指定范圍內的數(shù)據(jù)?!癧^ ]”符號用于表示不在某一范圍內的任意單個字符,它包括兩端數(shù)據(jù)。
1.9.3 銷售查詢實現(xiàn)過程
銷售查詢使用的數(shù)據(jù)表:v_sellView。
(1)創(chuàng)建XiaoShouChaXun類,用于實現(xiàn)本系統(tǒng)的銷售查詢功能界面和業(yè)務邏輯。界面中定義的主要控件如表1.10所示。
(2)編寫updateTable()方法,用于更新表格數(shù)據(jù)。該方法必須接收一個Iterator迭代器對象,通過遍歷該迭代器中的數(shù)據(jù)來初始化界面中的表格。關鍵代碼如下:
例程25 代碼位置:光盤\TM\01\JXCManager\src\internalFrame\XiaoShouChaXun.java
private void updateTable(Iterator iterator) { //更新表格數(shù)據(jù)
int rowCount=dftm.getRowCount();
for(int i=0;i<rowCount;i++) { //清除原內容
dftm.removeRow(0);
}
while(iterator.hasNext()) { //更新表格數(shù)據(jù)
Vector vector=new Vector();
List view=(List) iterator.next();
vector.addAll(view);
dftm.addRow(vector);
}
}
(3)創(chuàng)建ShowAllActoinListener類,使該類實現(xiàn)ActionListener接口,并實現(xiàn)該接口的actionPerformed()方法。該方法在用戶單擊“顯示全部數(shù)據(jù)”按鈕時,執(zhí)行無條件的數(shù)據(jù)查詢,也就是說,該按鈕將讀取數(shù)據(jù)庫中所有的銷售信息,并顯示到表格中。關鍵代碼如下:
例程26 代碼位置:光盤\TM\01\JXCManager\src\internalFrame\XiaoShouChaXun.java
class ShowAllActoinListener implements ActionListener { //“顯示全部數(shù)據(jù)”按鈕的動作監(jiān)聽器
public void actionPerformed(final ActionEvent e) {
content.setText("");
List list=Dao.findForList("select * from v_sellView"); //調用findForList()方法執(zhí)行查詢
Iterator iterator=list.iterator();
updateTable(iterator); //調用updateTable()方法更新表格
}
}
(4)創(chuàng)建“查詢”按鈕的事件監(jiān)聽器QueryActionListener類,該類必須實現(xiàn)ActionListener接口,并實現(xiàn)該接口的actionPerformed()方法。在該方法中編寫查詢銷售信息的業(yè)務邏輯,并將查詢結果更新到表格控件中,其查詢條件由condition、operation下拉列表框和一個content文本框組成。關鍵代碼 如下:
例程27 代碼位置:光盤\TM\01\JXCManager\src\internalFrame\XiaoShouChaXun.java
class QueryActionListener implements ActionListener {
public void actionPerformed(final ActionEvent e) {
boolean selDate = selectDate.isSelected();
if(content.getText().equals("")) {
JOptionPane.showMessageDialog(getContentPane(), "請輸入查詢內容!");
return;
}
if(selDate) {
if(startDate.getText()==null||startDate.getText().equals("")) {
JOptionPane.showMessageDialog(getContentPane(), "請輸入查詢的開始日期!");
return;
}
if(endDate.getText()==null||endDate.getText().equals("")) {
JOptionPane.showMessageDialog(getContentPane(), "請輸入查詢的結束日期!");
return;
}
}
List list=null;
String con = condition.getSelectedIndex() == 0 //獲取查詢字段
? "khname "
: "sellId ";
int oper = operation.getSelectedIndex(); //定義查詢方式
String opstr = oper == 0 ? "= " : "like ";
String cont = content.getText(); //獲取查詢內容
list = Dao.findForList("select * from v_sellView where " //調用findForList()方法查詢數(shù)據(jù)
+ con
+ opstr
+ (oper == 0 ? "'"+cont+"'" : "'%" + cont + "%'")
+ (selDate ? " and xsdate>'" + startDate.getText()
+ "' and xsdate<='" + endDate.getText()+" 23:59:59'" : ""));
Iterator iterator = list.iterator();
updateTable(iterator); //調用updateTable()方法更新表格
}
}