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

1、设计思想:

  ①创建test.jsp建立第一个前端界面,提示用户输入要生成的题目数。用户输入数值后,点击提交跳转到testmain.jsp界面,显示生成的题目以及用来输入的文本框,在每道题目输入完答案之后,点击提交跳转到testscore.jsp界面即评分界面,显示正确和错误并统计正确和错误的数量,错误的题目用红字提示正确答案。

  ②shizi.java中的shizi类用来生成表达式,number1和number2确定范围1~100之间,运算符0~3随机数对应运算符,在答案result小于零或者除法不能被整除时就重新生成。

  ③biaodashizu.java用来实现一些关于数据库的增删改查等操作,delete()用来每次生成题目前清空数据库表,create()用来生成,xieru()用来将用户的答案输入数据库表中,panduan()用来对数据库里的result和answer两个属性进行判断,一样则为回答正确,该题目的正确性录入为1,错误的话,题目的正确性录入为2.

  ④GNUtil.java是连接数据库的工具类。

  ⑤建立数据库表来存储信息,id代表题号,number1和number2用来存两个数,yunsuanfu用来存储运算符号,result用来存储该表达式的正确答案,answer用来存储用户输入的答案,zhengwu用来存int类型的1或者2,表示题目正确与否。

  ⑥在输入要生成的题目后,生成相应数目的表达式,先将数据库清空,再将这些式子的每个属性分别输入进数据库,存储下来。再在testmain.jsp中读取并显示出来,用户填写后进行存储和比对,将评分结果显示在testscore.jsp页面上。

  ⑦在input标签中添加required属性用来放置部分文本框不填写内容,使用js插入页面倒计时功能,时间一到自动跳转。

2、源程序代码:

 test.jsp

<%@page import="com.gb.yunsuan.biaodashizu" %>
<%@ 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">
<title>题目</title>
</head>
<body background="../picture/background.png" style="background-repeat:no-repeat; background-size:100% 100%; background-attachment:fixed;">
<h2 style="color:blue" align="center">四则运算练习题</h2>
<hr size=%40 color=blue>
<form method="get" action="testmain.jsp">
<table align="center" border="2" width="400" style="background:white">
<tr>
<td>要生成的题目数:</td>
<td>
<input type="text" name="num" required />
</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="submit" name="提交" />
</td>
</tr>
</table>
</form>
</body>
</html>

testmain.jsp

<%@page import="com.gb.yunsuan.biaodashizu" %>
<%@ 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">
<title>答题界面</title>
</head>
<body background="../picture/background.png" style="background-repeat:no-repeat; background-size:100% 100%; background-attachment:fixed;">
<h2 style="color:blue" align="center">四则运算练习题</h2>
<hr>
<p align="center" style="color:white">
剩余时间为:
<u><b id="time">30</b>秒</u>
<b><u><a style="color:white" href="javascript:goBack();">返回</a></u></b>
</p>
<br>
<script type="text/javascript">
var sec=document.getElementById("time");
var i=30;
var timer=setInterval(
function()
{
i--;
sec.innerHTML=i;
if(i==1)
{
window.location.href="test.jsp";
} },1000);
function goBack()
{
window.history.go(-1);
}
</script>
<%
biaodashizu biaodashi=new biaodashizu();
if(request.getParameter("num")!=null&&!"".equals(request.getParameter("num").trim()))
{
biaodashi.delete();
int x=Integer.parseInt(request.getParameter("num"));
biaodashi.create(x);
}
%>
<form method="get" action="testscore.jsp">
<table align="center" border="2" width="500" style="background:white">
<tr align="center">
<td>
题目总数为:
</td>
<td colspan="3">
<input type="text" style="width:375px" name="num" value=<%=biaodashi.getSum()%> disabled />
</td>
</tr>
<tr>
<td>题目编号</td>
<td>题目表达式</td>
<td>答案输入</td>
<td>答题情况</td>
<tr>
<%
int x=biaodashi.getSum();
for(int i=0;i<x;i++)
{
%>
<tr>
<td><%=i+1 %></td>
<td><%="\t"+biaodashi.showDan(i).getNumber1()+"\t"+biaodashi.showDan(i).getCh()+"\t"+biaodashi.showDan(i).getNumber2()+"\t"+"=" %></td>
<td>
<input type="text" name="text" required />
</td>
<td>
</td>
</tr>
<%
}
%>
<tr align="center">
<td colspan="4">
<input type="submit" name="提交" />
</td>
</tr>
</table>
</form>
</body>
</html>

testscore.jsp

<%@page import="com.gb.yunsuan.biaodashizu" %>
<%@ 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">
<title>评分界面</title>
</head>
<body background="../picture/background.png" style="background-repeat:no-repeat; background-size:100% 100%; background-attachment:fixed;">
<h2 style="color:blue" align="center">四则运算练习题</h2>
<hr>
<%
biaodashizu biaodashi=new biaodashizu();
String jieshou[]=request.getParameterValues("text");
int TRUE=0,FALSE=0;
for(int i=0;i<biaodashi.getSum();i++)
{
int res=Integer.parseInt(jieshou[i]);
biaodashi.xieru(i+1,res);
biaodashi.panduan(i+1,res);
}
%>
<form method="get" action="testmain.jsp">
<table align="center" border="2" width="500" style="background:white">
<tr>
<td>题目编号</td>
<td>题目表达式</td>
<td>提交答案</td>
<td>答题情况</td>
<tr>
<% for(int i=0;i<biaodashi.getSum();i++)
{
%>
<tr>
<td><%=i+1 %></td>
<td><%="\t"+biaodashi.showDan(i).getNumber1()+"\t"+biaodashi.showDan(i).getCh()+"\t"+biaodashi.showDan(i).getNumber2()+"\t"+"=" %></td>
<td>
<%="\t"+biaodashi.showscore(i).getAnswer() %>
</td>
<td>
<%
if(biaodashi.showscore(i).getStatus()==1)
{
%>
<img src="../picture/正确.png">
<%TRUE++; %>
<%
}
else if(biaodashi.showscore(i).getStatus()==2)
{
%>
<img src="../picture/错误.gif">
<h6 style="color:red">正确答案为:<%=biaodashi.showscore(i).getResult() %></h6>
<%FALSE++; %>
<%
}
%>
</td>
</tr>
<%
}
%>
<tr align="center">
<td colspan="4">
<h2>正确数:<%=TRUE %><%="\t" %>错误数:<%=FALSE %></h2>
</td>
</tr>
<tr align="center">
<td colspan="4">
<a href="test.jsp">重新开始练习</a>
</td>
</tr>
</table>
</form>
</body>
</html>

GBUtil.java

package com.gb.Util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; public class GBUtil
{
public static Connection getConnection()
{
try
{
Class.forName("com.mysql.jdbc.Driver"); }
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
String url="jdbc:mysql://localhost:3306/denglu?useSSL=false";
Connection connection=null;
try {
connection=DriverManager.getConnection(url, "root", "242772"); }
catch (SQLException e)
{
e.printStackTrace();
System.out.println("数据库连接失败!");
}
return connection;
}
public static void close(Connection connection)
{
try
{
if(connection!=null)
{
connection.close();
}
}catch(SQLException e)
{
e.printStackTrace();
}
}
public static void close(PreparedStatement preparedStatement)
{
try
{
if(preparedStatement!=null)
{
preparedStatement.close();
}
}catch(SQLException e)
{
e.printStackTrace();
}
}
public static void close(ResultSet resultSet)
{
try
{
if(resultSet!=null)
{
resultSet.close();
}
}catch(SQLException e)
{
e.printStackTrace();
}
} }

shizi.java

package com.gb.yunsuan;
import java.util.Random;
public class shizi
{
int number1;
int number2;
int fu;
String ch;
int result=-1;
int answer;
int status;
public int getAnswer() {
return answer;
}
public void setAnswer(int answer) {
this.answer = answer;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public shizi()
{
Random ran=new Random();
while(result<0||result>100)
{
number1=ran.nextInt(100)+1;
number2=ran.nextInt(100)+1;
fu=ran.nextInt(4);
switch(fu)
{
case 0:
ch="+";
result=number1+number2;
break;
case 1:
ch="-";
result=number1-number2;
break;
case 2:
ch="*";
number1=ran.nextInt(9)+1;
number2=ran.nextInt(9)+1;
result=number1*number2;
break;
case 3:
ch="/";
while(number1%number2!=0)
{
number1=ran.nextInt(100)+1;
number2=ran.nextInt(100)+1;
}
result=number1/number2;
break;
}
}
}
public int getNumber1() {
return number1;
}
public void setNumber1(int number1) {
this.number1 = number1;
}
public int getNumber2() {
return number2;
}
public void setNumber2(int number2) {
this.number2 = number2;
}
public String getCh() {
return ch;
}
public void setCh(String ch) {
this.ch = ch;
}
public int getResult() {
return result;
}
public void setResult(int result) {
this.result = result;
} }

biaodashizu.java

package com.gb.yunsuan;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import com.gb.Util.GBUtil;
import com.gb.yunsuan.shizi;
public class biaodashizu
{
public void create(int j)//生成
{
Connection connection=GBUtil.getConnection();
PreparedStatement preparedStatement=null;
ResultSet resultSet=null;
for(int i=0;i<j;i++)
{
shizi s=new shizi();
String sql="insert into sizeyunsuan(id,number1,ch,number2,result) value(?,?,?,?,?)";
try
{
preparedStatement=connection.prepareStatement(sql);
preparedStatement.setInt(1, i+1);
preparedStatement.setInt(2, s.number1);
preparedStatement.setString(3, s.ch);
preparedStatement.setInt(4, s.number2);
preparedStatement.setString(5, ""+s.result);
preparedStatement.executeUpdate();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
GBUtil.close(connection);
GBUtil.close(preparedStatement);
GBUtil.close(resultSet);
} public void delete()//清空
{
Connection connection=GBUtil.getConnection();
String sql="delete from sizeyunsuan";
PreparedStatement preparedStatement=null;
try
{
preparedStatement=connection.prepareStatement(sql);
preparedStatement.executeUpdate();
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
GBUtil.close(connection);
GBUtil.close(preparedStatement);
}
}
public shizi showDan(int i)//返回单个
{
Connection connection=GBUtil.getConnection();
PreparedStatement preparedStatement=null;
ResultSet resultSet=null;
String sql="select * from sizeyunsuan where id=?";
shizi shi=null;
try
{
preparedStatement=connection.prepareStatement(sql);
preparedStatement.setInt(1, i+1);
resultSet=preparedStatement.executeQuery();
while(resultSet.next())
{
shi=new shizi();
shi.setNumber1(resultSet.getInt("number1"));
shi.setCh(resultSet.getString("ch"));
shi.setNumber2(resultSet.getInt("number2"));
shi.setResult(resultSet.getInt("result"));
}
}
catch (SQLException e)
{
e.printStackTrace();
}
GBUtil.close(connection);
GBUtil.close(preparedStatement);
GBUtil.close(resultSet);
return shi;
}
public shizi showscore(int i)//返回评分界面的
{
Connection connection=GBUtil.getConnection();
PreparedStatement preparedStatement=null;
ResultSet resultSet=null;
String sql="select * from sizeyunsuan where id=?";
shizi shi=null;
try
{
preparedStatement=connection.prepareStatement(sql);
preparedStatement.setInt(1, i+1);
resultSet=preparedStatement.executeQuery();
while(resultSet.next())
{
shi=new shizi();
shi.setNumber1(resultSet.getInt("number1"));
shi.setCh(resultSet.getString("ch"));
shi.setNumber2(resultSet.getInt("number2"));
shi.setResult(resultSet.getInt("result"));
shi.setAnswer(resultSet.getInt("answer"));
shi.setStatus(resultSet.getInt("zhengwu"));
}
}
catch (SQLException e)
{
e.printStackTrace();
}
GBUtil.close(connection);
GBUtil.close(preparedStatement);
GBUtil.close(resultSet);
return shi;
}
public int getSum()
{
int n=0;
Connection connection=GBUtil.getConnection();
String sql="select id from sizeyunsuan";
PreparedStatement preparedStatement=null;
ResultSet resultSet=null;
try
{
preparedStatement=connection.prepareStatement(sql);
resultSet=preparedStatement.executeQuery();
while(resultSet.next())
{
n++;
}
}
catch (SQLException e)
{
e.printStackTrace();
}
return n;
}
public void xieru(int j,int result)//将用户答案写入数据库
{
Connection connection=GBUtil.getConnection();
PreparedStatement preparedStatement=null;
String sql="update sizeyunsuan set answer = ? where id = ?";
try {
preparedStatement=connection.prepareStatement(sql);
preparedStatement.setInt(1, result);
preparedStatement.setInt(2, j);
preparedStatement.executeUpdate();
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
GBUtil.close(connection);
GBUtil.close(preparedStatement);
}
}
public void panduan(int j,int result)//判断正误
{
Connection connection=GBUtil.getConnection();
PreparedStatement preparedStatement=null;
ResultSet resultSet=null;
String sql="select * from sizeyunsuan where id=?";
shizi shi=null;
try
{
preparedStatement=connection.prepareStatement(sql);
preparedStatement.setInt(1, j);
resultSet=preparedStatement.executeQuery();
while(resultSet.next())
{
shi=new shizi();
shi.setNumber1(resultSet.getInt("number1"));
shi.setCh(resultSet.getString("ch"));
shi.setNumber2(resultSet.getInt("number2"));
shi.setResult(resultSet.getInt("result"));
shi.setAnswer(resultSet.getInt("answer"));
shi.setStatus(0);
}
}
catch (SQLException e)
{
e.printStackTrace();
}
if(shi.getResult()!=result)
{
shi.setStatus(2);
}
else
{
shi.setStatus(1);
}
sql="update sizeyunsuan set zhengwu = ? where id = ?";
try
{
preparedStatement=connection.prepareStatement(sql);
preparedStatement.setInt(1, shi.getStatus());
preparedStatement.setInt(2, j);
preparedStatement.executeUpdate();
}
catch(SQLException e)
{
e.printStackTrace();
}
GBUtil.close(connection);
GBUtil.close(preparedStatement);
GBUtil.close(resultSet);
} }

3、运行结果截图:

初始界面,用来设定数目:

  

答题界面:

  

评分界面:

  

编程总结分析:

  这个题目在加入数据库的运用后,就变得条理清晰了,通过工具类连接使用数据库,通过实例化对象调用函数对数据库中数据进行操作。jsp的一些前端布置也很重要,一些常用的功能需要使用js来实现。这个题针对二年级小学生,所以那游戏海报来作为背景图,更能吸引用户。

时间记录日志:

  学生:郭斌

  日期:2017/12/7

  教员:王建民

  课程:软件单元测试与代码规范

  

个人收获:

  在这个四则运算的个人项目中,我学会了布局规划,充分利用好数据库,这样会很方便,除此之外,学会了用js完成倒计时页面跳转,收获还算可以。对于必填项的设置,使用input标签中的required属性即可。

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

  1. [书籍]值得纪念的第100篇博客,推荐一些看过的UI书籍

    1. 前言 来到博客园11年,这两年闲下来了才有时间写写博客,不知不觉终于写到第100篇博客了.回顾过去发表的博客,居然大部分都与UI相关.明明我本来从事的是Oracle的相关开发,明明我当初的目标是 ...

  2. 鸿蒙内核源码分析(原子操作篇) | 是谁在为原子操作保驾护航 | 百篇博客分析OpenHarmony源码 | v34.02

    百篇博客系列篇.本篇为: v34.xx 鸿蒙内核源码分析(原子操作篇) | 谁在为原子操作保驾护航 | 51.c.h .o 本篇说清楚原子操作 读本篇之前建议先读鸿蒙内核源码分析(总目录)系列篇. 基 ...

  3. 鸿蒙内核源码分析(内存映射篇) | 虚拟内存虚在哪里 | 百篇博客分析OpenHarmony源码 | v15.03

    百篇博客系列篇.本篇为: v15.xx 鸿蒙内核源码分析(内存映射篇) | 虚拟内存虚在哪里 | 51.c.h .o 内存管理相关篇为: v11.xx 鸿蒙内核源码分析(内存分配篇) | 内存有哪些分 ...

  4. 鸿蒙内核源码分析(调度队列篇) | 内核有多少个调度队列 | 百篇博客分析OpenHarmony源码 | v6.05

    百篇博客系列篇.本篇为: v06.xx 鸿蒙内核源码分析(调度队列篇) | 内核有多少个调度队列 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度 ...

  5. 第一篇博客:Hello World

    2016年10月10日,双十,好日子,决定开始写第一篇博客,标题想了会,就叫Hello World 吧,哈哈^_^. 首先感谢博客园的管理们能批准我的申请,记得在14年的时候申请过一次,竟然没申请通过 ...

  6. 通通的最后一篇博客(附自制html5平面射击小游戏一枚)

    这是我最后一篇博客了,由于本人的人生规划吧,以后应该也写不出什么好的技术文章了,到现在在博客园写了2年, 今天一看,我也有了120个粉丝,好几万的浏览量,感谢大家的支持啊~~ 半年没有写博客了,由于半 ...

  7. 我的第一篇博客 ——【ToDoList】小程序开发

    我是一只即将大四的大三狗,这是我的第一篇博客,说来惭愧.今年1月份,学校放寒假的时候开始自学的IOS,放假的时候比较起劲,看了一堆Object-C的视频,然后照着中英文对照的IOS基础开发教程,做了两 ...

  8. Hello World -- 第一篇博客

    今年注定是不寻常的一年,因为技术,接触了许多大牛.通过一篇篇博文,看到了大牛们勤奋好学.孜孜不倦的精神,于是决定也开个博客,向大牛学习. 博客开了,写点什么呢?奈何肚子里墨水不多,吐出来也多是白沫,不 ...

  9. 第一篇博客 ---- 分享关于Maven使用的一些技巧

    Maven环境搭建 在官网上下载maven安装包,地址:http://maven.apache.org/download.cgi . 解压文件到电脑坐在盘符目录,如E:\apache-maven-3. ...

随机推荐

  1. Spring中@相关注解的意义

    1.@controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层 2.@service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理 3.@rep ...

  2. 26.Hibernate-主键和映射.md

    目录 1.复合主键映射 [toc] 2.集合映射 2.1Set集合 2.2其他集合 [toc] 3.集合数据的读取 [toc] 4.一对多和多对一映射 4.1概念 4.2配置和开发 4.2.1关键点 ...

  3. week06 12 后端utils cloudAMQP_client.py 安装pika

    我们回到后端 pika是专门处理RabitAMQP的包 或者你可以直接一步到位 我们不能一直让我们的网络爬虫一直爬信息 一是网络消耗很大(cpu) 二是容易被网站发现被禁ip self.connect ...

  4. Pandas分组

    GroupBy技术 分组运算的过程可以用下面的流程图表示出来 import pandas as pd from pandas import Series import numpy as np df = ...

  5. android 无法import

    参考 https://blog.csdn.net/u012489412/article/details/72784095 File - Invalidate Caches/Restart

  6. 定义一个包含标签inclusion_tag, 调用模板时报错.. 应该是路径 不对吧...我的templates 是放在app 目录下的.<待处理>

    # 自定义模板标签. 标签的作用,在模板中 实现逻辑,如if ,for 等 from django.template import Library from datetime import datet ...

  7. 求树的直径+并查集(bfs,dfs都可以)hdu4514

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4514 这题主要是叫我们求出树的直径,在求树的直径之前要先判断一下有没有环 树的直径指的就是一棵树上面距 ...

  8. 582. Kill Process杀死所有子代

    [抄题]: Given n processes, each process has a unique PID (process id) and its PPID (parent process id) ...

  9. 杨其菊201771010134《面向对象程序设计(java)》第一周学习总结

    第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.com 安迪儿 程序设计评测:https://pintia.cn/ 迷路的麋鹿回不来家了 代码 ...

  10. 18. pt-pmp

    pt-pmp 是一个非常简单的工具,可以用来获取MySQL的堆栈信息.工具首先获取运行过程中的mysqld堆栈信息,然后将相似的线程进行汇总排序,根据调用频繁程度从高到低打印出来. 查看pt-pmp的 ...