高校固定资产管理系统

重庆邮电大学理学院信息与计算科学专业

集中实践报告

题 目:《高校固定资产管理系统 》

指导老师: 李永红________________ 专 业: 数理科学与信息技术_____

班 级: 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.资产还借管理


相关文章

  • 高校国有资产管理的风险与防控对策研究
  • 作者:蔺汉杰 财政监督:综合版 2013年12期 随着政府加大对教育事业的投入,高校不断加快扩招.扩建的进程,高校国有资产数量不断增多,规模日益庞大,与此同时,高校国有资产管理中的问题日益增多.为了加强国有资产的科学管理,保证资产的安全完整 ...查看


  • 高校固定资产管理存在的问题与对策
  • 第31卷第1期 V01.31 No.1 丽水学院学报 JOI刀RNAI.OF 2009年2月 Feb.2009 LIS砌UNIVERSITY 高校固定资产管理存在的问题与对策 刘玉琳1,柳亚平2 (1.丽水学院后勤服务总公司,浙江丽水323 ...查看


  • 对高校固定资产管理问题的思考
  • 摘要:2012年2月7日财政部发布<事业单位财务规则>,为推进高校固定资产科学化精细化管理,进一步提高资金使用效益,以便能为高等学校教学科研提供更好的物质基础.文章从高校固定资产的类别与核算.高校固定资产管理存在的问题.加强高校 ...查看


  • 高校无形资产的构成及其特征
  • 内容摘要:本文仅就高校无形资产管理中的一般性问题进行初步的分析探讨,对高校无形资产的构成.特征进行了归纳分析,指出了高校无形资产管理中存在的问题,并提出了具体完善措施,以期能够对高校无形资产的规范化.制度化管理提供有益的参考. 关键词:高校 ...查看


  • 高校固定资产管理的现状.问题及对策
  • 高校固定资产管理的现状.存在的问题及对策 一.高校固定资产管理的现状 (1)长期以来,高校资产由国家拨款购置或无偿调拨,使用国家资产无需承担任何经济责任,人们头脑中很难形成国有资产管理意识,这种思维定式是高校资产管理长期不被重视.人们头脑中 ...查看


  • 高校财务管理论文第一稿
  • 高校财务管理论文 [摘要]高校财务管理的好坏直接关系着高校的生存和发展,由于财务管理体制改革滞后,仍存在不少新问题.要以科学发展观为指导,切实加强高校财务管理,基本对策为:树立财务风险意识,提高规避财务风险的能力;完善校内财务制度,规范校内 ...查看


  • 高校资产信息化管理研究
  • 龙源期刊网 http://www.qikan.com.cn 高校资产信息化管理研究 作者:缪昊轩 来源:<现代经济信息>2014年第05期 摘要:高校资产管理是高校管理工作的重要组成部分,将信息技术引入高校资产管理工作中,是高校 ...查看


  • 高校教育成本核算的理论与方法
  • 自学考试本科毕业生 毕业论文高校教育成本核算的理论与方法考生姓名专业[1**********]2准考证号指导教师 通讯地址邮政编码电子邮箱联系方式[1**********] 二○一三年十月 摘要 高校教育成本是高校教育提供教育服务所耗费资源 ...查看


  • 高校开展固定资产管理审计的思考
  • 摘 要:高校开展固定资产管理审计十分必要.要从源头抓起,加强对固定资产配置预算的审计,实行事前监督:要重视对固定资产的购置.使用.处置.保管等全过程的审计监督,实现过程控制. 关键词:高校:固定资产管理:审计 高校固定资产管理审计就是对高校 ...查看


  • 高校国有资产管理存在的问题与对策
  • 随着国家加大教育投入政策的持续有效实施,高校国有资产规模迅速扩大,但对国有资产的管理却没有跟上,造成国有资产不能充分发挥应有的效用,保值增值任务受到严重威胁,国有资产流失现象引人注目.虽然国家国有资产管理委员会已经成立三年多,国有资产管理体 ...查看


热门内容