在线计算机等级考试报名系统.doc
在线计算机等级考试报名系统的设计与实现一、需求分析(一) 开发背景计算机等级考试在线报名系统的开发,主要是为了考查综合知识应用能力和可动手实践能力,能够得到较系统的技能训练,从而巩固和加深对Java Web编程的基础理论知识的理解,从人工操作的繁琐而转变成数据信息都由机器来操作,这样大大减少了工作量,使计算机等级考试报名工作变得轻松,而且能节省大量的时间。(二) 系统概述此系统是一个网络版计算机等级考试在线报名系统,它具有考生注册,考生登录,考生报考信息及个人信息,考生信息查询等功能;(三) 系统运行环境Windows环境下(四) 功能需求描述此系统采用了B/S模式,其主要功能模块如下:网上登录模块;网上注册模块;报考信息模块;准考证号生成;信息录入模块;头像上传模块;信息查询模块;二、系统设计 (一) 总体设计1、系统功能模块详述(1) 网上登录模块:当考生输入正确的账户名和密码时,则进入该考生个人页面;(2) 网上注册模块:当考生未注册时,由网上登录模块点击“注册”则进入注册页面进行注册;(3) 报考状态模块:级别与考试语言的选择,考生生信息的录入;(4) 信息录入模块:考生录入详细的个人信息;(5) 头像上传模块:考生上传自己的个人头像;(6) 信息查询模块:考生可查看自己的报考信息及个人信息(含生成准考证号)。(二) 系统功能模块图三、详细设计总体设计阶段以比较抽象概括的方式提出了解决问题的方法,现在就需要将各个比较抽象的模块具体化,包括设计网页的布局和友好的人机交互界面,确定实现每个模块功能所采用的算法,数据结构及包,底层数据库的设计等等。(一) 数据库设计数据库设计是进行详细设计的基础,只有首先确定系统所要用到的数据信息,并将他们进行汇总和筛选,才能设计出符合要求的数据库和表(这里所谓符合要求是指数据冗余小,数据可操作性强,数据库中表与表之间的关系明确)。特别是使用面向对象技术的时候,设计出了适当的数据库就相当于有了类模型,对后类的设计有很大的好处。1、系统 E-R 模型:2、系统所包含的数据库和表:一个数据库:ncre。其中,ncre数据库中有如下表:表3.1 login字段名类型关键字说明idint(11)idid号accountChar(20)account用户名passwordChar(20)密码表3.2 bkxx字段名类型关键字说明zkzhbigint(20)zkzh准考证号accountChar(20)account用户名nameChar(20)姓名oldzkzhChar(20)旧准考证号bkdjChar(20)报考等级kslbChar(20)考试类别blcjlxChar(20)保留成绩类型表3.3 grxx字段名类型关键字说明accountChar(20)account用户名nameChar(20)姓名sexChar(4)性别sfzhChar(20)身份证号telChar(13)联系电话emailVarchar(50)E-mailmzChar(20)民族xlChar(16)学历zyChar(30)专业addrVarchar(240)通讯地址grtxChar(20)个人头像(二) 界面设计由于整个系统用jsp来开发,所以采用图形化操作界面,主要有一个登陆界面、注册界面及一个注册用户界面等。下面分别以登录界面、注册界面及用户报名界面为参考界面展现整个系统。1、登录界面:图3.3 登录界面2、注册界面:图3.4 注册界面3、用户报名界面: 图3.5 用户报名界面另外,为了减少窗体的个数和避免用户频繁切换窗口,在设计中还在报考信息模块、信息录入模块、头像上传模块、信息查询模块中使用了框架技术,由于信息查询窗口和信息修改窗口类似且窗口数量过多,所以这里只显示信息查询窗口、个人报考信息窗口、上传个人照片窗口。(由于窗口过大显示不完全,则全屏显示(按F11)4、显示信息查询窗口:图3.6 信息查询窗口5、个人报考信息窗口:图3.7 个人报考信息窗口6、上传个人照片窗口:图3.8 上传个人照片窗口(三) 系统部分功能流程图 本设计有很多功能模块,这里只给出一些特定模块的流程图,下面就是登录功能模块的流程图和上传照片模块功能模块的流程图:1、 登录功能模块的流程图:2、 上传照片功能模块的流程图:(四) 系统类和网页代码1、本课程设计仅提供部分类以做演示:(1)、DataBaseDAO的功能是:建立与数据库的连接、关闭与数据库的连接、建立执行sql语句的对象并返回影响的行数、将数据插入到数据库、创建返回结果集的对象;代码如下:package com.dao;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class DataBaseDAO private String driver="com.mysql.jdbc.Driver"private String url="jdbc:mysql:/localhost:3306/ncre"private String name = "root"private String pwd="Demon1202"Connection conn=null;/建立与数据库的连接public DataBaseDAO()try Class.forName(driver);conn = DriverManager.getConnection(url, name,pwd); catch (ClassNotFoundException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace();/关闭与数据库的连接public void CloseConn()try if(conn!=null)conn.close(); catch (SQLException e) e.printStackTrace();/建立执行sql语句的对象并返回影响的行数public int executeUpdate(String sql)Statement stmt;try stmt = this.conn.createStatement();int rows = stmt.executeUpdate(sql);return rows; catch (SQLException e) e.printStackTrace();return 0;/创建返回结果集的对象public ResultSet executeQuery(String sql)ResultSet rs;Statement stmt;try stmt = this.conn.createStatement();rs = stmt.executeQuery(sql);return rs; catch (SQLException e) e.printStackTrace();return null;/将数据插入到数据库public int executeUpdate(String sql,Object p)PreparedStatement pstmt;try pstmt = this.conn.prepareStatement(sql);int i=1;for(Object o:p)pstmt.setObject(i, o);i+;int rows = pstmt.executeUpdate();return rows; catch (SQLException e) e.printStackTrace();return 0;(2)、UserDAO类的功能是:判断用户是否存在、查询用户信息、修改用户信息、修改密码、添加照片等;代码如下:package com.dao;import java.sql.ResultSet;import java.sql.SQLException;import com.pojo.User;public class UserDAO public boolean checkuser(String name,String pwd)String sql="select * from login where account='"+name+"'and password='"+pwd+"'"DataBaseDAO db = new DataBaseDAO();ResultSet rs;rs = db.executeQuery(sql);try while(rs.next()return true; catch (SQLException e) e.printStackTrace(); finallydb.CloseConn();return false;/判断用户是存在,用户登录模块方法public User getUser(String name,String pwd)String sql="select * from login where account='"+name+"'and password='"+pwd+"'"DataBaseDAO db = new DataBaseDAO();ResultSet rs=null;User user=null;rs = db.executeQuery(sql);try while(rs.next()int id =rs.getInt(1);String uname = rs.getString(2);String upwd = rs.getString(3);user = new User(id,uname,upwd); catch (SQLException e) e.printStackTrace(); finallydb.CloseConn();return user;/用户注册信息方法public boolean addUser(String name,String pwd,String uname,String usex,String usfzh,String utel,String uemail)String sql1="insert into login(account,password) values(?,?)"String sql2="insert into grxx(account,name,sex,sfzh,tel,email) values(?,?,?,?,?,?)"String sql3="insert into bkxx(account,name) values(?,?)"DataBaseDAO db = new DataBaseDAO();Object pram1=name,pwd;Object pram2=name,uname,usex,usfzh,utel,uemail;Object pram3=name,uname;int rows1 = db.executeUpdate(sql1,pram1);int rows2 = db.executeUpdate(sql2,pram2);int rows3 = db.executeUpdate(sql3,pram3);if(rows1>0)&&(rows2>0)&&(rows3>0)return true;elsereturn false;/修改用户基本信息public boolean addUser(String username,String uname,String usex,String usfzh,String utel,String uemail)String sql1="update grxx set name='"+uname+"',sex='"+usex+"',sfzh='"+usfzh+"',tel='"+utel+"',email='"+uemail+"' where account='"+username+"'"String sql2="update bkxx set name='"+uname+"' where account='"+username+"'"DataBaseDAO db = new DataBaseDAO();int rows1 = db.executeUpdate(sql1);int rows2 = db.executeUpdate(sql2);if(rows1>0)&&(rows2>0)return true;elsereturn false;public boolean addUser(String username,String uname,String usex,String usfzh,String utel,String uemail,String umz,String uxl,String uzy,String uaddr)String sql2="update grxx set name='"+uname+"',sex='"+usex+"',sfzh='"+usfzh+"',tel='"+utel+"',email='"+uemail+"',mz='"+umz+"',xl='"+uxl+"',zy='"+uzy+"',addr='"+uaddr+"' where account='"+username+"'"String sql1="update bkxx set name='"+uname+"' where account='"+username+"'"DataBaseDAO db = new DataBaseDAO();int rows2 = db.executeUpdate(sql2);int rows1 = db.executeUpdate(sql1);if(rows1>0)&&(rows2>0)return true;elsereturn false;public boolean addUser(String username,String uname,String usex,String usfzh,String utel,String uemail,String uxl,String uzy,String uaddr,String ubkdj,String ukslb,String ublcjlx,String uoldzkzh)String sql1="update grxx set name='"+uname+"',sex='"+usex+"',sfzh='"+usfzh+"',tel='"+utel+"',email='"+uemail+"',xl='"+uxl+"',zy='"+uzy+"',addr='"+uaddr+"' where account='"+username+"'"String sql2="update bkxx set bkdj='"+ubkdj+"',kslb='"+ukslb+"',blcjlx='"+ublcjlx+"',oldzkzh='"+uoldzkzh+"' where account='"+username+"'"DataBaseDAO db = new DataBaseDAO();int rows1 = db.executeUpdate(sql1);int rows2 = db.executeUpdate(sql2);if(rows1>0)&&(rows2>0)return true;elsereturn false;/修改密码public boolean addUser(String username,String pwd)String sql1="update login set password='"+pwd+"' where account='"+username+"'"DataBaseDAO db = new DataBaseDAO();int rows1 = db.executeUpdate(sql1);if(rows1>0)return true;elsereturn false;/添加照片public boolean updateUser(String username,String ugrtx)String sql1="update grxx set grtx='"+ugrtx+"' where account='"+username+"'"DataBaseDAO db = new DataBaseDAO();int rows1 = db.executeUpdate(sql1);if(rows1>0)return true;elsereturn false;2、本课程设计仅提供登陆页面代码以做演示:index.jsp网页代码:<% page language="java" import="java.io.*" pageEncoding="gb2312"%><html> <head> <title>计算机等级考试在线报名系统</title> </head> <style type="text/css"> <!- body background-image: url(images/img.jpg); -> </style> <body> <center> <img src=images/bt.jpg> <marquee direction=left scrollamount=3 width=500>计算机等级考试在线报名系统已开通,请广大考生前来报名!</marquee> <br><br><b><font face="Arial" size=5 color=#000000>登 录 平 台</font></b> <form onsubmit="return validate()" method="post" action="userdenglu_do.jsp"> <table border="1" width="300"> <tr> <td>登录账号:</td> <td><input type="text" name="account1" id="account1" value=""/></td> </tr> <tr> <td>登录密码:</td> <td><input type="password" name="password1" id="password1" value="" size=21/></td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" value=" 登 录 "/> <input type="reset" name="submit2" value=" 重 置 "/></td> </tr> </table> </form> <a href="zcxx.jsp">注册新帐号</a> <br><br><br><br><br><p>版权所有 违者必究</p>/javascript<script type="text/javascript">function validatename() var text=document.getElementById('account1').value; if(text=null|text.replace(/s+,""/).replace(/s+$/,"")='')alert('用户名不能为空!');document.getElementById('account1').focus();return false;return true;function validatepwd() var pwd=document.getElementById("password1").value;if(pwd=""|pwd.replace(/s+,""/).replace(/s+$/,"")='')alert('密码不能为空!');document.getElementById("password1").focus();return false;return true;function validate()var flag=validatename();if(flag=false)return false;var flag=validatepwd();if(flag=false)return false;return true;</script> </center> </body></html>四、总结:此系统的优点是用了java语言中的面向对象思想,各个模块可以单独编写单独方法,最后只要同过一个类来调用即可,在后期增加系统功能时非常方便。此系统基本上实现了在线计算机等级考试的功能。其缺点很多,首先界面不太友好;其次没有采用加密算法,安全性能也不好。此系统的优化方向是界面优化,加强安全管理,完善各种功能!参考文献:1 李振捷 ,陈雄,王军.JSP网站开发典型模块与实例精讲(附光盘),电子工业出版社。2 程伟等编著。开发者突击:JSP网络开发经典模块实现全集。 3 郑阿奇,Java EE基础实用教程,电子工业出版社。4 张银鹤,唐有明,王俊伟.JSP+Ajax网站开发实例,电子工业出版社。5 李兆锋等Java Web项目开发案例精粹(含DVD光盘1张) ,电子工业出版社。6 明日科技,JSP项目开发案例全程实录(第2版),清华大学出版社。