可能由于Java与SQL对字符的具体存取格式不同,所以不能仅仅通过上边的方法来实现对密码加密(否则在登录时会导致密码不匹配)。因此,在数据库中建立了一名为Change的表,该表只有一列(Exchange),并同时插入一个数据(任意数据),设置工作人员角色staff_role对该表具有Update和Select权限。通过该表,在工作人员登录系统时,先调用加密方法passwordMaker()对输入的密码进行加密,并将加密结果Update到表Change的ExChange列中,然后再重新取出(这样便实现了Java与SQL对字符的编码不同表示的转换)。最后将去出来的结果与Staff表中对应的Password比较,完全匹配便成功登录系统,否则给出相应的错误提示。
工作人员登录时程序所调用的方法编码如下:
public int staffLogin(String id,String pwd)
{
int result = 32767;
Connection con;
Statement stmt;
//调用加密方法,对输入密码进行加密
MyEncryption me = new MyEncryption();
pwd = String.valueOf(me.passwordMaker(pwd));
try{
DBCon dbc = new DBCon();
con = DriverManager.getConnection(dbc.url,"staff","123");
stmt = con.createStatement();
String query ;
ResultSet rs ;
/**
* 实现sql和程序的字符转换
*/
//向转换表插入数据
query = "update Change " +
"set ExChange = '"+ pwd +"';";
stmt.executeUpdate(query);
//读出插入后的数据
query = "select ExChange from Change ;";
rs = stmt.executeQuery(query);
while( rs.next()){
pwd = rs.getString("ExChange");
}
if(rs != null)
rs.close();
/**
* 将转换后的密码与Staff表中的密码比较
*/
query = "select Password,Type from Staff where ID = '"+id+"';";
rs = stmt.executeQuery(query);
while( rs.next()){
String temp = rs.getString("Password");
char[] pwdtemp = temp.toCharArray();
char[] c_pwd = pwd.toCharArray();
if(pwdtemp.length == c_pwd.length)
{
int i = 0;
for(;i < pwdtemp.length; i++)
{
if(pwdtemp[i] != c_pwd[i])
{
break;
}
}
if(i == pwdtemp.length)
result = Integer.parseInt(rs.getString("Type"));
}
}
dbc.dbClose(con,rs);
}
catch(Exception e){
e.printStackTrace();
}
return result;
}7 系统测试方案和报告
测试方案:在编码过程中进行单元测试,客户管理、销售管理和售后服务管理三个模块的功能基本相同。在这里只给出销售管理模块的测试:
查询功能测试:
查询售后编号为10000的售后服务信息:
上一页 [1] [2] [3] [4] [5] [6] [7] 下一页