psp0级报告

  1. 计划

1.1需求描述:

现在市场上有很多的面向小学生的题卡,但是这习题卡不但价格昂贵,而且每次做题的内容基本都是固定。针对这些问题,开发出了这款网页在线答题系统,每次的题目都有所不同,可以跟快更好提高小学生的计算能力。

1.2估计开发时间

两天

1.3填写项目数据

产生随机的算式以及结果,保存在数据库中;

在程序运行过程中,需要用户填写产生题目的数量,产生题目后,系统会自动的给出评判结果。

1.4填写时间记录日志

学生:刘金玉,陈佳傲     日期:2017.12.06

教师:王建民             课程:psp

日期

开始时间

结束时间

中断时间

净时间

活动

备注

C

U

12/3

1800

2100

3小时

调试程序

获取session中的值

12/4

1500

1700

2小时

调试程序

统计用户的错题数目

12/5

1100

1200

1小时

调试程序

设计程序中的倒计时功能

  1. 开发

2.1设计程序

首先实现用代码生成随机的加减乘除的算式以及结果,并存入到数据库中,在运行web端的程序,弹出输入做的提的数目,并将该数量提交到另外一个jsp中,并显示题目,让使用者输入计算的结果,并实现在线答题,控制答题的时间,超出时间自动跳转,并告诉使用者对错情况,并统计使用者作对以及做错的数量。

 

2.2设计实现

Success.jsp

<%@page import="java.util.Date"%>

<%@page import="java.text.SimpleDateFormat"%>

<%@ 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>

<style type="text/css">

<!--

.STYLE2 {

font-family: "Times New Roman", Times, serif;

font-weight: bold;

}

-->

</style>

<body  style=" background-image:url(../img/dj.jpg) ">

<div>

<form action="list1.jsp" method="get">

<br>

<p align="center"愿你生活每一天都开心</p>

<hr>

<br><br><br><br><br><br>

<table height="133" border="0" align="center">

<tr>

  <td height="29"><span class="STYLE2">做题时间</span></td>

  <td><textarea name="textarea" rows="1"></textarea></td>

</tr>

<tr>

   <td width="107" height="28"><strong>

   产生题的数量   </strong></td>

   <td width="190"><textarea name="number" rows="1" style="border:0px background:none "></textarea></td>

</tr>

<tr>

<td colspan="2" align="center"><input name="submit" type="submit" style="300px; height:66px;" value ="开始答题"/></td>

</tr>

</table>

<div align="center">

  <%

SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date currenTime=new Date();

String time=simpleDateFormat.format(currenTime).toString();

out.print("当前时间:"+time);

%>

</div>

<br><br><br><br><br><br><br><br><br><br>

<p align="center">TTF处女作品</p>

<p align="center"> ©2017-325美少女战士小分队 版权所有</p>

<hr>

</body>

</html>

List.jsp

<%@page import="java.util.Random"%>

<%@page import="com.jaovo.msg.model.Exercise"%>

<%@page import="com.jaovo.msg.dao.ExerciseDaoImpl"%>

<%@page import=" java.util.ArrayList" %>

<%@page import=" java.util.List" %>

<%@ 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">

    <SCRIPT LANGUAGE="JavaScript">  

 var maxtime = 60 //半个小时,按秒计算,自己调整!  

 function CountDown(){  

 if(maxtime>=0){  

 seconds = Math.floor(maxtime%60);  

 msg = "距离结束还有"+seconds+"";  

 document.all["timer"].innerHTML=msg;  

 if(maxtime == 5) alert('注意,还有5!');  

 --maxtime;  

 }  

 else{  

 clearInterval(timer);  

 alert("时间到,结束!");

   document.getElementById('Tj').click();

   }  

 }  

 timer = setInterval("CountDown()",1000);  

 </SCRIPT>

 <style type="text/css">

<!--

body,td,th {

font-family: Courier New, Courier, monospace;

}

-->

</div>

</div>

.STYLE1 {color: #F0F0F0}

 .STYLE1 {color: #FF0000}

 .STYLE2 {color: #FFFFFF}

 </style></head>

<body style=" background-image:url(../img/jyj.jpg) ">

<div  >

<div id="timer" style="color:red" align="center">

  <div align="center">

    <%

int a=Integer.parseInt(request.getParameter("number"));

ExerciseDaoImpl exerciseDaoImpl=new ExerciseDaoImpl();

List<Exercise>list=new ArrayList<Exercise>();

Exercise exercise=new Exercise();

String id="";

String result="";

Random random=new Random();

for(int i=0;i<a/2;i++)

{

int b=random.nextInt(98)+1;

id=id+" "+b;

exercise=exerciseDaoImpl.loadTest(b);

list.add(exercise);

}

for(int j=a/2;j<a;j++)

{

int c=random.nextInt(98)+1;

    id=id+" "+c;

    exercise=exerciseDaoImpl.loadTest1(c);

   

list.add(exercise);

}

 session.setAttribute("id", id);

%>

  </div>

</div> 

<form action="checkresult.jsp" method="get">

<p> </p>

<table width="896" border="0" align="center" >

    <tr bordercolor="#333333" >

                       <td width="162">

                                                                     <p align="center" class="STYLE1" >     编号   </p>                    </td>

                      

                   <td width="370">

                                                                     <div align="center"><span class="STYLE1">题目                  </span></div></td>

                  <td width="350">

                                                                      <div align="center"><span class="STYLE1">结果      </span></div></td>

  </tr>

    

    <%

    int i=1;

    for(Exercise exercise1:list){

    %>

          <tr bordercolor="#999999" >

                           

                            <td>

                              <div align="center"><span class="STYLE2"><%=i %>            </span></div></td>

                            

                            <td>

                              <div align="center"><span class="STYLE2"><%=exercise1.getExperssion() %>            </span></div></td>

                            <td bordercolor="#FFFFFF">

                              <input name="result" style="border:1px; background:green ;" size="50"     />            </td>

  </tr>

         <%

    i++;

    }

       

   // session.setAttribute("loginUser",user);

  

    

         %>

         <tr bordercolor="#0000FF">

           <td colspan="4" align="center" bordercolor="#FFFFFF"> </td>

         </tr>

         <tr bordercolor="#FFFFFF">

           <td colspan="4" align="center"> </td>

         </tr>

         <tr bordercolor="#FFFFFF">

         <td colspan="4" align="center">

         <input type="submit" value="提交" name="Tj" id="Tj"  style="300px; height:30px;"/>         </td>

         </tr>

</table>

</form>

</div>

</body>

</html>

Checkresult.jsp

<%@page import="com.jaovo.msg.dao.ExerciseDaoImpl"%>

<%@page import="com.jaovo.msg.model.Exercise"%>

<%@page import=" java.util.ArrayList" %>

<%@page import=" java.util.List" %>

<%@ 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>

<style type="text/css">

<!--

.STYLE1 {color: #FFFFFF}

.STYLE2 {color: #FF0000}

.STYLE3 {color: #FF0000; font-family: Georgia, "Times New Roman", Times, serif; }

-->

</style>

<body style=" background-image:url(../img/cwj.jpg) ">

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<%

int m=0;//记录正确的题数;

int n=0;//记录错误的题数;

Exercise exercise=new Exercise();

ExerciseDaoImpl exerciseDaoImpl=new ExerciseDaoImpl();

List<Exercise>list=new ArrayList<Exercise>();

String id=(String)session.getAttribute("id");

String result[]=request.getParameterValues("result");

String Id[]=id.toString().trim().split(" ");

for(int i=0;i<Id.length/2;i++)

{

exercise=exerciseDaoImpl.loadTest(Integer.parseInt(Id[i]));

list.add(exercise);

System.out.println(Id[i]);

}

for(int i=Id.length/2;i<Id.length;i++)

{

exercise=exerciseDaoImpl.loadTest1(Integer.parseInt(Id[i]));

list.add(exercise);

}

for(int j=0;j<result.length;j++)

{

System.out.println(result[j]);

}

%>

<div >

<table align="center" border="0" style="background:rgba(0,0,0,0)">

    <tr>

                       <td width="36">

                         <div align="center"><span class="STYLE1">编号</span> </div></td>

                      

                   <td width="231">

                     <div align="center"><span class="STYLE1">题目                  </span></div></td>

                  <td width="117">

                    <div align="center"><span class="STYLE1">结果      </span></div></td>

                   <td width="206">

                     <div align="center"><span class="STYLE1">正确结果                   </span></div></td>

    </tr>

    

    <%

    int i=0;

    for(Exercise exercise1:list){

    %>

          <tr>

                           

                            <td>

                              <div align="center"><span class="STYLE1"><%=i+1 %>                              </span></div></td>

                           

                            <td><div align="center"><span class="STYLE1"><%=exercise1.getExperssion() %></span></div></td>

                            <td>

                              <div align="center"><span class="STYLE1">

                              <%

                           if(result[i].equals(list.get(i).getResult()))

                        {

                            m++;

                        %>

                              <font style="color:green ; font-size">

                              <% out.print(result[i]);%>

                              </font>

                              <%

                        }

                        else

                        {

                        n++;

                        %>

                              <font style="color:red ; font-size">

                              <% out.print(result[i]);%>

                              </font>

                              <% 

                        }

%>

                              </span> </div></td>

                           <td>

                             <div align="center"><span class="STYLE1"><%=exercise1.getResult() %></span> </div></td>

  </tr>

         <%

    i++;

    }

       

   // session.setAttribute("loginUser",user);

   session.invalidate();

    

    %>

</table>

    

      <br>

    <br>

    <br>

    <table align="center" border="0">

    <tr>

    <td>

       <p align="center" class="STYLE2" color="white">答对的题目</p>    </td>

    <td>

      <div align="center" class="STYLE3">答错的题目      </div></td>

    </tr>

    <tr bordercolor="#F0F0F0" bgcolor="#666666">

    <td>

    <input name="right" style="text"  value="<%=m%>"/>    </td>

     <td>

    <input name="fault" style="text"  value="<%=n%>"/>    </td>

    </tr>

</table>

</body>

</html>

主类中的程序:

package com.jaovo.msg.model;

public class Exercise {

private int id;

private String experssion;

private String  result;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getExperssion() {

return experssion;

}

public void setExperssion(String experssion) {

this.experssion = experssion;

}

public String getResult() {

return result;

}

public void setResult(String result) {

this.result = result;

}  

}

连接数据库:

package com.jaovo.msg.Util;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

public class DBUtil {

public  static  Connection getConnection() {

try {

//1 鍔犺浇椹卞姩

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();

} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

String user = "sa";

String password = "123456";

String url = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=jaovo_msg";

Connection connection = null;

try {

//2 鍒涘缓閾炬帴瀵硅薄connection

 connection = DriverManager.getConnection(url,user,password);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return connection;

}

//鍏抽棴璧勬簮鐨勬柟娉

public static void close(Connection connection ) {

try {

if (connection != null) {

connection.close();

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static void close(PreparedStatement preparedStatement ) {

try {

if (preparedStatement != null) {

preparedStatement.close();

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static void close(ResultSet resultSet ) {

try {

if (resultSet != null) {

resultSet.close();

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

从数据库中抽题:

package com.jaovo.msg.dao;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import com.jaovo.msg.Util.DBUtil;

import com.jaovo.msg.model.Exercise;

public class ExerciseDaoImpl {

public Exercise loadTest(int id) {

Connection connection = DBUtil.getConnection();

//鍑嗗�sql

String sql = "select * from Table1  where id = ?";

//鍒涘缓璇彞浼犺緭瀵硅薄

PreparedStatement preparedStatement = null;

ResultSet resultSet = null;

Exercise exercise = null;

try {

preparedStatement = connection.prepareStatement(sql);

preparedStatement.setInt(1, id);

resultSet = preparedStatement.executeQuery();

while(resultSet.next()) {

exercise = new Exercise();

exercise.setId(id);

exercise.setExperssion(resultSet.getString("expression"));

exercise.setResult(resultSet.getString("result"));

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally {

DBUtil.close(resultSet);

DBUtil.close(preparedStatement);

DBUtil.close(connection);

}

return  exercise;

}

//获取三位数字;

public Exercise loadTest1(int id) {

Connection connection = DBUtil.getConnection();

//鍑嗗�sql

String sql = "select * from Table2  where id = ?";

//鍒涘缓璇彞浼犺緭瀵硅薄

PreparedStatement preparedStatement = null;

ResultSet resultSet = null;

Exercise exercise = null;

try {

preparedStatement = connection.prepareStatement(sql);

preparedStatement.setInt(1, id);

resultSet = preparedStatement.executeQuery();

while(resultSet.next()) {

exercise = new Exercise();

exercise.setId(id);

exercise.setExperssion(resultSet.getString("expression"));

exercise.setResult(resultSet.getString("result"));

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally {

DBUtil.close(resultSet);

DBUtil.close(preparedStatement);

DBUtil.close(connection);

}

return  exercise;

}

}

产生随机算式的程序:

package com.jaovo.msg.dao;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

public class Main {

public static void main(String[] args) throws SQLException {

// TODO Auto-generatesd method stub

String JDriver="com.microsoft.sqlserver.jdbc.SQLServerDriver";//��������

String connectDB= "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=jaovo_msg";//����Դ

try

  {

   Class.forName(JDriver);//�������ݿ�������ظ����ַ���������

  }catch(ClassNotFoundException e)

  {

   //e.printStackTrace();

   System.out.println("�������ݿ�����ʧ��");

   System.exit(0);

  }

System.out.println("���ݿ������ɹ�");

String user="sa";

   String password="123456";

   Connection con = null;

try {

con = DriverManager.getConnection(connectDB,user,password);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}//�������ݿ����

   System.out.println("�������ݿ�ɹ�");

   Statement stmt = null;

   try {

 stmt=con.createStatement();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}//����SQL�������

//---------------------------------------------------------------------------------------//

RandomString s=new RandomString();

ArrayList list=new ArrayList();

long i=0;

while(i!=99){

//list=s.newRandomString();

list=s.newHarderRandomString();

i++;

System.out.println("-----------------------------------------");

System.out.println("��ţ�"+i);

stmt.executeUpdate("insert into Table2(expression,result)values('"+RandomString.toString(list)+"','"+CheckAnswer.calaulateAnswer(list)+"')");

System.out.println("����ʽ�ӣ�"+RandomString.toString(list));

System.out.println(CheckAnswer.calaulateAnswer(list));

System.out.println("-----------------------------------------");

}}

}

 

2.3编译程序,修复并记录所发现的bug,并填写缺陷记录日志

学生:刘金玉

日期:2017.11.28

老师:王建民

程序号:1

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

12/3

1

20

编码

编译

3h

session中存入用户输入的值,在另外一个jsp中获得结果,不能获取到值

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

12/3

2

20

编码

编译

10min

java文件中定义的类型不能再jsp中引用,在清理文件内容,并重新启动服务器后解决。

 

  1. 总结

本程序大约在花了两天的时间完成,在开发过程中,遇到的bugsession中的值不能获取到,自定义的java类在jsp中不能引用,对jscss的了解还不够,但是已经基本完成了项目开发所需要的要求。

原文地址:https://www.cnblogs.com/ljysy/p/7995161.html