软件工程导论结对作业——用户界面四则运算

    大家好,这是我们对这次结对作业的思路与感悟,感谢您的阅读与支持!

一、任务概述

     完成一个带界面的四则运算出题软件,这个软件会为用户提供如下特色功能:

  1. 定制出题要求每次出题时用户都可以在界面上定制如下参数:题目数量,算式数值范围(仅包括原始题目与最终结果的绝对值的数值范围),题目中最多有多少个运算符,题目中是否包含乘除法,题目中是否包含括号。在点击相应出题按钮后将生成题目文件(不包含答案)。参考界面如下所示:

  1. 做题功能。出题后,用户可以开始答题
  2. 判题功能。用户答题过程中或者全部完成后可以判断对错,并统计分数和时间。
  3. 请同学们在结对两人中选择一个更优秀的项目作为项目的起点,在其基础上进行增量修改,根据以上修改自己的四则运算软件。
  4. 本次界面可以用网页版或客户端任何一种形式完成。

 

二、我们的思路

对于本次项目,我们首先挑选出了我们当中写的较为清晰的基础代码,并决定用网页版来实现。首先写好了前端页面,然后将后端的代码修改,最后用Jsp读取txt文本文档实现。

 

三、项目结构

四、部分源代码

后端核心:

import java.util.*;
import  java.lang.String;
import java.io.*;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.script.*;

public class Main {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要生成的题目数量:");
        int t = scanner.nextInt();
        String path = "E:\\calculat\\result.txt";//输出路径
        String word = "Your four operations test:";
        BufferedWriter out = new BufferedWriter(//将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
                new OutputStreamWriter(new FileOutputStream(path,false)));
        out.write(word+"\r\n");
        out.write("\r\n");

        for(int j = 0;j<t;j++) {//循环输出n道题目
            ScriptEngineManager sem = new ScriptEngineManager();
            ScriptEngine engine = sem.getEngineByName("js");
            String sum = "";
            double result1 = -1;
            double result2 = 1;
            int result3;
            while(result2!=0) {//result2为结果的小数部分,只有当其为零的题目才符合输出。
                sum = "";
                for (int i = 0; i < 5 + (int) Math.random() * (3); i++) {//随机运算符  Math.random()返回一个double类型的0.0-1.0之间的数值,包括0,不包括1,这个数值*3,再强制转换,那范围就是0-2
                    int g;
                    String m = "";
                    int x;
                    x = (int) (+Math.random() * (100));
                    String sx = String.valueOf(x);
                    g = (int) (+Math.random() * (4));
                    switch (g) {
                        case 0:
                            m = "+";
                            break;
                        case 1:
                            m = "-";
                            break;
                        case 2:
                            m = "*";
                            break;
                        case 3:
                            m = "/";
                            break;
                    }
                    sum = sum + m + sx;
                }
                sum = sum.substring(1);
                Double result = null;
                try {
                    result = Double.parseDouble(engine.eval(sum).toString());//eval函数
                } catch (ScriptException e) {
                    e.printStackTrace();
                }

                result1 = result;
                result2 = result1 - (int) result1;
                if (result2 == 0)
                    result1 = (int) result1;
            }
            if(result1<0){
                j--;
                continue;
            }
            result3 = (int)result1;
            System.out.println(sum+"="+result3);
            out.write(sum+"="+result3+"\r\n");
            out.write("\r\n");
        }
        out.close();//关闭输出流
    }
}


前端页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>

<html>
<head>
  <meta charset="UTF-8">
  <title>出题程序</title>
  <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <link type="text/css" rel="styleSheet"  href="../css/basic.css" />
  <script src="https://cdn.bootcss.com/jquery/2.1.1/jquery.min.js"></script>
  <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

</head>
<body>
</br></br></br></br>
<div class="container">

  <h2 style="color:#4169E1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Four mixed operations</h2>

  </br></br>
  <div class="row">

    <div class="col-md-1" >


    </div>
    <div class="col-md-5" style="background-color: #dedef8;">
      </br></br>
      <div class="row">
        <div class="col-md-3">
          <h4>&nbsp;数值范围</h4>
          </br></br>
          <h4>&nbsp;题目数量</h4>
          </br></br>
          <h4>&nbsp;符号上限</h4>
        </div >
        <div class="col-md-9">
          <div class="row">
            <div class="col-md-6">
              <select class="form-control">
                <option value ="1">1</option>
                <option value ="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
                <option value="10">10</option>

              </select>
              </br>
              <div style="margin-top:10px;">
                  <input type="text" class="form-control" placeholder="单行输入" id="userName">
                  
              </div>
              </br>
              <div >
                  <select class="form-control" style="margin-top:-14px;">
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
              </select>
                  
              </div>
            </div>
            <div class="col-md-6">
              <select class="form-control">
                <option value ="1">1</option>
                <option value ="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
                <option value="10">10</option>
              </select>
            </div>
          </div>

        </div>

      </div>
    </div>

    <div class="col-md-4" style="background-color: #dedef8;">
      <h4>&nbsp;</h4>
      <div class="row">
        <div class="col-md-6" style="margin-top:-3px;">
          </br></br>
          <h4>&nbsp;是否包含乘除法</h4>
          </br></br>
          <h4>&nbsp;是否包含括号</h4>
          </br></br></br>
        </div>
        &nbsp;

        <div class="col-md-6" style="margin-top:18px;">
          <div class="btn-group" data-toggle="buttons">
            <label class="btn btn-primary">
              <input type="radio" name="options" id="option1"> 包含
            </label>
            <label class="btn btn-primary">
              <input type="radio" name="options" id="option2"> 不包含
            </label>

            </br></br></br></br>
            <div class="btn-group" data-toggle="buttons">
              <label class="btn btn-primary">
                <input type="radio" name="options" id="option1"> 包含
              </label>
              <label class="btn btn-primary">
                <input type="radio" name="options" id="option2"> 不包含
              </label>

            </div>
          </div>
        </div>

      </div>
      <div class="col-md-2" >


      </div>
    </div>

  </div>
</div>
<div class="container" >
  <div class="row" style="margin-top:-2.5px;">
    <div class="col-md-1">
    </div>
    <div class="col-md-9" style="background-color: #dedef8;">
      <div class="row">
        <div class="col-md-5">
        </div>
        <div class="col-md-2" >

          <div class="btn-group">
            </br>&nbsp;
            <button type="button" class="btn btn-default" onclick="javascrtpt:window.location.href='test.jsp'">点击出题</button>

            </br>&nbsp;</br>&nbsp;</br>&nbsp;
          </div>


        </div>
        <div class="col-md-5">
        </div>
      </div>



    </div>
    <div class="col-md-2">
    </div>
  </div>
  <div>

</body>
</html>

读取txt文件代码:

<%
    //String filePath = request.getSession().getServletContext().getRealPath("/")+"JSP_Ajax"+"\\";
    //System.out.println("filePath=="+filePath);
    String path ="E:\\calculat\\";   // 这边文件目录需改成相对路径
    File file = new File(path,"result.txt");
    FileReader fr = new FileReader(file);  //字符输入流
    BufferedReader br = new BufferedReader(fr);  //使文件可按行读取并具有缓冲功能
    StringBuffer strB = new StringBuffer();   //strB用来存储jsp.txt文件里的内容
    String str = br.readLine();
    while(str!=null){
        strB.append(str).append("<br>");   //将读取的内容放入strB
        str = br.readLine();
    }
    br.close();    //关闭输入流
%>


五、主页面展示 


六、PSP

PSP2.1

任务内容

计划共完成需要的时间(h)

实际完成需要的时间(h)

Planning

计划

20

48

·        Estimate

·   估计这个任务需要多少时间,并规划大致工作步骤

20

48

Development

开发

74

105

·        Analysis

·         需求分析 (包括学习新技术)

5

10

·        Design Spec

·         生成设计文档

2

6

·        Design Review

·         设计复审 (和同事审核设计文档)

1

6

·        Coding Standard

·         代码规范 (为目前的开发制定合适的规范)

2

3

·        Design

·         具体设计

10

12

·        Coding

·         具体编码

36

39

·        Code Review

·         代码复审

5

9

·        Test

·         测试(自我测试,修改代码,提交修改)

13

20

Reporting

报告

6

5

·         Test Report

·         测试报告

2

2

·         Size Measurement

·         计算工作量

1

1

·         Postmortem & Process Improvement Plan

·         事后总结, 并提出过程改进计划

3

2

 

 

七、小组感悟

本次作业设计的非常有趣,我们小组的两个人都比较有兴趣。首先是项目基础,我们对比了我俩的代码,选择了一个较好的项目作为项目的起点;其次是分工,我们一个人写前端,一个人写后端,然后一起在网上学习了bootstrap前端框架,最后一起结合了前后端,真正感受到了一个小型小组在项目里的分工合作。中途也遇到了非常多的BUG,有时为了改一个很小的BUG,也要花几个小时...但是看到最后我们的成果,觉得之前的一切辛勤劳动都是值得的。作为程序员,还有很长的路要走,加油吧!

 

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值