Java项目开发全程实录(第3版)例程15代码位置:光盘\TM\o1UXCManagerlsrclinternalFramelguanliVItem.javapublicclassItem(I/定义ID属性public String id;public String name;I定义名称属性public String getldofI定义暴露ID属性的方法return id;3public void setld(String id) this.id = id;1public String getName()I/定义暴露名称属性的方法return name;public void setName(String name)this.name=name;public StringtoString()I/定义该类的字符串表现形式returngetName();基础信息模块设计1.7基础信息模块用于管理企业进销存管理系统中的客户、商品和供应商信息,其功能主要是对这些基础信息进行添加、修改和删除。1.7.1基础信息模块概述企业进销存管理系统中的基础信息模块主要包括客户管理、商品管理和供应商管理3部分,由于它们的实现方法基本相似,本节将以供应商管理部分为主,介绍基础信息模块对本系统的意义和实现的业务逻辑。1.供应商添加供应商添加功能主要负责为系统添加新的供应商记录。在企业进销存管理系统中,商品是主要的管理对象,而系统中所有的商品都由不同的供应商提供,这就需要把不同的供应商信息添加到系统中,在商品信息中会关联系统中对应的供应商信息。供应商添加功能的程序界面如图1.21所示。2.供应商修改与删除供应商的修改与删除功能主要用于维护系统中的供应商信息。在供应商的联系方式发生改变时,必须更新系统中的记录,以提供供应商的最新信息。另外,当不再与某家供应商合作时,需要从系统中删除供应商的记录信息。程序运行界面如图1.22所示。24
Java 项目开发全程实录(第 3 版) 24 例程 15 代码位置:光盘\TM\01\JXCManager\src\internalFrame\guanli\Item.java public class Item { public String id; //定义 ID 属性 public String name; //定义名称属性 public String getId() { //定义暴露 ID 属性的方法 return id; } public void setId(String id) { this.id = id; } public String getName() { //定义暴露名称属性的方法 return name; } public void setName(String name) { this.name = name; } public String toString() { //定义该类的字符串表现形式 return getName(); } } 1.7 基础信息模块设计 基础信息模块用于管理企业进销存管理系统中的客户、商品和供应商信息,其功能主要是对这些 基础信息进行添加、修改和删除。 1.7.1 基础信息模块概述 企业进销存管理系统中的基础信息模块主要包括客户管理、商品管理和供应商管理 3 部分,由于 它们的实现方法基本相似,本节将以供应商管理部分为主,介绍基础信息模块对本系统的意义和实现 的业务逻辑。 1.供应商添加 供应商添加功能主要负责为系统添加新的供应商记录。在企业进销存管理系统中,商品是主要的 管理对象,而系统中所有的商品都由不同的供应商提供,这就需要把不同的供应商信息添加到系统中, 在商品信息中会关联系统中对应的供应商信息。供应商添加功能的程序界面如图 1.21 所示。 2.供应商修改与删除 供应商的修改与删除功能主要用于维护系统中的供应商信息。在供应商的联系方式发生改变时, 必须更新系统中的记录,以提供供应商的最新信息。另外,当不再与某家供应商合作时,需要从系统 中删除供应商的记录信息。程序运行界面如图 1.22 所示
第1章进销存管理系统(Swing+SQLServer2000实现)白食国企业进销存管理系线口口企业进销存营理系线D区基其息营理基动慎息管理进资营理销售营理查调计库存营理系统营理进质管理消售营理库存管理范营理查计名户信息营证品息营理国世店信惠营位营户值泉合证定管社供息管理供症商管理国供座商管理国区区实应尚值意承加供皮降体息修改与禁制供应通息活加供设商信总养改年果除供应商全临:邢·举行供座商全编:前称:琴行政编号:1300商转:解欢编品:执址:吉林省长春市地址:电话:优真:5218604316930电话:代真:联系人:B联系人电话:130868联系人:联系人电话:开户能行:中国人民银行电子信箱:开户银行:sha-esinac0e电子信箱活加蛋镇法择供座商新琴行M婚改做味请取超发开即系开nh票图1.21供应商添加界面图1.22供应商修改与删除功能界面1.7.2基础信息模块技术分析基础信息模块中使用了JavaSwing的JTabbedPane选项卡面板组件分别为客户信息管理、商品信息管理和供应商信息管理提供多个操作界面,例如供应商信息管理中分别存在供应商添加和供应商修改与删除界面,而这两个界面都存在于一个窗体中,可以通过选择顶部的两个选项卡,在不同的界面之间来回切换。1.7.3供应商添加的实现过程供应商添加使用的数据表:tb_gysinfo开发供应商添加的步骤如下:(1)创建GysTianJiaPanel类,用于实现本系统的供应商添加功能。该类将在界面中显示多个用于输入供应商信息的文本框。界面中定义的主要控件如表1.6所示。表1.6供应商添加界面中的主要控件控件类型控件名称主要属性设置用途无供应商全称quanChengF无简称JianChengF无邮政编码BianMaF无地址DiZhiF无电话DianHuaFJtextField无传真ChuanZhenF无联系人LianXiRenF无联系人电话lianXiRenDianHuaF无开户银行YinHangF无电子信箱EmailF设置按钮文本为“添加”,设置动作监听器为TjActionListener添加TjButton类的实例对象Jbutton设置按钮文本为“重填”,设置动作监听器为ResetActionListener重填ResetButton类的实例对象25
第 1 章 进销存管理系统(Swing+SQL Server 2000 实现) 25 图 1.21 供应商添加界面 图 1.22 供应商修改与删除功能界面 1.7.2 基础信息模块技术分析 基础信息模块中使用了 Java Swing 的 JTabbedPane 选项卡面板组件分别为客户信息管理、商品信 息管理和供应商信息管理提供多个操作界面,例如供应商信息管理中分别存在供应商添加和供应商修 改与删除界面,而这两个界面都存在于一个窗体中,可以通过选择顶部的两个选项卡,在不同的界面 之间来回切换。 1.7.3 供应商添加的实现过程 供应商添加使用的数据表:tb_gysinfo 开发供应商添加的步骤如下: (1)创建 GysTianJiaPanel 类,用于实现本系统的供应商添加功能。该类将在界面中显示多个用 于输入供应商信息的文本框。界面中定义的主要控件如表 1.6 所示。 表 1.6 供应商添加界面中的主要控件 控 件 类 型 控 件 名 称 主要属性设置 用 途 quanChengF 无 供应商全称 JianChengF 无 简称 BianMaF 无 邮政编码 DiZhiF 无 地址 DianHuaF 无 电话 ChuanZhenF 无 传真 LianXiRenF 无 联系人 lianXiRenDianHuaF 无 联系人电话 YinHangF 无 开户银行 JtextField EmailF 无 电子信箱 TjButton 设置按钮文本为“添加”,设置动作监听器为 TjActionListener 类的实例对象 添加 Jbutton ResetButton 设置按钮文本为“重填”,设置动作监听器为 ResetActionListener 类的实例对象 重填
Java项目开发全程实录(第3版)(2)创建ResetActionListener类,该类是“重填”按钮的事件监听器,它必须实现ActionListener接口,并在actionPerformedO方法中清除界面中的所有文本框内容。关键代码如下:例程16代码位置:光盘\TMoIVXCManagerlsrclinternalFramelgysGuanLilGysTianJiaPanel.java0classResetActionListenerimplementsActionListenerI“重填”按钮的事件监听类?public voidactionPerformed(?finalActionEvente)(diZhiF.setText("");I将文本框中的内容设置为空字符串bianMaF.setText("");chuanZhenF.setText("");jianChengF.setText("");lianXiRenF.setText("")lianXiRenDianHuaF.setText(");EMailF.setText("");quanChengF.setText(");dianHuaF.setText(");yinHangF.setText("");代码贴士OActionListener:该接口是控件的动作监听器接口,实现该接口的类可以成为按钮和莱单项等控件的监听器。②actionPerformedO:该方法是监听器ActionListener接口定义的方法,当事件产生时,将调用监听器实现类的actionPerformedO方法处理相应的业务逻辑。③ActionEvent:该类是动作事件类,当用户单击按钮时,将产生该事件,这个事件会被监听器捕获并执行相应的业务逻辑。(3)创建TjActionListener类,该类是“添加”按钮的事件监听器,它必须实现ActionListener接口,并在actionPerformedO方法中实现用户输入的验证和供应商信息的保存。关键代码如下:例程17代码位置:光盘\TMo1VXCManagerlsrclinternalFramelgysGuanLilGysTianJiaPanel.javaclassTjActionListenerimplementsActionListener(Ⅱ“添加”按钮的事件监听类publicvoidactionPerformed(final ActionEvente)(//验证用户输入if (diZhiF.getText().equals("")IlquanChengF.getText().equals("")IlchuanZhenF.getText().equals("")ljianChengF.getText().equals(")Il yinHangF.getText().equals(")ll bianMaF.getText().equals(")ldiZhiF.getText().equals("")l/lianXiRenF.getText().equals("")llianXiRenDianHuaF.getText().equals(")lEMailF.getText().equals(")lldianHuaF.getText().equals(")(JOptionPane.showMessageDialog(GysTianJiaPanel.this,请填写全部信息")return;1try (I/验证是否存在同名供应商ResultSethaveUser=Dao.query("select*fromtb_gysinfowherename="+ quanChengF.getText().trim() + "");if(haveUser.next()(26
Java 项目开发全程实录(第 3 版) 26 (2)创建 ResetActionListener 类,该类是“重填”按钮的事件监听器,它必须实现 ActionListener 接口,并在 actionPerformed()方法中清除界面中的所有文本框内容。关键代码如下: 例程 16 代码位置:光盘\TM\01\JXCManager\src\internalFrame\gysGuanLi\GysTianJiaPanel.java class ResetActionListener implements ActionListener { //“重填”按钮的事件监听类 public void actionPerformed( final ActionEvent e) { diZhiF.setText(""); //将文本框中的内容设置为空字符串 bianMaF.setText(""); chuanZhenF.setText(""); jianChengF.setText(""); lianXiRenF.setText(""); lianXiRenDianHuaF.setText(""); EMailF.setText(""); quanChengF.setText(""); dianHuaF.setText(""); yinHangF.setText(""); } } 代码贴士 ActionListener:该接口是控件的动作监听器接口,实现该接口的类可以成为按钮和菜单项等控件的监听器。 actionPerformed():该方法是监听器 ActionListener 接口定义的方法,当事件产生时,将调用监听器实现类的 actionPerformed()方法处理相应的业务逻辑。 ActionEvent:该类是动作事件类,当用户单击按钮时,将产生该事件,这个事件会被监听器捕获并执行相应的 业务逻辑。 (3)创建 TjActionListener 类,该类是“添加”按钮的事件监听器,它必须实现 ActionListener 接 口,并在 actionPerformed()方法中实现用户输入的验证和供应商信息的保存。关键代码如下: 例程 17 代码位置:光盘\TM\01\JXCManager\src\internalFrame\gysGuanLi\GysTianJiaPanel.java class TjActionListener implements ActionListener { //“添加”按钮的事件监听类 public void actionPerformed(final ActionEvent e) { if (diZhiF.getText().equals("") || quanChengF.getText().equals("") //验证用户输入 || chuanZhenF.getText().equals("")|| jianChengF.getText().equals("") || yinHangF.getText().equals("")|| bianMaF.getText().equals("") || diZhiF.getText().equals("")|| lianXiRenF.getText().equals("") || lianXiRenDianHuaF.getText().equals("") || EMailF.getText().equals("")|| dianHuaF.getText().equals("")) { JOptionPane.showMessageDialog(GysTianJiaPanel.this, "请填写全部信息"); return; } try { //验证是否存在同名供应商 ResultSet haveUser = Dao.query("select * from tb_gysinfo where name='" + quanChengF.getText().trim() + "'"); if (haveUser.next()) {
第1章进销存管理系统(Swing+SQLServer2000实现)肉JOptionPane.showMessageDialog(GysTianJiaPanel.this,“供应商信息添加失败,存在同名供应商”,“供应商添加信息”JOptionPane.INFORMATION_MESSAGE):return;1.ResultSetset=Dao.query"selectmax(id)fromtb_gysinfo");I/获取供应商的最大ID编号String id =null;if (set I= null && set.next() //创建新的供应商编号String sid = set.getString(1).trim(0):if (sid == null)id="gys1001";else (String str = sid.substring(3);id ="gys" + (Integer.parselnt(str) + 1):11TbGysinfo gyslnfo =new TbGysinfo();//创建供应商实体对象gyslnfo.setld(id)://初始化供应商对象gyslnfo.setAddress(diZhiF.getText().trim():gyslnfo.setBianma(bianMaF.getText().trim():gyslnfo.setFax(chuanZhenF.getText().trimO);gyslnfo.setYh(yinHangF.getText(0.trim();gyslnfo.setJc(jianChengF.getText().trim();gyslnfo.setName(quanChengF.getText().trim();gyslnfo.setLian(lianXiRenF.getText().trim();gyslnfo.setLtel(lianXiRenDianHuaF.getText().trimO);gyslnfo.setMail(EMailF.getText().trim():gyslnfo.setTel(dianHuaF.getText().trim();//调用addGys()方法存储供应商Dao.addGys(gyslnfo):JOptionPane.showMessageDialog(GysTianJiaPanel.this,"已成功添加客户""客户添加信息",JOptionPane.INFORMATIONMESSAGE):resetButton.doClick();//触发“重填”按钮的单击动作)catch(SQLExceptione1)(e1.printStackTrace():11.7.4供应商修改与删除的实现过程供应商修改与删除使用的数据表:tb_gysinfo开发供应商修改与删除的步骤如下:(1)创建GysXiuGaiPanel类,用于实现本系统的供应商修改功能。在程序界面中有多个用于输入供应商信息的文本框,这些文本框的内容会根据所选供应商自动填充内容,修改部分或全部内容后,单击“修改”按钮将修改供应商数据。界面中定义的主要控件如表1.7所示
第 1 章 进销存管理系统(Swing+SQL Server 2000 实现) 27 JOptionPane.showMessageDialog(GysTianJiaPanel.this, "供应商信息添加失败,存在同名供应商", "供应商添加信息", JOptionPane.INFORMATION_MESSAGE); return; } ResultSet set = Dao.query("select max(id) from tb_gysinfo"); //获取供应商的最大 ID 编号 String id = null; if (set != null && set.next()) { //创建新的供应商编号 String sid = set.getString(1).trim(); if (sid == null) id = "gys1001"; else { String str = sid.substring(3); id = "gys" + (Integer.parseInt(str) + 1); } } TbGysinfo gysInfo = new TbGysinfo(); //创建供应商实体对象 gysInfo.setId(id); //初始化供应商对象 gysInfo.setAddress(diZhiF.getText().trim()); gysInfo.setBianma(bianMaF.getText().trim()); gysInfo.setFax(chuanZhenF.getText().trim()); gysInfo.setYh(yinHangF.getText().trim()); gysInfo.setJc(jianChengF.getText().trim()); gysInfo.setName(quanChengF.getText().trim()); gysInfo.setLian(lianXiRenF.getText().trim()); gysInfo.setLtel(lianXiRenDianHuaF.getText().trim()); gysInfo.setMail(EMailF.getText().trim()); gysInfo.setTel(dianHuaF.getText().trim()); Dao.addGys(gysInfo); //调用 addGys()方法存储供应商 JOptionPane.showMessageDialog(GysTianJiaPanel.this, "已成功添加客户", "客户添加信息", JOptionPane.INFORMATION_MESSAGE); resetButton.doClick(); //触发“重填”按钮的单击动作 } catch (SQLException e1) { e1.printStackTrace(); } } } 1.7.4 供应商修改与删除的实现过程 供应商修改与删除使用的数据表:tb_gysinfo 开发供应商修改与删除的步骤如下: (1)创建 GysXiuGaiPanel 类,用于实现本系统的供应商修改功能。在程序界面中有多个用于输 入供应商信息的文本框,这些文本框的内容会根据所选供应商自动填充内容,修改部分或全部内容后, 单击“修改”按钮将修改供应商数据。界面中定义的主要控件如表 1.7 所示
Java项目开发全程实录(第3版)表1.7供应商修改与删除界面中的主要控件控件类型控件名称用途主要属性设置无供应商全称quanChengF无简称jianChengF无邮政编码bianMaF无地址diZhiF无电话dianHuaFJtextField无传真chuanZhenF无联系人lianXiRenF无联系人电话lianXiRenDianHuaF无开户银行yinHangF无EMailF电子信箱设置初始大小为(230,21),调用initComboBox0方法初始化下拉列表,设置组件的选择事件调用选择供应商GysJcomboBoxdoGysSelectActionO方法设置按钮文本为“修改”,设置动作监听器为修改供应商信息tjButtonModifyActionListener类的实例对象Jbutton设置按钮文本为“删除”,设置动作监听器为删除供应商信息resetButtonDelActionListener类的实例对象(2)编写initComboBoxO方法,用于初始化选择供应商的下拉列表框。该方法调用Dao类的getGysInfosO方法获取数据库中所有的供应商信息,然后将供应商的ID编号和供应商名称封装成Item对象并添加到选择供应商的下拉列表框中,在下拉列表框中Item的toStringO方法将显示供应商的名称。initComboBoxO方法的关键代码如下:例程18代码位置:光盘\TM\O1VXCManagerlsrclinternalFramelgysGuanLiGysXiuGaiPanel.javapublic void initComboBox()/初始化供应商下拉列表框的方法//调用getGyslnfos()方法获取供应商列表Listgyslnfo=Dao.getGyslnfos()List<ltem>items=newArrayList<ltem>():l/创建Item列表gys.removeAllltems():I清除下拉列表框中原有的选项for (lteratoriter=gyslnfo.iterator(); iter.hasNext();)(List element =(List) iter.next():Itemitem=newItem():1/封装供应商信息item.setld(element.get(0).toString().trim();item.setName(element.get(1).toString().trimO);l/如果Item列表中包含该供应商的封装对象if (items.contains(item))continue;I/跳出本次循环items.add(item);:gys.addltem(item);I/否则添加该对象到下拉列表框中doGysSelectAction():l/doGysSelectAction()方法(3)编写doGysSelectActionO方法,它在更改下拉列表框中的供应商信息时被调用,主要用于根据选择的供应商名称,把供应商的其他信息填充到相应的文本框中。关键代码如下:28
Java 项目开发全程实录(第 3 版) 28 表 1.7 供应商修改与删除界面中的主要控件 控 件 类 型 控 件 名 称 主要属性设置 用 途 quanChengF 无 供应商全称 jianChengF 无 简称 bianMaF 无 邮政编码 diZhiF 无 地址 dianHuaF 无 电话 chuanZhenF 无 传真 lianXiRenF 无 联系人 lianXiRenDianHuaF 无 联系人电话 yinHangF 无 开户银行 JtextField EMailF 无 电子信箱 JcomboBox Gys 设置初始大小为(230, 21),调用 initComboBox() 方法初始化下拉列表,设置组件的选择事件调用 doGysSelectAction()方法 选择供应商 tjButton 设置按钮文本为“修改”,设置动作监听器为 ModifyActionListener 类的实例对象 修改供应商信息 Jbutton resetButton 设置按钮文本为“删除”,设置动作监听器为 DelActionListener 类的实例对象 删除供应商信息 (2)编写 initComboBox()方法,用于初始化选择供应商的下拉列表框。该方法调用 Dao 类的 getGysInfos()方法获取数据库中所有的供应商信息,然后将供应商的 ID 编号和供应商名称封装成 Item 对象并添加到选择供应商的下拉列表框中,在下拉列表框中 Item 的 toString()方法将显示供应商的名称。 initComboBox()方法的关键代码如下: 例程 18 代码位置:光盘\TM\01\JXCManager\src\internalFrame\gysGuanLi\GysXiuGaiPanel.java public void initComboBox() { //初始化供应商下拉列表框的方法 List gysInfo = Dao.getGysInfos(); //调用 getGysInfos()方法获取供应商列表 List<Item> items = new ArrayList<Item>(); //创建 Item 列表 gys.removeAllItems(); //清除下拉列表框中原有的选项 for (Iterator iter = gysInfo.iterator(); iter.hasNext();) { List element = (List) iter.next(); Item item = new Item(); //封装供应商信息 item.setId(element.get(0).toString().trim()); item.setName(element.get(1).toString().trim()); if (items.contains(item)) //如果 Item 列表中包含该供应商的封装对象 continue; //跳出本次循环 items.add(item); gys.addItem(item); //否则添加该对象到下拉列表框中 } doGysSelectAction(); //doGysSelectAction() 方法 } (3)编写 doGysSelectAction()方法,它在更改下拉列表框中的供应商信息时被调用,主要用于根 据选择的供应商名称,把供应商的其他信息填充到相应的文本框中。关键代码如下: