码迷,mamicode.com
首页 > 其他好文 > 详细

一个在写银行系统作业时出现的逻辑错误

时间:2016-03-06 23:41:38      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

我曾经写过一个银行系统,用户在相应的登录后能进行不同的操作。

在管理员登录之后,管理员能进行开户、存款、取款操作。

这个错误发生在做取款的测试时,我发现如果取款数大于余额,也能取出钱来,然后账户余额变成负数。

这个错误是一个逻辑上的错误,程序不会判断用户余额是不是大于等于取款数,这和实际应用情况明显不相符。在加入了一段比较余额和取款数的代码后,这个错误就解除了。

我之所以对这个错误印象深刻,就是因为它不符合一般的实际情况(不能透支)。如果不能透支的银行卡,银行用的是没解除这个错误的系统,那这银行可是亏大了。

修改之前的代码:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!