软件工程结对作业01

 

设计思想:

 主要功能:

生成试题:在HTML页面输入题目选项(有无括号,数值范围,题目个数等属性)点击提交按钮使用jQuery的响应按钮的点击事件发送ajax post请求,将题目选项参数传到servletservlet获取参数值,调用生成试题的方法生成指定选项的试题,并将试题信息存入到session中已备判断用户的答案的正确性,将试题信息返回,在ajax成功接收到试题信息之后将试题信息显示在页面上。并将输入题目选项的块隐藏,将显示试题的块显示。

判断结果:点击交卷按钮后,jQuery响应按钮点击事件,将利用ajax将答案信息传入到servletservlet获取答案,并从session中获取题目信息,将用户的答案与正确答案进行比较,并调用操作数据库的方法将试题信息存储到数据库,将结果传回,ajax收到传回的数据后将结果显示在页面上。

 

编程总结和体会:

1)程序的设计非常重要,在具体编码之前要把程序有什么功能怎么写设计好,有了一个清晰的设计思路,才能高效正确地写出代码。

2)要将整体的框架分清楚,合理地进行封装,可以方便地进行改动。

 

 运行结果截图:

输入做题选项界面:

 

 

答题界面:

 

判断结果界面:

 

查询历史试题界面:

 

查询结果页面:

 

 

 

 

 

 

PSP表格

实现程序之前估计各个模块所耗费时间

 

 

实现程序之后各个模块实际花费的时间

 

 

源程序代码:

 

package beans;

import java.util.Stack;

import func.FenShu;
import func.MyException;

public class ShiTi {
    private int id,userScore, length,shiJuanID;
    private String tiMu, rightAnswer, userAnswer, username,logicOrder;

    
    
    

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getShiJuanID() {
        return shiJuanID;
    }

    public void setShiJuanID(int shiJuanID) {
        this.shiJuanID = shiJuanID;
    }

    public int getUserScore() {
        return userScore;
    }

    public void setUserScore(int userScore) {
        this.userScore = userScore;
    }

    public int getLength() {
        return length;
    }

    public void setLength(int length) {
        this.length = length;
    }
    
    

    
    
    public String getTiMu() {
        return tiMu;
    }

    public void setTiMu(String tiMu) {
        this.tiMu = tiMu;
        try {
            expressCalculate();
        } catch (MyException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }// 计算答案
        this.length = (tiMu.split(" ").length + 1) / 2;
    }

    public String getRightAnswer() {
        return rightAnswer;
    }

    public void setRightAnswer(String rightAnswer) {
        this.rightAnswer = rightAnswer;
    }

    public String getUserAnswer() {
        return userAnswer;
    }

    public void setUserAnswer(String userAnswer) {
        this.userAnswer = userAnswer;
    }
    
    

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getLogicOrder() {
        return logicOrder;
    }

    public void setLogicOrder(String logicOrder) {
        this.logicOrder = logicOrder;
    }

    public ShiTi() {

    }
    
    
    
    
    
    
    
    
    
    
    
    
    // 表达式计算,参数为字符串类型的运算式
    private void expressCalculate() throws MyException {
        if(this.tiMu == null)
        {
            throw new MyException("试题无效");
        }
        String express = this.tiMu;
        
        
        Stack<String> num = new Stack<String>();
        Stack<String> symbolS = new Stack<String>();
        symbolS.push("#");
        express += "#";
        String order = "";
        char ch;
        int i = 0;
        ch = express.charAt(i);
        while ((!symbolS.peek().equals("#")) || (ch != '#')) {// while循环开始
            if (isNumber(ch)) {// 读到的不是空格,说明开始读运算数
                String readNumStr = "";
                while (true) {
                    readNumStr += ch;
                    ch = express.charAt(++i);
                    if (ch == ' ' || ch == '#' || ch == ')') {// 读到的是空格,或,说明运算数结束
                        break;
                    }
                }
                num.push(readNumStr);
            } else if (ch == ' ') {
                if ((i + 1) < express.length()) {// 未到字符串末尾
                    ch = express.charAt(++i);
                }
            }else {// 读到的是运算符
                char compare = priorityCompare(symbolS.peek(), ch + "");

                if (compare == '=') {// 若优先级相等,则说明ch是右括号,栈顶为左括号,此时将栈顶弹出,读取下一个字符
                    symbolS.pop();
                    ch = express.charAt(++i);
                } else if (compare == '>') {// ch的优先级小于栈顶的优先级,要说明栈顶的运算符应该先计算,所以应弹栈运算
                                            // 弹出两个运算数,弹出一个运算符
                    String bStr = num.pop();
                    String aStr = num.pop();
                    String symbolT = symbolS.pop();
                    // 计算该字表达式
                    String c = yunSuan(aStr, bStr, symbolT);
                    if (c.equals("ERROR")) {// 如果计算函数返回error则说明计算过程出现了负数,说明该运算式不符合要求,停止计算,计算结果为error,返回;
                        this.rightAnswer = "ERROR";
                        return;
                    } else {// 计算过程正常,则将计算结果压栈
                        order += aStr + "," + symbolT + "," + bStr + ",";// 将运算的子表达式加进运算顺序字符串中,操作数和操作符用逗号隔开
                        num.push(c);
                    }
                } else if(compare == 'E')
                {
                    this.rightAnswer = "ERROR";
                    return;
                } else {// 说明ch优先级大于栈顶元素的优先级,则应将ch压栈,读取下一个运算符
                    symbolS.push(ch + "");
                    if ((i + 1) < express.length()) {
                        ch = express.charAt(++i);
                    }
                }

            }
        }
        this.rightAnswer = num.pop();
        this.logicOrder = order;
    }

    // 判断ch是否为数字
    private boolean isNumber(char ch) {
        if (ch >= '0' && ch <= '9') {
            return true;
        }
        return false;
    }

    /*
     * 子表达式计算,参数为两个运算数的字符串形式,和一个运算符,也为字符串类型 返回计算结果的字符串形式
     * 如果减法运算出现负数,或除数为0,或分数的分母为0则返回ERROR
     * 
     */
    private String yunSuan(String aStr, String bStr, String symbol) throws MyException {
        if(aStr == null || bStr == null || symbol == null)
        {
            throw new MyException("子表达式出现错误!");
        }
        int adivIndex = aStr.indexOf("/");
        int bdivIndex = bStr.indexOf("/");
        if ((adivIndex == -1) && (bdivIndex == -1)) {// a.b都是整数
            int a = Integer.parseInt(aStr);
            int b = Integer.parseInt(bStr);
            switch (symbol.charAt(0)) {
            case '+':
                return a + b + "";
            case '-': {
                if (a < b) {
                    return "ERROR";
                }
                return a - b + "";
            }
            case '*': {
                return a * b + "";
            }
            case '/': {
                if (b == 0) {
                    return "ERROR";
                } else if (a % b == 0) {
                    return a / b + "";
                }
                return new FenShu(a, b).toString();
            }
            default:
                return "ERROR";
            }
        } else {// a,b中存在分数,则将a,b都当做分数进行运算
            FenShu a = new FenShu(aStr);
            FenShu b = new FenShu(bStr);
            switch (symbol.charAt(0)) {
            case '+':
                return a.add(b).toString();
            case '-':
            {
                FenShu c = a.subtract(b);
                if(c.getNumerator() < 0)
                {
                    return "ERROR";
                }
                return c.toString();
            }
            case '*':
                return a.multiply(b).toString();
            case '/':
                return a.divide(b).toString();
            default:
                return "ERROR";
            }
        }
    }

    // 判断运算符优先级
    private char priorityCompare(String a, String b) {
        char[][] priority = { { '>', '>', '<', '<', '<', '>', '>' }, { '>', '>', '<', '<', '<', '>', '>' },
                { '>', '>', '>', '>', '<', '>', '>' }, { '>', '>', '>', '>', '<', '>', '>' },
                { '<', '<', '<', '<', '<', '=', '>' }, { '>', '>', '>', '>', ' ', '>', '>' },
                { '<', '<', '<', '<', '<', ' ', '=' } };
        int a_index = index_symbol(a);
        int b_index = index_symbol(b);
        if(a_index == -1 || b_index == -1)
        {
            return 'E';
        }
        return priority[a_index][b_index];
    }

    // 获取运算符对应的下标
    private int index_symbol(String a) {
        String p = "+-*/()#";
        // System.out.println("判断运算符对应的下标:" + a);
        return p.indexOf(a);
    }
    
    
    
    
    
    
    
    

}
ShiTi.java

 

package beans;

import java.util.Date;

public class ShiJuan {
    private int id,shiTiNum, grade,shiJuanID;
    private String username;
    
    private Date date;


    
    
    
    public int getShiJuanID() {
        return shiJuanID;
    }

    public void setShiJuanID(int shiJuanID) {
        this.shiJuanID = shiJuanID;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getShiTiNum() {
        return shiTiNum;
    }

    public void setShiTiNum(int shiTiNum) {
        this.shiTiNum = shiTiNum;
    }

    public int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }
    
    

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }
    
    

    public ShiJuan() {

    }
}
ShiJuan.java

 

package beans;

public class UserInfo {
    private String username, password;
    private int shiTiNum, shiJuanNum,rightNum;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getShiTiNum() {
        return shiTiNum;
    }

    public void setShiTiNum(int shiTiNum) {
        this.shiTiNum = shiTiNum;
    }

    public int getShiJuanNum() {
        return shiJuanNum;
    }

    public void setShiJuanNum(int shiJuanNum) {
        this.shiJuanNum = shiJuanNum;
    }
    
    

    public int getRightNum() {
        return rightNum;
    }

    public void setRightNum(int rightNum) {
        this.rightNum = rightNum;
    }

    public UserInfo() {

    }

}
UserInfo.java

 

package dao;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

public class DBUtil {
    
    private static String driverName;
    private static String username;
    private static String password;
    private static String url;
    
    
//    static 
//    {
//        driverName = "com.mysql.jdbc.Driver";
//        url = "jdbc:mysql://localhost:3306/siZeWeb?useSSL=false&useUnicode=true&characterEncoding=UTF-8";
//        username = "root";
//        password = "490272";
//    }
    
    //从属性文件加载参数(URL 用户名 密码)
    static
    {
        Properties prop = new Properties();
        try {
            prop.load(DBUtil.class.getResourceAsStream("/db.properties"));
            driverName = prop.getProperty("driverName");
            url = prop.getProperty("url");
            username = prop.getProperty("username");
            password = prop.getProperty("password");
            
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    
    
    
    
    
    
    
    public static void main(String[] args) {
        Connection conn = getDBConnection();
        closeDB(conn, null, null);
    }
    
    //获取数据库连接
    public static Connection getDBConnection()
    {
        Connection conn = null;
        try {
            Class.forName(driverName);
            conn = DriverManager.getConnection(url,username,password);
        } catch (SQLException | ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return conn;
    }
    
    //释放资源
    public static void closeDB(Connection conn,PreparedStatement pstmt,ResultSet rs)
    {
        try {
            if(rs != null)
                rs.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                if(pstmt != null)
                    pstmt.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                try {
                    if(conn != null)
                        conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
    
    
    
}
DBUtil.java

 

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

import beans.ShiJuan;

public class ShiJuanDAO {
    
    
    
    //插入一条试卷记录到数据库
    public void insert(ShiJuan sj) throws SQLException
    {
        
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        conn = DBUtil.getDBConnection();
    //    System.out.println(sj.getShiTiNum() + " " + sj.getUsername() + " " + sj.getDate() + " " + sj.getUserCurrectSum());
        pstmt = conn.prepareStatement("insert into shiJuanKu(shiTiNum,username,date,shiJuanID) values(?,?,?,?)");
        pstmt.setInt(1, sj.getShiTiNum());
        pstmt.setString(2, sj.getUsername());
        pstmt.setTimestamp(3, new Timestamp(sj.getDate().getTime()));
        pstmt.setInt(4, sj.getShiJuanID());
        pstmt.executeUpdate();
        
        DBUtil.closeDB(conn, pstmt, rs);
        
    }
    
    //根据用户名查询试卷信息,返回值类型为list
    public List<ShiJuan> selectByUsername(String username) throws SQLException
    {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        List<ShiJuan> list = new ArrayList<ShiJuan>();
        
        conn = DBUtil.getDBConnection();
        pstmt = conn.prepareStatement("select * from shiJuanKu where username=?");
        pstmt.setString(1, username);
        
        rs = pstmt.executeQuery();
        
        while(rs.next())
        {
            ShiJuan sj = new ShiJuan();
            sj.setId(rs.getInt("id"));
            sj.setShiTiNum(rs.getInt("shiTiNum"));
            sj.setUsername(rs.getString("username"));
            sj.setGrade(rs.getInt("grade"));
            sj.setDate(rs.getTimestamp("date"));
            sj.setShiJuanID(rs.getInt("shiJuanID"));
            list.add(sj);
        }
        
        DBUtil.closeDB(conn, pstmt, rs);
        return list;

    }
    
    //更新试卷信息,设置试卷题目,根据用户名和用户当前试卷总数
    public void update(ShiJuan sj) throws SQLException
    {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        conn = DBUtil.getDBConnection();
        pstmt = conn.prepareStatement("update shiJuanKu set grade=? where username=? and shiJuanID=?");
        pstmt.setInt(1,sj.getGrade());
        pstmt.setString(2, sj.getUsername());
        pstmt.setInt(3, sj.getShiJuanID());
        pstmt.executeUpdate();
        
        DBUtil.closeDB(conn, pstmt, rs);
        
        
    }
    
    
}
ShiJuanDAO.java

 

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import beans.ShiTi;

public class ShiTiDAO {
    
    //将list中的试题插入到数据库,
    public void insert(List<ShiTi> list) throws SQLException
    {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        conn = DBUtil.getDBConnection();
        pstmt = conn.prepareStatement("insert into shiTiKu(tiMu,rightAnswer,username,logicOrder,length,shiJuanID) values(?,?,?,?,?,?)");
        
        for(ShiTi st : list)
        {
            pstmt.setString(1, st.getTiMu());
            pstmt.setString(2, st.getRightAnswer());
            pstmt.setString(3, st.getUsername());
            pstmt.setString(4, st.getLogicOrder());
            pstmt.setInt(5, st.getLength());
            pstmt.setInt(6, st.getShiJuanID());
            pstmt.executeUpdate();
        }
        
        DBUtil.closeDB(conn, pstmt, rs);
    }
    
    //根据用户名和用户的试题ID查询试题,返回结果为list
    public List<ShiTi> selectByUserNameANDShiJuanID(String username,int shiJuanID) throws SQLException
    {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        List<ShiTi> list = new ArrayList<ShiTi>();
        
        conn = DBUtil.getDBConnection();
        pstmt = conn.prepareStatement("select * from shiTiKu where username=? and shiJuanID=?");
        pstmt.setString(1, username);
        pstmt.setInt(2, shiJuanID);
        rs = pstmt.executeQuery();
        
        while(rs.next())
        {
            ShiTi st = new ShiTi();
            st.setId(rs.getInt("id"));
            st.setTiMu(rs.getString("tiMu"));
            st.setRightAnswer(rs.getString("rightAnswer"));
            st.setUserAnswer(rs.getString("userAnswer"));
            st.setUserScore(rs.getInt("userScore"));
            list.add(st);
        }
        
        DBUtil.closeDB(conn, pstmt, rs);
        return list;


    }
    
    
    //根据用户名和试题对错查询试题,返回结果为list
        public List<ShiTi> selectByUserNameANDScore(String username,int score) throws SQLException
        {
            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
            
            List<ShiTi> list = new ArrayList<ShiTi>();
            
            conn = DBUtil.getDBConnection();
            pstmt = conn.prepareStatement("select * from shiTiKu where username=? and userScore=?");
            pstmt.setString(1, username);
            pstmt.setInt(2, score);
            rs = pstmt.executeQuery();
            
            while(rs.next())
            {
                ShiTi st = new ShiTi();
                st.setId(rs.getInt("id"));
                st.setTiMu(rs.getString("tiMu"));
                st.setRightAnswer(rs.getString("rightAnswer"));
                st.setUserAnswer(rs.getString("userAnswer"));
                st.setUserScore(rs.getInt("userScore"));
                list.add(st);
            }
            
            DBUtil.closeDB(conn, pstmt, rs);
            return list;


        }

    
    //根据用户名查询试题
    public List<ShiTi> selectByUsername(String username) throws SQLException
    {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        List<ShiTi> list = new ArrayList<ShiTi>();
        
        conn = DBUtil.getDBConnection();
        pstmt = conn.prepareStatement("select * from shiTiKu where username=?");
        pstmt.setString(1, username);
        rs = pstmt.executeQuery();
        
        while(rs.next())
        {
            ShiTi st = new ShiTi();
            st.setId(rs.getInt("id"));
            st.setTiMu(rs.getString("tiMu"));
            st.setRightAnswer(rs.getString("rightAnswer"));
            st.setUserAnswer(rs.getString("userAnswer"));
            st.setUserScore(rs.getInt("userScore"));
            list.add(st);
        }
        
        DBUtil.closeDB(conn, pstmt, rs);
        return list;


    }
    
    //根据用户名/试卷id、试题得分查询试题
    public List<ShiTi> selectByUsernameAndShiJuanIDAndScore(String username,int shiJuanID,int score) throws SQLException
    {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        List<ShiTi> list = new ArrayList<ShiTi>();
        
        conn = DBUtil.getDBConnection();
        pstmt = conn.prepareStatement("select * from shiTiKu where username=? and shiJuanID=? and userScore=?");
        pstmt.setString(1, username);
        pstmt.setInt(2, shiJuanID);
        pstmt.setInt(3, score);
        rs = pstmt.executeQuery();
        
        while(rs.next())
        {
            ShiTi st = new ShiTi();
            st.setId(rs.getInt("id"));
            st.setTiMu(rs.getString("tiMu"));
            st.setRightAnswer(rs.getString("rightAnswer"));
            st.setUserAnswer(rs.getString("userAnswer"));
            st.setUserScore(rs.getInt("userScore"));
            list.add(st);
        }
        
        DBUtil.closeDB(conn, pstmt, rs);
        return list;


    }

    
    
    //更新试题,根据题目和用户名和试卷ID 
    public void update(List<ShiTi> list) throws SQLException
    {

        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        
        conn = DBUtil.getDBConnection();
        pstmt = conn.prepareStatement("update shiTiKu set userAnswer=?,userScore=? where tiMu=? and username=? and shiJuanID=?");
        
        
        
        for(ShiTi st : list)
        {
            pstmt.setString(1, st.getUserAnswer());
            pstmt.setInt(2, st.getUserScore());
            pstmt.setString(3, st.getTiMu());
            pstmt.setString(4, st.getUsername());
            pstmt.setInt(5, st.getShiJuanID());
            pstmt.executeUpdate();
        }
        
        DBUtil.closeDB(conn, pstmt, rs);
        
    }
    
    
    
}
ShiTiDAO.java

 

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import beans.UserInfo;

public class UserInfoDAO {
    //插入一条数据到用户表
    public void insert(UserInfo u) throws SQLException
    {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        conn = DBUtil.getDBConnection();
        pstmt = conn.prepareStatement("insert into userInfo(username,password) values(?,?)");
        
        pstmt.setString(1, u.getUsername());
        pstmt.setString(2, u.getPassword());
        pstmt.executeUpdate();
        
        DBUtil.closeDB(conn, pstmt, rs);
    }
    
    //查询数据库,根据用户名
    public UserInfo selectByUsername(UserInfo u) throws SQLException
    {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        UserInfo n = null;
        conn = DBUtil.getDBConnection();
        pstmt = conn.prepareStatement("select * from userInfo where username=?");
        pstmt.setString(1, u.getUsername());
        
        rs = pstmt.executeQuery();
        
        if(rs.next())
        {
            n = new UserInfo();
            n.setUsername(rs.getString("username"));
            n.setPassword(rs.getString("password"));
            n.setShiTiNum(rs.getInt("shiTiNum"));
            n.setShiJuanNum(rs.getInt("shiJuanNum"));
            n.setRightNum(rs.getInt("rightNum"));
            
        }
        
        DBUtil.closeDB(conn, pstmt, rs);
        return n;
    }
    
    //更新用户表,根据用户名,更新做题数目,试卷数目,正确题目个数
    public void update(UserInfo u) throws SQLException
    {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        conn = DBUtil.getDBConnection();
        pstmt = conn.prepareStatement("update userInfo set shiTiNum=?,shiJuanNum=?,rightNum=? where username=?");
        pstmt.setInt(1, u.getShiTiNum());
        pstmt.setInt(2, u.getShiJuanNum());
        pstmt.setInt(3, u.getRightNum());
        pstmt.setString(4, u.getUsername());
        pstmt.executeUpdate();
        
        DBUtil.closeDB(conn, pstmt, rs);
    }
    
    
    
    
    
    
}
UserInfoDAO.java

 

package func;

public class FenShu {
    private int denominator, numerator;
    private boolean chengLi;

    public int getDenominator() {
        return denominator;
    }

    public void setDenominator(int denominator) {
        this.denominator = denominator;
    }

    public int getNumerator() {
        return numerator;
    }

    public void setNumerator(int numerator) {
        this.numerator = numerator;
    }

    public boolean isChengLi() {
        return chengLi;
    }

    public void setChengLi(boolean chengLi) {
        this.chengLi = chengLi;
    }

    public FenShu(int numerator, int denominator) {
        this.numerator = numerator;
        this.denominator = denominator;
        if (denominator == 0) {
            this.chengLi = false;
        } else {

            this.chengLi = true;
            yueJian();
        }
    }

    // 根据字符串构造分数
    public FenShu(String str) {
        if(str == null)
        {
            this.chengLi = false;
        }
        int index = str.indexOf("/");
        if (index == -1) {
            this.numerator = Integer.parseInt(str);
            this.denominator = 1;
            this.chengLi = true;

        } else {
            this.denominator = Integer.parseInt(str.substring(index + 1));
            if (this.denominator == 0) {
                chengLi = false;
            } else {
                chengLi = true;
                int zhengShu = str.indexOf("'");
                if (zhengShu == -1) {
                    // 没有整数部分
                    this.numerator = Integer.parseInt(str.substring(0, index));
                } else {
                    // 有整数部分
                    this.numerator = Integer.parseInt(str.substring(0, zhengShu)) * this.denominator
                            + Integer.parseInt(str.substring(zhengShu + 1, index));
                }
                yueJian();
            }
        }
    }

    public FenShu() {
    }

    // 约简
    private void yueJian() {
        int y = 1;
        for (int i = numerator; i > 1; i--) {
            if (numerator % i == 0 && denominator % i == 0) {
                y = i;
                break;
            }
        }
        // int nc = numerator,dc = denominator;
        // if(nc != 0){
        // while(nc != dc - nc){
        // y = dc - nc;
        // if(nc > y){
        // dc = nc;
        // nc = y;
        // }else{
        // dc = y;
        // }
        // }
        // y = nc;
        //
        numerator /= y;
        denominator /= y;

    }

    //
    public FenShu add(FenShu b) {

        FenShu c = null;
        if (this.chengLi && b.isChengLi()) {
            int nNumerator = this.numerator * b.getDenominator() + this.denominator * b.getNumerator();
            int nDenominator = this.denominator * b.getDenominator();
            c = new FenShu(nNumerator, nDenominator);
        } else {
            c = new FenShu();
            c.setChengLi(false);
        }
        return c;
    }

    //
    public FenShu subtract(FenShu b) {
        FenShu c = null;
        if (this.chengLi && b.isChengLi()) {
            int nNumerator = this.numerator * b.getDenominator() - this.denominator * b.getNumerator();
            int nDenominator = this.denominator * b.getDenominator();
            c = new FenShu(nNumerator, nDenominator);
        } else {
            c = new FenShu();
            c.setChengLi(false);
        }
        return c;
    }

    //
    public FenShu multiply(FenShu b) {
        FenShu c = null;
        if (this.chengLi && b.isChengLi()) {

            int nNumerator = this.numerator * b.getNumerator();
            int nDenominator = this.denominator * b.getDenominator();
            c = new FenShu(nNumerator, nDenominator);
        } else {
            c = new FenShu();
            c.setChengLi(false);
        }
        return c;
    }

    //
    public FenShu divide(FenShu b) {
        FenShu c = null;
        if (this.chengLi && b.isChengLi() && (b.getNumerator() != 0)) {

            int nNumerator = this.numerator * b.getDenominator();
            int nDenominator = this.denominator * b.getNumerator();
            c = new FenShu(nNumerator, nDenominator);
        } else {
            c = new FenShu();
            c.setChengLi(false);
        }
        return c;
    }

    // 输出分数形式
    public String toString() {
        if (this.chengLi) {
            if (numerator != 0) {
                if (numerator % denominator == 0)
                    return "" + numerator / denominator;
                else if (numerator > denominator) {
                    return (numerator / denominator) + "'" + (numerator % denominator) + "/" + denominator;
                }
                return numerator + "/" + denominator;
            }
            return "0";
        }
        return "ERROR";
    }
    

}
FenShu.java

 

package func;

public class MyException extends Exception {
    public MyException(String msg)
    {
        super(msg);
    }
}
MyException.java

 

package func;

import java.util.ArrayList;
import java.util.List;

import beans.ShiTi;

public class ShiTiFuncForm {
    // 生成整数计算式添加限制条件,type为运算式类型 0代表整数式,1代表真分数式
    public static List<ShiTi> createYunSuanShi(int hasChengChu,int hasKuoHao, int maxNum, int n, int type) throws MyException {
        int i = 0;
        if(n <= 0)
        {
            throw new MyException("运算数个数设置错误,应为正数");
        }
        List<ShiTi> list = new ArrayList<ShiTi>();
        ShiTi stb = null;
        // ShiTiDAO std = new ShiTiDAO();
        while (i < n) {
            stb = ShiTiOperator.getExpress(maxNum, hasKuoHao,hasChengChu, type);

            // 检验重复
            boolean chongFu = false;
            for (int j = 0; j < i; j++) {
                ShiTi t = list.get(j);
                if (ShiTiOperator.calculateOrderSame(stb, t)) {
                    chongFu = true;
                    System.out.println("出现重复:计算式一:" + t.getTiMu() + " = " + t.getRightAnswer() + " 运算顺序:"
                            + t.getLogicOrder() + " 运算数个数:" + t.getLength());
                    System.out.println("出现重复:计算式二:" + stb.getTiMu() + " = " + stb.getRightAnswer() + " 运算顺序:"
                            + stb.getLogicOrder() + " 运算数个数:" + stb.getLength());
                    System.out.println("\n\n");
                    break;
                }
            }
            if (chongFu == false) {
                list.add(stb);
                i++;
            }
        }
        return list;
    }
}
ShiTiFuncForm.java

 

package func;


import java.util.Random;

import beans.ShiTi;

//试题类,
/*
 * 方法有:生成一个试题,计算试题答案,
 * 
 * 
 */
public class ShiTiOperator {
    
    // 获取一个运算式
    public static ShiTi getExpress(int maxNum, int hasKuoHao, int hasChengChu,int type) throws MyException {

        if(maxNum <= 0)
        {
            throw new MyException("最大数值应为正数");
        }
        
        ShiTi stb = new ShiTi();

        Random rd = new Random();
        char[] fuHao = { '+', '-', '*', '/' };
        int symbolNum = 2 + hasChengChu * 2;
        while (true) {
            int[] bracket = null;// 存储括号位置
            int expressLength = rd.nextInt(3) + 2;// 随机生成一个2~4之间的整数作为该运算式的运算数的个数
            stb.setLength(expressLength);
            String[] number = new String[expressLength];// 存储运算数的数组
            String[] symbol = new String[expressLength - 1];// 存储运算符的数组

            String express = "";
            number[0] = getOperatorNumber(type, maxNum);
            for (int i = 0; i < expressLength - 1; i++) {
                symbol[i] = fuHao[rd.nextInt(symbolNum)] + "";// 生成运算符
                number[i + 1] = getOperatorNumber(type, maxNum);
            }

            if (hasKuoHao == 1) {
                // 需要加括号
                bracket = randomAddBracket(expressLength);
            }

            // 构建表达式
            for (int i = 0; i < expressLength; i++) {
                // 添加左括号
                if (hasKuoHao == 1) {
                    for (int j = 0; j < bracket[i]; j++) {
                        express += "(";
                    }
                }

                express += number[i];// 加上运算数

                // 添加右括号
                if (hasKuoHao == 1) {
                    for (int j = 0; j > bracket[i]; j--) {
                        express += ")";
                    }
                }

                if (i != expressLength - 1) {
                    express += " " + symbol[i] + " ";// 加运算符,并在两侧加空格来与运算数分隔
                }

            }
            stb.setTiMu(express);
            if (!(stb.getRightAnswer().equals("ERROR"))) {
                // System.out.println("生成的运算式为:" + express + "=" + result[0]);
                return stb;
            }
        }

    }

    // 随机生成括号,参数为运算式的运算数的个数
    private static int[] randomAddBracket(int length) throws MyException {
        if(length <= 1)
        {
            throw new MyException("运算式长度不能小于2");
        }
        int[] brackets = new int[length];
        for (int i = 0; i < brackets.length; i++)
            brackets[i] = 0;
        Random rd = new Random();
        for (int i = 2; i < length; i++) {// 添加的括号长度(括号包围的运算数的个数)
            for (int j = 0; j < length - i + 1; j++) {
                int t = rd.nextInt(2);// 随机生成0或1,0代表不加括号,1代表加括号
                if (t == 1) {
                    if (brackets[j] >= 0 && brackets[j + i - 1] <= 0) {// 要加的括号的第一个运算数周围没有右括号,且
                                                                        // 最后一个运算数周围没有左括号
                        int counteract1 = 0,counteract2 = 0,counteract3 = 0;
                        for (int k = j; k < j + i; k++) {// 将要加的括号之间的所有运算数对应的brackets相加,
                                                            // 如果和为0说明这个括号之间的括号是匹配的,不会出现括号交叉现象
                            counteract1 += brackets[k];
                        }
                        for (int k = 0; k < j - 1; k++) {// 将要加的括号之前的所有运算数对应的brackets相加,
                            // 如果和为0说明这个括号之间的括号是匹配的,不会出现括号交叉现象
                            counteract2 += brackets[k];
                        }
                        for (int k = j + i; k < length; k++) {// 将要加的括号之后的所有运算数对应的brackets相加,
                            // 如果和为0说明这个括号之间的括号是匹配的,不会出现括号交叉现象
                            counteract3 += brackets[k];
                        }
                        
                        if (counteract1 == 0 && counteract2 == 0 && counteract3 == 0) {
                            brackets[j]++;
                            brackets[j + i - 1]--;
                            j += i;
                        }
                    }
                }
            }
        }
        return brackets;
    }

    // 随机生成一个运算数( type==0代表生成整数,type==1代表生成真分数,maxNum代表数值范围 0~(maxNum-1) )
    private static String getOperatorNumber(int type, int maxNum) throws MyException {
        if(maxNum <= 0)
        {
            throw new MyException("最大数值应为正数");
        }
        Random rd = new Random();
        int a;
        while (true) {
            a = rd.nextInt(maxNum);
            if (type == 0) {// 随机生成一个整数
                return "" + a;
            } else {// 随机生成一个真分数
                if (a == 0) {
                    continue;
                }
                int b = rd.nextInt(a);
                FenShu c = new FenShu(b, a);
                return c.toString();
            }
        }
    }
    
//--------------------------------------------------
    
    public static boolean calculateOrderSame(ShiTi a, ShiTi b) throws MyException {

        if(a == null || b == null)
        {
            throw new MyException("试题无效!");
        }
        //比较两个运算式的运算数个数
        if(a.getLength() != b.getLength())
        {
            return false;
        }
        
        //比较两运算式的答案是否相同
        if(!a.getRightAnswer().equals(b.getRightAnswer()))
        {
            return false;
        }
        
        // 取出运算式的运算顺序字符串,
        String aorder = a.getLogicOrder();
        String border = b.getLogicOrder();

        // 将a,b运算式的运算顺序字符串进行分割,按序取出每一个运算数和运算符
        String[] asplit = aorder.split(",");
        String[] bsplit = border.split(",");

        int n = a.getLength() - 1;//共有n组子表达式
        
        for(int i = 0;i < n;i++)
        {
            //取a运算式该子表达式的两个运算数a1,a2,运算符af,运算结果ar
            String a1 = asplit[0 + i * 3];
            String af = asplit[1 + i * 3];
            String a2 = asplit[2 + i * 3];
            //取b运算式该子表达式的两个运算数b1,b2,运算符bf,运算结果br
            String b1 = bsplit[0 + i * 3];
            String bf = bsplit[1 + i * 3];
            String b2 = bsplit[2 + i * 3];

            if(af.equals(bf))
            {
                //两子表达式符号相同
                if(a1.equals(b1) && a2.equals(b2))
                {
                    continue;//该子表达式相同,继续判断下一个子表达式
                }
                else if(  (af.equals("+") || af.equals("*"))   &&   a1.equals(b2)  && a2.equals(b1)   )
                {
                    continue;//该子表达式相同,继续判断下一个子表达式
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }
        return true;
    }
    
    //--------------------------------------------------

    
    

    

}
ShiTiOperator.java

 

package servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import beans.UserInfo;

/**
 * Servlet implementation class CheckHasLoginSL
 */
@WebServlet("/CheckHasLoginSL")
public class CheckHasLoginSL extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public CheckHasLoginSL() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
//        response.getWriter().append("Served at: ").append(request.getContextPath());
        System.out.println("开始执行获取用户是否登录的servlet");
        response.setContentType("text/html;charset=UTF-8");
        //获取session
        HttpSession session = request.getSession();
        UserInfo u = null;
        u = (UserInfo)session.getAttribute("userInfo");
        //获取out对象,用于向响应中输出信息
        String msg;
        if(u == null)
        {
            //session中没有用户名信息
            msg = "no";
            System.out.println("用户未登录");
        }
        else
        {
            msg = u.getUsername() + " " + u.getPassword();
            System.out.println("用户已登录,登录用户名为: " + u.getUsername());
        }
        PrintWriter out = response.getWriter();
        out.print(msg);
        out.flush();
        out.close();
        System.out.println("获取用户是否登录的servlet执行结束,返回信息为:" + msg);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
CheckHasLoginSL.java

 

package servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import beans.UserInfo;
import dao.UserInfoDAO;

/**
 * Servlet implementation class CheckUsernameHasSL
 */
@WebServlet("/CheckUsernameHasSL")
public class CheckUsernameHasSL extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public CheckUsernameHasSL() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
//        response.getWriter().append("Served at: ").append(request.getContextPath());
        response.setContentType("text/html;charSet=UTF-8");
        request.setCharacterEncoding("UTF-8");
        String username = request.getParameter("username");
        String result = "用户名已存在";
        if(username != null)
        {
            UserInfo u = new UserInfo();
            u.setUsername(username);
            UserInfoDAO uidao = new UserInfoDAO();
            UserInfo n = null;
            try {
                n = uidao.selectByUsername(u);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if(n == null)
            {
                result = "用户名可用";
            }
        }
        
        PrintWriter out = response.getWriter();
        out.print(result);
        out.flush();
        out.close();
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
CheckUsernameHasSL.java

 

 

package servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import beans.ShiJuan;
import beans.UserInfo;
import dao.ShiJuanDAO;

/**
 * Servlet implementation class GetShiJuanList
 */
@WebServlet("/GetShiJuanListSL")
public class GetShiJuanListSL extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public GetShiJuanListSL() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
//        response.getWriter().append("Served at: ").append(request.getContextPath());
        response.setContentType("text/html;charSet=UTF-8");
        request.setCharacterEncoding("UTF-8");
        
        System.out.println("获取试卷列表servlet开始执行");
        
        //获取session对象
        HttpSession session = request.getSession();
        //从session对象获取用户信息
        UserInfo u = (UserInfo) session.getAttribute("userInfo");
        //System.out.println("参数:username=" + username);
        List<ShiJuan> shiJuanList = null;
        
        //构建试卷数据库操作对象
        ShiJuanDAO sjdao = new ShiJuanDAO();
        try {
            shiJuanList = sjdao.selectByUsername(u.getUsername());
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        String result = "";
        
        if(shiJuanList != null)
        {
            for(int i = 0;i < shiJuanList.size();i++)
            {
                ShiJuan sj = shiJuanList.get(i);
                result += "日期:" + sj.getDate() + "  试题数:" + sj.getShiTiNum() + "  正确个数:" + sj.getGrade() + "," + sj.getShiJuanID() + "#";
            }
        }
        
        //获取out输出对象
        PrintWriter out = response.getWriter();
        out.print(result);
        out.flush();
        out.close();
        
        System.out.println("获取试卷信息servlet执行结束,返回的信息:" + result);
        
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
GetShiJuanListSL.java

 

package servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import beans.ShiTi;
import beans.UserInfo;
import dao.ShiTiDAO;

/**
 * Servlet implementation class GetShiJuanSL
 */
@WebServlet("/GetShiJuanSL")
public class GetShiJuanSL extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public GetShiJuanSL() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
//        response.getWriter().append("Served at: ").append(request.getContextPath());
        System.out.println("获取试卷中的试题servlet开始执行");
        response.setContentType("text/html;charSet=UTF-8");
        request.setCharacterEncoding("UTF-8");
        
        //获取参数值
        String shiJuanID = request.getParameter("shiJuanID");
        String shiTiType = request.getParameter("shiTiType");
        System.out.println("获取到的参数:试题信息" + shiJuanID + "   试题类型: " + shiTiType);
        
        
        //获取用户名
        HttpSession session = request.getSession();
        UserInfo u = (UserInfo)session.getAttribute("userInfo");
        String username = u.getUsername();
        
        System.out.println("用户名:" + username);
        
        List<ShiTi> shiTiList = null;
        ShiTiDAO stdao = new ShiTiDAO();
        try {
            if(shiJuanID.equals("all"))
            {
                if(shiTiType.equals("all"))
                {
                    //查询用户所有试卷的所有试题
                    shiTiList = stdao.selectByUsername(username); 
                }
                else
                {
                    int type = 0;
                    if(shiTiType.equals("right"))
                    {
                        type = 1;
                    }
                    shiTiList = stdao.selectByUserNameANDScore(username, type);
                }
            }
            else
            {
                int shijuanid = Integer.parseInt(shiJuanID);
                if(shiTiType.equals("all"))
                {
                    //查询用户所有试卷的所有试题
                    shiTiList = stdao.selectByUserNameANDShiJuanID(username, shijuanid); 
                }
                else
                {
                    int type = 0;
                    if(shiTiType.equals("right"))
                    {
                        type = 1;
                    }
                    shiTiList = stdao.selectByUsernameAndShiJuanIDAndScore(username, shijuanid, type);
                }

            }
        }catch (NumberFormatException | SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        if(shiTiList == null)
        {
            System.out.println("试题list为空");
        }
        else
        {
            System.out.println("试题list不为空,长度为:" + shiTiList.size());
            for(int i = 0;i < shiTiList.size();i++)
            {
                System.out.println(shiTiList.get(i).getTiMu());
            }
        }
        
            
        String result = "";
        for(int i = 0;i < shiTiList.size();i++)
        {
            ShiTi st = shiTiList.get(i);
            result += st.getTiMu() + "," + st.getUserAnswer() + "," + st.getRightAnswer() + "," + st.getUserScore() + "#";
        }
        
        PrintWriter out = response.getWriter();
        out.print(result);
        out.flush();
        out.close();
        System.out.println("获取试卷中的试题servlet执行结束,返回的信息为: " + result);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
GetShiJuanSL.java

 

package servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import beans.ShiJuan;
import beans.ShiTi;
import beans.UserInfo;
import dao.ShiJuanDAO;
import dao.ShiTiDAO;
import func.MyException;
import func.ShiTiFuncForm;

/**
 * Servlet implementation class GetShiTiSL
 */
@WebServlet("/GetShiTiSL")
public class GetShiTiSL extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public GetShiTiSL() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
//        response.getWriter().append("Served at: ").append(request.getContextPath());
        System.out.println("开始获取试题servlet开始执行");
        request.setCharacterEncoding("UTF-8");
        //获取参数
        int type = Integer.parseInt(request.getParameter("type"));
        int hasChengChu = Integer.parseInt(request.getParameter("hasChengChu"));
        int hasKuoHao = Integer.parseInt(request.getParameter("hasKuoHao"));
        int maxNum = Integer.parseInt(request.getParameter("maxNum"));
        int num = Integer.parseInt(request.getParameter("num"));
        System.out.println("获取的参数值:type=" + type + "    hasChengChu=" + hasChengChu + "    hasKuoHao=" + hasKuoHao + "     maxNum=" + maxNum + "     num=" + num);
        //num = 5;//测试用,删除
        //获取试题
        List<ShiTi> shiTiList = null;
        try {
            shiTiList = ShiTiFuncForm.createYunSuanShi(hasChengChu,hasKuoHao, maxNum, num, type);
//            shiTiList = ShiTiFuncForm.createYunSuanShi(1,1, 10, 5, 0);
        } catch (MyException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
        for(int i = 0;i < num;i++)
        {
            System.out.println(shiTiList.get(i).getTiMu());
        }
        
        //获取session对象
        HttpSession session = request.getSession();
        
        //从session获取用户信息
        UserInfo u = (UserInfo)session.getAttribute("userInfo");
        //将试题信息shiTiList构建成一个字符串(每个试题用‘#’号分隔)保存到session属性
        String shiTiResult = "";
        int shiJuanID = u.getShiJuanNum() + 1;
        String username = u.getUsername();
        List<ShiTi> shiTiList2 = new ArrayList<ShiTi>();
        for(int i = 0;i < shiTiList.size();i++)
        {
            ShiTi st = shiTiList.get(i);
            shiTiResult += st.getTiMu() + "#";
            st.setShiJuanID(shiJuanID);
            st.setUsername(username);
            shiTiList2.add(st);
            
        }
        shiTiResult += shiJuanID + "";//用户试卷id
        //获取out对象,将试题信息输出到响应
        PrintWriter out = response.getWriter();
        out.print(shiTiResult);
        out.flush();
        out.close();
        
        //将试题信息shiTiList保存到session中
        session.setAttribute("shiTiList", shiTiList);
        //将试题个数保存到session中
        session.setAttribute("num", num);
        
        
        //构建一个试卷对象
        ShiJuan sj = new ShiJuan();
        sj.setShiTiNum(num);
        sj.setUsername(username);
        sj.setShiJuanID(shiJuanID);
        sj.setDate(new Date());
        //将试卷对象存储到session对象中
        session.setAttribute("shiJuan", sj);
        //构建一个试卷数据库操作对象
        ShiJuanDAO sjdao = new ShiJuanDAO();
        try {
            //将生成的试卷对象插入到试卷数据库
            sjdao.insert(sj);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        //构建一个试题数据库操作对象
        ShiTiDAO stdao = new ShiTiDAO();
        
        try {
            //将shiTiList插入试题数据库
            stdao.insert(shiTiList2);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        System.out.println("获取试题servlet执行完成");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
GetShiTiSL.java

 

 

package servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import beans.ShiJuan;
import beans.ShiTi;
import beans.UserInfo;
import dao.ShiJuanDAO;
import dao.ShiTiDAO;
import dao.UserInfoDAO;

/**
 * Servlet implementation class JiaoJuanSL
 */
@WebServlet("/JiaoJuanSL")
public class JiaoJuanSL extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public JiaoJuanSL() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
//        response.getWriter().append("Served at: ").append(request.getContextPath());
        
        System.out.println("交卷servlet开始执行");
        response.setContentType("text/html;charSet=UTF-8");
        
        request.setCharacterEncoding("UTF-8");
        
        
//        Enumeration<String> enumer = request.getParameterNames();
//        for(int i = 0;i < 5;i++)
//        {
//            System.out.println(enumer.nextElement());
//        }
        
        //获取session对象
        HttpSession session = request.getSession();
        //从session中获取试题总数
        int n = (int)session.getAttribute("num");
        //将试题总数从session中删除
        session.removeAttribute("num");
        //从session中获取试题list
        List<ShiTi> shiTiList = (List<ShiTi>) session.getAttribute("shiTiList");
        //将shitiList从session中删除
        session.removeAttribute("shiTiList");
        //从session中获取用户信息
        UserInfo u = (UserInfo)session.getAttribute("userInfo");
        //从session中获取试卷对象
        ShiJuan sj = (ShiJuan)session.getAttribute("shiJuan"); 
        //将试卷对象从session中删除
        session.removeAttribute("shiJuan");
        
        String result = "";
        List<ShiTi> shiTiList2 = new ArrayList<ShiTi>();
        
        int rightSum = 0;
        int wrongSum = 0;
        String rightTiHao = "";
        String wrongTiHao = "";
        //从request对象中获取用户答案与正确答案比较,并将结果添加到result字符串
        for(int i = 0;i < n;i++)
        {
            ShiTi st = new ShiTi();
            st = shiTiList.get(i);
            String userAnswer = request.getParameter((i + 1) + "");
            System.out.println("正确答案:" + st.getRightAnswer());
            System.out.println("获取到的用户答案,题号:" + (i + 1) + ", 答案:" + userAnswer);
            if(userAnswer.equals(st.getRightAnswer()))
            {
                //正确
                rightSum++;
                st.setUserScore(1);
                result += "正确#";
                rightTiHao += (i + 1) + ",";
            }
            else
            {
                wrongSum++;
                st.setUserScore(0);
                result += "错误,正确答案为:" + st.getRightAnswer() + "#"; 
                wrongTiHao += (i + 1) + ",";
            }
            st.setUserAnswer(userAnswer);
            shiTiList2.add(st);
        }
        if(!rightTiHao.equals(""))
        {
            rightTiHao = rightTiHao.substring(0, rightTiHao.length() - 1);
        }
        if(!wrongTiHao.equals(""))
        {
            wrongTiHao = wrongTiHao.substring(0, wrongTiHao.length() - 1);
        }
        result += "正确个数:" + rightSum + ";  题号: ( " + rightTiHao + " )#错误个数:" + wrongSum + ";  题号: ( " + wrongTiHao + " )";
    //    result += "正确个数:" + rightSum + ",错误个数:" + wrongSum;
        //获取out对象
        PrintWriter out = response.getWriter();
        out.print(result);
        out.flush();
        out.close();
        System.out.println("返回结果,结果为:" + result);
        //设置试卷分数
        sj.setGrade(rightSum);
        
        //更新用户信息
        u.setShiJuanNum(u.getShiJuanNum() + 1);
        u.setShiTiNum(u.getShiTiNum() + n);
        u.setRightNum(u.getRightNum() + rightSum);
        
        //更新数据库
        //更新试题数据库
        ShiTiDAO stdao = new ShiTiDAO();
        try {
            stdao.update(shiTiList2);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        //更新试卷数据库
        ShiJuanDAO sjdao = new ShiJuanDAO();
        try {
            sjdao.update(sj);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        //更新用户数据库
        UserInfoDAO uidao = new UserInfoDAO();
        try {
            uidao.update(u);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("交卷servlet执行结束");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
JiaoJuanSL.java

 

package servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import beans.UserInfo;
import dao.UserInfoDAO;

/**
 * Servlet implementation class LoginSL
 */
@WebServlet("/LoginSL")
public class LoginSL extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginSL() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
//        response.getWriter().append("Served at: ").append(request.getContextPath());
        System.out.println("登录servlet开始执行");
        response.setContentType("text/html;charSet=UTF-8");
        request.setCharacterEncoding("UTF-8");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        
        UserInfo u = new UserInfo();
        u.setUsername(username);
        
        UserInfo n = null;
        
        UserInfoDAO uidao = new UserInfoDAO();
        try {
            n = uidao.selectByUsername(u);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        PrintWriter out = response.getWriter();
        
        
        if(n == null)
        {
            //没有此用户
            out.print("用户名不存在");
            System.out.println("用户名不存在");
        }
        else if(n.getPassword().equals(password))
        {
            //登录成功
            //将用户信息存入session
            //获取session对象
            HttpSession session = request.getSession();
            session.setAttribute("userInfo", n);
            out.print(username);
            System.out.println("用户: " + username + " 登录成功");
        }
        else
        {
            //密码错误
            out.print("密码错误");
            System.out.println("密码错误");
        }
        out.flush();
        out.close();
        System.out.println("登录servlet执行结束");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
LoginSL.java

 

package servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import beans.UserInfo;
import dao.UserInfoDAO;

/**
 * Servlet implementation class LogonSL
 */
@WebServlet("/LogonSL")
public class LogonSL extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LogonSL() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
//        response.getWriter().append("Served at: ").append(request.getContextPath());
        response.setContentType("text/html;charSet=UTF-8");
        request.setCharacterEncoding("UTF-8");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        UserInfo u = new UserInfo();
        u.setUsername(username);
        u.setPassword(password);
        UserInfoDAO uidao = new UserInfoDAO();
        try {
            uidao.insert(u);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        PrintWriter out = response.getWriter();
        out.print("success");
        out.flush();
        out.close();
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
LogonSL.java

 

package servlets;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class LogoutSL
 */
@WebServlet("/LogoutSL")
public class LogoutSL extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LogoutSL() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
//        response.getWriter().append("Served at: ").append(request.getContextPath());
        HttpSession session = request.getSession();
        session.removeAttribute("userInfo");
        RequestDispatcher rd = request.getRequestDispatcher("logout.html");
        rd.forward(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
LogoutSL.java

 

driverName=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost:3306/siZeWeb?useSSL=false&useUnicode=true&characterEncoding=UTF-8
username=root
password=490272
db.properties

 

    var alltime = 0;
  

    function daoJiShi()
    {
        
        var num = $("input:text[name='num']").val();
        var numInt = parseInt(num);
        
        alltime = numInt * 30;
        jian();
    }

    function jian()
    {

        //alert(alltime);
        if(alltime < 0)
        {

            return;
        }
        else if(alltime == 0)
        {
            window.alert("时间到,已自动交卷,点击确定查看答题结果");
            // document.getElementById('jiaoJuanBT').click();
            $("#jiaoJuanBT").click();
        }
        else
        {
        //    alert("jinlaile");
            // document.getElementById('shengYuTime').innerHTML = "剩余时间:" + Math.floor(alltime / 60) + " : " + (alltime % 60);
            
            alltime--;
            $("#shengYuTime").text("剩余时间:" + Math.floor(alltime / 60) + " : " + (alltime % 60));
            setTimeout("jian()",1000);
        }
    }

    $(document).ready(function(){        
    //页面加载完成即执行,利用ajax获取用户是否已登录,若返回值为no,则说明没有登录,显示登录div,否则在登录信息div显示已登录,2秒后跳转至主页
        $.ajax({
            url: 'CheckHasLoginSL',
            type: 'GET',
            //dataType: 'default: Intelligent Guess (Other values: xml, json, script, or html)',
            //data: {param1: 'value1'},
        })
        .done(function(data) {
            if(data != "no"){
                $("#userInfo").show();
                $("#menu").show();
            }
            else
            {
                $("#loginMessage").text("用户未登录,2秒后跳转至登录页面");
                setTimeout("location='login.html'",2000);
            }

            console.log("success");
        })
        .fail(function() {
            console.log("error");
        })
        .always(function() {
            console.log("complete");
        });


        $("#zuoTi").click(function() {
            /* Act on the event */
            $("#selectInput").hide();
            $("#show").hide();
            $("#zuoTiInput").css('text-align', 'center');
            $("#zuoTiInput").show();
        });
        


        $("#zuoTiInputTiJiao").click(function() {
            /* Act on the event */
            
            //alert("做题alert");
            $("#maxNumInfo").text("");
            $("#numInfo").text("");
            var pattern = /^[1-9]\d*$/;
            if(!(pattern.test($("input:text[name='maxNum']").val())))
            {
                $("#maxNumInfo").text("请输入正整数");
                return;
            }
            if(!(pattern.test($("input:text[name='num']").val())))
            {
                $("#numInfo").text("请输入正整数");
                return;
            }
            

            var canshu = "type: " + $("input[name='type']:checked").val() + ",hasChengChu: " + $("input[name='hasChengChu']:checked").val() + ",hasKuoHao: " + $("input[name='hasKuoHao']:checked").val() + ",maxNum: " + $("input:text[name='maxNum']").val() + ",num: " + $("input:text[name='num']").val() + ";";
        //    alert(canshu);
            $.ajax({
                url: 'GetShiTiSL',
                type: 'POST',
                //dataType: 'default: Intelligent Guess (Other values: xml, json, script, or html)',
                //data: {param1: 'value1'},
                data: {type: $("input[name='type']:checked").val(),hasChengChu:$("input[name='hasChengChu']:checked").val(),hasKuoHao:$("input[name='hasKuoHao']:checked").val(),maxNum:$("input:text[name='maxNum']").val(),num:$("input:text[name='num']").val()},
            })
            .done(function(data) {
                

                var shiTiShuZu = data.split("#");

                var tableTag = $("#showShiTiTable");
                $("#showShiTiTable").html("");
                $("#rightResult").html("");
                $("#wrongResult").html("");




                var tr1 = document.createElement('tr');
                var th1 = document.createElement('th');
                var textNode1 = document.createTextNode("题号");
                th1.appendChild(textNode1);
                tr1.appendChild(th1);

                var th2 = document.createElement('th');
                var textNode2 = document.createTextNode("题目");
                th2.appendChild(textNode2);
                tr1.appendChild(th2);

                var th3 = document.createElement('th');
                var textNode3 = document.createTextNode("答案");
                th3.appendChild(textNode3);
                tr1.appendChild(th3);

                // var th4 = document.createElement('th');
                // var textNode4 = document.createTextNode("结果");
                // th4.appendChild(textNode4);
                // tr.appendChild(th4);

                tableTag.append(tr1);



                for(var i = 0;i < shiTiShuZu.length - 1;i++)
                {
                    var tr2 = document.createElement('tr');
                    var td1 = document.createElement('td');
                    var textNode1 = document.createTextNode((i + 1) + " : ");
                    td1.appendChild(textNode1);
                    tr2.appendChild(td1);

                    var td2 = document.createElement('td');
                    var textNode2 = document.createTextNode(shiTiShuZu[i] + " = ");
                    td2.appendChild(textNode2);
                    tr2.appendChild(td2);

                    var td3 = document.createElement('td');
                    var inputTag = document.createElement('input');
                    inputTag.type='text';
                    inputTag.name=(i + 1) + "";
                    inputTag.class="tiMu";
                    td3.appendChild(inputTag);
                    

                    var span = document.createElement('span');
                    span.id=(i + 1) + "";
                    td3.appendChild(span);

                    tr2.appendChild(td3);


                    tableTag.append(tr2);

                }

            
                $("#menu").hide();
                $("#selectInput").hide();
                $("#zuoTiInput").hide();
                $("#show").show();
                $("#zuoTiFuZhu").show();
                //开始计时
                daoJiShi();

                console.log("success");
            })
            .fail(function() {
                console.log("error");
            })
            .always(function() {
                console.log("complete");
            });
            
        });





        $("#jiaoJuanBT").click(function() {
            //alert(alltime);
            alltime = -1;
            var userAnswer = "";
            var n = $("input:text[name='num']").val();
            for(var i = 0;i < n;i++)
            {
                userAnswer += (i + 1) + "=" + $("input:text[name='" + (i + 1) + "']").val() + "&";
            }

            $.ajax({
                url: 'JiaoJuanSL',
                type: 'POST',
            //    dataType: 'default: Intelligent Guess (Other values: xml, json, script, or html)',
                data: userAnswer,
            })
            .done(function(data) {
                var result = data.split("#");
                for(var i = 0;i < result.length - 2;i++)
                {
                    if(result[i] != "正确")
                    {
                        $("#"+ (i + 1)).css('color', 'red');
                    }
                    $("#"+ (i + 1)).text(result[i]);
                }
                
                $("#zuoTiFuZhu").hide();
                $("#menu").show();
                $("#wrongResult").css('color', 'red');
                $("#rightResult").text(result[result.length - 2]);
                $("#wrongResult").text(result[result.length - 1]);

                
                console.log("success");
            })
            .fail(function() {
                console.log("error");
            })
            .always(function() {
                console.log("complete");
            });
            

        });



            //点击查询历史试题按钮,利用ajax获取试卷列表
        $("#selectLiShiShiTi").click(function() {
            
            $.ajax({
                url: 'GetShiJuanListSL',
                type: 'POST',
                //dataType: 'default: Intelligent Guess (Other values: xml, json, script, or html)',
                //data: {username: username},
            })
            .done(function(data) {
                
                var shiJuanShuZu = data.split("#");
                var selectTag = $("#shiJuanList");
                $("#shiJuanList").html("");
                var optionTag1 = document.createElement('option');
                var textNode1 = document.createTextNode("全部");
                optionTag1.appendChild(textNode1);
                optionTag1.value="all";
                optionTag1.selected = "selected";
                selectTag.append(optionTag1);
            
                for(var i = 0;i < shiJuanShuZu.length - 1;i++)
                {
                
                    var shiJuanVar = shiJuanShuZu[i].split(",");
                    var optionTag = document.createElement('option');
                    var textNode = document.createTextNode((i + 1) + "、" + shiJuanVar[0]);
                    optionTag.appendChild(textNode);
                    optionTag.value=shiJuanVar[1];
                    selectTag.append(optionTag);
                
                }

                $("#zuoTiInput").hide();
                $("#show").hide();
                $("#selectInput").show();
            
                console.log("success");
            })
            .fail(function() {
                console.log("error");
            })
            .always(function() {
                console.log("complete");
            });
 
        });


        $("#selectShiJuan").click(function() {
            var selectShiJuanID = $("#shiJuanList").val();
            var selectType = $("#typeSelect").val();
            $.ajax({
                url: 'GetShiJuanSL',
                type: 'POST',
                //dataType: 'default: Intelligent Guess (Other values: xml, json, script, or html)',
                data: {shiJuanID: selectShiJuanID,shiTiType:selectType},
            })
            .done(function(data) {
                var shiTiShuZu = data.split("#");

                var tableTag = $("#showShiTiTable");
                $("#showShiTiTable").html("");
                $("#result").html("");



                var tr1 = document.createElement('tr');
                var th1 = document.createElement('th');
                var textNode1 = document.createTextNode("题号");
                th1.appendChild(textNode1);
                tr1.appendChild(th1);

                var th2 = document.createElement('th');
                var textNode2 = document.createTextNode("题目");
                th2.appendChild(textNode2);
                tr1.appendChild(th2);

                var th3 = document.createElement('th');
                var textNode3 = document.createTextNode("用户答案");
                th3.appendChild(textNode3);
                tr1.appendChild(th3);

                var th4 = document.createElement('th');
                var textNode4 = document.createTextNode("正确结果");
                th4.appendChild(textNode4);
                tr1.appendChild(th4);

                var th5 = document.createElement('th');
                var textNode5 = document.createTextNode("备注");
                th5.appendChild(textNode5);
                tr1.appendChild(th5);

                tableTag.append(tr1);


                for(var i = 0;i < shiTiShuZu.length - 1;i++)
                {

                    var shiTiS = shiTiShuZu[i].split(",");

                    var tr2 = document.createElement('tr');
                    var td1 = document.createElement('td');
                    var textNode1 = document.createTextNode((i + 1) + " : ");
                    td1.appendChild(textNode1);
                    tr2.appendChild(td1);

                    var td2 = document.createElement('td');
                    var textNode2 = document.createTextNode(shiTiS[0]);
                    td2.appendChild(textNode2);
                    tr2.appendChild(td2);

                    var td3 = document.createElement('td');
                    var textNode3 = document.createTextNode(shiTiS[1]);
                    td3.appendChild(textNode3);
                    tr2.appendChild(td3);

                    var td4 = document.createElement('td');
                    var textNode4 = document.createTextNode(shiTiS[2]);
                    td4.appendChild(textNode4);
                    tr2.appendChild(td4);

                    var td5 = document.createElement('td');
                    
                    if(shiTiS[3] == "0")
                    {
                    
                        var textNode5 = document.createTextNode("错误");
                        td5.appendChild(textNode5);
                    }
                    else
                    {
                        var textNode5 = document.createTextNode("正确");
                        td5.appendChild(textNode5);
                    }
                    
                    
                    tr2.appendChild(td5);





                    tableTag.append(tr2);

                }

                
                
            //    $("#selectInput").hide();
                $("#zuoTiInput").hide();
                $("#zuoTiFuZhu").hide();
                $("#show").show();
                console.log("success");
            })
            .fail(function() {
                console.log("error");
            })
            .always(function() {
                console.log("complete");
            });
            
        });



        $("input").keyup(function(event) {
            /* Act on the event */
            var keynode = event.which;
            if(keynode == 13)
            {
                //alert("enter");
                if($("#zuoTiInput").is(":visible"))
                {
                    $("#zuoTiInputTiJiao").click();
                }
                
                
            }
        });


         
    });
index.js

 

    $(document).ready(function(){
        //页面加载完成即执行,利用ajax获取用户是否已登录,若返回值为no,则说明没有登录,显示登录div,否则在登录信息div显示已登录,2秒后跳转至主页
        $.get('CheckHasLoginSL',function(data){
            if(data != "no"){

                var userInfo = data.split(" ");
                $("input:text(name='username')").val(userInfo[0]);
                $("input:password(name='password')").val(userInfo[0]);
            
            
            }

            
            
                
            $("#input").show();
            $("input:text[name='username']").focus();
            
            
        });

        //点击登录按钮时间,验证表单不能为空,不空则提交,空则给出警告信息
        $("#bt2").click(function(){
            $("#userInfo").text("");
            $("#pwdInfo").text("");
            
            if($("input:text[name='username']").val() == "")
            {
                $("#userInfo").text("用户名不能为空");
                $("input:text[name='username']").focus();
            }


            else if($("input:password[name='pwd']").val() == "")
            {
                $("#pwdInfo").text("密码不能为空");
                $("input:password[name='pwd']").focus();
            }

            else
            {
                $.ajax({
                    url: 'LoginSL',
                    type: 'POST',
                    //dataType: 'default: Intelligent Guess (Other values: xml, json, script, or html)',
                    data: {username: $("input:text[name='username']").val(),password:$("input:password[name='pwd']").val()},
                })
                .done(function(data) {
                    if(data == "用户名不存在" || data == "密码错误"){
                        $("#loginResult").text(data);
                    }
                    else{
                        location.href="index.jsp";
                    }

                    console.log("success");
                })
                .fail(function() {
                    console.log("error");
                })
                .always(function() {
                    console.log("complete");
                });
                
                
            }
        });

        $("input").keyup(function(event) {
            /* Act on the event */
            var keynode = event.which;
            if(keynode == 13)
            {
                if($("#input").is(":visible"))
                {
                    $("#bt2").click();
                }
            }
        });

    });
    
login.js

 

    $(document).ready(function() {
        $("input:text[name='username']").focus();    

        $("#zhuCe").click(function() {

            if($("#userInfo").text() == "用户名已存在")
            {
                $("input:text[name='username']").focus();    
                return;
            }
            else if($("#userInfo").text() == "用户名可用")
            {
                $("#pwd1Info").text("");
                $("#pwd2Info").text("");
            }
            else
            {
                $("#userInfo").text("");
                $("#pwd1Info").text("");
                $("#pwd2Info").text("");
            }
            var usernamePattern = /^[0-9a-zA-Z]+$/;
            if($("input:text[name='username']").val() == "")
            {
                $("#userInfo").text("请输入用户名");
                $("input:text[name='username']").focus();    
            }
            else if(!(usernamePattern.test($("input:text[name='username']").val())))
            {
                $("#userInfo").text("用户名应为字母或数字");
                $("input:text[name='username']").focus();    
            }
            else if($("input:text[name='username']").val() == "no")
            {
                $("#userInfo").text("用户名不能为no");
                $("input:text[name='username']").focus();
            }
            else if($("input:password[name='pwd1']").val() == "")
            {
                $("#pwd1Info").text("请输入密码");
                $("input:password[name='pwd1']").focus();
            }
            else if($("input:password[name='pwd2']").val() == "")
            {
                $("#pwd2Info").text("请再次输入密码");
                $("input:password[name='pwd2']").focus();
            }
            else if($("input:password[name='pwd1']").val() != $("input:password[name='pwd2']").val())
            {
                $("#pwd2Info").text("两次输入的密码不一致");
                $("input:password[name='pwd2']").focus();
            }
            else
            {
                $.ajax({
                    url: 'LogonSL',
                    type: 'POST',
                    //dataType: 'default: Intelligent Guess (Other values: xml, json, script, or html)',
                    data: {username: $("input:text[name='username']").val(),password:$("input:password[name='pwd1']").val()},
                })
                .done(function(data) {
                    if(data == "success")
                    {
                        $("#logonResult").text("注册成功,2秒后跳转至登录页面");
                        setTimeout("location.href='login.html'",2000);
                    }
                    else
                    {
                        $("#logonResult").text("注册失败!");
                    }
                    console.log("success");
                })
                .fail(function() {
                    console.log("error");
                })
                .always(function() {
                    console.log("complete");
                });
                

            }

        
        });

        $("input:text[name='username']").change(function() {
            if($("input:text[name='username']").val() != "")
            {
                $.ajax({
                    url: 'CheckUsernameHasSL',
                    type: 'POST',
                    //dataType: 'default: Intelligent Guess (Other values: xml, json, script, or html)',
                    data: {username: $("input:text[name='username']").val()},
                })
                .done(function(data) {
                    if(data == "用户名已存在")
                    {
                        $("#userInfo").text("用户名已存在");
                        $("input:text[name='username']").focus();
                    }
                    else
                    {
                        $("#userInfo").text("用户名可用");
                    }
                    console.log("success");
                })
                .fail(function() {
                    console.log("error");
                })
                .always(function() {
                    console.log("complete");
                });
                
            }
        });




        $("input").keyup(function(event) {
            /* Act on the event */
            var keynode = event.which;
            if(keynode == 13)
            {
                $("#zhuCe").click();
            }
        });

    });
logoutFunc.js

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>主页</title>

<script src="js/jquery-3.2.0.min.js"></script>


<script type="text/javascript" src="js/index.js"></script>

<style type="text/css">
     #wrap {position:absolute;left:0px;top:0px;width:100%;height:100%}
    #menu {display: none;text-align: center;}
    #userInfo {display: none;text-align: center;}
    #zuoTiInput {display: none;}
    #selectInput {display: none;text-align: center;}
    #tiMu {height: 400px;overflow: auto;}
    #show {display: none;}
    #right {position:absolute;left:50%;top:40px;height:80%;width:40%}
    #left {position:absolute;width: 50%;top:20%;}
    #zuoTiFuZhu {text-align: center;}
    #result {text-align: center;}
</style>


</head>
<body>
    <img src="photo/index_bg.png" width="100%" height="100%">
    <div id="wrap">
    
    <div id="left">
    
    
        <div id="loginMessage"></div>

        <div id="userInfo">
            用户名:${userInfo.username}
            <a href="LogoutSL"><button id="logout">注销</button></a>
        </div>

        <div id="menu">
            <button id="zuoTi">做题</button>
            <button id="selectLiShiShiTi">查询历史试题</button>
        </div>
        
        <div id="zuoTiInput" >

            <table align="center">
                <tr><td>试题类型:</td><td><label>整数式<input type="radio" name="type" value="0" checked="checked"></label></td><td><label>真分数式<input type="radio" name="type" value="1"></label></td></tr>
                <tr><td>有无乘除:</td><td><label><input type="radio" name="hasChengChu" value="0" checked="checked"></label></td><td><label><input type="radio" name="hasChengChu" value="1"></label></td></tr>
                <tr><td>有无括号:</td><td><label><input type="radio" name="hasKuoHao" value="0" checked="checked"></label></td><td><label><input type="radio" name="hasKuoHao" value="1"></label></td></tr>
                <tr><td>最大值:</td><td colspan="2"><input type="text" name="maxNum" value="10"><span id="maxNumInfo"></span></td></tr>
                <tr><td>试题个数:</td><td colspan="2"><input type="text" name="num" value="10"><span id="numInfo"></span></td></tr>
                <tr><td colspan="3"><input type="button" id="zuoTiInputTiJiao" value="提交"></td></tr>
            </table>

        </div>

        <div id="selectInput">
            试卷:
            <select id="shiJuanList">
                
            </select>
            类型:
            <select id="typeSelect">
                <option value="all" selected="selected">
                    全部
                </option>
                <option value="right">
                    正确
                </option>
                
                <option value="wrong">
                    错误
                </option>
                
            </select>

            <button id="selectShiJuan">
                查询
            </button>
        </div>
    
    
        <div id="show">
            <div id="tiMu">
            <table id="showShiTiTable" align="center">
    
            </table>
            </div>
            <div id="zuoTiFuZhu"><button id="jiaoJuanBT">交卷</button><span id="shengYuTime"></span></div>
                        
        
            <div id="result">
                    <div id="rightResult"></div>
                    <div id="wrongResult"></div>
            </div>
            
        </div>
                
    </div>
    
    
    <div id="right">
        <img src="photo/index_right.jpg"  width="100%" height="100%">
    </div>
 </div>
</body>
</html>
index.jsp

 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录</title>

<script src="js/jquery-3.2.0.min.js"></script>


<script src="js/login.js"></script>



<style type="text/css">
    #input {display: none;
            position:absolute;left:0px; top:30%; width:100%;
            }
</style>

</head>
<body>
<img src="photo/login_bg.png" width="100%" height="100%"/>  

    <div id="loginMessage">
        
    </div>
    
        
    
    <div id="input">
    <center>
        <form action="loginSL" id="loginForm">
            <table>
                <tr><td>用户名:</td><td><input type="text" name="username"></td><td><span id="userInfo"></span></td></tr>
                <tr><td>密码:</td><td><input type="password" name="pwd"></td><td><span id="pwdInfo"></span></td></tr>
                <tr><td><a href="logon.html"><input type="button" id="bt1" value="注册"></a></td><td><input type="button" id="bt2" value="登录"></td></tr>
                <tr><td></td><td><span id="loginResult"></span></td></tr>
            </table>
        </form>
    </center>
    </div>

</body>
</html>
login.html

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册</title>


<script src="js/jquery-3.2.0.min.js"></script>


<script src="js/logonFunc.js"></script>



<style type="text/css">
    #input {
            position:absolute;left:0px; top:30%; width:100%;z-index: 100;
            }
    img {z-index: -1;}
</style>


</head>
<body>
    <img src="photo/login_bg.png" width="100%" height="100%"/>
    <div>
    </div>
    <div id="input">
    <center>
    <form>
        <table>
            <tr><td>用户名:</td><td><input type="text" name="username"><span id="userInfo"></span></td></tr>
            <tr><td>密码:</td><td><input type="password" name="pwd1"><span id="pwd1Info"></span></td></tr>
            <tr><td>请再次输入密码:</td><td><input type="password" name="pwd2"><span id="pwd2Info"></span></td></tr>
            <tr><td><input type="reset" value="重置"></td><td><input type="button" id="zhuCe" value="注册"></td></tr>
            <tr><td></td><td><a href="login.html">已有账号,点次登录</a></td></tr>
            <tr><td></td><td><span id="logonResult"></span></td></tr>
        </table>

    </form>
    </center>
    </div>
</body>
</html>
logon.html

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注销</title>




<script src="js/jquery-3.2.0.min.js"></script>

<script>
    $(document).ready(function(){
        setTimeout("location='login.html'",2000);
    });
</script>

</head>
<body>
    <h1>注销成功,2秒后跳转至登录页面</h1>
    
</body>
</html>
logout.html

 

posted @ 2017-04-07 18:34  liuxining  阅读(195)  评论(0编辑  收藏  举报