博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在线投票程序开发
阅读量:6513 次
发布时间:2019-06-24

本文共 8192 字,大约阅读时间需要 27 分钟。

hot3.png

导航结构图:

104207_zI59_1540055.png

关键问题的解决方法描述:

1.  创建新主题的时候,可以输入多个投票选项,选项的个数是不定的,所以需要要动态的获取用户输入的选项。解决的方法是利用页面的局部刷新为用户动态生成投票选项输入框。为用户提供一个选项添加按钮,当用户需要添加输入投票选项的时候就可以按按钮生成一个选项输入框。

2.  投票的选项的数量是不确定,这些数据都需要保存进数据库,如何为数据库建表,建表的字段又该怎么建立。解决这个问题的方法是将每一个投票主题的所有选项都用同一个字段保存。将每一个选项的内容全部放在一起,用自己定义的分隔符分开,然后保存在同一个字段里,这样就解决了投票选项个数不确定,但依旧可以保存进数据库的问题。

3.  用户设置的投票方式:单选或多选。解决这个问题的方法是只允许单选的投票用单选框提供给用户投票,允许多选的投票提供复选框给用户投票。当要获取用户投票的数据时,遍历所有的选项,对有所有被选中的单选框或是复选框进行记录。

4.  开启和关闭一个投票。解决这个问题的方法是在数据库中为每一个主题创建一个字段用于记录该主题是否允许投票。该字段只有2个值:0和1。当取值为0时,不允许投票,只允许查看,当取值为1时允许投票。

核心代码:

客户端页面局部刷新JavaScript:

 function createRequest(url,theme,q){           var index="div_vote0"+q;        //alert(index);        http_request = false;        if(window.XMLHttpRequest){        http_request = new XMLHttpRequest();                }else if(window.ActiveXObject){        try{http_request = new ActiveXObject("Msxml2.XMLHTTP");}catch(e){try{                                                                       http_request = new ActiveXObject("Microsoft.XMLHTTP");}                                                                       catch(e){    }                                                                         }        }        if(!http_request){            alert("cannt");            return false;        }        http_request.onreadystatechange=function(){getResult(index);}//getResult;        http_request.open('POST',url,true);        http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");        http_request.send("theme="+theme);        }        //查看        function getResult(index){            var t1=index+"1";            var t2=index+"2";            if(http_request.readyState==4){                if(http_request.status==200){                    document.getElementById(index).innerHTML=http_request.responseText;                    document.getElementById(t1).innerHTML = "
";                    document.getElementById(t2).innerHTML = "";                }else{                    document.getElementById("div_vote0").innerHTML="操作失败!";                    document.getElementById(t1).innerHTML = "
";                    document.getElementById(t2).innerHTML = "";                }            }        }                        function abc(index){                var t1=index+"1";                var t2=index+"2";                document.getElementById(index).innerHTML = "";                document.getElementById(t1).innerHTML = "";                document.getElementById(t2).innerHTML = "";            }

在Servlet里向数据库中添加数据:

 protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{                String data = new String(request.getParameter("mydata").getBytes("iso-8859-1"),"utf-8");                String radio = request.getParameter("theme_radio");        int theme_radio = Integer.parseInt(radio);        String[] str = data.split("=");        String[] temps =str[1].split(",");        String temp="";        for(int i=0;i
主题为\""+str[0]+"\"的投票添加成功!");        wout.flush();        wout.close();    }

在Servlet里验证用户登录:

protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{        String code = (String)request.getSession().getAttribute("validate_code");        String sql = "select * from data";        String user = request.getParameter("name").toString();        String pwd = request.getParameter("pwd").toString();        String mycode = request.getParameter("code");        String dbuser="";        String dbpwd = "";        boolean flag1=false;        if(code.equals(mycode)) flag1=true;        try {            stmt = conn.createStatement();            ResultSet rs = stmt.executeQuery(sql);                    while(rs.next()){                int i = rs.getInt("able");                if(i==3){                 dbuser = rs.getString("theme");                 dbpwd = rs.getString("temp");                 break ;                }            }            rs.close();            stmt.close();        } catch (SQLException ex) {            Logger.getLogger(IndexServlet.class.getName()).log(Level.SEVERE, null, ex);        }        if(!flag1){             String message = "
验证码不正确!";            request.setAttribute("message", message);            request.getRequestDispatcher("login.jsp").forward(request, response);        }        if(user.equals(dbuser)&&pwd.equals(dbpwd)){             request.getRequestDispatcher("job.jsp").forward(request, response);            }        else {            String message = "
用户名或密码不正确!";            request.setAttribute("message", message);            request.getRequestDispatcher("login.jsp").forward(request, response);        }    }

在Servlet里处理投票:

protected void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException{               String theme = new String(request.getParameter("theme").getBytes("iso-8859-1"),"utf-8");        String votes = new String(request.getParameter("votes").getBytes("iso-8859-1"),"utf-8");        String sql = "select * from votes";        String temp="";        String IPAddr = getIpAddr(request);     //获得IP        int sum = 0;        boolean ipFlag = false;        if(votes==null||votes.equals(""))          {   return ;  }        int newtime = getDate();                //获得当前时间                PreparedStatement ps;        try {            stmt = conn.createStatement();            //=====================================            ResultSet rs = stmt.executeQuery(sql);            sql = "select * from ipaddr";             rs = stmt.executeQuery(sql);             String themes="";            while(rs.next()){                String ipAddr = rs.getString("ip");                if(ipAddr.equals(IPAddr)){                themes = rs.getString("themes");                int oldtime = rs.getInt("time");                sum = newtime - oldtime;                 ipFlag = true;                break;                }            }            rs.close();            if(!ipFlag){  //如果ip不存在                sql = "insert into ipaddr(ip,time,themes) values(?,?,?)";                 ps = conn.prepareStatement(sql);                ps = conn.prepareStatement(sql);                ps.setString(1, IPAddr);                ps.setInt(2, newtime);                ps.setString(3, theme+",");                int row = ps.executeUpdate();                ps.close();            }else if(!findTheme(themes,theme)) {                if(themes==null) themes="";                ipFlag=false;                sql = "update ipaddr set themes=? where ip=?";                ps = conn.prepareStatement(sql);                String mythemes = themes+theme+",";                ps.setString(1, mythemes);                ps.setString(2, IPAddr);                ps.executeUpdate();                ps.close();            }else {                ipFlag = true;            }            sql = "select * from votes";            rs = stmt.executeQuery(sql);            while(rs.next()){                String theme1 = rs.getString("theme");                if(theme1.equals(theme)){                temp = rs.getString("temp");               break;                }            }            temp = deal(temp,votes);   //获取数据            sql = "update votes set temp=? where theme=?";            ps = conn.prepareStatement(sql);            ps.setString(1, temp);            ps.setString(2, theme);            ps.executeUpdate();            ps.close();                    } catch (SQLException ex) {            Logger.getLogger(IndexServlet.class.getName()).log(Level.SEVERE, null, ex);        }                response.setCharacterEncoding("UTF-8");        response.setContentType("text/html");        PrintWriter wout = response.getWriter();        if(!ipFlag)            wout.print("
谢谢您的投票!

");        wout.flush();        wout.close();    }

系统测试截图

1 系统开始时的界面:

113645_lhhB_1540055.jpg113905_Blif_1540055.jpg

用户刚进入系统时的开始界面。用户可以查看系统已有的投票,也可以为其中的某个主题进行投票。

2 对其中的某个主题进行投票:

114015_K5St_1540055.jpg

有些投票只允许单选,有些投票可以多选。

3 管理员登陆界面:

114102_OHz6_1540055.jpg

 4 管理员权限界面:

114154_lYJI_1540055.jpg

只有管理员登陆后才可以执行的操作。

5 发起一个新的投票:

114237_nSIH_1540055.jpg

按添加项按钮可以动态添加需要的项目。

6 管理开启关闭投票:

114331_vnHC_1540055.jpg

7 用户名和密码修改

114422_0wnZ_1540055.jpg

转载于:https://my.oschina.net/u/1540055/blog/280516

你可能感兴趣的文章
EMLS项目推进思考
查看>>
Eclipse快捷键 10个最有用的快捷键
查看>>
2018-2019-1 20165302 实验五 通讯协议设计
查看>>
Golang 知识点总结
查看>>
JAVA 8 特性
查看>>
算法设计 - LCS 最长公共子序列&&最长公共子串 &&LIS 最长递增子序列
查看>>
WebService之Axis2快速入门(7): Spring与axis整合发布为WebServic
查看>>
Uliweb查看模板调用关系
查看>>
C#与PHP通信压缩
查看>>
关于 Linux
查看>>
图文解析五大外链误区
查看>>
ios开发之导航控制器的原理
查看>>
《Netkiller Blockchain 手札》Hyperledger Fabric Java SDK Demo
查看>>
querySelector 和 querySelectorAll区别
查看>>
Linux系统_Centos7下安装Nginx
查看>>
《PHP和MySQL Web 开发》 第12章 MySQL高级管理
查看>>
数据库设计 Step by Step (6) —— 提取业务规则
查看>>
Redis客户端redisson实战
查看>>
连接到 JasperReports Server
查看>>
java处理高并发高负载类网站问题
查看>>