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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个在写银行系统作业时出现的逻辑错误相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

修改之前的代码:

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");}

然后这个问题就解决了。

以上是关于一个在写银行系统作业时出现的逻辑错误的主要内容,如果未能解决你的问题,请参考以下文章

学习Flask时出现的各种Typo错误

GridView和objectDataSource相互绑定时出现的捕获

c# winform程序发布后运行时出现的一个问题

JDBC连接时出现的两个错误

php增加用户时出现的【SQLSTATE[HY000] [2002]

linux edquota 时出现的错误