# 结对项目——四则运算 整体性总结

## 结对项目——四则运算 整体性总结

### 需求分析：

• 生成题目后存入文件
• 完成题目后从文件读入并进行判断
• 支持繁體中文简体中文English

### 关键代码：

import java.util.*;
import java.io.*;
import java.lang.*;
import static java.lang.System.out;
public class Main {
public static void main(String[] args) throws IOException {

StringTokenizer tokenizer1 = null, tokenizer2 = null;//创建StringTokenizer对象作分隔标记
String token1, token2, token3, token4;
String s1 = null;
String str;
int rightnum = 0, count = 0;
float rate;
int n,q = 0,choose;
String expr;

CreateQuestion creque = new CreateQuestion();
PrintStream ps = new PrintStream("Exercises.txt");     //创建Exercises.txt
Calculation cal = new Calculation();//创建一个Calculation的对象cal
ChangeSuffix cs = new ChangeSuffix();//创建一个ChangeSuffix的对象cs
FileInputStream fis = new FileInputStream("Exercises.txt");//创建指向Exercises.txt文件的输入流
Scanner scan = new Scanner(System.in);
CreateQuestion cq = new CreateQuestion();
System.out.println("输入0为中文版~~~Input 1 is English version~~~輸入2為簡體中文");//选择语言
choose = scan.nextInt();//choose的数值对应不同的语言
Locale locale;
ResourceBundle res = null;
switch (choose){
case 0:
locale=new Locale("zh","CN");
res= ResourceBundle.getBundle("message",locale);
break;
case 1:
locale=new Locale("en","US");
res= ResourceBundle.getBundle("message",locale);
break;
case 2:
locale=new Locale("ft","CN");
res= ResourceBundle.getBundle("message",locale);
break;
default:System.out.println("选择错误！~~~Wrong Choose!~~~選擇錯誤 ！");
System.exit(0);
}

while(true)

{
System.out.print(res.getString("b"));
n = scan.nextInt();
System.out.println(" ");
if (n > 0) {
for (int i = 0; i < n; i++) {
//生成题目
int a;
a = i + 1;
expr = cq.getQuestion();
String s = res.getString("c") + a + ":" + expr + " =";
System.out.println(s);
ps.println(s);
}
ps.close();
break;
} else {
System.out.println(res.getString("d"));
}
//iof.close();
//ps.close();
}
Process p=null;
try {
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(res.getString("e"));
String dd = scan.next();
if(dd.equals("Y")) {
PrintStream ps2 = new PrintStream("ExercisesResult.txt");//创建ExercisesResult.txt

while ((str = in.readLine()) != null) { //从Exercises.txt文件中读入文本行，文件中每个题目都是一行，且形式都为“题目n：表达式 =答案”。
tokenizer1 = new StringTokenizer(str, ":");//以":"作为分隔标记
token1 = tokenizer1.nextToken();//将":"前的内容赋给token1（“题目n”）
token2 = tokenizer1.nextToken();//将":"后的内容赋给token2（“表达式 =答案”）
tokenizer2 = new StringTokenizer(token2, "=");//以"="作为分隔标记
token3 = tokenizer2.nextToken();//将"="前的内容赋给token3（“表达式”）
token4 = tokenizer2.nextToken();//将"="后的内容赋给token4（“答案”）
//cs.toSuffix(token3);//将token3转化为后缀表达式
if (token4.equals(cal.evaluate(cs.toSuffix(token3)))) {//判断输入答案是否等于计算结果
s1 = res.getString("f");
rightnum++;
} else {
s1 = res.getString("g") + cal.evaluate(cs.toSuffix(token3));
}
String s2 = str + "\n" + s1;
System.out.println(s2);
ps2.println(s2);//将题目及判断结果写入到ExercisesResult.txt文件中
count++;
}

rate = (float) rightnum / count * 100;
String s3 = (res.getString("h") + count + res.getString("i") + rate + "%");//计算题目数目及正确率，将正确率转化为百分数。
System.out.println(s3);
ps2.println(s3);
}
else System.out.println(res.getString("j"));
}
}


### psp图

PSP2.1 Personal Software Process Stages 预估耗时（分钟） 实际耗时（分钟）
Planning 计划
·Estimate · 估计这个任务需要多少时间 5 10
Development 开发
·Anlaysis · 需求分析 (包括学习新技术) 2 2
·Design Spec · 生成设计文档 5 5
·Design Review · 设计复审 (和同事审核设计文档) 3 3
·Coding Standard · 代码规范 (为目前的开发制定合适的规范) 5 5
·Design · 具体设计 20 20
·Coding · 具体编码 120 100
· Code Review · 代码复审 10 10
· Test · 测试（自我测试，修改代码，提交修改） 5 10
Reporting 报告
· Test Report · 测试报告 15 15
· Size Measurement · 计算工作量 15 15
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 10 10

### 遇到的问题和解决：

• 查重的实现：
老实说这个问题并没有解决。虽然其他组的小伙伴提出了一些非常精彩的思路，但是仔细研读题目扩充需求后我们发现，查重需要分级进行，0级相当于不查重，1级进行交换律的区分等等。我们经过尝试后发现当一个算式足够复杂（支持分数和括号以后产生机率还是比较大的），即使是题目中最简单的交换律都难以全面判断，目前还没有找到一个非常好的判断或是表述方式，无奈只能暂时放弃，等待新的思路产生。

• 文件操作的用意：有关文件的操作我们一直不解其意。为什么生成题和判题要由文件的写入和读取进行中转。不知以何种手段体现这步文件操作成了我们组思路的断点。直到我打开蓝墨云，看到每周都要做的章节测试，豁然开朗。我突然发现各操作都可以找到对应，运行运算系统相当于点进测试页面，页面刷新我们就能看见本周的测试题目，这一点我们可以通过让txt弹出来实现，在txt中答题就相当于我们在网页中进行每道题的作答，然后我们关上txt文件回到程序进行提交，系统反馈成绩单，虽然简陋但一步不少的模拟了这种答题过程。

### 项目总结：

posted @ 2019-04-14 21:35  20175308杨元  阅读(122)  评论(0编辑  收藏  举报