已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验三 数据结构考试网站开发1 实验目的1)掌握JSP程序设计的基本概念和方法。2)熟悉JSP软件开发环境,包括Tomcat服务器的安装配置、MySQL的使用配置,以及JSP+Servlet+MySQL项目的开发过程。注:数据库也可以选用Acess。3)通过一个在线考试网站的实例,掌握Web项目开发与分析方法,了解基本的软件工程过程,学会分析文档的撰写。2 工具/准备工作在开始本实验之前,请回顾PPT和教科书的相关内容。需要准备一台带有浏览器,安装完成Tomcat, Eclipse,MySQL的计算机。3. 实验任务描述开发一个在线的数据结构考试网站,可以供100人以上同时在线考试。考试题目的类型只有编程题,一共有10题,每位同学做其中1题。每位同学进入考试网站后,首先输入自己的学号,系统自动抽取一题,学生通过网页观看题目要求。根据要求在本地计算机上使用TC做题后,将做好的源代码(.c文件)和可执行文件(.exe文件)通过网站上传。每位同学在第一次登陆成功后,系统会自动产生一个随机密码(6位数字),学生自己保管。在第二次重新登陆的时候,需要正确输入该密码才能进入系统。为了便于老师评阅,上传后的文件以文件形式放在服务器上,文件名自动变为 学号_题号_原文件名.c(或者.exe)。例如,假设有学生的学号为0404991008,上传的时候该学生给文件取的文件名为:张海洋.cpp,则上传到服务器后的文件名为:0404991008_3_张海洋.cpp。所有学生的资料均由学号(10位数字,但是可能以0开始)和姓名组成。题目由题号(1-10整数)和题目描述(不定长的文本)组成。这些资料已文本方式文件方式提供,例如,存放学生的文本文件是:0404991008 张海洋0404991009 王海洋0404991010 李海洋存放题目的文本文件是:1 题目1,xxxxxxxxxx2 题目2,xxxxxxxxxx3 题目3,xxxxxxxxxx4实验步骤与指导4.1 需求分析任务:分析本实验的项目要求,划分和归纳功能要点,写出项目需求,从用户的角度出发要实现哪些功能。4.1.1本项目的需求有:1 能实现100人以上同时在线考试的考试系统。2 根据学号登陆功能:用户输入学号,系统根据数据库中的学号判断是否为合法用户。3 自动抽题功能: 用户登陆以后,系统随即从10个题目中产生一个题目给用户 4 产生随机密码功能: 用户登陆以后,系统随机给每个用户产生一个6位数字的密码 5 显示题目功能: 系统根据随机抽到的题目,从数据库中抽取改题号的题目,显示出来。 6 文件上传功能: 用户完成以后,可以将.c或.exe文件上传至服务器 7 根据密码登陆 功能: 用户在第二次登陆时需要输入第一次登陆时产生的随机密码才能登陆 8 文件变名 功能: 文件上传至服务器后,自动修改其文件名以便查看 9 文件存放提供 功能: 用户资料以及题目等相关文件以文本方式存放、提供 4.1.2本项目的各种约束条件有:1100人以上同时在线。2 学号为10位数字,能以0开始 3 随机产生的密码为6位数字 4 上传的文件为.c或.exe文件 4.1.3本项目的数据字典:注意:数据字典是各类数据描述的集合,它是关于数据库中数据的描述,即元数据,而不是数据本身。数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程五个部分(至少应该包含每个字段的数据类型和在每个表内的主外键)。在本实验中,简化为对数据项的描述。1 学号:由10位数字,可以以0开始。10位数字的具体含义在本项目中不重要。2 姓名: 24位汉字 3 学生: 学号+姓名 4 题目: 题号+题目描述 5 题号: 1|2|3|4|5|6|7|8|9|10 6 题目描述: 不定长的文本 7 上传文件名:文件名+.cpp|.exe 8 密码:6位数字 9 服务器中的文件名:学号+题号+原文件名+.cpp|.exe 4.2 总体设计任务:根据需求分析中的功能需求,设计出本系统的总体设计方案,系统结构,采用的技术方案。4.2.1 总体设计方案鉴于需要有100人以上的在线考试,本系统采用基于JSP+Servlet+MySQL的技术来实现基于网络和浏览器的考试系统。考试系统由如下模块组成:图1 系统结构图在线考试网站由三部分组成:登陆管理、在线考试和系统管理。首先用户通过登陆管理中的登陆界面使用学号登陆系统,系统核对登陆信息,并生成/或核对密码。通过验证后,系统显示该考生对应的题目,考生根据题目要求做完题目后,使用文件上传功能将文件上传。另外,老师可以通过密码查询模块查询某学号对应的密码;并在考试完成后统计考生的人数。 其中,每一模块的功能如下:1 登陆管理用户通过登陆管理来登陆考试系统 (1) 登陆界面 实现用户在输入学号下进行登陆。 (2) 核对登录 系统根据数据库中的记录来核对该用户是否有效 (3) 生成密码 系统验证用户有效后,随机生成密码用以用户下次登录哦。 (4) 核对密码 用户在第二次登陆时,验证该用户输入的密码是否正确 2 在线考试 系统随机显示一首歌给用户,用户完成以后再将源文件上传给服务器 (1) 题目显示 由系统随机产生题号,并从数据库中抽出题目,显示在浏览器上。 (2) 上传文件 完成上传.c或.exe 文件的功能 3 系统管理 (1) 密码查询 (2) 统计 4.2.2 技术方案本项目采用JSP+Servlet+MySQL的技术来实现。采用Tomcat作为Web发布服务器和Servlet容器,MySQL作为数据库服务器,组成一个三层结构的B/S构架。采用本技术方案有如下优点:1 2 3 因此,能确保完成本项目的各项要求。画出三层构架图如下:图2 三层构架图网络结构图如下:图3 网络结构图4.3 详细设计4.3.1 网站结构图图4 网站结构图注:图中蓝色线代表“组成”;红色箭头代表“递交submit”;黄色箭头表示“网页跳转”。4.3.2 界面设计1index.jsp界面图5 index.jsp2firstEnter.jsp图6 firstEnter.jsp3reEnter.jsp图7 reEnter.jsp4Testpage.jsp图8 testPage.jsp5Save.jsp图9 save.jsp6Error.jsp4.3.3 数据库设计1本系统的实体关系图(ER图)本系统涉及到的对象有:n 学生:学生由学号和姓名组成,其中学号是非空、唯一值。n 题目:题目由题号和题目要求组成,其中题号是非空、唯一值。n 试卷:试卷由学号、抽题号、密码组成,每一个学生抽得唯一的题号,并有一个唯一的密码。n 上交答案:以文件形式存在,包括c源代码文件和可执行文件。ER图绘制如下:()注意:E-R图是相对于概念模型而言的,在数据库中有严格的界定,是P.P.S.Chen于1976年提出的实体-联系方法(Entityt-Relationship Approach).该方法用ER图来描述现实世界的概念模型 ER图提供了表示实体型属性和联系的方法; 实体型:用矩形表示. 属性:用椭圆形表示. 联系:用菱形表示. 可以参考第三版。图10 系统ER图2数据库表设计n 学生表:学号文本类型姓名文本类型n 题目表:题号数字题目要求文本类型n 试卷表:学号文本类型题号数字密码文本类型4.3.4登录管理模块设计1流程设计 登陆管理模块实现用户通过学号登陆系统的功能,该模块由3个jsp文件和2个Servlet组成:n Index.jsp:首页,输入学号,递交到validateNumberServletn validateNumberServlet.java:n 通过HttpRequest获取index.jsp中的学号n 访问数据库中的学生表,查找该学号是否存在。n 如果不存在,网页跳转到错误页面;n 如果存在,则再查询试卷表,检查是否已经登录过,如果登陆过了,跳转到reEnter.jsp;n 如果是第一次登陆,则调用随机数函数产生密码和题号,将学号、题号和密码存放到试卷表中,最后跳转到firstEnter.jsp。n firstEnter.jsp:首次登录成功后的欢迎页面,学号、姓名、题号通过validateNumberServlet的网页跳转指令中的传值得到。点击“开始”按钮后,进入试题显示页面。n reEnter.jsp:再次登录的欢迎页面,要求输入密码。并将密码和学号递交给checkPasswordServlet。n checkPasswordServlet.java:检查再次登录的密码:n 通过HttpRequest获取reEnter.jsp中的学号和密码。n 查询试卷表,查找学号和密码是否一致。n 如果不一致,跳转到错误页面。n 如果一致,跳转到试题显示页面。 请按照以上流程,画出流程图。2类设计类 checkPasswordServletjava.lang.Object HttpServlet checkPasswordServletpublic class checkPasswordServlet extends HttpServlet构造函数摘要checkPasswordServlet() 构造函数方法摘要voiddestroy() 析构函数.voiddoGet(HttpServletRequestrequest, HttpServletResponseresponse) String strFowardURLpublic void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException String strSNumber = request.getParameter(snumber);String strPassword = request.getParameter(password);int topic_number;tryContext initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup(java:comp/env); DataSource db = (DataSource) envCtx.lookup(jdbc/dstester); Connection conn = db.getConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(SELECT * FROM results where snumber= + strSNumber + and password= + strPassword + ); if(rs.next()topic_number = rs.getInt(6);strFowardURL = /testPage.jsp?topicNumber= + topic_number + &snumber= + strSNumber;elsestrFowardURL = /error.jsp?err_no=2;rs.close();stmt.close(); conn.close();ServletContext context= getServletContext();RequestDispatcher dispatcher = context.getRequestDispatcher(strFowardURL);dispatcher.forward(request, response);catch(Exception e) System.out.println(e.getMessage();voiddoPost(HttpServletRequestrequest, HttpServletResponseresponse) The doPost method of the servlet.public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException doGet(request,response);voidinit() Initialization of the servlet.类 validateNumberServletjava.lang.Object HttpServlet validateNumberServletpublic class validateNumberServlet extends HttpServlet构造函数摘要validateNumberServlet() Constructor of the object.方法摘要voiddestroy() Destruction of the servlet.voiddoGet(HttpServletRequestrequest, HttpServletResponseresponse) public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException String strFowardURL;String strSNumber = request.getParameter(studentNumber);tryContext initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup(java:comp/env); DataSource db = (DataSource) envCtx.lookup(jdbc/dstester); Connection conn = db.getConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(SELECT * FROM results WHERE snumber= + strSNumber + );if(rs.next()String topicnumber = rs.getString(6);strFowardURL = /checkPassword.jsp?snumber= + strSNumber + &topicnumber= + topicnumber;elseResultSet rs2 = stmt.executeQuery(SELECT * FROM user where snumber= + strSNumber + ); if(rs2.next()String password = produceRandom();int topicNumber = getRandom(5)+1;insertNewRecord(strSNumber, password, topicNumber);strFowardURL = /firstEnter.jsp?topicNumber= + topicNumber + &password= + password + &snumber= + strSNumber + &topicnumber= + topicNumber;elsestrFowardURL = /error.jsp?err_no=1;rs2.close(); rs.close(); stmt.close(); conn.close();ServletContext context= getServletContext();RequestDispatcher dispatcher = context.getRequestDispatcher(strFowardURL);dispatcher.forward(request, response);catch(Exception e) System.out.println(e.getMessage();voiddoPost(HttpServletRequestrequest, HttpServletResponseresponse) The doPost method of the servlet.private intgetRandom(intscope) voidinit() Initialization of the servlet.private voidinsertNewRecord(java.lang.StringstudentNumber, java.lang.Stringpassword, inttopicNumber) private void insertNewRecord(String studentNumber, String password, int topicNumber)tryContext initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup(java:comp/env); DataSource db = (DataSource) envCtx.lookup(jdbc/dstester); Connection conn = db.getConnection(); Statement stmt = conn.createStatement(); stmt.execute(insert into results (snumber,password,topicnumber) value ( + studentNumber + , + password + , + topicNumber + ); stmt.close(); conn.close();catch(Exception e) System.out.println(e.getMessage();private java.lang.StringproduceRandom() private String produceRandom()String sRand = new String();Random random = new Random(); for (int i=0;i8;i+) String rand=String.valueOf(random.nextInt(10); sRand+=rand;return sRand;类 fileUploadServletjava.lang.Object HttpServlet fileUploadServletpublic class fileUploadServlet extends HttpServlet构造函数摘要fileUploadServlet() Constructor of the object.方法摘要voiddestroy() Destruction of the servlet.voiddoGet(HttpServletRequestrequest, HttpServletResponseresponse) public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException response.setContentType(text/html);PrintWriter out = response.getWriter();DiskFileItemFactory factory = new DiskFileItemFactory(); / maximum size that will be stored in memory factory.setSizeThreshold(4096); / the location for saving data that is larger than getSizeThreshold() factory.setRepository(new File(c:/Temp); ServletFileUpload upload = new ServletFileUpload(factory); / maximum size before a FileUploadException will be thrown upload.setSizeMax(1000000);FileUpload dfu=new FileUpload();ServletFileUpload ddd = new ServletFileUpload();upload.setSizeMax(2*1024*1024);dfu.setSizeMax(2*1024*1024);/dfu.setSizeThreshold(4096);/最多允许在内存中存放4096个字节/dfu.setRepositoryPath(c:/temp); /当内存中存放的字据超过setSizeThreshold()所设定的值时,/文件存放到硬盘目录try/List fileitems=dfu.parseRequest(request);List fileitems = upload.parseRequest(request);Iterator it=fileitems.iterator();String regExp=.+(.+)$; /正则匹配,去掉路径取文件名.String errortype=.e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年广西演艺职业学院单招(计算机)考试参考题库附答案
- 2026年广西科技职业学院单招(计算机)考试参考题库附答案
- 2026民航福建空管分局招聘5人(公共基础知识)综合能力测试题附答案
- 2026年永州师范高等专科学校单招(计算机)测试备考题库附答案
- 2026年天津职业大学单招(计算机)测试备考题库附答案
- 2025黑龙江哈尔滨市松北区审计局、松北区机关服务中心招聘编外聘用人员4人(公共基础知识)测试题附答案
- 2026年滨州科技职业学院单招(计算机)考试备考题库附答案
- 2026年心理咨询师之心理咨询师二级技能考试题库及答案(新)
- 2026年河南工业和信息化职业学院单招(计算机)测试备考题库附答案
- 2026年浙江万里学院单招(计算机)考试参考题库附答案
- 城市管理工作督查考核扣分细则
- 新媒体部笔试试题及答案
- 税务师事务所内部管理制度
- 新版教科版五年级上册科学(全册)教学(期末知识复习知识梳理知识归纳)
- 磷酸铁及磷酸铁锂异物防控管理
- 2025年安徽合肥蜀山科技创新投资集团有限公司招聘笔试参考题库附带答案详解
- 上消化道异物指南解读
- 2025年中国铁路昆明局集团有限公司招聘笔试参考题库含答案解析
- SOX404条款的实施-控制例外事项与缺陷的评估框架课件
- 2024国赛中职组“网络搭建与应用”赛项规程
- 2024-2025学年广东省深圳实验学校初中部九年级上学期开学考英语试题及答案
评论
0/150
提交评论