项目报告
企业固定资产管理系统代码说明
固定资产管理系统是一个企事业单位不可缺少的部分,它的内容对于企事业单位的决策者和管理者来说都至关重要,所以固定资产管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理固定资产的信息,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。
随着计算机技术的不断发展,计算机应用于各大领域,并给人们的生活带来了极大的便利,在固定管理系统亦是如此。以往固定资产员由于缺乏适当的软件而给其工作带来了很多不便。本论文所介绍的便是一个固定资产管理系统,以方便在固定资产安排和固定资产管理上的工作任务。
本论文主要介绍的是固定资产管理系统的整个设计过程。第1章的绪论包括选题的背景,目的和意义,国内外现状;第2章平台简介包括JBuilder 和SQL Server数据库的介绍;第3章系统分析,需求分析,数据流与数据字典,功能需求;第4章系统设计部分包括系统总体设计,功能模块设计,数据库设计;第5章是系统实现部分包括程序设计,各个功能模块的实现,系统的测试;论文最后为结论、致谢、参考文献。
固定资产管理 SQL Server数据库 C/S结构
目 录
第一章绪论
1.1选题的背景
某公司业务不断发展,人员越来越多,固定资产的管理人员压力逐渐增大,需要建立数据库和使用软件系统来进行管理。
公司对固定资产的定义为:价值超过2000元人民币的设备。例如彩色喷墨打印机、计算机、扫描仪、机房其他设备,而打印纸、书籍等不属于固定资产,属于易耗品。
通过调研,总结和归纳之后,他们需要软件具备以下的功能:
1、管理员登录
2、固定资产信息管理
3、人员信息管理
4、资产的领用
5、资产的归还
6、资产信息浏览和查询
1.2目的和意义
固定资产管理是企业管理中的一个重要组成部分,固定资产具有数量大、种类多、价值高、使用周期长、使用地点分散等特点,管理难度大。很多单位目前仍然依赖手工记账的管理方式,由于管理单据众多、盘点工作繁重,需占用大量的人力物力,而且固定资产的历史操作和资产统计工作异常困难,导致资产流失和资产重复购置。
近些年出现了一些固定资产管理的软件,虽然在很大程度上解决了手工记账方式的问题,但多数系统采用手工方式录入数据,不仅速度慢、易产生错误,而且存在资产管理中资产实物与帐务信息脱节的严重问题,难于满足现代企业管理的需要。
在充分研究企业固定资产管理业务需求的基础上,我发现客户对企业固定资产管理系统的要求大致可以归纳为:方便、快速、准确,因为这样可以大大提高清查工作的效率,同时保证了信息流和资产实物流的对应。有效解决企业固定资产的管理难题,使企业更轻松、更有效地管理固定资产。
2.1开发平台和技术简介
项目开发在Jbuilder2005上进行,开发语言为JAVA,系统总体结构设计采用了MVC的思想。根据面向对象分析阶段中类划分结果,规划界面类、控制类、实体类及调用关系。
在面向对象分析阶段,我们把类大体上分成了界面和实体两类。但是,为了提高代码的易维护性、易读性,增加类内部的纯度、类之间调用的灵活性,我们把控制代码另封装为一个类,即控制类,使系统中类之间的调用关系由于需要与数据库进行连接,所以我们用JAVA的JDBC技术与数据库进行数据交互,数据库用SQL Server。
2.2 Jbuilder2005工具简介
Borland JBuilder是业界领先的Java可视化开发环境,可用于构建基于Java 2平台的应用程序、Applets、JSP/Serverlets、JavaBeansTM、Enterprise JavaBeans,以及分布式J2EE 应用。
JBuilder 2005加速企业JavaBeans,WEB服务器,XML,移动产品和数据库应用开发,双向可视化设计工具和迅速调用J2EE应用服务器,这些应用服务器包括BEA® WebLogic,® IBM® WebSphere,® Sybase® EAServer, JBoss,® 和 integrated Borland® Enterprise Server。拥有创新强大的JavaServer™ Faces, Struts, 和 Web服务设计工具,支持J2SE 5.0 (JDK™ 1.5), UML代码可视化,分布式因子分解,代码审核,企业单位测试,支持多语控制系统。 JBuilder 2005新特性 -JavaServer Faces 编辑器和可视化流程设计工具 -J2SE 5.0 和 J2EE 1.4支持 -分布式因子分解 -代码审核 -额外优化执行工具 -扩展ALM综合
2.3 MVC开发模式简介
模型-视图-控制器开发模式简称MVC(Model-View-Control)
1.用户界面,特别是图形用户界面,承担着向用户显示问题模型和与用户进行操作和I/O交互的作用。用户希望保持交互操作界面的相对稳定,但更希望根据需要改变和调整显示的内容和形式。例如,要求支持不同的界面标准或得到不同的显示效果,适应不同的操作需求。这就要求界面结构能够在不改变软件的功能和模型情况下,支持用户对界面构成的调整。
要做到这一点,从界面构成的角度看,困难在于:在满足对界面要求的同时,如何使软件的计算模型独立于界面的构成。模型-视图-控制(MVC:Model-View-Controller)就是这样的一种交互界面的结构组织模型。
2. MVC由Trygve Reenskaug提出,首先被应用在SmallTalk-80环境中,使许多交互和界面系统的构成基础,Microsoft的MFC基础类也遵循了MVC的思想。
对于界面设计可变性的需求,MVC把交互系统的组成分解成模型、视图、控制三种部件。
模型部件是软件所处理问题逻辑在独立于外在显示内容和形式情况下的内在抽象,封装了问题的核心数据、逻辑和功能的计算关系,他独立于具体的界面表达和I/O操作。
视图部件把表示模型数据及逻辑关系和状态的信息及特定形式展示给用户。它从模型获得显示信息,对于相同的信息可以有多个不同的显示形式或视图。
控制部件是处理用户与软件的交互操作的,其职责是控制提供模型中任何变化的传播,确保用户界面于模型间的对应联系;它接受用户的输入,将输入反馈给模型,进而实现对模型的计算控制,是使模型和视图协调工作的部件。通常一个视图具有一个控制器。
模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化-传播机制。
1 MVC中的模型、视图和控制类
MVC中的模型、视图和控制类如图1所示。
(1) 模型包含了应用问题的核心数据、逻辑关系和计算功能,它封装了所需的数据,提供了完成问题处理的操作过程。控制器依据I/O的需要调用这些操作过程。模型还为视图获取显示数据而提供了访问其数据的操作。
这种变化-传播机制体现在各个相互依赖部件之间的注册关系上。模型数据和状态的变化会激发这种变化-传播机制,它是模型、视图和控制器之间联系的纽带。
(2) 视图通过显示的形式,把信息转达给用户。不同视图通过不同的显示,来表达模型的数据和状态信息。每个视图有一个更新操作,它可被变化-传播机制所激活。当调用更新操作时,视图获得来自模型的数据值,并用它们来更新显示。
在初始化时,通过与变化-传播机制的注册关系建立起所有视图与模型间的关联。视图与控制器之间保持着一对一的关系,每个视图创建一个相应的控制器。视图提供给控制器处理显示的操作。因此,控制器可以获得主动激发界面更新的能力。
(3) 控制器通过时间触发的方式,接受用户的输入。控制器如何获得事件依赖于界面的运行平台。控制器通过事件处理过程对输入事件进行处理,并为每个输入事件提供了相应的操作服务,把事件转化成对模型或相关视图的激发操作。
如果控制器的行为依赖于模型的状态,则控制器应该在变化-传播机制中进行注册,并提供一个更新操作。这样,可以由模型的变化来改变控制器的行为,如禁止某些操作。
2.4 JDBC技术简介
JDBC是执行SQL语句的Java API。JDBC本身是一个产品的商标名,但它也可被看作为"Java Database Connecivity(Java数据库连接)"。它由一组用Java语言编写的类与接口组成。
JDBC已成为一种供工具/数据库开发者使用的标准API,用户可以用纯Java API来编写数据库应用。使用JDBC可以很容易地把SQL语句传送到任何关系型数据库中。换言之,用户不必为访问Sybase数据库写一个程序,又为访问Oracle数据库写另一个程序。你可以用JDBC API写出唯一的程序,它能够将SQL语句发送到相应的任何一种数据库。Java与JDBC的结合,使程序员可以只写一次数据库应用软件后,就能在各种数据库系统上运行。由于Java语言具有健壮性、安全、易使用、易理解和自动下载到网络等优点,因此,它是数据库应用的一个极好的基础语言。现在需要找到一种能使Java应用与各种不同数据库对话的方式,而JDBC正是实现这种对话的一种机制。
JDBC扩充了Java的应用范围。例如,用Java与JDBC API可以发布一种包含远程数据库信息的Applet的Web页面。企业使用JDBC可以把它的所有雇员信息通过Intranet连接到一个或多个内部数据库里。毫无疑问,随着Java程序员的不断增加,对Java的数据库的访问需求会越来越迫切。MIS管理员希望Java与JDBC结合,因为这有助于更容易、更经济地发布企业信息。商界可以不断地使用已安装的数据库,方便地存取信息,而不必顾及这些数据库是在何种DBMS系统下存储的。它有助于缩短新应用的开发时间,并可大大简化数据库的安装与版本控制。一旦程序员编写或更新了应用,并把它放入服务器之后,那么每个人都可以获得这个最新版本。在商业销售信息服务领域,Java与JDBC则可以更好地向外界客户提供最新信息。
JDBC的功能与特点
1.JDBC的基本功能
简单地说,JDBC可以做三件事:
·建立与数据库的连接。
·发送SQL语句。
·处理结果。
- JDBC是低级的API与高级API的基础
JDBC是一种"低级"的接口,因为它直接调用SQL命令,但它又可作以为构造高级接口与工具的基础。高级接口是"用户友善的"、更易理解和更为方便的API,由后台将它翻译成如JDBC这样的低级接口。有两种基于JDBC的高级API正处在开发之中:一种是嵌入SQL的Java。JDBC要求把SQL语句作为字符串传递给Java方法。嵌入SQL预处理程序,可让程序员把SQL与Java直接混合使用。例如,在SQL语句中可用Java变量接收或提供SQL值。嵌入SQL预处理程序,把这种混合的Java/SQL翻译成带JDBC调用的Java。另一种是把关系数据库表直接映射成Java类。在"对象/关系"的映射中,表中的每一行变成类的一个实例,每一列的值对应于该实例的一个属性。然后程序员可直接操作Java对象,并自动生成取、存数据的SQL调用。另外它还提供了更高级的映射,例如在Java类中把多个表的行结合起来。
DbConn()类,与数据库建立连接
import java.sql.*;
import java.math.*;
public class DbConn {
private Connection conn;
public DbConn() {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn = DriverManager.getConnection("jdbc:odbc:MyDatabase");
}
catch (java.sql.SQLException s) {
s.printStackTrace();
} catch (ClassNotFoundException ex) {
/** @todo Handle this exception */
ex.printStackTrace();
}
}
public Connection getConnection() {
return conn;
}
}
2.5 数据库平台介绍
SQL Server 是Microsoft(微软)公司的数据库产品,在设计上,SQL Server大量利用了Microsoft Windows 操作系统的底层结构,直接面向Microsoft Windows ,尤其是NT系列服务器操作系统用户。他基本不能移植到其他的操作系统上运行。Microsoft Windows 拥有最多的用户群,上手比较容易。
3.1 需求分析
本系统的主要功能如下:
1、管理员登录
2、固定资产信息管理
3、人员信息管理
4、资产的领用
5、资产的归还
6、资产信息浏览和查询
3.2功能需求
要使用本系统必须先登录,并且只有固定资产管理员能够登录。登录的时候需要填写正确的用户名和密码,管理员可以修改自己的密码。
系统允许有有多个固定资产的管理员,每个管理员的权限相同。
固定资产信息管理又分为:
-
- 固定资产类别管理
固定资产的类别在录入资产信息之前就定义好,录入资产信息之后可以增加新的类别。
类别要求分为两级,如大类可以是办公外设、数码产品、计算机等;小类分为办公外设:传真机、复印机、打印机、其它;数码产品:数码相机、投影仪;计算机:笔记本电脑、台式机、服务器等。
类别应允许添加和删除操作。
-
- 固定资产信息管理
资产的信息包括编号、名称、类别、型号、价值、购买日期、状态、使用者、备注等。
资产型号是文本信息,资产的状态分为:正常、维修、报废,使用者为空表示资产未被使用。
资产应允许执行添加、修改和删除操作。
这里的“人员”是指可能领用资产的人,人员的信息包括人员编号、姓名、职务和备注。
已经登记的人员,可以领用固定资产,领用时需要记录的信息有:设备编号、领用日期、管理员、用途、备注。
只有状态为正常且使用者为空的资产才能被领用,在维修或者已经报废的资产不能够领用。
资产使用完毕后要归还给管理员,归还时根据要依据领用时的记录来填写如下信息:归还日期、管理员等。
资产信息查询又可以分为:
-
- 按资产类别浏览
按资产类别浏览资产信息,类别分成两级,要求能够显示大类和小类下面的资产情况、资产状况。
-
- 查询资产信息
可以按资产编号、资产类别、使用者查询资产详细信息,按使用者查询显示该人员领用的所有资产。
3.3数据字典
数据库共有5个基表,分别是:
- 固定资本表ASSET
- 职工表EMPLOYEE
- 资产类别表CATEGORY
- 用户表OPERATOR
- 借用和归还表LEND
固定资本表ASSET详细信息
表3.1
字段名称 | 含义 | 类型 | 约束 |
assetid | 固定资产编号 | 整数(最大10位) | 主键 |
asset_name | 固定资产名称 | 字符(最长40位) | 非空 |
cateid | 大类编码 | 整数(最大10位) | 非空 |
subcateid | 小类编码 | 整数(最大10位) | 非空 |
model | 样式 | 字符(最长40位) | |
price | 价格 | 浮点数(最大7位,小数点后2位) | 非空 |
purchase_date | 购入日期 | 字符(最长12位) | 非空 |
status | 状态 | 字符(最长1位) | 非空 |
useby | 经手人 | 字符(最长10位) | |
remarks | 备注 | 字符(最长255位) |
表3.2职工表EMPLOYEE详细信息
字段名称 | 含义 | 类型 | 约束 |
empno | 职工编号 | 整数(最大10位) | 主键 |
ename | 职工姓名 | 字符(最长40位) | 非空 |
position | 职位 | 字符(最长40位) | 非空 |
remarks | 备注 | 字符(最长255位) |
表3.3资产类别表CATEGORY详细信息
字段名称 | 含义 | 类型 | 约束 |
cateid | 大类编号 | 整数(最大10位) | 联合主键 |
catename | 大类名称 | 字符(最长40位) | 非空 |
subcateid | 小类编号 | 整数(最大10位) | 联合主键 |
subcatename | 小类名称 | 字符(最长40位) | 非空 |
表3.4用户表OPERATOR详细信息
字段名称 | 含义 | 类型 | 约束 |
name | 用户名 | 字符(最长10位) | |
pwd | 口令 | 字符(最长20位) |
表3.5借用和归还表LEND详细信息
字段名称 | 含义 | 类型 | 约束 |
assetid | 固定资产编号 | 整数(最大10位) | 主键 |
empno | 借用人编码 | 整数(最大10位) | 非空 |
usedate | 借用日期 | 字符(最长12位) | 非空 |
retdate | 归还日期 | 字符(最长12位) | |
isreturn | 是否归还 | 字符(最长4位) | 非空 |
lender | 操作员 | 字符(最长12位) | |
remarks | 备注 | 字符(最长255位) |
4.1系统总体设计
主要界面类有:
- 主界面(包括查询条件界面类、固定资产卡片界面类、资产类别树型结构界面类、固定资产表格界面类);
- 固定资产管理弹出界面类
- 职工管理弹出界面类
- 资产类别管理弹出界面类
- 借用和归还管理弹出界面类
- 用户管理弹出界面类
主要实体类包括:
- 固定资产实体类
- 职工实体类
- 用户实体类
- 资产类别实体类
- 借用和归还实体类
界面类与实体类之间的关系:
界面类负责显示实体类的内容,实体类负责存储当前操作的内容,而永久保存的内容需存储到数据库中。见如下示意图:
界面 |
实体类 |
数据库 |
系统中主要的、关键实体类图如下:
基于分析和设计,整个系统的主要类设计见下表:
表4.1
层次 | 父类名称 | 子类名称 | 作用简要描述 |
界面类 | MM | / | 生成主菜单 |
TSearch | / | 输入查询信息 | |
TTree | / | 显示树状类别信息 | |
Branch | / | 显示树分枝类别信息 | |
TCard | / | 生成资产卡片 | |
TJtable | / | 生成资产表格 | |
AssetView | AddAssetView | 生成增加固定资产界面 | |
UptAssetView | 生成修改固定资产界面 | ||
DelAssetView | 生成删除固定资产界面 | ||
EmpView | AddEmpView | 生成增加职工界面 | |
UptEmpView | 生成修改职工界面 | ||
DelEmpView | 生成删除职工界面 | ||
CateView | AddCateView | 生成增加类别界面 | |
UptCateView | 生成修改类别界面 | ||
DelCateView | 生成删除类别界面 | ||
LendView | LenLendView | 生成借用固定资产界面 | |
RetLendView | 生成归还固定资产界面 | ||
ButPanel | AddButPanel | 生成增加按键界面 | |
UptButPanel | 生成修改按键界面 | ||
DelButPanel | 生成删除按键界面 | ||
LenButPanel | 生成借用按键界面 | ||
RetButPanel | 生成归还按键界面 | ||
控制类 | MenuHandler | 控制菜单的调用 | |
MyHandler | AssetHandler | 控制固定资产的操作,关联 AssetView 和 AssetModel | |
EmpHandler | 控制职工的操作,关联EmpView和EmpModel | ||
CateHandler | 控制类别的操作,关联CateView和CateModel | ||
LendHandler | 控制借还的操作,关联LendView和LendModel | ||
DbConn | 控制对数据库的连接 | ||
Share | 提供共享属性和方法 | ||
实体类 | AssetModel | 存储固定资产信息 | |
EmpModel | 存储职工信息 | ||
CateModel | 存储固定资产类别信息 | ||
CateIdChoices | 提供类别信息 | ||
LendModel | 存储借还固定资产信息 | ||
TreeDataModel | 提供类别树型结构信息 | ||
TJtableModel | 提供固定资产表格信息 | ||
TCardModel | 提供固定资产卡片信息 | ||
另外,为了美化界面并使系统结构更加灵活,又提供如下Panel类:
TrPanel
TbPanel
AssetPanel
EmpPanel
CatePanel
LendPanel
共计49个类。
-
- 系统用例图
-
- [用例1]
A、用例图
B、描述
操作员登录系统,输入用户名和密码,按确认键。
C、参与者
操作员
-
- [用例2]
A、用例图
B、描述
操作员登录系统后,选择用户管理菜单,修改密码。
C、参与者
操作员
-
- [用例3]
A、用例图
B、描述
操作员登录系统后,选择主屏幕左侧的资产查询或树型分类查询。
C、参与者
操作员
-
- [用例4]
A、用例图
B、描述
操作员登录系统后,选择固定资产管理菜单,进行固定资产的增、删、改、查。
C、参与者
操作员
-
- [用例5]
A、用例图
B、描述
操作员登录系统后,选择分类管理菜单,进行分类的增、删、改、查。
C、参与者
操作员
-
- [用例6]
A、用例图
B、描述
操作员登录系统后,选择职工管理菜单,进行职工的增、删、改、查。
C、参与者
操作员
-
- [用例7]
A、用例图
B、描述
操作员登录系统后,选择借用与归还固定资产管理菜单,进行固定资产的借用与归还操作。
C、参与者
操作员
登录用例完成后,方可进行其它用例操作。
4.2功能模块设计
根据需求文档,找出所有相关概念,并提炼成表格形式。见如下表格,也称为“概念清单”。一般来说,名词归为初级类、属性等信息;动词形成主要功能或者类的方法;短语形成业务逻辑或者条件限制
名称 | 词性 | 简要描述 |
固定资产 | 名词 | 大于2000的资产 |
职工 | 名词 | |
资产类别 | 名词 | 分为大类和小类两层 |
借用 | 动词 | 某职工借用固定资产 |
归还 | 动词 | 某职工归还借用的固定资产 |
资产名称 | 名词 | |
样式 | 名词 | 例如:包、箱。。。 |
价格 | 名词 | 固定资产的价格,必须大于2000 |
购入日期 | 名词 | |
资产状态 | 名词 | 分为1表示“可用”或0表示“不可用” |
购入人 | 名词 | |
借用人 | 名词 | 必须是职工 |
归还人 | 名词 | 必须是借用人 |
操作人 | 名词 | |
借用日期 | 名词 | |
归还日期 | 名词 | |
超级用户 | 名词 | 可修改资产状态 |
当删除职工时,系统会检查该员工是否已全部归还了固定资产 | 短语 | 条件限制 |
只有固定资产的状态是“1”时,才可以借用 | 短语 | 条件限制 |
借用和归还固定资产时,系统会自动记录在案 | 短语 | 业务逻辑 |
。。。 |
2、确定初级类
根据反复讨论的概念清单和需求说明等相关文档,确定如下初级类,见下表:
类名 | 属性或方法 | 属性或方法名称 | 简要描述 |
1.固定资产 | 属性 | 资产名称 | |
所属大类 | 资产类别中的大类 | ||
所属小类 | 资产类别中的小类 | ||
样式 | |||
价格 | |||
购入日期 | |||
资产状态 | |||
购入人 | 超级用户 | ||
方法 | 增加固定资产() | ||
修改固定资产信息() | 只能修改某些信息,比如样式、价格、购入日期、资产状态 | ||
删除固定资产信息() | |||
查询固定资产信息() | |||
2.职工 | 属性 | 名称 | |
职务 | |||
方法 | 增加新职工() | ||
修改员工信息() | |||
删除员工信息() | |||
查询员工信息() | |||
。。。 |
3、确定主要功能和菜单项
根据细化结果和需求说明,提出主要功能如下:
- 固定资产的增、删、改、查功能;
- 职工的增、删、改、查功能;
- 资产类别的增、删、改、查功能;
- 固定资产的借用和归还;
- 用户登陆、退出和密码修改。
根据主要功能,可确定菜单项如下:
- 固定资产管理菜单,包括:增、删、改、查4个子菜单;
- 职工管理菜单,包括:增、删、改、查4个子菜单;
- 资产类别管理菜单,包括:增、删、改、查4个子菜单;
- 固定资产的借用和归还管理菜单,包括:借用、归还2个子菜单;
- 用户管理菜单,包括:退出和密码修改2个子菜单。
菜单均采用下拉方式,示意图如下:
固定资产管理 | 职工管理 | 资产类别管理 | 借用和归还管理 | 用户管理 | ||
增加。。。 | 增加。。。 | 增加。。。 | 借用 | 密码修改 | ||
删除。。。 | 删除。。。 | 删除。。。 | 归还 | 退出 | ||
修改。。。 | 修改。。。 | 修改。。。 | ||||
查询。。。 | 查询。。。 | 查询。。。 | ||||
5.1程序设计
登陆界面如下
图5.1
主界面模型图如下
图5.2
固定资产管理弹出界面描述:
界面示意图如下:
图5.3
源代码:
/*
*AssetModel.java:建立固定资产实体类。
*包括:与数据库进行增、删、改、查操作。
*/
import java.sql.*;
import java.math.*;
public class AssetModel {String assetid;String assetname;String cateid;String subcateid;String model;String price;String purchasedate;String status;String useby;String remarks;DbConn dbc;Connection conn;
public AssetModel() {
}
/*
* 添加方法
*/
public void insert() {
dbc = new DbConn();
conn = dbc.getConnection();
try {
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery ("select max(assetid)+1 from asset");
while (rset.next()) {
assetid = rset.getString(1);
}
if (assetid == null) assetid = "1";
PreparedStatement pstmt = conn.prepareStatement("inser tinto ASSET
(assetid,asset_name,cateid,subcateid,model,price,purchase_date,status,useby,remarks) values (?,?,?,?,?,?,?,?,?,?)");
pstmt.setInt(1, Integer.parseInt(assetid));
pstmt.setString(2, assetname);
pstmt.setInt(3, Integer.parseInt(cateid));
pstmt.setInt(4, Integer.parseInt(subcateid));
pstmt.setString(5, model);
pstmt.setFloat(6, Float.parseFloat(price));
pstmt.setString(7, purchasedate);
pstmt.setString(8, status);
pstmt.setString(9, useby);
pstmt.setString(10, remarks);
pstmt.execute();
PreparedStatement pstmt1 =
conn.prepareStatement("insert into LEND (assetid) values (?)");
pstmt1.setInt(1, Integer.parseInt(assetid));
pstmt1.execute();
conn.commit();
conn.close();
}
catch (java.sql.SQLException s) {
System.out.println("exception: " + s.getMessage());
}
}
/*
* 查询方法
*/
public void select() {
String sql;
dbc = new DbConn();
conn = dbc.getConnection();
sql = "SELECT assetid,rtrim(asset_name),cateid,subcateid,rtrim(model),price,purchase_date,status,useby,rtrim(remarks) FROM asset where assetid = "+Integer.parseInt(assetid);
try {
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery (sql);
while (rset.next()) {
assetname = rset.getString(2);
cateid = rset.getString(3);
subcateid = rset.getString(4);
model = rset.getString(5);
price = rset.getString(6);
purchasedate = rset.getString(7);
status = rset.getString(8);
useby = rset.getString(9);
remarks = rset.getString(10);
}
conn.commit();
rset.close();
stmt.close();
conn.close();
}
catch (java.sql.SQLException s) {
System.out.println("exception: " + s.getMessage());
}
}
public void update() {
dbc = new DbConn();
conn = dbc.getConnection();
try {
PreparedStatement pstmt = conn.prepareStatement("update ASSET set asset_name=?,model=?,price=?,purchase_date=?,status=?,useby=?,remarks=? where assetid = ?");
pstmt.setString(1, assetname);
pstmt.setString(2, model);
pstmt.setFloat(3, Float.parseFloat(price));
pstmt.setString(4, purchasedate);
pstmt.setString(5, status);
pstmt.setString(6, useby);
pstmt.setString(7, remarks);
pstmt.setInt(8, Integer.parseInt(assetid));
pstmt.execute();
conn.commit();
conn.close();
}
catch (java.sql.SQLException s) {
System.out.println("exception: " + s.getMessage());
}
}
/*
* 删除方法
*/
public void delete() {
dbc = new DbConn();
conn = dbc.getConnection();
String sql = "delete asset where assetid = "+Integer.parseInt(assetid) ;
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.execute();
String sql1 = "delete lend where assetid = "+Integer.parseInt(assetid) ;
PreparedStatement pstmt1 = conn.prepareStatement(sql1);
pstmt1.execute();
conn.commit();
conn.close();
assetid = null;
assetname = null;
cateid = "";
subcateid = "";
model = null;
price = null;
purchasedate = null;
status = "";
useby = null;
remarks = null;
}
catch (java.sql.SQLException s) {
System.out.println("exception: " + s.getMessage());
}
}
}
其余4块管理弹出界面描述同上。
第六章 系统测试
6.1 测试的任务与目标
主要测试软件的下面几个方面
(1)功能性:软件所实现的功能达到它的设计规范和满足用户需求的程度;
(2) 可靠性:在规定的时间和条件下,软件所能维持其性能水平的程度;
(3) 易使用性:对于一个软件,用户学习、操作、准备输入和理解输出所作努力的程度;
(4) 效率:在指定条件下,用软件实现某种功能所需的计算机资源(包括时间)的有效程度;
(5) 可维护性:在一个运行软件中,当环境改变或软件发生错误时,进行相应修改所做努力的程度;
(6) 可移植性:软件从一个计算机系统或环境移植到另一个系统或环境的容易程度。
软件质量是一个软件企业成功的必要条件,其重要性无论怎样强调都不过分。软件质量与传统意义上的质量概念并无本质差别,只是针对软件的某些特性进行了调整。
软件测试的目的决定了如何去组织测试。如果测试的目的是为了尽可能多地找出错误,那么测试就应该直接针对软件比较复杂的部分或是以前出错比较多的位置。如果测试目的是为了给最终用户提供具有一定可信度的质量评价,那么测试就应该直接针对在实际应用中会经常用到的商业假设。
不同的机构会有不同的测试目的;相同的机构也可能有不同测试目的,可能是测试不同区域或是对同一区域的不同层次的测试。
首先,测试并不仅仅是为了要找出错误。通过分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进。同时,这种分析也能帮助我们设计出有针对性地检测方法,改善测试的有效性。
其次,没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。详细而严谨的可靠性增长模型可以证明这一点。例如 Bev Littlewood发现一个经过测试而正常运行了n小时的系统有继续正常运行n小时的概率。
6.2测试方案
1、打开类别管理窗口,输入:大类编号,1;大类名称,办公外设;小类编号,101;小类名称,传真机;依次进行增加,查询,修改和删除的操作。
2、打开固定资产管理窗口,依次输入资产编号,资产名称,大类编号,小类编号,样式,价格,购入日期,状态以及备注,进行增加,查询,修改和删除的操作。
3、打开职工管理窗口,输入职工号,姓名,工位和备注,进行增加,查询,修改和删除的操作。
4、打开用户管理窗口,输入新密码,进行修改密码的操作。
结 论