标签:
我曾经写过一个银行系统,用户在相应的登录后能进行不同的操作。
在管理员登录之后,管理员能进行开户、存款、取款操作。
这个错误发生在做取款的测试时,我发现如果取款数大于余额,也能取出钱来,然后账户余额变成负数。
这个错误是一个逻辑上的错误,程序不会判断用户余额是不是大于等于取款数,这和实际应用情况明显不相符。在加入了一段比较余额和取款数的代码后,这个错误就解除了。
我之所以对这个错误印象深刻,就是因为它不符合一般的实际情况(不能透支)。如果不能透支的银行卡,银行用的是没解除这个错误的系统,那这银行可是亏大了。
修改之前的代码:
java.sql.Statement stmt1 = con.createStatement();
java.sql.ResultSet reset1 = stmt1.executeQuery("select * from user ");
int v=0;
while(reset1.next()){
if(a==reset1.getInt("zhanghao"))
{
v=1;
}
}
if(v==0)
{
response.sendRedirect("/bank/quwrong.jsp");
}
else{
java.sql.Statement stmt = con.createStatement();
java.sql.ResultSet reset = stmt.executeQuery("select * from user where zhanghao= " + a + "" );
while (reset.next()) {
if(b.compareTo(reset.getString("passwd"))==0)
{
v = reset.getInt("money");
v = v - m;
java.sql.Statement stmt2 = con.createStatement();
java.sql.Statement stmt5 = con.createStatement();
stmt5.execute("INSERT INTO record(zhanghao, io, record) VALUES (" + a + ", ‘-‘, " + m + ")");
String sql = "update user set money = " + v + " where zhanghao = " + a + "";
stmt2.executeUpdate(sql);
response.sendRedirect("/bank/qusucc.jsp");}
else response.sendRedirect("/bank/quwrong.jsp");
}
}
后来在“v = reset.getInt("money");”后将代码修改成了:
v = reset.getInt("money");
if (m > v)
{response.sendRedirect("/bank/quwrong2.jsp");}
else{
v = v - m;
java.sql.Statement stmt2 = con.createStatement();
java.sql.Statement stmt5 = con.createStatement();
stmt5.execute("INSERT INTO record(zhanghao, io, record) VALUES (" + a + ", ‘-‘, " + m + ")");
String sql = "update user set money = " + v + " where zhanghao = " + a + "";
stmt2.executeUpdate(sql);
response.sendRedirect("/bank/qusucc.jsp");}
然后这个问题就解决了。
标签:
原文地址:http://www.cnblogs.com/WentaiLi/p/5248987.html