软件工程结对作业01

一、题目:

  结对项目开发-四则运算四
  把程序变成一个网页程序,用户通过设定参数,就可以得到各种题目,并可实现在线答题并评判。

  注:这是一个两人结对开发的项目,开发人员:曾凯    刘雨鑫

二、程序设计思想:

  (1)功能分析:

    1.这是一个可以在线答题的web版四则运算程序,用户可以通过设点一些参数来生成题目,然后回答这些题目,提交后程序检查回答的正确性,然后将题目的回答情况通过页面显示的方式反馈给用户。

    2.由于参数设置导致交互不太方便,用户需要考虑参数如何搭配,由此实现按照年级答题,用户只需要选择年级,就可以生成按照年级配置好一套题

    3.用户在做错题后,实现错题的记录和每道错题做错多数次的记录,并且还有错题练习的功能,如果这道错题回答对了,就会将这道错题从错题表中删除

  (2)技术分析:

    项目的开发思想是MVC,使用的是jsp+Servlet+javaBean的开发模式,在表单校验部分还使用了javaScript

  (3)设计步骤分析:

    1.按照参数设置答题:

     首先用户在页面通过单选,多选或者文本框输入的方式设置参数,然后这些参数的值通过request域传到对应的servlet中,在servlet中接受这些参数的值后调用service层中生成题目的方法已经生成正确答案的方法,然后将题目和正确答案存入记录一个专门的javaBean中, 再将题目通过sassion域传到答题的jsp页面,在答题页面用户通过文本框输入答案后将用户的答案通过request域传到一个检查题目正确性的servlet中,通过调用service层中检查答案正确性的方法将判断后的结果保证到Bean中并通过sassion将结果传到结果jsp页面,在该页面显示回答的情况

    2.按照年级设置答题:

      包括小学六个年级的四则数学题生成,默认设置的参数有生成题目道数为10道,运算符固定为1位,其中各年级生成的题目参数设置如下:

年级 题目要求
一年级 20以内的加,减
二年级 100以内的加,减;0-9的乘法,能除尽且除数是1-9的除法
三年级 两位数乘法,一位数除法,结果带余数
四年级 三位数乘法,两位数除法,结果带余数
五年级 分数的加减
六年级 整数,分数的四则混合运算

    3.错题回顾:

     在检查用户答题正确性时,将答错的题存入一个专门存放错题的javaBean中,检查完成之后就将这个Bean存到错题表中。查看错题时将错题从数据库中读取出来然后用sassion域传到显示错题的jsp,在练习错题时将错题从错题表中取出后用sassion域传到练习错题的jsp页面,在这个页面用户回答之前做错的题,然后将回答的答案同过request请求域传到检查正确性的servlet中,如果回答正确就将该道题从错题表中删除,如果回答错误,则将该道题的回答错误次数加一。

  (4)核心代码:

    在线答题的service类代码: 

  1 package cn.dmego.service;
  2 import java.util.ArrayList;
  3 import cn.dmego.dao.MysqlProAnsDao;
  4 import cn.dmego.domain.ProAns;
  5 import cn.dmego.domain.WrongPro;
  6 import cn.dmego.produce.BinaryTree;
  7 import cn.dmego.produce.CreatePro;
  8 import cn.dmego.produce.ProperFra;
  9
 10 /************************
 11  * 业务逻辑处理
 12  * @author dmego
 13  *
 14  */
 15 public class ProAnsService {
 16     CreatePro cre = new CreatePro();
 17     ProperFra fractin = new ProperFra();
 18     MysqlProAnsDao mpd = new MysqlProAnsDao();
 19     WrongProService wroService = new WrongProService();
 20     /**
 21      * 将本次答题情况存入数据库中
 22      * @param proBean
 23      */
 24     public void saveToDB(ProAns[] proBean){
 25         mpd.resert();
 26         mpd.addAll(proBean);
 27     }
 28     /**
 29      * 检查用户输入的答案是否正确,然后为Bean中的check变量赋值
 30      * (-1:答错了;1:答对了)
 31      * 如果答错了,将该题存入错题表中
 32      * @param proBean 题目对象数组(增加了用户输入的答案)
 33      * @return 校验完成的题目对象数组
 34      */
 35     public ProAns[] checkAnswer(ProAns[] proBean){
 36         ArrayList<WrongPro> wrongBean = new ArrayList<WrongPro>();
 37         //wrongBean = wroService.showWrong();
 38         for(int i = 0 ; i < proBean.length; i++){
 39             if(proBean[i].getYourAns().equals(proBean[i].getRightAns()))
 40                 proBean[i].setChecks(1);
 41             else{
 42                 proBean[i].setChecks(-1);
 43                 //----将错题存入错题表中----
 44                 WrongPro wrongTemp = new WrongPro();
 45                 wrongTemp.setProblem(proBean[i].getProblem());
 46                 wrongTemp.setRightAns(proBean[i].getRightAns());
 47                 wrongTemp.setYourAns(proBean[i].getYourAns());
 48                 wrongTemp.setChecks(proBean[i].getChecks());
 49                 wrongTemp.setTimes( 1 );
 50                 wrongBean.add(wrongTemp);
 51             }
 52         }
 53         wroService.saveWrongToDB(wrongBean);
 54         return proBean;
 55     }
 56
 57     /**
 58      * 根据用户输入的年级生成题目(按照年级答题)
 59      * @param num 默认生成10道题
 60      * @param grade 年级
 61      * @return 生成好的题目对象数组(包括题目表达式和正确答案)
 62      */
 63     public ProAns[] produce(int grade){
 64         mpd.resert(); //重置数据表
 65         String rightAns = ""; //程序计算出来的正确答案
 66         String problem = ""; //生成的随机表达式
 67         int num = 10;
 68         ProAns[] proBean = new ProAns[num]; //javaBean数组,用来封装生成的题目和正确答案
 69         for(int i = 0; i< num;i++){
 70             String[] array = cre.proArraryG(grade);//生成一个运算符+数字的数组
 71             BinaryTree tree = new BinaryTree(array); //把数组作为参数传入生成一棵二叉树的方法
 72             rightAns = tree.CalAndVal(grade); //计算正确结果,得到的是假分数
 73             if(grade != 3 && grade != 4){
 74                 rightAns = fractin.falseToTrue(rightAns); //将结果的假分数化简为带分数
 75             }
 76             //生成的题目字符串(必须放在计算结果后,因为在计算结果时,该树结构还会因为 负数 或者 除数为0 而变化)
 77             problem = tree.toString();
 78             proBean[i] = new ProAns(); //数组中每个元素都必须要new成一个对象否则会抛出空指针异常
 79             proBean[i].setId(i+1);
 80             proBean[i].setProblem(problem);
 81             proBean[i].setRightAns(rightAns);
 82         }
 83         return proBean;
 84     }
 85
 86
 87     /**
 88      * 根据用户输入的参数生成题目(按参数答题)
 89      * @param hasmd 指定有无乘除法(Y/N)
 90      * @param hasfs    指定有无真分数(Y/N)
 91      * @param hasgd 指定运算符个数是否固定(Y/N)
 92      * @param range 指定运算式取值范围
 93      * @param num 指定出题个数
 94      * @param synum 指定固定的运算符个数或者最大运算符个数
 95      * @return 生成好的题目对象数组(包括题目表达式和正确答案)
 96      */
 97     public ProAns[] produce(String hasmd,String hasfs,String hasgd,int range,int num,int synum){
 98         mpd.resert(); //重置数据表
 99         String rightAns = ""; //程序计算出来的正确答案
100         String problem = ""; //生成的随机表达式
101         int grade = 0;
102         ProAns[] proBean = new ProAns[num]; //javaBean数组,用来封装生成的题目和正确答案
103         for(int i = 0; i< num;i++){
104                 String[] array = cre.proArrary( range, hasmd, hasfs,hasgd,synum); //生成一个运算符+数字的数组
105                 BinaryTree tree = new BinaryTree(array); //把数组作为参数传入生成一棵二叉树的方法
106                 rightAns = tree.CalAndVal(grade); //计算正确结果,得到的是假分数
107                 rightAns = fractin.falseToTrue(rightAns); //将结果的假分数化简为带分数
108                 //生成的题目字符串(必须放在计算结果后,因为在计算结果时,该树结构还会因为 负数 或者 除数为0 而变化)
109                 problem = tree.toString();
110                 proBean[i] = new ProAns(); //数组中每个元素都必须要new成一个对象否则会抛出空指针异常
111                 proBean[i].setId(i+1);
112                 proBean[i].setProblem(problem);
113                 proBean[i].setRightAns(rightAns);
114             }
115         return proBean;
116     }
117 }

业务逻辑处理

时间: 2024-10-14 06:33:26

软件工程结对作业01的相关文章

软件工程结对作业02(借鉴版)

软件工程结对作业02(借鉴版) 在编写程序的时候因为不会将Java程序嵌入进jsp中所以借鉴了一个学姐的程序,下面是学姐的程序.但在对学姐程序就行修改时发现了一些问题: 在Newjsp中能调用html中的题目个数的参数 在Myjsp中不能调用html中的题目个数的参数 其中这个参数timugeshu,是我自己后来添加的,用来改变题目个数的,与Java程序无关,只在jsp文件中作用 源程序: NewFeil.html <!DOCTYPE html> <html> <head&g

软件工程结对作业 四则运算界面设计

软件工程结对作业 四则运算界面设计 康鑫  PB16060203 娄雨禛  PB16060356 一.项目分析 二.进度规划与完成情况 三.主要函数 四.简单的数据测试 五.编程困惑与心得 原文地址:https://www.cnblogs.com/RainLou/p/8735480.html

软件工程结对作业02(原创版)

一.设计思路 1.在HTML文件中写题目选择项 2.输入一个数控制题目个数 3.输入一个数控制取值范围(小于100) 4.输入一个数控制参数个数 5.选择是否有乘除法数 6.在有乘除法时,选择是否有余法 7.选择是否有括号 8.点击提交按钮,通过一个链接进入jsp文件,并且用户在HTML输入的参数传到jsp 页面 9.调用java函数,输出题目 10.点击开始答题之后,进入下一个jsp页面,用户答题并显示用户答题情况 二.源代码: HTML文件 <!DOCTYPE html PUBLIC "

软件工程结对作业实验报告

题目简介: 设计一个名为MyPoint的类,表示一个带x坐标和y坐标的点.该类包括:? 两个带get方法的数据域x和y,分别表示它们的坐标.? 一个创建点(0,0)的无参构造方法.? 一个创建特定坐标点的构造方法.? 两个数据域x和y各自的get方法.? 一个名为distance的方法,返回MyPoint类型的两个点之间的距离.? 一个名为distance的方法,返回指定x和y坐标的两个点之间的距离. 二.结对分工及过程 : 结对:张萍萍,程志张萍萍:程序的分析和程序的测试及测试代码的编写程志:

2015-05-17 软件工程结对作业

1.题目简介 2.结对分工及设计过程 3.代码地址 4.测试情况 5.问题及心得

软件工程结对作业01--四则运算Web版

一.设计思想: 首先,写出一个菜单界面,有两个选项一个是分数,一个是整数.而这两个标签后面则是转向其更详细的菜单,题目数量,有无括号,运算的项数等等详细功能,再点击这两个按钮之后,就会跳转过去.当选择整数运算时,显示出需要的菜单,输入完要求之后,跳转到生成算式的JSP文件,在此文件中首先是用request方法来获取上个页面中你所需要的功能,然后再强制类型转化来为下面使用,通过随机数生成,分别生成参与运算的数和符号,0代表加法1代表减法3代表乘法4代表除法.选择有负数和有余数式子生成,选择没有负数

软件工程概论作业01

软件工程作业01 写一个能自动生成三十道小学四则运算题目的 "软件",要求:除了整数以外,还要支持真分数的四则运算(需要验证结果的正确性).题目避免重复.可定制出题的数量. 思路:随机生成两个数进行计算,设立一个随机的参量用来判断是生成整数还是分数:生成分数时先生成分母,然后将分子的上限设置为分母,这样就会生成真分数: package demo; import java.util.Random; import java.util.Scanner; public class work {

软件工程结对作业

一 题目简介 本程序是一个扫雷小游戏.程序的功能是在运行后生成指定的地雷个数,在鼠标左键点击下寻找地雷,右键点击下标记地雷,点击重新开始的按钮重新开始一盘新游戏,并给出胜利和失败的条件:标出所有的地雷和左键点中地雷. 二 结对分工及过程 结对:赵彤 顾晓倩 赵彤:代码的编写和代码规范 顾晓倩:程序的分析和程序的测试 结对人博客链接 http://www.cnblogs.com/gugugu-/p/4509417.html 三:代码地址 https://github.com/zhaotong42/

软件工程个人作业01

一.题目: 像二柱子那样,花二十分钟写一个能自动生成三十道小学四则运算题目的 "软件",要求:除了整数以外,还要支持真分数的四则运算(需要验证结果的正确性).题目避免重复.可定制出题的数量.(有能力者改编成网页版) 1.设计思想:了解题目要求,进行相关的定义与程序编写,再进行验证. 2.源代码: //韩迪的出题算法//2017/3/6 package dijia;import java.util.Random;import java.util.Scanner; public class