资源描述
实验项目:实验室设备管理系统
一、 项目管理:
阶段
时间及实验
任务
参与人员
产生文档
项目管理
2009.10.27
实验一
确定课题,组织组员,合理分工。
分工明细及项目进程表
需求分析
2009.10.27
实验一
确定软件的功能和需求、性能需求和运行环境约束,编制软件需求规格说明、软件系统的确认测试准则
需求规格说明书
确认测试准则
概要设计
2009.10.27
验一
建立软件系统的总体结构和模块间的关系,定义各功能模块的接口,涉及全局数据库,规定涉及约束,制定组装测试计划。
概要设计说明书
组装测试计划
数据库设计
2009.10.28实验二
根据概要设计对本软件所必须的数据库进行分析及设计
数据库设计说明书
详细设计
2009.10.28实验二
对概要设计产生的功能模块逐步细化,形成若干个可编程的程序模块
模块测试方案
编码
2009.10.28
2009.10.29
实验三
根据详细设计文档将详细设计转化为所要求的编程语言或数据库语言的程序,并对这些程序进行调试和程序单元测试,验证程序模块与详细设计文档的一致性
源程序清单
测试
单元测试
2009.10.28
2009.10.29
实验三
采用白盒测试技术进行如下测试:
1. 模块接口测试;
2. 模块局部数据结构测试;
3. 模块边界条件测试;
4. 模块中所有独立执行通路测试;
5. 模块的各条错误处理通路测试。
单元测试报告
综合测试
2009.10.29
实验三
发现与接口有关的各种错误
综合测试报告
确认测试
2009.10.29实验三
检查软件是否满足软件需求说明书中的确认标准
确认测试报告
项目实施
2009.10.29
2009.10.30
实验四
完善程序流图
书写软件使用说明书和用户手册
项目开发总结报告
最终用户手册
二、软件需求分析
1 软件系统需求描述:
实验室设备管理系统是利用Eclipse作为开发工具、sqlsetver作为数据库的系统。要求实现如下功能:
⑴所有工作由专门人员负责完成,其他人不得任意使用;
⑵对于已彻底损坏的作报废处理,同时详细记录有关信息;
⑶对于有严重问题(故障)的要即使修理,并记录修理日期、设备名、修理厂家、修理费、责任人等;
⑷对于急需但又缺少的设备需以“申请表”的形式送交上级领导请求批准购买。新设备购入后要立即进行设备登记(包括类别、设备名、型号、规格、单价、数量、购置日期、生产厂家、购买人等),同时更新申请表的内容;
⑸随时对现有设备及其修理、报废情况进行统计、查询,要求能够按类别和时间段(某日期之前)查询。
本管理系统通过计算机对实验设备进行自动管理,设备管理员可以直接在计算机实现实验设备的信息管理,并在一定程度上实现自动化,改善了工作运行效率和效果。
2 软件系统数据流图
1) 顶层数据流图
2) 0层数据流图
3) 一层数据流图
4)总数据流图
3软件系统数据字典:
1、 数据流条目
① 登陆信息
输入:设备管理员
输出:身份验证1
描述:登陆信息=用户名+密码+登陆权限
② 查询信息
输入:合法人员对设备的查询操作
输出:设备信息表
描述:查询信息=设备名/型号/类别/购置日期
③ 维修信息
输入:所需维修设备的信息
输出:确定维修设备的记录
描述:维修信息=设备名+修理日期+修理厂家+修理费+负责人
④ 新设备
输入:购买设备的信息
输出:确定购买的新设备的记录
描述:新设备=类别+设备名+型号+规格+单价+数量等
⑤ 报废设备
输入:所需报废的设备的信息
输出:报废的设备记录
描述:报废设备=类别+设备名+型号等
⑥ 审核信息
输入:审核3
输出:上级领导
描述:审核信息=报废设备信息/新设备购买记录
2、 加工条目
身份验证1,统计查询2.1,维修2.2,购买2.3,报废2.4,生产报表3.1,审核3.2
3、 文件条目
① 登陆表
输入:身份验证1
输出:身份验证1
数据结构:用户名+密码+登陆权限
② 设备基本信息表
输入:统计查询2.1
数据结构:类别+设备名+型号+规格等
③ 维修记录表
输入:统计查询2.1,维修2.2
输出:统计查询2.1
数据结构:设备名+修理日期+修理厂家+修理费+责任人等
④ 新设备表
输入:统计查询2.1,购买2.2
输出:统计查询2.1
数据结构:类别+设备名+型号+规格+单价+数量+生产厂家+购买人等
⑤ 报废记录表
输入:报废2.4,统计查询2.1,生产报表3.1
输出:统计查询2.1,生产报表3.1
数据结构:类别+设备名+型号等
⑥ 申请表
输入:统计查询2.1,生产报表3.1
输出:统计查询2.1,生产报表3.1,购买2.3
数据结构:设备名+型号+规格+数量+负责人
三:软件设计
1实验室设备管理系统模块结构图
实验室设备管理系统
上级领导操作
设备管理员操作
系统功能操作
审核管理
设备报废管理
设备购买管理
设备维修管理
设备查询管理
系统维护管理
用户登陆管理
2界面设计
3实验室设备管理系统数据设计
4管理系统其中的3个模块的详细设计
① 上级领导操作模块
②设备管理员操作模块
③ 统功能操作模块
5数据库设计
① 登陆表
列名
数据类型
长度
允许空
用户名
varchar
50
not null
密码
varchar
50
not null
登陆权限
char
10
not null
② 设备基本信息表
列名
数据类型
长度
允许空
设备型号
varchar
10
not null
设备名
varchar
20
not null
规格
varchar
10
not null
单价
float
8
null
购买日期
datetime
8
null
生产厂家
varchar
20
null
购买人
varchar
10
null
数量
Int
4
null
③ 维修记录表
列名
数据类型
长度
允许空列名
设备型号
varchar
10
not null
设备名
varchar
20
not null
维修日期
datetime
8
null
维修厂家
varchar
30
null
维修费用
float
8
null
责任人
varchar
10
null
④ 报废记录表
列名
数据类型
长度
允许空
设备型号
varchar
10
not null
设备名
varchar
20
not null
报废日期
datetime
8
null
责任人
varchar
10
null
⑤ 申请表
列名
数据类型
长度
允许空
设备名
varchar
10
not null
日期
Datatime
8
not null
规格
varchar
10
not null
数量
int
4
null
申请人
Varchar
10
Null
四、编码与单元测试
1、各模块示意图
2、用户登录界面:
package shebeiguanli;
import java.applet.*;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.borland.jbcl.layout.*;
/**
* <p>Title:实验室设备管理系统登录界面 </p>
* @author gengdexin
* @version 1.0
*/
public class Log extends JFrame {
/*
* 构建显示对象
*/
JPanel contentPane;
XYLayout xYLayout1 = new XYLayout();
JPasswordField password = new JPasswordField();
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
JLabel jLabel4 = new JLabel();
JTextField jTextField1 = new JTextField();
JLabel jLabel3 = new JLabel();
JLabel jLabel5 = new JLabel();
JLabel jLabel6 = new JLabel();
public Log() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
contentPane = (JPanel) this.getContentPane();
password.addActionListener(new Log_password_actionAdapter(this));
contentPane.setLayout(xYLayout1);
this.setSize(new Dimension(500, 400));
this.setTitle("实验室设备管理系统");
jLabel1.setFont(new java.awt.Font("SansSerif", 0, 25));
jLabel1.setForeground(Color.red);
jLabel1.setText("欢迎进入实验室设备管理系统");
jLabel2.setFont(new java.awt.Font("SansSerif", 0, 20));
jLabel2.setText("姓名");
jTextField1.setText("");
jLabel3.setFont(new java.awt.Font("SansSerif", 0, 20));
jLabel3.setText("密码");
jLabel4.setFont(new java.awt.Font("SansSerif", 0, 20));
jLabel4.setText("开发人员:耿德新 蔺明亮 毛冬冬");
jLabel5.setFont(new java.awt.Font("SansSerif", 0, 20));
jLabel5.setText("李章华 吕文强 顾海驹");
jLabel6.setFont(new java.awt.Font("SansSerif", 0, 15));
jLabel6.setForeground(Color.red);
jLabel6.setText("交流:gengdxin@");
contentPane.add(jLabel1, new XYConstraints(80, 10, 350, 34));
contentPane.add(jLabel2, new XYConstraints(92, 142, -1, -1));
contentPane.add(jTextField1, new XYConstraints(130, 145, 91, 26));
contentPane.add(jLabel3, new XYConstraints(222, 144, -1, -1));
contentPane.add(password, new XYConstraints(263, 144, 105, 28));
contentPane.add(jLabel4, new XYConstraints(50, 250, -1, -1));
contentPane.add(jLabel5, new XYConstraints(150, 280, -1, -1));
contentPane.add(jLabel6, new XYConstraints(100, 340, -1, -1));
}
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
void password_actionPerformed(ActionEvent e) {
try {
Frame1 Frame= new Frame1();
Frame.show();
validID();
}
catch (Exception ew) {
System.out.println(ew.getMessage());
}
this.setVisible(false);
}
//连接sql
void validID() {
try {
String str1, str2;
str1 = jTextField1.getText();
str2 = password.getText();
Connection con = null;
String url = "jdbc:odbc:shebeiguanli";
String user = "";
String password = "";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection(url,user,password);
Statement stmt =con.createStatement();
//执行动态的sql语句
PreparedStatement pstmt = con.prepareStatement(
//依据读者的名字查询读者的信息的sql语句
"use shebeiguanli select * from 登录 where username=?");
//将读者的名字添加到具体的sql语句中
pstmt.setString(1, str1);
//使用ResultSet中的方法executeQuery()来完成sql语句的执行
ResultSet res = pstmt.executeQuery();
//使用getString()来获取sql查询的结果
if ((!res.next()) || res.getString("password") == null) {
JOptionPane.showMessageDialog(this, "查无此人", "错误",
JOptionPane.ERROR_MESSAGE);
}else {
// if ( !res.getString(2).equals(str2)) {
if ( !res.getString(2).equals(str2)) {
JOptionPane.showMessageDialog(this, "密码错误", "错误",
JOptionPane.ERROR_MESSAGE);
}else {
System.out.println("正确");
do{
System.out.println(res.getString(1)+":" + res.getString(2));
}while (res.next());
loader();
}
}
pstmt.close();
con.close();
}
catch (ClassNotFoundException e) {
System.out.println(e.getMessage());
}catch (SQLException edd) {
edd.printStackTrace() ;
System.out.println(edd.getMessage());
}
}
void loader() {
try {
Frame9 Frame= new Frame9();
Frame.show();
}
catch (Exception ew) {
System.out.println(ew.getMessage());
}
}
}
class Log_password_actionAdapter implements java.awt.event.ActionListener {
Log adaptee;
Log_password_actionAdapter(Log adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.password_actionPerformed(e);
}
}
3、主界面:
package shebeiguanli;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.borland.jbcl.layout.*;
//系统主界面
public class Frame9 extends JFrame {
JPanel contentPane;
JMenuBar jMenuBar1 = new JMenuBar();
JMenu 设备查询 = new JMenu();
JMenuItem 设备信息 = new JMenuItem();
JMenu 设备申请 = new JMenu();
JMenuItem 申请登记 = new JMenuItem();
XYLayout xYLayout1 = new XYLayout();
JLabel jLabel1 = new JLabel();
JMenu jMenu2 = new JMenu();
JMenuItem jMenuItem7 = new JMenuItem();
JMenu jMenu3 = new JMenu();
JMenuItem jMenuItem8 = new JMenuItem();
JMenuItem jMenuItem1 = new JMenuItem();
JMenuItem jMenuItem3 = new JMenuItem();
JLabel jLabel2 = new JLabel();
JLabel jLabel3 = new JLabel();
JLabel jLabel4 = new JLabel();
JMenu jMenu5 = new JMenu();
JMenuItem jMenuItem2 = new JMenuItem();
public Frame9() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(xYLayout1);
this.setSize(new Dimension(600, 500));
this.setTitle("实验室管理系统");
设备查询.setFont(new java.awt.Font("SansSerif", 0, 20));
设备查询.setText("设备查询");
设备信息.setFont(new java.awt.Font("SansSerif", 0, 20));
设备信息.setText("设备信息查询");
设备信息.addActionListener(new Frame9_设备信息_ActionAdapter(this));
设备申请.setFont(new java.awt.Font("SansSerif", 0, 20));
设备申请.setText("设备申请");
设备申请.addActionListener(new Frame9_设备申请_actionAdapter(this));
申请登记.setFont(new java.awt.Font("SansSerif", 0, 20));
申请登记.setText("申请登记");
申请登记.addActionListener(new Frame9_申请登记_ActionAdapter(this));
jLabel1.setFont(new java.awt.Font("SansSerif", 0, 40));
jLabel1.setForeground(new Color(210, 0, 0));
jLabel1.setHorizontalAlignment(SwingConstants.LEADING);
jLabel1.setText("实验室管理系统");
contentPane.setFont(new java.awt.Font("Dialog", 0, 11));
contentPane.setForeground(Color.darkGray);
jMenu2.setFont(new java.awt.Font("SansSerif", 0, 20));
jMenu2.setFocusPainted(false);
jMenu2.setText("维修记录");
jMenuItem7.setFont(new java.awt.Font("SansSerif", 0, 20));
jMenuItem7.setText("维修记录登记");
jMenuItem7.addActionListener(new Frame9_jMenuItem7_actionAdapter(this));
jMenu3.setFont(new java.awt.Font("SansSerif", 0, 20));
jMenu3.setText("报废记录");
jMenuItem8.setFont(new java.awt.Font("SansSerif", 0, 20));
jMenuItem8.setText("设备报废登记");
jMenuItem8.addActionListener(new Frame9_jMenuItem8_actionAdapter(this));
设备查询.addSeparator();
jMenuItem1.setFont(new java.awt.Font("SansSerif", 0, 20));
jMenuItem1.setText("维修记录查询");
jMenuItem1.addActionListener(new Frame9_jMenuItem1_actionAdapter(this));
jMenuItem3.setFont(new java.awt.Font("SansSerif", 0, 20));
jMenuItem3.setText("设备报废查询");
jMenuItem3.addActionListener(new Frame9_jMenuItem3_actionAdapter(this));
jLabel2.setFont(new java.awt.Font("SansSerif", 0, 40));
jLabel2.setForeground(Color.red);
jLabel2.setText("欢迎进入");
jLabel3.setFont(new java.awt.Font("SansSerif", 0, 40));
jLabel3.setForeground(Color.red);
jLabel3.setText("实验室设备管理系统");
jLabel4.setFont(new java.awt.Font("SansSerif", 0, 15));
jLabel4.setForeground(Color.red);
jLabel4.setText("交流:gengdxin@");
jMenu5.setFont(new java.awt.Font("SansSerif", 0, 20));
jMenu5.setText("退出系统");
jMenuItem2.setFont(new java.awt.Font("SansSerif", 0, 20));
jMenuItem2.setText("退出");
jMenuItem2.addActionListener(new Frame9_jMenuItem2_actionAdapter(this));
jMenuItem2.addItemListener(new Frame9_jMenuItem2_itemAdapter(this));
设备查询.add(设备信息);
设备查询.addSeparator();
设备申请.addSeparator();
设备申请.add(申请登记);
设备申请.addSeparator();
jMenuBar1.add(设备查询);
jMenuBar1.add(设备申请);
jMenuBar1.add(jMenu2);
jMenuBar1.add(jMenu3);
jMenuBar1.add(jMenu5);
jMenu2.addSeparator();
jMenu2.add(jMenuItem7);
jMenu2.addSeparator();
jMenu2.add(jMenuItem1);
jMenu2.addSeparator();
jMenu3.addSeparator();
jMenu3.add(jMenuItem8);
jMenu3.addSeparator();
jMenu3.add(jMenuItem3);
jMenu3.addSeparator();
contentPane.add(jLabel1, new XYConstraints(175, 1, -1, -1));
contentPane.add(jLabel3, new XYConstraints(150, 200, -1, -1));
contentPane.add(jLabel2, new XYConstraints(50, 100, 163, 45));
contentPane.add(jLabel4, new XYConstraints(180, 350, -1,-1));
jMenu5.addSeparator();
jMenu5.add(jMenuItem2);
jMenu5.addSeparator();
this.setJMenuBar(jMenuBar1);
}
public void 设备信息_actionPerformed(ActionEvent e) {
try {
Frame2 Frame= new Frame2();
Frame.show();
}
catch (Exception ew) {
System.out.println(ew.getMessage());
}
}
public void 申请登记_actionPerformed(ActionEvent e) {
try {
Frame7 Frame= new Frame7();
Frame.show();
}
catch (Exception ew) {
System.out.println(ew.getMessage());
}
}
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
设备信息_actionPerformed(null);
}
}
void shebei_actionPerformed(ActionEvent e) {
try {
}
catch (Exception ew) {
System.out.println(ew.getMessage());
}
}
void jMenuItem1_actionPerformed(ActionEvent e) { try {
Frame4 Frame= new Frame4();
Frame.show();
}
catch (Exception ew) {
System.out.println(ew.getMessage());
}
}
void jMenuItem3_actionPerformed(ActionEvent e) {
try {
Frame6 Frame= new Frame6();
Frame.show();
}
catch (Exception ew) {
System.out.println(ew.getMessage());
}
}
void jMenuItem4_actionPerformed(ActionEvent e) {
try {
Frame3 Frame= new Frame3();
Frame.show();
}
catch (Exception ew) {
System.out.println(ew.getMessage());
}
}
void jMenuItem5_actionPerformed(ActionEvent e) {
try {
Frame6 Frame= new Frame6();
Frame.show();
}
catch (Exception ew) {
System.out.println(ew.getMessage());
}
}
void jMenuItem6_actionPerformed(ActionEvent e) {
try {
retur Frame= new retur();
Frame.show();
}
catch (Exception ew) {
System.out.println(ew.getMessage());
}
}
void jMenuItem7_actionPerformed(ActionEvent e) {
try {
Frame3 Frame= new F
展开阅读全文