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. basicHttpBinding

    表示一个绑定,Windows Communication Foundation (WCF) 服务可以使用此绑定配置和公开能够与基于 ASMX 的 Web 服务和客户端通信的终结点以及符合 WS-I B ...

  2. python类和元类

    python 类和元类详解  小麦麦子 2016-09-06 11:11:00        今天在网上看到一篇关于python语言中类和元类(metaclass)的一些讲解和简单运用,感觉对pyth ...

  3. [Selenium]Click element under a hidden element

    Description: Find out the DDL in Treegrid, but cannot click on it.Because the element is under a hid ...

  4. DataStage 二、InfoSphere Information Server进程的启动和停止

    DataStage序列文章 DataStage 一.安装 1 关于进程需要了解的基础知识 名称 说明 ASB代理进程 通信代理程序,它的作用是协助层与层之间的通信,默认端口是31531,它以后台进程的 ...

  5. JSON.parse()和JSON.stringify()的使用

    parse用于从一个字符串中解析出json对象,如 var str = '{"name":"huangxiaojian","age":&qu ...

  6. 编译驱动的Makefile解析

    一个典型的编译驱动模块的Makefile文件如下所示: KERN_DIR = /root/driver/kernel obj-m += module_test.o all: make -C $(KER ...

  7. C++ 类 & 对象-C++ 内联函数-C++ this 指针-C++ 类的静态成员

    C++ 内联函数 C++ 内联函数是通常与类一起使用.如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方. 对内联函数进行任何修改,都需要重新编译函数的所有客户端 ...

  8. 如何取得nginx做反向代理时的真实IP?

    1. 编译 对于client -> nginx reverse proxy -> apache, 要想在程序中取得真实的IP,在执行nginx的configure时,必须指定参数" ...

  9. 解决阿里云OSS跨域问题

    解决阿里云OSS跨域问题 现象 本人项目中对阿里云图片请求进行了两次,第一次通过img标签进行,第二次通过异步加载获取.第一次请求到图片,浏览器会进行缓存,随后再进行异步请求,保存跨域失效. 错误信息 ...

  10. Sqler-Cmd

    针对于sqler 工具cmd 部分 做了如下整理 1 Cluster Model 2 Regedit Model $servers= '192.168.25.xx','192.168.25.yy' W ...