201571030143/201571030114《小学四则运算练习软件》结对项目报告
Posted Poison.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了201571030143/201571030114《小学四则运算练习软件》结对项目报告相关的知识,希望对你有一定的参考价值。
一、项目源码
GitHub的链接地址:https://github.com/Lei-surely/Project3
二、项目报告
1.需求分析
(1)程序能够从题库随机选择20道混合运算,用户输入答案,程序检查答案是否正确,每道题正确计5分,测试结束后给出总分;
(2)题库文件生成采用实验二的方式自动生成;
(3)程序提供三种练习功能选择:百以内整数算式(必做)、带括号算式、真分数算式练习;
(4)程序允许进行多轮测试,并用柱状图显示多轮测试分数;
(5)测试有计时功能,测试时动态显示用户开始答题后的消耗时间;
(6)程序人机交界面是GUI界面,界面支持中文简体,用户可以进行语种选择。
2.软件设计
程序设计的类图如下:
(1)MainTest()类:调用四则运算模块,即MyFrame()类。
(2)MyFrame()类:点击开始测试按钮,调用CalTest()类,生成题库;点击提交按钮,调用Submit()类,统计结果按钮调用Chart()类,显示多轮答题结果的柱状图。
(3)Submit()类:显示本轮测试的正确答案以及用户提交的答案以及测试的正确率,并让用户选择是进行下一轮还是返回统计结果界面。
(4)CalTest():运算式生成,实现了随机生成一百以内的混合运算。
3.核心代码展示
(1)计算四则运算界面监听器
1 //注册监听 2 private void registerListener() { 3 //计时 4 Timer timer = new Timer(1000, new ActionListener() { 5 public void actionPerformed(ActionEvent e) { 6 Date now2 = new Date(now.getTime() + 1000); 7 now = now2; 8 SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); 9 lbl.setText(formatter.format(now)); 10 } 11 }); 12 btn_begin.addActionListener(new ActionListener() { 13 public void actionPerformed(ActionEvent arg0) { 14 //开始测试函数调用 15 begin(); 16 timer.start(); 17 } 18 }); 19 btn_tj.addActionListener(new ActionListener() { 20 public void actionPerformed(ActionEvent arg0) { 21 timer.stop(); 22 try { 23 submit(); 24 } catch (IOException e) { 25 e.printStackTrace(); 26 } 27 } 28 }); 29 btn_js.addActionListener(new ActionListener() { 30 @Override 31 public void actionPerformed(ActionEvent arg0) { 32 //统计结果函数 33 counts(); 34 } 35 }); 36 }
(2)显示测试结果
1 //显示测试结果 2 public void result() { 3 File file = new File("result.txt"); 4 if (file.exists() && file.isFile()) { 5 try { 6 BufferedReader input = new BufferedReader(new FileReader(file)); 7 String text; 8 while ((text = input.readLine()) != null) 9 my_answer.setText(my_answer.getText() + text + "\\n"); 10 } catch (IOException ioException) { 11 System.err.println("File Error!"); 12 } 13 } 14 } 15 16 //比较结果 17 public int compare() throws IOException { 18 //封装数据源 19 BufferedReader br_a = new BufferedReader(new FileReader("answer.txt")); 20 BufferedReader br_r = new BufferedReader(new FileReader("result.txt")); 21 //封装目的地 22 ArrayList<String> answer = new ArrayList<String>(); 23 ArrayList<String> result = new ArrayList<String>(); 24 //读取数据写到集合中 25 String line1 = null; 26 String line2 = null; 27 28 while((line1 = br_a.readLine())!= null){ 29 answer.add(line1); 30 } 31 while((line2 = br_r.readLine())!= null){ 32 result.add(line2); 33 } 34 //遍历进行比较并计算正确率 35 int i=0; 36 int count=0; 37 for(i=0;i<answer.size();i++) 38 { 39 String s1=answer.get(i); 40 String s2=result.get(i); 41 if(s1.equals(s2)) 42 { 43 count++; 44 } 45 } 46 NumberFormat numberFormat = NumberFormat.getInstance(); 47 numberFormat.setMaximumFractionDigits(2); 48 String s3 = numberFormat.format((float) count / (float)answer.size() * 100); 49 correct.setText("您做对了"+count+"道, "+"正确率为:"+String.valueOf(s3)+"%"); 50 int b=count*5; 51 return b; 52 }
(3)绘制柱状图
1 public void paint(Graphics g){ 2 SubFrame subframe= new SubFrame("结果"); 3 subframe.setVisible(false); 4 int a=0; 5 try { 6 a = subframe.compare(); 7 } catch (IOException e) { 8 e.printStackTrace(); 9 } 10 String s=String.valueOf(a); 11 12 int Width = getWidth(); 13 int Height = getHeight(); 14 int leftMargin = 20;//柱形图左边界 15 Graphics2D g2 = (Graphics2D) g; 16 int height = Height/11;//将当前的高度平分为11个单位 17 g2.setColor(Color.LIGHT_GRAY);//绘制灰色背景 18 g2.fillRect(0, 0, Width, Height);//绘制矩形图 19 g2.setColor(Color.GRAY); 20 21 for(int i=0;i<=10;i++){ 22 g2.drawString(String.valueOf(100-(10*i)), 20, height*i+44);//写下分数 23 g2.drawLine(0, height*i+44, Width, height*i+44);//绘制横线 24 } 25 g2.setColor(Color.DARK_GRAY); 26 for(int i=0;i<count_array.size();i++) { 27 //绘制柱形图 28 int f = Integer.parseInt(count_array.get(i)); 29 //设置每隔柱形图的水平间隔为30 30 int step = (i+1)*30; 31 //绘制矩形 32 g2.fillRoundRect(leftMargin+step*2, Height-(Height/110)*f-5, 30, (Height/110)*f-3,30, 0); 33 g2.drawString("第"+(i+1)+"轮", leftMargin+step*2,Height-(Height/110)*f-10); 34 } 35 }
4.程序运行界面
(1)运行程序,点击开始测试按钮,开始计算,计时区域开始计时。
(2)计算结束后,点击提交按钮,跳转到显示结果页面,点击显示结果按钮后,显示正确结果以及用户测试结果,并计算出正确率。
(3)点击再来一轮后。页面返回开始测试页面,开始新一轮的计算,多轮计算后,统计结果并用柱状图显示出来
5.结对编程过程(下图是我和小伙伴在一起编程时拍的照片)
6.PSP
PSP2.1 |
任务内容 |
计划共完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
30 |
40 |
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
30 |
40 |
Development |
开发 |
600 |
720 |
·· Analysis |
需求分析 (包括学习新技术) |
60 |
90 |
· Design Spec |
· 生成设计文档 |
30 |
45 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
20 |
30 |
· Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
15 |
20 |
· Design |
具体设计 |
40 |
65 |
· Coding |
具体编码 |
400 |
480 |
· Code Review |
· 代码复审 |
30 |
30 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
25 |
30 |
Reporting |
报告 |
30 |
30 |
·· Test Report |
· 测试报告 |
15 |
15 |
· Size Measurement |
计算工作量 |
10 |
10 |
· Postmortem & Process Improvement Plan |
· 事后总结 ,并提出过程改进计划 |
10 |
15 |
7.对小伙伴的评价
由于我和小伙伴平时关系很好,因此这次结对编程项目合作的非常融洽,在整个分析、设计以及编程的过程中,我们两个人都是一起商量,一起编程的。她是一个非常有主见的人,在设计过程中我们先进行整体框架的搭建,她有几个比较好的想法,我们会进行讨论,然后择优而选。在遇见有分歧的想法时,我们会先把每个人的想法进行分析,指出对方没有考虑的部分,最后达成共识,也还算顺利的完成了这次的结对编程。总之,和小伙伴的合作还是非常愉快的呢,期待我们下一次的合作!
8.结对编程真的能够带来1+1>2的效果吗?我的感受和体会如下:
通过这次编程,我觉得能够带来1+1>2的效果,之前一个人做的时候,遇到不懂得问题时,就会陷入迷茫。当两个人一起编程时,有不懂的还可以一起讨论,说出自己的意见,也为整个编程过程节约了时间,但是这个的前提是有一个负责任的小伙伴,要有团队意识。在编程的过程中,我们有时遇到一个问题会卡住好长时间,但最终经过两个人的努力,解决了问题。最后在代码复审的时候两个人的效率也是很高的,出错的概率小,在我们的共同努力下,完成了这次编程,可见团队的合作在软件开发的过程中还是很重要的。
以上是关于201571030143/201571030114《小学四则运算练习软件》结对项目报告的主要内容,如果未能解决你的问题,请参考以下文章