欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

小学四则运算练习题网页版结对项目报告

程序员文章站 2022-07-11 08:41:19
一.项目结构 二.计算模块和界面模块间的调用 三.页面演示效果 四.遇到问题 五.知识点记录 六.新知识新技能 七.未实现但计划实现功能 八.学习目标与总结 项目地址:https://git.dev.tencent.com/hey_wuqw/webArithmetic.git 一.项目结构 二. 计 ......

一.项目结构

二.计算模块和界面模块间的调用

三.页面演示效果

四.遇到问题

五.知识点记录

六.新知识新技能

七.未实现但计划实现功能

八.学习目标与总结


项目地址:https://git.dev.tencent.com/hey_wuqw/webarithmetic.git


一.项目结构

小学四则运算练习题网页版结对项目报告

二. 计算模块和界面模块间的调用

小学四则运算练习题网页版结对项目报告

三.页面演示效果

小学四则运算练习题网页版结对项目报告
小学四则运算练习题网页版结对项目报告
小学四则运算练习题网页版结对项目报告

四.遇到问题

1.check()方法(用于接收答题页面传来的参数,请求从answer.jsp(答题界面)转发到result.jsp(做题结果界面))需要访问makeq()方法中的保存运算式子的字符串数组(即qlist):同一个类中的一个方法里访问另一个方法的变量是不合理的。
——想到的三个解决方法(1已实践成功,2,3未实践不知是否可行):
(1)定义一个全局变量(字符串数组qlist),这样就能在makeq()方法中访问该变量
——问题:数组大小是固定的,在定义数组时用户传的numexp(出题数量)是未知的,这时定义数组变量无法确定数组大小,只能随便给一个足够大的数。但这样转为list集合放到中遍历时集合大小变为某固定值,会遍历出所有无内容的空值。
——解决:由于集合的大小是可变的,所以把集合list定为全局变量,集合再转换为数组:

string[] list2 = list.toarray(new string[list.size()]);

(2)给makeq()定义一个返回值,返回qlist数组,check()调用返回值。
(3)由于answer.jsp中请求的目标资源是servlet中的check(),那么把该表量从makeq()传到answer.jsp再传到check().
2.将foreach循环内的input框输入值传到servlet:
——设置一个id

<c:set var="position" value="0"/>

每循环一次给name赋如下值且id+1

<input name="s${position}" id="id${position}" style="width: 60px;"/>
<c:set var="position" value="${position+1}"/>

servlet中接收:

for(int i = 0;i<expnum;i++){
    useran[i] = request.getparameter("s"+i);
}

3.for input string:””
——一开始expnum是makeq()方法的局部变量,无法在check()中使用——expnum也定义为全局变量
4.把两个字符创变量useran和correctan用“==”来比较是否相等——字符串的比较用str1.equals(str2)

五.知识点记录

1.jstl 中的属性:
items:用于接收集合(划重点)对象。varstatus:常用参数有index,count,current等,本次用到的count是用于从1开始的迭代技术(显示了题号)
待优化:
1.arith类里creaeteexp()(生成加减法运算)和createexpwithmd()(生成简单四则运算)方法实现思路一模一样,代码重复率高;createexpwithbrac()(生成带括号的加减法运算)和createexpwithall()(生成带括号的四则运算)也同理。
——预设优化方法:将重复代码抽出另封装在一个方法中,需要时再调用此方法。
2.在servlet层判断是否有乘除法和括号时用了大量的if else条件语句判断,逻辑简单但代码冗长,如下:

if( !md && !brac ){//没有乘除法和括号
    for (int i=0; i<expnum; i++)
        qlist[i] = question.createexp(funum, upper, lower);
}else if ( !md && brac ){//没有乘除法有括号
    for (int i=0; i<expnum; i++)
        qlist[i] = question.createexpwithbrac(funum, upper, lower);
}else if ( md && !brac ){//有乘除法没有括号
    for (int i=0; i<expnum; i++)
        qlist[i] = question.createexpwithmd(funum, upper, lower);
}else{//既有乘除法又有括号
    for (int i=0; i<expnum; i++)
        qlist[i] = question.createexpwithall(funum, upper, lower);
}

3.controller层包含了较多的逻辑业务处理功能,背离controller层的真正存在意义。如check()方法中涵盖了生成计算结果,并把计算结果的存入数组的逻辑。

六.新知识新技能

我和我的结对伙伴都是主要学习后端的,关于前端编写我们速学了一下bootstrap,用了bootstrap的基本模板,再进行修改,得到的页面真的是整洁美观,还具备兼容性,特别好用。

七.未实现但计划实现功能

1.错题报告(将错误题目及答案列出,生成错题集)
2.生成题目文件并课下载
3.做题历史记录

八.学习目标与总结

浏览了上届学长学姐这个结对项目的博客,发现他们有大量的篇幅都是在做代码性能分析,之前从来没有接触过,感觉可以学一学。这次涉及人机交互界面的设计,让我意识到在进行后端技术学习时也可以抽空学学前端,能自己完成一个项目的同时,也能更好的理解前后端的交互。