1. 计划

1.1需求描述:

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

1.2估计开发时间

两天

1.3填写项目数据

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

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

1.4填写时间记录日志

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

教师:王建民             课程:psp

日期

开始时间

结束时间

中断时间

净时间

活动

备注

C

U

12/3

18:00

21:00

3小时

调试程序

获取session中的值

12/4

15:00

17:00

2小时

调试程序

统计用户的错题数目

12/5

11:00

12:00

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="width: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="width: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. 总结

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

psp0级报告的更多相关文章

  1. 四则运算三+psp0级表格

    一.题目 在四则运算二的基础上,选择一个方向进行拓展,我选择的是增加了答题模块 二.设计思路 1.在上次的基础上,增加了答题模块,每出现一道四则运算题目,便提醒输入结果,如果结果错误,就会提示错误 2 ...

  2. 四则运算2+psp0级表格

    四则运算2 一.题目和要求 题目:写一个能自动生成小学四则运算题目的程序,要求一次输出不少于30道,只能是整数100以内的四则运算(四则运算1升级版) 要求: 1.题目避免重复 2.可定制(数量/打印 ...

  3. 撰写一篇博客要求讲述四则运算2的设计思想,源程序代码、运行结果截图、编程总结分析,并按照PSP0级的要求记录开发过程中的时间记录日志。

    一.撰写一篇博客要求讲述四则运算2的设计思想,源程序代码.运行结果截图.编程总结分析,并按照PSP0级的要求记录开发过程中的时间记录日志. 1.设计思想: ①创建test.jsp建立第一个前端界面,提 ...

  4. PSP0级 周活动总结表+时间记录日志+缺陷记录日志 表格模板

    一.项目计划总结: 周活动总结表 姓名:               日期: 日期\任务 听课 编写程序 阅读课本 准备考试     日总计 周日               周一           ...

  5. 课程存储校对:程序设计思想、源程序代码、运行结果截图,以及开发过程中的项目计划日志、时间记录日志、缺陷记录日志(PSP0级记录)。

    1.程序设计思想 ⑴将JDBC驱动jar包导入到WEB-INF的lib文件夹下 ⑵建立数据库,在数据库中建表,分别将课程名称.任课教师及上课地点录入到列中 ⑶首先写出加载驱动.关闭资源的工具类和异常处 ...

  6. PSP0级记录2

                              上课         编写程序               课外资料               日总计     3.13 周一           ...

  7. 第一个PSP0级

    1.计划: 需求描述: 按照图片要求设计添加新课程界面.(0.5分) 在后台数据库中建立相应的表结构存储课程信息.(0.5分) 实现新课程添加的功能. 要求判断任课教师为王建民.刘立嘉.刘丹.王辉.杨 ...

  8. 第二次程序+PSP0级

    第二周,老师接着上次的程序有对四则运算的程序,做出来一些要求,这次要求可以控制乘除法,有无括号,控制输出方式,控制结果有无负数,有无余数. 我在对原先的程序分析了一下,发现我原先的程序可扩展性特别差, ...

  9. 石家庄地铁查询PSP0级

    一.需求   :地铁(石家庄地铁)线路查询 二.       学生:洪鼎淇 合作对象:宋子健 时间记录日志: 日期 开始时间 结束时间 中断时间 净时间 活动 2019/3/30 10:00 14:0 ...

随机推荐

  1. 关于调试php的socket服务端中遇到的问题及解决办法

    今天终于把socket的服务端解决了,期间遇到了很多问题呢~ 1.用cmd运行php的问题: 2.socket_create()函数未定义问题: 3.查看端口的问题. 以下逐一说说解决办法: 1.在c ...

  2. wcf将一个服务同时绑定到http和tcp的写法

    服务器端:<?xml version="1.0" encoding="utf-8" ?><configuration>  <con ...

  3. Create Empty Project In Vs But Not Debug?

    问题描述 在使用VS创建一个空的项目管理,然后,添加项目.可是,这个时候,项目虽然可以运行,但是不能Debug进行调试. 解决方法 按照下面三张图像的设置即可.

  4. Java Thread系列(十)Future 模式

    Java Thread系列(十)Future 模式 Future 模式适合在处理很耗时的业务逻辑时进行使用,可以有效的减少系统的响应时间,提高系统的吞吐量. 一.Future 模式核心思想 如下的请求 ...

  5. xcconfig

    [xcconfig] 1.When you can use a .xcconfig file? Use .xcconfig files if you find yourself changing th ...

  6. javadoc tags

    Where Tags Can Be Used The following sections describe where the tags can be used. Note that these t ...

  7. SpringMVC源码解析- HandlerAdapter - ModelFactory

    ModelFactory主要是两个职责: 1. 初始化model 2. 处理器执行后将modle中相应参数设置到SessionAttributes中 我们来看看具体的处理逻辑(直接充当分析目录): 1 ...

  8. linux数据库备份

    linux数据库备份 服务端启用二进制日志 如果日志没有启开,必须启用binlog,要重启mysql,首先,关闭mysql,打开/etc/my.cnf,加入以下几行: [mysqld] log-bin ...

  9. Linux下source文件两种方法

    1.直接source命令加文件 source /etc/rc.d/init.d/functions 2.点(.)加文件 . /etc/rc.d/init.d/functions

  10. 启动hive命令时指定参数或自定义参数

    启动hive命令时指定参数或自定义参数 在hive启动命令中指定一个参数 hive --hiveconf hive.job.submit.username=fuxin.zhao -e "se ...