测试与调试 滕娟
测试用例
github地址:https://github.com/mygithubq/libraryManagement
(一)用例图
用例图在需求分析阶段有重要作用,它是作为参与者的外部用户所能观察到的系统功能模型图。整个开发过程都是围绕需求阶段用例进行的。首先需要确定参与者。
管理员在登录后对读者信息进行查询以及对书籍的添加、删除、更新和查询。
用户在登录后可以对书籍信息进行查询。
图书管理系统管理员-用户用例图
测试结果
测试:
测试截图:
图1:图书管理系统主界面
图2:查询读者信息
图3:更新图书信息
图4:更新书籍成功
测试代码:
1、用户登录界面
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import java.io.*;
public class UserLogin extends JFrame implements ActionListener
{
private static final long serialVersionUID = 1L;
String name;
DataBaseManger db=new DataBaseManger();
MainWindow mainFrame;
JFrame f=null;
JPanel panel1,panel2;
JLabel UserLabel,PasswordLabel;
JTextField UserTextField;
JPasswordField PasswordTextField;
JButton YesBtn,CancelBtn;
Container c;
ResultSet rs;
public UserLogin(MainWindow mainFrame)
{
super("用户登录");
this.mainFrame=mainFrame;
UserLabel=new JLabel("用户名",JLabel.CENTER);
PasswordLabel=new JLabel("密码",JLabel.CENTER);
UserTextField=new JTextField(10);
PasswordTextField=new JPasswordField(10);
YesBtn=new JButton("确定");
CancelBtn=new JButton("取消");
YesBtn.addActionListener(this);
CancelBtn.addActionListener(this);
panel1=new JPanel();
panel1.setLayout(new GridLayout(2,2));
panel2=new JPanel();
c=getContentPane();
c.setLayout(new BorderLayout());
panel1.add(UserLabel);
panel1.add(UserTextField);
panel1.add(PasswordLabel);
panel1.add(PasswordTextField);
c.add(panel1,BorderLayout.CENTER);
panel2.add(YesBtn);
panel2.add(CancelBtn);
c.add(panel2,BorderLayout.CENTER);
setSize(300,150);
JLabel JL=new JLabel();
c.add(JL,"North");
c.add(panel1,"Center");
c.add("South",panel2);
panel1.setBackground(new Color(255,255,255));
setLocation(400,200);
}
public void actionPerformed(ActionEvent e)
{if(e.getSource()==CancelBtn)
{this.dispose();}
else
{char[] password=PasswordTextField.getPassword();
String passwordSTR=new String(password);
String strSQL;
strSQL="select * from users where uname='"+UserTextField.getText().trim()+"'and upassword='"+passwordSTR+"'";
rs=db.getResult(strSQL);
boolean isExist=false;
try
{ rs.next();
mainFrame.loginNo=rs.getString(1);
name=rs.getString(1);
mainFrame.loginName=name;
int right;
right=rs.getInt(1);
mainFrame.setenabled(right);
if(name.length()!=0)
isExist=true;
}
catch(Exception pe)
{ pe.printStackTrace(); }
if(UserTextField.getText().trim().equals(""))
{
JOptionPane.showMessageDialog(null,"用户名不可为空!");
return;
}
if(passwordSTR.equals(""))
{
JOptionPane.showMessageDialog(null,"密码不可为空!");
return;
}
if(!isExist)
{ JOptionPane.showMessageDialog(null,"用户名不存在或者密码不正确!");}
else
{JOptionPane.showMessageDialog(null,"登录成功");
this.dispose();}
}}}
表2 读者查询模块的测试用例
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand()=="确定")
this.dispose();
if(e.getActionCommand()=="查询")
{
String sno=jtf.getText();
String sqlstrR;
if((mw.loginNo.trim().equals(sno))||(mw.loginName.trim().equals("admin")))
{ sqlstrR="select * from reader where sno='"+sno+"'";
rs=db.getResult(sqlstrR);
try
{ rs.next();
jta.setText("");
jta.append("学号为:"+rs.getString(1)+", "+"姓名为:"+rs.getString(2)+","+"性别为:"+rs.getString(3)+"\n");
jta.append("年龄为:"+rs.getString(4)+", "+"密码为:"+rs.getString(5)+","+" 学院为:"+rs.getString(6)+"\n");
String sqlstr="select * from lendbook where sno='"+sno+"'";
rs=db.getResult(sqlstr);}
catch(Exception pe)
{ pe.printStackTrace(); } }
else
{
JOptionPane.showMessageDialog(null,"请输入正确的证件号!");
3 图书查询模块的测试用例
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.sql.*;
public class FindBook extends JFrame implements ActionListener
{ DataBaseManger db=new DataBaseManger();
ResultSet rs;
JLabel select=new JLabel("请输入书名或者索书号");
JTextField jtf=new JTextField(20);
JPanel a=new JPanel();
JPanel b=new JPanel();
JLabel lb=new JLabel("书籍信息");
JButton findbt=new JButton("查询");
JButton yesbt=new JButton("确定");
JTextArea jta=new JTextArea(10,10);
public FindBook()
{ super("查询书籍信息");
Container c=getContentPane();
a.add(select);
a.add(jtf);
a.add(findbt);
c.add(a,BorderLayout.NORTH);
b.add(lb);
b.add(jta);
b.add(yesbt);
c.add(b,BorderLayout.SOUTH);
yesbt.addActionListener(this);
findbt.addActionListener(this);
setSize(500,300);
setVisible(true);
setLocation(400,150);
}
public void actionPerformed(ActionEvent e)
{ if(e.getActionCommand()=="确定")
this.dispose();
if(e.getActionCommand()=="查询")
{ String bname=jtf.getText();
String bno=jtf.getText();
String sqlstr;
sqlstr="select * from book where bname='"+bname+"' or bno='"+bno+"'";
rs=db.getResult(sqlstr);
try
{ jta.setText("");
if(rs.next()){
jta.append("索书号为:"+rs.getString(1)+"\n");
jta.append("书名为:"+rs.getString(2)+"\n");
jta.append("现有数量为:"+rs.getString(3)+"\n");
jta.append("出版社为:"+rs.getString(5)+"\n");
jta.append("作者为:"+rs.getString(4)+"\n"); }
else
{jta.append("对不起,没有您要找的书籍!"); } }
catch(Exception pe)
{ pe.printStackTrace();
} }}}
4书籍删除模块的测试用例
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.sql.*;
public class DeleteBook extends JFrame implements ActionListener
{ MainWindow mw=new MainWindow();
DataBaseManger db=new DataBaseManger();
ResultSet rs;
JLabel bno=new JLabel("<html><font color=#000000 size='4'>请输入要删除的图书索引号:</font>",SwingConstants.CENTER);
JLabel L;
JTextField tno=new JTextField(10);
JTable table;
JButton delbt=new JButton("删除");
JButton yesbt=new JButton("确定");
JPanel p1=new JPanel();
JPanel p2=new JPanel();
public DeleteBook()
{ super("删除图书");
Container c=getContentPane();
p1.add(bno);
p1.add(tno);
c.add(p1,BorderLayout.NORTH);
p2.add(delbt);
p2.add(yesbt);
c.add(p2,BorderLayout.SOUTH);
delbt.addActionListener(this);
yesbt.addActionListener(this);
setSize(400,300);
setLocation(400,150);
JPanel p=new JPanel();
p.setLayout(new BorderLayout()); }
public void actionPerformed(ActionEvent e)
{ String bno;
if(e.getActionCommand()=="确定")
this.dispose();
if(e.getActionCommand()=="删除")
{ bno=tno.getText();
String sqlstr="delete bno from book where bno='"+bno+"'";
boolean result=db.updateSql(sqlstr);
db.closeConnection();
if(result)
{JOptionPane.showMessageDialog(null,"删除书籍成功!");}
else
{JOptionPane.showMessageDialog(null,"删除书籍失败!");
}}}}
5 书籍添加模块的测试用例
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.sql.*;
public class AddBook extends JFrame implements ActionListener
{ MainWindow mw=new MainWindow();
DataBaseManger db=new DataBaseManger();
ResultSet rs;
JPanel a,b,c,d,e,f;
JLabel bname=new JLabel();
JLabel bno=new JLabel();
JLabel bnum=new JLabel();
JLabel author=new JLabel();
JLabel publisher=new JLabel();
JTextField tname=new JTextField(20);
JTextField tno=new JTextField(20);
JTextField tnum=new JTextField(20);
JTextField tauthor=new JTextField(20);
JTextField tpublisher=new JTextField(20);
JButton addbt=new JButton("添加");
JButton yesbt=new JButton("确定");
JPanel p3=new JPanel();
public AddBook()
{
super("添加图书");
a=new JPanel();
b=new JPanel();
c=new JPanel();
d=new JPanel();
e=new JPanel();
f=new JPanel();
bname.setText("书名 :");
bname.setFont(new Font("Dialog",0,12));
bno.setText(" 索书号 :");
bno.setFont(new Font("Dialog",0,12));
bnum.setText("数量:");
bnum.setFont(new Font("Dialog",0,12));
author.setText("作者:");
author.setFont(new Font("Dialog",0,12));
publisher.setText(" 出版社 :");
publisher.setFont(new Font("Dialog",0,12));
a.add(bname);
a.add(tname);
b.add(bno);
b.add(tno);
c.add(bnum);
c.add(tnum);
d.add(author);
d.add(tauthor);
e.add(publisher);
e.add(tpublisher);
f.add(addbt);
f.add(yesbt);
add(a);
add(b);
add(c);
add(d);
add(e);
add(f);
setLayout(new GridLayout(8,1));
addbt.addActionListener(this);
yesbt.addActionListener(this);
setSize(500,300);
setLocation(400,150);
}
public void actionPerformed(ActionEvent e)
{
String bname,bno,author,publisher;
int bnum;
if(e.getActionCommand()=="确定")
this.dispose();
if(e.getActionCommand()=="添加")
{
bname=tname.getText();
bno=tno.getText();
author=tauthor.getText();
publisher=tpublisher.getText();
bnum=Integer.parseInt(tnum.getText());
String sqlstr1="select bno from book";
rs=db.getResult(sqlstr1);
try{
while(rs.next())
{
if(rs.getString(1).trim().equals(bno))
{
JOptionPane.showMessageDialog(null,"此书号已存在,请重新输入索书号!");
}
else
{break;}
}
}
catch(Exception pe)
{
pe.printStackTrace();
}
String sqlstr="insert into book (bno,bname,bnum,author,publisher) values ('"+bno+"','"+bname+"','"+bnum+"','"+author+"','"+publisher+"')";
boolean result=db.updateSql(sqlstr);
db.closeConnection();
if(result)
{
JOptionPane.showMessageDialog(null,"添加书籍成功!");
}
else
{
JOptionPane.showMessageDialog(null,"添加书籍失败!");
}}}}
5.删除图书信息
序号 |
测试内容 |
测试数据 |
期望结果 |
测试结果 |
测试结论 |
1 |
合法输入格式 |
000000,000000 |
登陆成功 |
登陆成功 |
正确 |
2 |
错误用户名 |
Admin,00000 |
提示“用户名不存在或者密码不正确” |
提示“用户名不存在或者密码不正确” |
正确 |
3 |
错误密码 |
Admin,xx,正确验证码 |
提示“用户名不存在或者密码不正确” |
提示“用户名不存在或者密码不正确” |
正确 |
4 |
用户名为空 |
Null,00000 |
提示“用户名不能为空” |
提示“用户名不能为空” |
正确 |
5 |
密码为空 |
000000,Null |
提示“密码不能为空” |
提示“密码不能为空” |
正确 |
表1 登陆模块的测试用例
序号 |
测试内容 |
测试数据 |
期望结果 |
测试结果 |
测试结论 |
1 |
合法输入格式 |
00001 |
王明 00001 女 20 123456 计算机
|
王明 00001 女 20 123456 计算机
|
正确 |
2 |
错误证件号名 |
10060028 |
提示“请输入正确的证件号!” |
提示“请输入正确的证件号!” |
正确 |
3 |
空数据 |
Null |
提示“请输入正确的证件号!” |
提示“请输入正确的证件号!” |
正确 |
表2 读者查询模块的测试用例
序号 |
测试内容 |
测试数据 |
期望结果 |
测试结果 |
测试结论 |
1 |
合法输入格式 |
00001 |
索书号为:00001,书名为:Java程序设计,现有数量为1 ,出版社为:清华大学出版社,作者为:沈泽刚 |
索书号为:00001,书名为:Java程序设计,现有数量为1 ,出版社为:清华大学出版社,作者为:沈泽刚 |
正确 |
2 |
错误索书号 |
0 |
提示“对不起,没有您要找的书籍!” |
提示“对不起,没有您要找的书籍!” |
正确 |
3 |
空索书号 |
Null |
提示“对不起,没有您要找的书籍!” |
提示“对不起,没有您要找的书籍!” |
正确 |
表3 图书查询模块的测试用例
序号 |
测试内容 |
测试数据 |
期望结果 |
测试结果 |
测试结论 |
1 |
合法输入格式 |
00001 |
提示“删除成功”
|
提示“删除成功”
|
正确 |
2 |
错误索书号 |
0 |
提示“删除书籍失败!” |
提示“删除书籍失败!” |
正确 |
3 |
空数据 |
Null |
提示“删除书籍失败!” |
提示“删除书籍失败!” |
正确 |
表4书籍删除模块的测试用例
序号 |
测试内容 |
测试数据 |
期望结果 |
测试结果 |
测试结论 |
1 |
合法输入格式 |
中国近现代史纲要,00006,5,编写组,高等教育出版社 |
提示“添加书籍成功!”
|
提示“添加书籍成功!”
|
正确 |
2 |
重复书号 |
中国近现代史纲要,00006,5,编写组,高等教育出版社 |
提示“此书号已存在,请重新输入索书号!” |
提示“此书号已存在,请重新输入索书号!” |
正确 |
3 |
遗漏书名 |
Null,00006,5,编写组,高等教育出版社 |
提示“添加书籍失败!” |
提示“添加书籍失败!” |
正确 |
4 |
遗漏书号 |
中国近现代史纲要,Null,5,编写组,高等教育出版社 |
提示“添加书籍失败!” |
提示“添加书籍失败!” |
正确 |
5 |
遗漏数量 |
中国近现代史纲要,00006,Null,编写组,高等教育出版社 |
提示“添加书籍失败!” |
提示“添加书籍失败!” |
正确 |
6 |
遗漏作者 |
中国近现代史纲要,00006,5,Null,高等教育出版社 |
提示“添加书籍失败!” |
提示“添加书籍失败!” |
正确 |
7 |
遗漏出版社 |
中国近现代史纲要,00006,5,编写组,Null |
提示“添加书籍失败!” |
提示“添加书籍失败!” |
正确 |
表5 书籍添加模块的测试用例
序号 |
测试内容 |
测试数据 |
期望结果 |
测试结果 |
测试结论 |
1 |
合法输入格式 |
行政能力测试,00004,7,李永新,中共教育出版社 |
提示“更新书籍成功!”
|
提示“更新书籍成功!”
|
正确 |
2 |
不存在书号 |
中国近现代史纲要,00106,5,编写组,高等教育出版社 |
提示“更新书籍失败!” |
提示“更新书籍失败!” |
正确 |
3 |
遗漏书名 |
Null,00004,7,李永新,中共教育出版社 |
提示“更新书籍失败!” |
提示“更新书籍失败!” |
正确 |
4 |
遗漏书号 |
行政能力测试,Null,7,李永新,中共教育出版社 |
提示“更新书籍失败!” |
提示“更新书籍失败!” |
正确 |
5 |
遗漏数量 |
行政能力测试,00004,Null,李永新,中共教育出版社 |
提示“更新书籍失败!” |
提示“更新书籍失败!” |
正确 |
6 |
遗漏作者 |
行政能力测试,00004,7,Null,中共教育出版社 |
提示“更新书籍失败!” |
提示“更新书籍失败!” |
正确 |
7 |
遗漏出版社 |
行政能力测试,00004,7,李永新,Null |
提示“更新书籍失败!” |
提示“更新书籍失败!” |
正确 |
表6 书籍更新模块的测试用例
3.登录用户名:00000 密码:00000
调试方法
调试代码:
1、用户登录界面
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import java.io.*;
public class UserLogin extends JFrame implements ActionListener
{
private static final long serialVersionUID = 1L;
String name;
DataBaseManger db=new DataBaseManger();
MainWindow mainFrame;
JFrame f=null;
JPanel panel1,panel2;
JLabel UserLabel,PasswordLabel;
JTextField UserTextField;
JPasswordField PasswordTextField;
JButton YesBtn,CancelBtn;
Container c;
ResultSet rs;
public UserLogin(MainWindow mainFrame)
{
super("用户登录");
this.mainFrame=mainFrame;
UserLabel=new JLabel("用户名",JLabel.CENTER);
PasswordLabel=new JLabel("密码",JLabel.CENTER);
UserTextField=new JTextField(10);
PasswordTextField=new JPasswordField(10);
YesBtn=new JButton("确定");
CancelBtn=new JButton("取消");
YesBtn.addActionListener(this);
CancelBtn.addActionListener(this);
panel1=new JPanel();
panel1.setLayout(new GridLayout(2,2));
panel2=new JPanel();
c=getContentPane();
c.setLayout(new BorderLayout());
panel1.add(UserLabel);
panel1.add(UserTextField);
panel1.add(PasswordLabel);
panel1.add(PasswordTextField);
c.add(panel1,BorderLayout.CENTER);
panel2.add(YesBtn);
panel2.add(CancelBtn);
c.add(panel2,BorderLayout.CENTER);
setSize(300,150);
JLabel JL=new JLabel();
c.add(JL,"North");
c.add(panel1,"Center");
c.add("South",panel2);
panel1.setBackground(new Color(255,255,255));
setLocation(400,200);
}
public void actionPerformed(ActionEvent e)
{if(e.getSource()==CancelBtn)
{this.dispose();}
else
{char[] password=PasswordTextField.getPassword();
String passwordSTR=new String(password);
String strSQL;
strSQL="select * from users where uname='"+UserTextField.getText().trim()+"'and upassword='"+passwordSTR+"'";
rs=db.getResult(strSQL);
boolean isExist=false;
try
{ rs.next();
mainFrame.loginNo=rs.getString(1);
name=rs.getString(1);
mainFrame.loginName=name;
int right;
right=rs.getInt(1);
mainFrame.setenabled(right);
if(name.length()!=0)
isExist=true;
}
catch(Exception pe)
{ pe.printStackTrace(); }
if(UserTextField.getText().trim().equals(""))
{
JOptionPane.showMessageDialog(null,"用户名不可为空!");
return;
}
if(passwordSTR.equals(""))
{
JOptionPane.showMessageDialog(null,"密码不可为空!");
return;
}
if(!isExist)
{ JOptionPane.showMessageDialog(null,"用户名不存在或者密码不正确!");}
else
{JOptionPane.showMessageDialog(null,"登录成功");
this.dispose();}
}}}
2、书籍删除模块的测试用例
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.sql.*;
public class DeleteBook extends JFrame implements ActionListener
{ MainWindow mw=new MainWindow();
DataBaseManger db=new DataBaseManger();
ResultSet rs;
JLabel bno=new JLabel("<html><font color=#000000 size='4'>请输入要删除的图书索引号:</font>",SwingConstants.CENTER);
JLabel L;
JTextField tno=new JTextField(10);
JTable table;
JButton delbt=new JButton("删除");
JButton yesbt=new JButton("确定");
JPanel p1=new JPanel();
JPanel p2=new JPanel();
public DeleteBook()
{ super("删除图书");
Container c=getContentPane();
p1.add(bno);
p1.add(tno);
c.add(p1,BorderLayout.NORTH);
p2.add(delbt);
p2.add(yesbt);
c.add(p2,BorderLayout.SOUTH);
delbt.addActionListener(this);
yesbt.addActionListener(this);
setSize(400,300);
setLocation(400,150);
JPanel p=new JPanel();
p.setLayout(new BorderLayout()); }
public void actionPerformed(ActionEvent e)
{ String bno;
if(e.getActionCommand()=="确定")
this.dispose();
if(e.getActionCommand()=="删除")
{ bno=tno.getText();
String sqlstr="delete bno from book where bno='"+bno+"'";
boolean result=db.updateSql(sqlstr);
db.closeConnection();
if(result)
{JOptionPane.showMessageDialog(null,"删除书籍成功!");}
else
{JOptionPane.showMessageDialog(null,"删除书籍失败!");
}}}}
调试截图: