重庆邮电大学理学院信息与计算科学专业
集中实践报告
题 目:《高校固定资产管理系统 》
指导老师: 李永红________________ 专 业: 数理科学与信息技术_____
班 级: 1121302、1121301______
学 号: 2013213055、2013213058_
姓 名: 何锐、周海渝___________
成 绩:________________________
20 16 年 06 月 16 日
一、 需求分析
随着社会的发展,人们的生活节奏不断加快。为了节约宝贵的时间,高校固
定资产管理系统应运而生。在管理固定资产的过程中,需要修改、更新大量
的表单。如果使用计算机来辅助填写及保存相应的记录,则能大大提高固定
资产管理的效率。因此,需要开发一个固定资产管理系统。该系统应该支持
快速录入关键信息,例如,固定资产的借出、归还等。这些信息需要被保存在
数据库中以便以后查看。
通过对程序需要实现的功能进行分析,完成数据库和程序界面的设计。通过
对高校固定资产管理系统的了解,要求其具备如下功能。
1. 登录系统
登录系统可以有效地保障系统的安全性,防止非法用户使用系统。只有输入
合法的用户名和密码才能够正常登录,否则不能进行登录。
2. 添加信息
用户进入系统后,通过对“资产信息管理”菜单中的“类别管理”菜单项,
可以进行大类(总的分类)的添加。
同样,在其他几个菜单中也可进行信息添加。
3. 删除信息
用户进入系统后,通过对“账户管理”菜单中的“删除帐户”菜单项,可以
进行帐户的删除。
同样,在其他几个菜单中也可进行信息删除。
4. 修改信息
考虑到操作人员录入的失误,需要提供信息的修改功能。通过“职员管理”
菜单中的“修改职员”菜单项,可以对职员信息进行修改。
同样,在其他几个菜单中也可进行信息修改。
5. 查询信息
用户进入系统后,可以通过“按编号查”、“按类别查”、“按使用者查”
的不同类别进行信息查询。
6. 添加用户
进入系统后,可以通过“账户管理”菜单的“添加用户”菜单项添加新的用
户,并为其指定密码。一旦新用户添加成功,以后就可以通过该用户进入系
统进行操作。
7. 修改密码
为了提高系统的安全性,通常建议管理员定期修改密码。使用“账户管理”
菜单的“修改密码”菜单项可以进行密码的修改。
二、 总体设计
1. 通过对系统进行深入的分析得知,本系统需要实现以下目标。
⑴系统管理
⑵资产信息管理
⑶账户管理
⑷职员管理
⑸资产还借管理
⑹帮助
⑺查询
按编号查询:
按类别查询:
按使用者查询:
⑻资产信息分类显示
⑼显示当前时间
2. 构建开发环境
⑴操作系统:windows7
⑵JDK版本:jdk1.8.0_31
⑶IDE版本:Eclipse
⑷开发语言:Java
⑸后台数据库:SQL Server 2008
三、 控制类设计(部分类代码)
在cn.tsc.asset.contrl包中
1. ConnectionManager控制类
作用:数据库连接
代码:
package cn.tsc.asset.contrl;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;
/**
* 控制类--数据库连接管理
*
*/
/**
* @author pengwenfu
*
*/
public final class ConnectionManager {
// 驱动类
= private static final String DRIVER_CLASS
"com.microsoft.jdbc.sqlserver.SQLServerDriver";
// 数据库地址
private static final String DATABASE_URL = "jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName = Assets";
// 数据库登录名 private static final String USER_NAME = "sa"; // 密码 private static final String PASSWORD = "1234";
* 构造方法 禁止实例化 */ private ConnectionManager() { } /** * 取得数据库连接 * * @return */ public static Connection getConnection() { try { Class.forName(DRIVER_CLASS);
con = Connection
DriverManager.getConnection(DATABASE_URL,
USER_NAME, PASSWORD); return con; } catch (ClassNotFoundException e) { e.printStackTrace();
JOptionPane.showMessageDialog(null, "没有找到连接数据库所需的驱动类!", "错误",
JOptionPane.ERROR_MESSAGE); return null;
e.printStackTrace();
JOptionPane.showMessageDialog(null, "数据库连接错误!请核实配置文件是否有误!", "错误",
JOptionPane.ERROR_MESSAGE);
return null;
}
}
/**
* 关闭数据库连接
*
* @param conn
*/
public static void closeConnection(Connection con) {
try {
if (con != null && !con.isClosed()) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 关闭数据库操作对象
*
* @param cst
*/
public static void closeStatement(CallableStatement cst) { try {
if (cst != null) {
cst.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 关闭记录集
*
* @param rs
*/
public static void closeResultSet(ResultSet rs) { try {
} } if (rs != null) { } rs.close(); rs = null; } catch (SQLException e) { } e.printStackTrace();
2.DBWorker控制类
作用:数据库操作
代码:
package cn.tsc.asset.contrl;
import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection;
import cn.tsc.asset.entity.Asset; import cn.tsc.asset.entity.Category; import cn.tsc.asset.entity.Employee; import cn.tsc.asset.entity.Lent; import cn.tsc.asset.entity.Operator; import cn.tsc.asset.entity.Returned;
import cn.tsc.asset.entity.Subcate;
/**
* 控制类--数据库操作
*
*/
/**
* @author pengwenfu
*
*/
public class DBWorker {
/** * 查找管理员信息 * * @param name * 名称 * @param pwd * 密码 * @return */ public static Collection selOperator(String name, String pwd, OperatorSelType inNamePwd) { // 连接数据库 Connection con = ConnectionManager.getConnection(); CallableStatement cst = null; ResultSet rs = null; // 建一个操作员列表 Collection opc = new ArrayList();
} try { String proc = "{call proc_selOperator '" + name + "','" + pwd + "','" + inNamePwd + "'}"; // 取得操作员表数据 cst = con.prepareCall(proc); rs = cst.executeQuery(); while (rs.next()) { } Operator op = new Operator(); op.setName(rs.getString("Oname")); op.setPwd(rs.getString("Opwd")); opc.add(op); } catch (SQLException ex) { ex.printStackTrace(); } finally { } return opc; ConnectionManager.closeResultSet(rs); ConnectionManager.closeStatement(cst); ConnectionManager.closeConnection(con); /** * 查找职员信息 * * @param param * 姓名或职务 * @param selType * 查找类型
*/ public static Collection selEmp(String param, EmployeeSelType selType) { // 连接数据库 Connection con = ConnectionManager.getConnection(); CallableStatement cst = null; ResultSet rs = null; // 建一个职员列表 Collection empc = new ArrayList(); try { String proc = "{call proc_selEmp '" + param + "','" + selType + "'}"; // 取得职员表数据 cst = con.prepareCall(proc); rs = cst.executeQuery(); while (rs.next()) { } Employee emp = new Employee(); emp.setId(rs.getInt("Eid")); emp.setName(rs.getString("Ename")); emp.setSex(rs.getString("Esex")); emp.setAge(rs.getInt("Eage")); emp.setPosition(rs.getString("Eposition")); emp.setRemark(rs.getString("Eremark")); empc.add(emp); } catch (SQLException ex) { ex.printStackTrace(); } finally { ConnectionManager.closeResultSet(rs);
} ConnectionManager.closeConnection(con); return empc; } /** * 查找大类信息 * * @param name * 大类名 * @param selType * 查找类型 * @return */ public static Collection selCate(String name, CateSelType selType) { // 连接数据库 Connection con = ConnectionManager.getConnection(); CallableStatement cst = null; ResultSet rs = null; // 建一个类别列表 Collection cc = new ArrayList(); try { // 取得类别表数据 cst = con.prepareCall("{call proc_selCate '" + name + "','" + selType + "'}"); rs = cst.executeQuery();
} } Category c = new Category(); c.setId(rs.getInt("Cid")); c.setName(rs.getString("Cname")); cc.add(c); } catch (SQLException ex) { ex.printStackTrace(); } finally { } return cc; ConnectionManager.closeResultSet(rs); ConnectionManager.closeStatement(cst); ConnectionManager.closeConnection(con); /** * 查找子类信息 * * @param param * 存储过程参数 * @param selType * 查找类型 * @return */ public static Collection selSubcate(String param, SubcateSelType selType) { // 连接数据库 Connection con = ConnectionManager.getConnection(); CallableStatement cst = null;
// 建一个子类列表 Collection scc = new ArrayList(); try { // 取得子类表数据 cst = con.prepareCall("{call proc_selSubcate '" + param + "','"
+ selType + "'}");
rs = cst.executeQuery();
while (rs.next()) {
Subcate sc = new Subcate();
sc.setId(rs.getInt("Sid"));
sc.setName(rs.getString("Sname"));
sc.setCateId(rs.getInt("SCid"));
scc.add(sc);
}
} catch (SQLException ex) {
ex.printStackTrace();
} finally {
ConnectionManager.closeResultSet(rs);
ConnectionManager.closeStatement(cst);
ConnectionManager.closeConnection(con);
}
return scc;
}
/**
* 查找资产信息
*
* @param procName
* 存储过程名 * @param param * 存储过程参数 * @return */ public static Collection selAsset(String proc, String param) { // 连接数据库 Connection con = ConnectionManager.getConnection(); CallableStatement cst = null; ResultSet rs = null; // 建一个资产信息列表 Collection ac = new ArrayList(); try { // 取得资产信息表数据 cst = con.prepareCall("{call " + proc + " '" + param + "'}"); rs = cst.executeQuery(); while (rs.next()) { Asset a = new Asset(); a.setId(rs.getInt(1)); a.setName(rs.getString(2)); a.setCateName(rs.getString(3)); a.setSubcateName(rs.getString(4)); a.setModel(rs.getString(5)); a.setPrice(rs.getDouble(6)); a.setPurDate(rs.getString(7)); a.setStatus(rs.getString(8)); a.setUseBy(rs.getString(9)); a.setRemark(rs.getString(10)); ac.add(a);
} } } catch (SQLException ex) { ex.printStackTrace(); } finally { } return ac; ConnectionManager.closeResultSet(rs); ConnectionManager.closeStatement(cst); ConnectionManager.closeConnection(con); /** * 查找借出资产信息 * * @param param * 存储过程参数 * @param selType * 查找类型 * @return */ public static Collection selLent(String param, LentSelType selType) { // 连接数据库 Connection con = ConnectionManager.getConnection(); CallableStatement cst = null; ResultSet rs = null; // 建一个借出记录列表 Collection lc = new ArrayList(); try {
} cst = con.prepareCall("{call proc_selLent '" + param + "','" + selType + "'}"); rs = cst.executeQuery(); while (rs.next()) { } Lent l = new Lent(); l.setId(rs.getInt("Lid")); l.setAssetId(rs.getInt("LAid")); l.setEmpId(rs.getInt("LEid")); l.setOperatorName(rs.getString("LOname")); l.setDate(rs.getString("Ldate")); l.setPurpose(rs.getString("Lpurpose")); l.setRemark(rs.getString("Lremark")); l.setAssetName(rs.getString("Aname")); l.setModel(rs.getString("Amodel")); l.setSubcateName(rs.getString("Sname")); l.setUseBy(rs.getString("Ause_by")); lc.add(l); } catch (SQLException ex) { ex.printStackTrace(); } finally { } return lc; ConnectionManager.closeResultSet(rs); ConnectionManager.closeStatement(cst); ConnectionManager.closeConnection(con); /**
* * @return */ public static Collection selReturned() { // 连接数据库 Connection con = ConnectionManager.getConnection(); CallableStatement cst = null; ResultSet rs = null; // 建一个归还记录列表 Collection rc = new ArrayList(); try { // 取得归还记录表数据 cst = con.prepareCall("{call proc_selReturned}"); rs = cst.executeQuery(); while (rs.next()) { } Returned r = new Returned(); r.setId(rs.getInt("Rid")); r.setAssetId(rs.getInt("RAid")); r.setAssetName(rs.getString("RAname")); r.setUser(rs.getString("Ruse_by")); r.setLentDate(rs.getString("RLdate")); r.setReturnDate(rs.getString("Rdate")); r.setLentOname(rs.getString("RLOname")); r.setReturnOname(rs.getString("RROname")); r.setRemark(rs.getString("Rremark")); rc.add(r); } catch (SQLException ex) {
} } finally { } return rc; ConnectionManager.closeResultSet(rs); ConnectionManager.closeStatement(cst); ConnectionManager.closeConnection(con); /** * 修改记录:包括添加、删除、修改 * * @param strProcInvoke * 调用存储过程的字符串 * @return */ public static int modifyRecord(String strProcInvoke) { } Connection con = ConnectionManager.getConnection(); try { return con.prepareCall("{call " + strProcInvoke + "}") .executeUpdate(); } catch (SQLException e) { e.printStackTrace(); return 0; } finally { } ConnectionManager.closeConnection(con);
* 子类别查找类型 * * @author Tom */ public enum SubcateSelType { } BY_NAME, BY_CATE_NAME /** * 大类别查找类型 * * @author Tom */ public enum CateSelType { } BY_NAME, BY_HAVE_SUBCATE, ALL /** * 管理员名查找类型 * * @author Tom * */ public enum OperatorSelType { } IN_NAME, IN_NAME_PWD /**
} * 借出记录查找类型 * * @author Tom * */ public enum LentSelType { } BY_OPERATOR_NAME, BY_EMPLOYEE_ID, BY_ASSET_ID, ALL /** * 职员查找类型 * * @author Tom * */ public enum EmployeeSelType { } BY_NAME, BY_POSITION, ALL
四、 实体类设计(部分类代码)
在cn.tsc.asset.entity包中
1. Asset实体类
作用:定义资产信息
代码:
package cn.tsc.asset.entity;
/**
* 实体类--资产信息
*
*/
public class Asset {
private int id; private String name; private String cateName; private String subcateName; private double price; private String model; private String purDate; private String status; private String useBy; private String remark; public String getCateName() { return cateName; } public void setCateName(String cateName) { this.cateName = cateName; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getPurDate() {
return purDate;
}
public void setPurDate(String purDate) {
this.purDate = purDate;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getSubcateName() {
return subcateName;
}
public void setSubcateName(String subcateName) {
this.subcateName = subcateName;
}
public String getUseBy() {
return useBy;
}
public void setUseBy(String useBy) {
this.useBy = useBy;
}
}
2. Employee实体类
作用:定义职员信息
代码:
package cn.tsc.asset.entity;
/**
* 实体类--职员信息
*
*/
public class Employee {
private int id;
private String name;
private String sex;
private int age;
private String position;
private String remark;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public String getSex() {
return sex;
} } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }
五、 用户界面类设计(部分类代码)
在cn.tsc.asset.userinterface包中
1. MM用户界面类
作用:生成主界面
代码:
package cn.tsc.asset.userinterface;
// download by http://www.codefans.net
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.io.File;
import java.util.Collection;
import java.util.Timer;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import cn.tsc.asset.contrl.DBWorker;
import cn.tsc.asset.contrl.DateTimeView;
import cn.tsc.asset.contrl.ImageGetter;
import cn.tsc.asset.contrl.MenuFactory;
import cn.tsc.asset.contrl.WindowCenter;
/**
* 用户界面类--主界面
*
*/
public class MM extends JFrame {
// 表头 // 表格面板 public AssetTableView tap = null; // 树面板 public CategoryTreeView trp = null; // 树的要根结点 public DefaultMutableTreeNode root = null; private static final long serialVersionUID = 1L;
public String[] head = { "资产编号", "资产名称", "大类名称", "子类名称", "资产型号", "价格",
/** * 构造方法 * * @param title * 窗口标题 */ // 显示当前时间 private DateTimeView dtv = null; // 高度偏移量(和菜单栏和状态栏的高度之和有关) private final int HEIGHT_OFFSET = 80; // 右面板:放表格面板 private JPanel pnlCRight = null; // 左下面板:放树面板 private JPanel pnlCBottom = null; // 左上面板:放查询面板 private JPanel pnlCTop = null; // 查询面板 private QueryView qp = null; "购入日期", "状态", "使用者", "备注" };
} super(title); try { setDefaultCloseOperation(EXIT_ON_CLOSE); init(); } catch (Exception e) { } e.printStackTrace(); /** * 初始化窗口 * * @throws Exception */ private void init() throws Exception { JPanel pnlCenter = new JPanel(); JLabel lblStatusBar = new JLabel(" "); dtv = new DateTimeView(lblStatusBar); Timer timer = new Timer(); qp = new QueryView(220, 220); tap = new AssetTableView(570, 520); root = new DefaultMutableTreeNode("高校固定资产管理系统--类别"); pnlCTop = new JPanel(); pnlCBottom = new JPanel(); pnlCRight = new JPanel(); trp = new CategoryTreeView(220, 300); pnlCenter.setLayout(null);
pnlCRight.setLayout(null); pnlCTop.setBounds(0, 0, qp.getWidth(), qp.getHeight()); pnlCBottom.setBounds(0, qp.getWidth(), trp.getWidth(), trp.getHeight());
pnlCRight.setBounds(qp.getWidth(), 0, tap.getWidth(), tap.getHeight());
// 添加大类结点 trp.addNodes(trp.tree, root, trp.getNodes()); // 设置树模型 trp.setTreeModel(trp.tree, root); // 设置表模型
tap.setTableModel(tap.table, DBWorker.selAsset("proc_selAsset", head); // 设置trp面板的宽高等于pnlCBottom面板的宽高 trp.setBounds(0, 0, pnlCBottom.getWidth(), pnlCBottom.getHeight()); // 设置tap面板的宽高等于pnlCRight面板的宽高 tap.setBounds(0, 0, pnlCRight.getWidth(), pnlCRight.getHeight()); "all"),
setIconImage(ImageGetter.getImage("AMSConfiguration" + File.separator
pnlCenter.add(pnlCTop); pnlCenter.add(pnlCBottom); + "img" + File.separator + "mainlogo.gif")); pnlCTop.add(qp); pnlCBottom.add(trp); pnlCRight.add(tap);
setJMenuBar(new MenuFactory(this).buildMenuBar()); lblStatusBar.setBorder(BorderFactory.createEtchedBorder()); lblStatusBar.setFont(new java.awt.Font("Dialog", java.awt.Font.PLAIN, 12)); // 开始每隔一秒显示时间一次 timer.scheduleAtFixedRate(dtv, 0, 1000); getContentPane().add(pnlCenter, BorderLayout.CENTER); getContentPane().add(lblStatusBar, BorderLayout.SOUTH); setSize(800, 600); // 居中显示窗口 WindowCenter.showCenter(this); /* 树事件处理 */ trp.tree.addTreeSelectionListener(new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent e) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) e
.getPath().getLastPathComponent(); if (node.isRoot()) {
// 如果用户单击根结点,显示所有资产信息 tap.setTableModel(tap.table, "proc_selAsset", "all"), head); DBWorker.selAsset(
node.getRoot()) { } else if (node.isLeaf() && node.getParent() ==
// 如果用户单击了根结点下的叶了结点(大类结
点),显示指定子类别的资产信息,并且给其添加子结点
// 给node添加子结点 trp.addNodes(trp.tree, node,
.toString()));
trp.getSubNodes(node
// 显示指定大类别的资产信息 tap.setTableModel(tap.table,
"proc_selAssetInCate",
DBWorker.selAsset( node.toString()), head);
} else { }
// 如果用户单击子类结点 // 显示指定子类别的资产信息 tap.setTableModel(tap.table,
"proc_selAssetInCate",
DBWorker.selAsset( node.toString()), head);
});
}
/* 窗口宽高改变事件处理 */
addComponentListener(new ComponentAdapter() {
// 窗口改变大小时
public void componentResized(ComponentEvent e) {
// pnlCTop的宽高保持不变 pnlCTop
.setBounds(0, 0, pnlCTop.getWidth(),
.getHeight());
pnlCTop
pnlCBottom
pnlCTop.getHeight());
还没弄出来)
HEIGHT_OFFSET);
pnlCBottom
pnlCRight
trp.getWidth() trp.getHeight()
tap.getHeight());
// pnlCBottom的宽度保持不变,高度由窗口高度而定 pnlCBottom.setBounds(0, pnlCTop.getHeight(),
.getWidth(), getHeight() -
// pnlCRight的宽高由窗口宽高而定(到底为什么要减10
pnlCRight.setBounds(pnlCTop.getWidth(), 0, getWidth()
- pnlCTop.getWidth() - 10, getHeight() -
// trp随着pnlCBottom宽高的改变而改变 trp.setBounds(0, 0, pnlCBottom.getWidth(),
.getHeight());
// tap随着pnlCRight宽高的改变而改变 tap .setBounds(0, 0, pnlCRight.getWidth(),
.getHeight());
// trp.scp随着trp宽高的改变而改变宽高 trp.scp .setBounds(trp.WIDTH_OFFSET / 2, 0, - trp.WIDTH_OFFSET,
- trp.HEIGHT_OFFSET);
// 改变trp.tree的状态 trp.tree.setBounds(0, 0, 0, 0);
// tap.scp随着tap宽高的改变而改变宽高 tap.scp.setBounds(0, 0, tap.getWidth(), // 改变tap.table的状态
*/
});
}
/* 待解决方案:当窗口缩小到一定宽高时限制继续缩小
/* 按编号查 按钮事件处理 */
qp.btnById.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 获得用户输入的编号
String id = qp.txtId.getText().trim(); if (id.equals("")) {
// 如果输入为空
showTip(2, "请先填写编号!");
} else {
// 如果输入不为空
Collection ac = DBWorker.selAsset("proc_selAssetInAid", id);
}
}
if (ac.size() > 0) {
// 如果查到
tap.setTableModel(tap.table, ac, head);
} else { }
// 如果没有查到
showTip(2, "没有查到任何信息!");
/* 按类别查 按钮事件处理 */
qp.btnByCate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 获得用户输入的类别名
String cate = qp.txtCate.getText().trim(); if (cate.equals("")) {
showTip(2, "请先输入部分或完整的类别名!");
} else {
Collection ac = DBWorker.selAsset("proc_selAssetInCate",
public void actionPerformed(ActionEvent e) {
});
/* 按使用者查 按钮事件处理 */
qp.btnByUser.addActionListener(new ActionListener() {
}
}
cate);
if (ac.size() > 0) {
// 如果查到
tap.setTableModel(tap.table, ac, head);
} else { }
// 如果没有查到
tap.clearTable(tap.table); showTip(2, "没有查到任何信息!");
// 获得用户输入的使用者姓名
String name = qp.txtUser.getText().trim(); if (name.equals("")) {
// 如果输入为空
showTip(2, "请先填写使用者姓名!");
} else {
// 如果输入不为空
Collection ac = DBWorker.selAsset("proc_selAssetInUser",
/**
* 弹出提示窗口 *
* @param type
* 提示类型:0错误,1警告,2提示 }
});
}
}
name);
if (ac.size() > 0) {
// 如果查到
tap.setTableModel(tap.table, ac, head);
} else { }
// 如果没有查到
showTip(2, "没有查到任何信息!");
}
* @param mess * 提示信息 */
private void showTip(int type, String mess) {
switch (type) { case 0:
JOptionPane.showMessageDialog(this, mess, "错误", break;
JOptionPane.ERROR_MESSAGE);
}
case 1:
JOptionPane.showMessageDialog(this, mess, "警告", break;
JOptionPane.WARNING_MESSAGE);
case 2:
JOptionPane.showMessageDialog(this, mess, "提示", break;
JOptionPane.INFORMATION_MESSAGE);
default: }
break;
六、 界面截图 1.登陆界面
2.主界面
3.资产信息管理
大类:
子类:
4.账户管理
5.职员管理
6.资产还借管理
重庆邮电大学理学院信息与计算科学专业
集中实践报告
题 目:《高校固定资产管理系统 》
指导老师: 李永红________________ 专 业: 数理科学与信息技术_____
班 级: 1121302、1121301______
学 号: 2013213055、2013213058_
姓 名: 何锐、周海渝___________
成 绩:________________________
20 16 年 06 月 16 日
一、 需求分析
随着社会的发展,人们的生活节奏不断加快。为了节约宝贵的时间,高校固
定资产管理系统应运而生。在管理固定资产的过程中,需要修改、更新大量
的表单。如果使用计算机来辅助填写及保存相应的记录,则能大大提高固定
资产管理的效率。因此,需要开发一个固定资产管理系统。该系统应该支持
快速录入关键信息,例如,固定资产的借出、归还等。这些信息需要被保存在
数据库中以便以后查看。
通过对程序需要实现的功能进行分析,完成数据库和程序界面的设计。通过
对高校固定资产管理系统的了解,要求其具备如下功能。
1. 登录系统
登录系统可以有效地保障系统的安全性,防止非法用户使用系统。只有输入
合法的用户名和密码才能够正常登录,否则不能进行登录。
2. 添加信息
用户进入系统后,通过对“资产信息管理”菜单中的“类别管理”菜单项,
可以进行大类(总的分类)的添加。
同样,在其他几个菜单中也可进行信息添加。
3. 删除信息
用户进入系统后,通过对“账户管理”菜单中的“删除帐户”菜单项,可以
进行帐户的删除。
同样,在其他几个菜单中也可进行信息删除。
4. 修改信息
考虑到操作人员录入的失误,需要提供信息的修改功能。通过“职员管理”
菜单中的“修改职员”菜单项,可以对职员信息进行修改。
同样,在其他几个菜单中也可进行信息修改。
5. 查询信息
用户进入系统后,可以通过“按编号查”、“按类别查”、“按使用者查”
的不同类别进行信息查询。
6. 添加用户
进入系统后,可以通过“账户管理”菜单的“添加用户”菜单项添加新的用
户,并为其指定密码。一旦新用户添加成功,以后就可以通过该用户进入系
统进行操作。
7. 修改密码
为了提高系统的安全性,通常建议管理员定期修改密码。使用“账户管理”
菜单的“修改密码”菜单项可以进行密码的修改。
二、 总体设计
1. 通过对系统进行深入的分析得知,本系统需要实现以下目标。
⑴系统管理
⑵资产信息管理
⑶账户管理
⑷职员管理
⑸资产还借管理
⑹帮助
⑺查询
按编号查询:
按类别查询:
按使用者查询:
⑻资产信息分类显示
⑼显示当前时间
2. 构建开发环境
⑴操作系统:windows7
⑵JDK版本:jdk1.8.0_31
⑶IDE版本:Eclipse
⑷开发语言:Java
⑸后台数据库:SQL Server 2008
三、 控制类设计(部分类代码)
在cn.tsc.asset.contrl包中
1. ConnectionManager控制类
作用:数据库连接
代码:
package cn.tsc.asset.contrl;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;
/**
* 控制类--数据库连接管理
*
*/
/**
* @author pengwenfu
*
*/
public final class ConnectionManager {
// 驱动类
= private static final String DRIVER_CLASS
"com.microsoft.jdbc.sqlserver.SQLServerDriver";
// 数据库地址
private static final String DATABASE_URL = "jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName = Assets";
// 数据库登录名 private static final String USER_NAME = "sa"; // 密码 private static final String PASSWORD = "1234";
* 构造方法 禁止实例化 */ private ConnectionManager() { } /** * 取得数据库连接 * * @return */ public static Connection getConnection() { try { Class.forName(DRIVER_CLASS);
con = Connection
DriverManager.getConnection(DATABASE_URL,
USER_NAME, PASSWORD); return con; } catch (ClassNotFoundException e) { e.printStackTrace();
JOptionPane.showMessageDialog(null, "没有找到连接数据库所需的驱动类!", "错误",
JOptionPane.ERROR_MESSAGE); return null;
e.printStackTrace();
JOptionPane.showMessageDialog(null, "数据库连接错误!请核实配置文件是否有误!", "错误",
JOptionPane.ERROR_MESSAGE);
return null;
}
}
/**
* 关闭数据库连接
*
* @param conn
*/
public static void closeConnection(Connection con) {
try {
if (con != null && !con.isClosed()) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 关闭数据库操作对象
*
* @param cst
*/
public static void closeStatement(CallableStatement cst) { try {
if (cst != null) {
cst.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 关闭记录集
*
* @param rs
*/
public static void closeResultSet(ResultSet rs) { try {
} } if (rs != null) { } rs.close(); rs = null; } catch (SQLException e) { } e.printStackTrace();
2.DBWorker控制类
作用:数据库操作
代码:
package cn.tsc.asset.contrl;
import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection;
import cn.tsc.asset.entity.Asset; import cn.tsc.asset.entity.Category; import cn.tsc.asset.entity.Employee; import cn.tsc.asset.entity.Lent; import cn.tsc.asset.entity.Operator; import cn.tsc.asset.entity.Returned;
import cn.tsc.asset.entity.Subcate;
/**
* 控制类--数据库操作
*
*/
/**
* @author pengwenfu
*
*/
public class DBWorker {
/** * 查找管理员信息 * * @param name * 名称 * @param pwd * 密码 * @return */ public static Collection selOperator(String name, String pwd, OperatorSelType inNamePwd) { // 连接数据库 Connection con = ConnectionManager.getConnection(); CallableStatement cst = null; ResultSet rs = null; // 建一个操作员列表 Collection opc = new ArrayList();
} try { String proc = "{call proc_selOperator '" + name + "','" + pwd + "','" + inNamePwd + "'}"; // 取得操作员表数据 cst = con.prepareCall(proc); rs = cst.executeQuery(); while (rs.next()) { } Operator op = new Operator(); op.setName(rs.getString("Oname")); op.setPwd(rs.getString("Opwd")); opc.add(op); } catch (SQLException ex) { ex.printStackTrace(); } finally { } return opc; ConnectionManager.closeResultSet(rs); ConnectionManager.closeStatement(cst); ConnectionManager.closeConnection(con); /** * 查找职员信息 * * @param param * 姓名或职务 * @param selType * 查找类型
*/ public static Collection selEmp(String param, EmployeeSelType selType) { // 连接数据库 Connection con = ConnectionManager.getConnection(); CallableStatement cst = null; ResultSet rs = null; // 建一个职员列表 Collection empc = new ArrayList(); try { String proc = "{call proc_selEmp '" + param + "','" + selType + "'}"; // 取得职员表数据 cst = con.prepareCall(proc); rs = cst.executeQuery(); while (rs.next()) { } Employee emp = new Employee(); emp.setId(rs.getInt("Eid")); emp.setName(rs.getString("Ename")); emp.setSex(rs.getString("Esex")); emp.setAge(rs.getInt("Eage")); emp.setPosition(rs.getString("Eposition")); emp.setRemark(rs.getString("Eremark")); empc.add(emp); } catch (SQLException ex) { ex.printStackTrace(); } finally { ConnectionManager.closeResultSet(rs);
} ConnectionManager.closeConnection(con); return empc; } /** * 查找大类信息 * * @param name * 大类名 * @param selType * 查找类型 * @return */ public static Collection selCate(String name, CateSelType selType) { // 连接数据库 Connection con = ConnectionManager.getConnection(); CallableStatement cst = null; ResultSet rs = null; // 建一个类别列表 Collection cc = new ArrayList(); try { // 取得类别表数据 cst = con.prepareCall("{call proc_selCate '" + name + "','" + selType + "'}"); rs = cst.executeQuery();
} } Category c = new Category(); c.setId(rs.getInt("Cid")); c.setName(rs.getString("Cname")); cc.add(c); } catch (SQLException ex) { ex.printStackTrace(); } finally { } return cc; ConnectionManager.closeResultSet(rs); ConnectionManager.closeStatement(cst); ConnectionManager.closeConnection(con); /** * 查找子类信息 * * @param param * 存储过程参数 * @param selType * 查找类型 * @return */ public static Collection selSubcate(String param, SubcateSelType selType) { // 连接数据库 Connection con = ConnectionManager.getConnection(); CallableStatement cst = null;
// 建一个子类列表 Collection scc = new ArrayList(); try { // 取得子类表数据 cst = con.prepareCall("{call proc_selSubcate '" + param + "','"
+ selType + "'}");
rs = cst.executeQuery();
while (rs.next()) {
Subcate sc = new Subcate();
sc.setId(rs.getInt("Sid"));
sc.setName(rs.getString("Sname"));
sc.setCateId(rs.getInt("SCid"));
scc.add(sc);
}
} catch (SQLException ex) {
ex.printStackTrace();
} finally {
ConnectionManager.closeResultSet(rs);
ConnectionManager.closeStatement(cst);
ConnectionManager.closeConnection(con);
}
return scc;
}
/**
* 查找资产信息
*
* @param procName
* 存储过程名 * @param param * 存储过程参数 * @return */ public static Collection selAsset(String proc, String param) { // 连接数据库 Connection con = ConnectionManager.getConnection(); CallableStatement cst = null; ResultSet rs = null; // 建一个资产信息列表 Collection ac = new ArrayList(); try { // 取得资产信息表数据 cst = con.prepareCall("{call " + proc + " '" + param + "'}"); rs = cst.executeQuery(); while (rs.next()) { Asset a = new Asset(); a.setId(rs.getInt(1)); a.setName(rs.getString(2)); a.setCateName(rs.getString(3)); a.setSubcateName(rs.getString(4)); a.setModel(rs.getString(5)); a.setPrice(rs.getDouble(6)); a.setPurDate(rs.getString(7)); a.setStatus(rs.getString(8)); a.setUseBy(rs.getString(9)); a.setRemark(rs.getString(10)); ac.add(a);
} } } catch (SQLException ex) { ex.printStackTrace(); } finally { } return ac; ConnectionManager.closeResultSet(rs); ConnectionManager.closeStatement(cst); ConnectionManager.closeConnection(con); /** * 查找借出资产信息 * * @param param * 存储过程参数 * @param selType * 查找类型 * @return */ public static Collection selLent(String param, LentSelType selType) { // 连接数据库 Connection con = ConnectionManager.getConnection(); CallableStatement cst = null; ResultSet rs = null; // 建一个借出记录列表 Collection lc = new ArrayList(); try {
} cst = con.prepareCall("{call proc_selLent '" + param + "','" + selType + "'}"); rs = cst.executeQuery(); while (rs.next()) { } Lent l = new Lent(); l.setId(rs.getInt("Lid")); l.setAssetId(rs.getInt("LAid")); l.setEmpId(rs.getInt("LEid")); l.setOperatorName(rs.getString("LOname")); l.setDate(rs.getString("Ldate")); l.setPurpose(rs.getString("Lpurpose")); l.setRemark(rs.getString("Lremark")); l.setAssetName(rs.getString("Aname")); l.setModel(rs.getString("Amodel")); l.setSubcateName(rs.getString("Sname")); l.setUseBy(rs.getString("Ause_by")); lc.add(l); } catch (SQLException ex) { ex.printStackTrace(); } finally { } return lc; ConnectionManager.closeResultSet(rs); ConnectionManager.closeStatement(cst); ConnectionManager.closeConnection(con); /**
* * @return */ public static Collection selReturned() { // 连接数据库 Connection con = ConnectionManager.getConnection(); CallableStatement cst = null; ResultSet rs = null; // 建一个归还记录列表 Collection rc = new ArrayList(); try { // 取得归还记录表数据 cst = con.prepareCall("{call proc_selReturned}"); rs = cst.executeQuery(); while (rs.next()) { } Returned r = new Returned(); r.setId(rs.getInt("Rid")); r.setAssetId(rs.getInt("RAid")); r.setAssetName(rs.getString("RAname")); r.setUser(rs.getString("Ruse_by")); r.setLentDate(rs.getString("RLdate")); r.setReturnDate(rs.getString("Rdate")); r.setLentOname(rs.getString("RLOname")); r.setReturnOname(rs.getString("RROname")); r.setRemark(rs.getString("Rremark")); rc.add(r); } catch (SQLException ex) {
} } finally { } return rc; ConnectionManager.closeResultSet(rs); ConnectionManager.closeStatement(cst); ConnectionManager.closeConnection(con); /** * 修改记录:包括添加、删除、修改 * * @param strProcInvoke * 调用存储过程的字符串 * @return */ public static int modifyRecord(String strProcInvoke) { } Connection con = ConnectionManager.getConnection(); try { return con.prepareCall("{call " + strProcInvoke + "}") .executeUpdate(); } catch (SQLException e) { e.printStackTrace(); return 0; } finally { } ConnectionManager.closeConnection(con);
* 子类别查找类型 * * @author Tom */ public enum SubcateSelType { } BY_NAME, BY_CATE_NAME /** * 大类别查找类型 * * @author Tom */ public enum CateSelType { } BY_NAME, BY_HAVE_SUBCATE, ALL /** * 管理员名查找类型 * * @author Tom * */ public enum OperatorSelType { } IN_NAME, IN_NAME_PWD /**
} * 借出记录查找类型 * * @author Tom * */ public enum LentSelType { } BY_OPERATOR_NAME, BY_EMPLOYEE_ID, BY_ASSET_ID, ALL /** * 职员查找类型 * * @author Tom * */ public enum EmployeeSelType { } BY_NAME, BY_POSITION, ALL
四、 实体类设计(部分类代码)
在cn.tsc.asset.entity包中
1. Asset实体类
作用:定义资产信息
代码:
package cn.tsc.asset.entity;
/**
* 实体类--资产信息
*
*/
public class Asset {
private int id; private String name; private String cateName; private String subcateName; private double price; private String model; private String purDate; private String status; private String useBy; private String remark; public String getCateName() { return cateName; } public void setCateName(String cateName) { this.cateName = cateName; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getPurDate() {
return purDate;
}
public void setPurDate(String purDate) {
this.purDate = purDate;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getSubcateName() {
return subcateName;
}
public void setSubcateName(String subcateName) {
this.subcateName = subcateName;
}
public String getUseBy() {
return useBy;
}
public void setUseBy(String useBy) {
this.useBy = useBy;
}
}
2. Employee实体类
作用:定义职员信息
代码:
package cn.tsc.asset.entity;
/**
* 实体类--职员信息
*
*/
public class Employee {
private int id;
private String name;
private String sex;
private int age;
private String position;
private String remark;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public String getSex() {
return sex;
} } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }
五、 用户界面类设计(部分类代码)
在cn.tsc.asset.userinterface包中
1. MM用户界面类
作用:生成主界面
代码:
package cn.tsc.asset.userinterface;
// download by http://www.codefans.net
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.io.File;
import java.util.Collection;
import java.util.Timer;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import cn.tsc.asset.contrl.DBWorker;
import cn.tsc.asset.contrl.DateTimeView;
import cn.tsc.asset.contrl.ImageGetter;
import cn.tsc.asset.contrl.MenuFactory;
import cn.tsc.asset.contrl.WindowCenter;
/**
* 用户界面类--主界面
*
*/
public class MM extends JFrame {
// 表头 // 表格面板 public AssetTableView tap = null; // 树面板 public CategoryTreeView trp = null; // 树的要根结点 public DefaultMutableTreeNode root = null; private static final long serialVersionUID = 1L;
public String[] head = { "资产编号", "资产名称", "大类名称", "子类名称", "资产型号", "价格",
/** * 构造方法 * * @param title * 窗口标题 */ // 显示当前时间 private DateTimeView dtv = null; // 高度偏移量(和菜单栏和状态栏的高度之和有关) private final int HEIGHT_OFFSET = 80; // 右面板:放表格面板 private JPanel pnlCRight = null; // 左下面板:放树面板 private JPanel pnlCBottom = null; // 左上面板:放查询面板 private JPanel pnlCTop = null; // 查询面板 private QueryView qp = null; "购入日期", "状态", "使用者", "备注" };
} super(title); try { setDefaultCloseOperation(EXIT_ON_CLOSE); init(); } catch (Exception e) { } e.printStackTrace(); /** * 初始化窗口 * * @throws Exception */ private void init() throws Exception { JPanel pnlCenter = new JPanel(); JLabel lblStatusBar = new JLabel(" "); dtv = new DateTimeView(lblStatusBar); Timer timer = new Timer(); qp = new QueryView(220, 220); tap = new AssetTableView(570, 520); root = new DefaultMutableTreeNode("高校固定资产管理系统--类别"); pnlCTop = new JPanel(); pnlCBottom = new JPanel(); pnlCRight = new JPanel(); trp = new CategoryTreeView(220, 300); pnlCenter.setLayout(null);
pnlCRight.setLayout(null); pnlCTop.setBounds(0, 0, qp.getWidth(), qp.getHeight()); pnlCBottom.setBounds(0, qp.getWidth(), trp.getWidth(), trp.getHeight());
pnlCRight.setBounds(qp.getWidth(), 0, tap.getWidth(), tap.getHeight());
// 添加大类结点 trp.addNodes(trp.tree, root, trp.getNodes()); // 设置树模型 trp.setTreeModel(trp.tree, root); // 设置表模型
tap.setTableModel(tap.table, DBWorker.selAsset("proc_selAsset", head); // 设置trp面板的宽高等于pnlCBottom面板的宽高 trp.setBounds(0, 0, pnlCBottom.getWidth(), pnlCBottom.getHeight()); // 设置tap面板的宽高等于pnlCRight面板的宽高 tap.setBounds(0, 0, pnlCRight.getWidth(), pnlCRight.getHeight()); "all"),
setIconImage(ImageGetter.getImage("AMSConfiguration" + File.separator
pnlCenter.add(pnlCTop); pnlCenter.add(pnlCBottom); + "img" + File.separator + "mainlogo.gif")); pnlCTop.add(qp); pnlCBottom.add(trp); pnlCRight.add(tap);
setJMenuBar(new MenuFactory(this).buildMenuBar()); lblStatusBar.setBorder(BorderFactory.createEtchedBorder()); lblStatusBar.setFont(new java.awt.Font("Dialog", java.awt.Font.PLAIN, 12)); // 开始每隔一秒显示时间一次 timer.scheduleAtFixedRate(dtv, 0, 1000); getContentPane().add(pnlCenter, BorderLayout.CENTER); getContentPane().add(lblStatusBar, BorderLayout.SOUTH); setSize(800, 600); // 居中显示窗口 WindowCenter.showCenter(this); /* 树事件处理 */ trp.tree.addTreeSelectionListener(new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent e) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) e
.getPath().getLastPathComponent(); if (node.isRoot()) {
// 如果用户单击根结点,显示所有资产信息 tap.setTableModel(tap.table, "proc_selAsset", "all"), head); DBWorker.selAsset(
node.getRoot()) { } else if (node.isLeaf() && node.getParent() ==
// 如果用户单击了根结点下的叶了结点(大类结
点),显示指定子类别的资产信息,并且给其添加子结点
// 给node添加子结点 trp.addNodes(trp.tree, node,
.toString()));
trp.getSubNodes(node
// 显示指定大类别的资产信息 tap.setTableModel(tap.table,
"proc_selAssetInCate",
DBWorker.selAsset( node.toString()), head);
} else { }
// 如果用户单击子类结点 // 显示指定子类别的资产信息 tap.setTableModel(tap.table,
"proc_selAssetInCate",
DBWorker.selAsset( node.toString()), head);
});
}
/* 窗口宽高改变事件处理 */
addComponentListener(new ComponentAdapter() {
// 窗口改变大小时
public void componentResized(ComponentEvent e) {
// pnlCTop的宽高保持不变 pnlCTop
.setBounds(0, 0, pnlCTop.getWidth(),
.getHeight());
pnlCTop
pnlCBottom
pnlCTop.getHeight());
还没弄出来)
HEIGHT_OFFSET);
pnlCBottom
pnlCRight
trp.getWidth() trp.getHeight()
tap.getHeight());
// pnlCBottom的宽度保持不变,高度由窗口高度而定 pnlCBottom.setBounds(0, pnlCTop.getHeight(),
.getWidth(), getHeight() -
// pnlCRight的宽高由窗口宽高而定(到底为什么要减10
pnlCRight.setBounds(pnlCTop.getWidth(), 0, getWidth()
- pnlCTop.getWidth() - 10, getHeight() -
// trp随着pnlCBottom宽高的改变而改变 trp.setBounds(0, 0, pnlCBottom.getWidth(),
.getHeight());
// tap随着pnlCRight宽高的改变而改变 tap .setBounds(0, 0, pnlCRight.getWidth(),
.getHeight());
// trp.scp随着trp宽高的改变而改变宽高 trp.scp .setBounds(trp.WIDTH_OFFSET / 2, 0, - trp.WIDTH_OFFSET,
- trp.HEIGHT_OFFSET);
// 改变trp.tree的状态 trp.tree.setBounds(0, 0, 0, 0);
// tap.scp随着tap宽高的改变而改变宽高 tap.scp.setBounds(0, 0, tap.getWidth(), // 改变tap.table的状态
*/
});
}
/* 待解决方案:当窗口缩小到一定宽高时限制继续缩小
/* 按编号查 按钮事件处理 */
qp.btnById.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 获得用户输入的编号
String id = qp.txtId.getText().trim(); if (id.equals("")) {
// 如果输入为空
showTip(2, "请先填写编号!");
} else {
// 如果输入不为空
Collection ac = DBWorker.selAsset("proc_selAssetInAid", id);
}
}
if (ac.size() > 0) {
// 如果查到
tap.setTableModel(tap.table, ac, head);
} else { }
// 如果没有查到
showTip(2, "没有查到任何信息!");
/* 按类别查 按钮事件处理 */
qp.btnByCate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 获得用户输入的类别名
String cate = qp.txtCate.getText().trim(); if (cate.equals("")) {
showTip(2, "请先输入部分或完整的类别名!");
} else {
Collection ac = DBWorker.selAsset("proc_selAssetInCate",
public void actionPerformed(ActionEvent e) {
});
/* 按使用者查 按钮事件处理 */
qp.btnByUser.addActionListener(new ActionListener() {
}
}
cate);
if (ac.size() > 0) {
// 如果查到
tap.setTableModel(tap.table, ac, head);
} else { }
// 如果没有查到
tap.clearTable(tap.table); showTip(2, "没有查到任何信息!");
// 获得用户输入的使用者姓名
String name = qp.txtUser.getText().trim(); if (name.equals("")) {
// 如果输入为空
showTip(2, "请先填写使用者姓名!");
} else {
// 如果输入不为空
Collection ac = DBWorker.selAsset("proc_selAssetInUser",
/**
* 弹出提示窗口 *
* @param type
* 提示类型:0错误,1警告,2提示 }
});
}
}
name);
if (ac.size() > 0) {
// 如果查到
tap.setTableModel(tap.table, ac, head);
} else { }
// 如果没有查到
showTip(2, "没有查到任何信息!");
}
* @param mess * 提示信息 */
private void showTip(int type, String mess) {
switch (type) { case 0:
JOptionPane.showMessageDialog(this, mess, "错误", break;
JOptionPane.ERROR_MESSAGE);
}
case 1:
JOptionPane.showMessageDialog(this, mess, "警告", break;
JOptionPane.WARNING_MESSAGE);
case 2:
JOptionPane.showMessageDialog(this, mess, "提示", break;
JOptionPane.INFORMATION_MESSAGE);
default: }
break;
六、 界面截图 1.登陆界面
2.主界面
3.资产信息管理
大类:
子类:
4.账户管理
5.职员管理
6.资产还借管理