1.9 查询统计模块设计
查询统计模块是进销存管理系统中不可或缺的重要组成部分之一,主要提供了基础信息、进货信息、销售信息、退货信息的查询和销售排行功能。
1.9.1 查询统计模块概述
企业进销存管理系统中的查询统计模块包括客户查询、商品查询、供应商查询、销售查询、销售退货查询、入库查询、入库退货查询和销售排行功能。由于本书的篇幅所限,本节将以销售查询功能为主,介绍查询统计模块对本系统的意义和实现的业务逻辑。
销售查询功能主要用于查询系统中的销售信息,其查询方式可以按照客户全称、销售票号进行匹配查询和模糊查询。另外,还可以指定销售日期查询。程序界面如图1.29所示。
1.9.2 查询统计模块技术分析
查询统计模块必须为用户提供丰富的查询功能,当查询某一商品的销售或者退货等信息时,需要提供按客户全称、销售票号、退货票号、指定日期等多种查询条件和查询对象,进行普通查询或者模糊查询。对于普通查询条件可以简单地使用SQL语句的“=”进行判断,但是模糊查询稍微复杂一些,需要使用SQL语句中的LIKE关键字。LIKE关键字需要使用通配符在字符串内查找指定的模式,所以读者需要了解通配符及其含义。通配符的含义如表1.9所示。
? “%”通配符
“%”通配符能匹配零个或更多个字符的任意长度的字符串。
? “_”通配符
“_”号表示任意单个字符,该符号只能匹配一个字符。利用“_”号可以作为通配符组成匹配模式进行查询。
? “[ ]”通配符
在模糊查询中可以使用“[ ]”符号来查询一定范围内的数据。“[ ]”符号用于表示一定范围内的任意单个字符,它包括两端数据。
? “[^ ]”通配符
在模式查询中可以使用“[^ ]”符号来查询不在指定范围内的数据。“[^ ]”符号用于表示不在某一范围内的任意单个字符,它包括两端数据。
1.9.3 销售查询实现过程
销售查询使用的数据表:v_sellView。
(1)创建XiaoShouChaXun类,用于实现本系统的销售查询功能界面和业务逻辑。界面中定义的主要控件如表1.10所示。
(2)编写updateTable()方法,用于更新表格数据。该方法必须接收一个Iterator迭代器对象,通过遍历该迭代器中的数据来初始化界面中的表格。关键代码如下:
例程25 代码位置:光盘\TM\01\JXCManager\src\internalFrame\XiaoShouChaXun.java
private void updateTable(Iterator iterator) { //更新表格数据
int rowCount=dftm.getRowCount();
for(int i=0;i<rowCount;i++) { //清除原内容
dftm.removeRow(0);
}
while(iterator.hasNext()) { //更新表格数据
Vector vector=new Vector();
List view=(List) iterator.next();
vector.addAll(view);
dftm.addRow(vector);
}
}
(3)创建ShowAllActoinListener类,使该类实现ActionListener接口,并实现该接口的actionPerformed()方法。该方法在用户单击“显示全部数据”按钮时,执行无条件的数据查询,也就是说,该按钮将读取数据库中所有的销售信息,并显示到表格中。关键代码如下:
例程26 代码位置:光盘\TM\01\JXCManager\src\internalFrame\XiaoShouChaXun.java
class ShowAllActoinListener implements ActionListener { //“显示全部数据”按钮的动作监听器
public void actionPerformed(final ActionEvent e) {
content.setText("");
List list=Dao.findForList("select * from v_sellView"); //调用findForList()方法执行查询
Iterator iterator=list.iterator();
updateTable(iterator); //调用updateTable()方法更新表格
}
}
(4)创建“查询”按钮的事件监听器QueryActionListener类,该类必须实现ActionListener接口,并实现该接口的actionPerformed()方法。在该方法中编写查询销售信息的业务逻辑,并将查询结果更新到表格控件中,其查询条件由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()方法查询数据
+ 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()方法更新表格
}
}