GitHub地址:https://github.com/jiyx/operation-four.git
一、需求分析
1、需求分析
(1)由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错误不计
分,20道题测试结束后给出测试总分;
(2)题库文件可采用实验二的方式自动生成,也可以手工编辑生成,文本格式如下:
(3)程序为用户提供三种进阶四则运算练习功能选择:百以内整数算式(必做)、带括号算式、真分数算式练习;
(4)程序允许用户进行多轮测试,提供用户多轮测试分数柱状图,示例如下:
(5)程序记录用户答题结果,当程序退出再启动的时候,可为用户显示最后一次测试的结果,并询问用户可否进行新一轮的测试;
(6)测试有计时功能,测试时动态显示用户开始答题后的消耗时间。
(7)程序人机交互界面是GUI界面(WEB页面、APP页面都可),界面支持中文简体(必做)/中文繁体/英语,用户可以进行语种选择。
二、软件设计
三、核心代码
class Num{ //定义数字类 private int a; public Num() { this.a = (int)(Math.random()*10000); } public Num(int i) { this.a = (int)(Math.random()*4)+1; } public int get_num() { return this.a; } public int num_sum(Num B) { return this.a + B.a; } public int num_dec(Num B) { return this.a - B.a; } public int num_c(Num B) { return this.a * B.a; } public int num_chu(Num B) { return this.a / B.a; } public void flash() { this.a = (int)(Math.random()*100); } public void flash_t() { this.a = (int)(Math.random()*4)+1; } public boolean pd(int i) { if(this.a == i) return true; else return false; } }
public class jiedui { private static Num a = new Num(); //a,b private static Num b = new Num(); private static Num c = new Num(1); private static int q = 0; private static String p; private static JFrame frame = new JFrame("简单四则运算"); private static JLabel label1 = new JLabel("A"); private static JLabel label2 = new JLabel("*"); private static JLabel label3 = new JLabel("B"); private static JLabel label4 = new JLabel(" "+"="+" "); private static JLabel label5 = new JLabel("结果"); private static JButton button = new JButton("查看"); private static JButton bt1 = new JButton("下一题"); private static JButton bt2 = new JButton("退出"); private static JTextField text = new JTextField(5); private static JPanel pane = new JPanel(); public static void main(String[] args) { pane.setBorder(BorderFactory.createEmptyBorder(20,60,20,60)); pane.setLayout(new GridLayout(0,5)); //设置布局 pane.add(label1); pane.add(label2); pane.add(label3); pane.add(label4); pane.add(text); pane.add(label5); pane.add(button); pane.add(bt1); pane.add(bt2); if(c.pd(1)) { p = "+"; q = a.num_sum(b); } if(c.pd(2)) { p = "-"; q = a.num_dec(b); } if(c.pd(3)) { p = "*"; q = a.num_c(b); } if(c.pd(4)) { p = "/"; q = a.num_chu(b); } frame.getContentPane().add(pane,BorderLayout.CENTER); button.setMnemonic(KeyEvent.VK_I); button.addActionListener(new ActionListener(){ //鼠标单击事件 public void actionPerformed(ActionEvent e){ if(q == Integer.parseInt(text.getText().trim())) label5.setText("正确!"); else label5.setText("错误!"); } }); bt1.setMnemonic(KeyEvent.VK_H); bt1.addActionListener(new ActionListener(){ //鼠标单击事件 public void actionPerformed(ActionEvent e){ a.flash(); b.flash(); c.flash_t(); if(c.pd(1)) { p = "+"; q = a.num_sum(b); } if(c.pd(2)) { p = "-"; q = a.num_dec(b); } if(c.pd(3)) { p = "*"; q = a.num_c(b); } if(c.pd(4)) { p = "/"; q = a.num_chu(b); } label1.setText(" "+a.get_num()+" "); label2.setText(p); label3.setText(" "+b.get_num()+" "); text.setText(" "); label5.setText("结果"); } }); bt2.setMnemonic(KeyEvent.VK_T); bt2.addActionListener(new ActionListener(){ //鼠标单击事件 public void actionPerformed(ActionEvent e){ System.exit(0); } }); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); label1.setText(" "+a.get_num()+" "); label2.setText(p); label3.setText(" "+b.get_num()+" "); frame.setVisible(true); }
四、运行过程
五、结对过程
六、psp
PSP2.1 | 任务内容 | 计划完成的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
PLanning | 计划 | 60 | 100 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 60 | 60 |
Developmet | 开发 | 480 | 700 |
Analysis | 需求分析(包括学习新技术) | 30 | 50 |
Design Spec | 生成设计文档 | 10 | 25 |
Design Revie | 设计复审(和同事审核设计文档) | 30 | 35 |
Coding Standard | 代码规范 | 20 | 30 |
Design | 具体设计 | 60 | 80 |
Coding | 具体编码 | 300 | 350 |
Code Review | 代码复审 | 30 | 360 |
Test | 测试(自我测试,修改代码,提交修改) | 20 | 30 |
Reporting | 报告 | 30 | 35 |
Test Report | 测试报告 | 20 | 20 |
Size Measurement | 计算工作量 | 5 | 5 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改机计划 | 30 | 35 |
七、请使用汉堡评价法给你的小伙伴一些点评
我的结对小伙伴是个有想法的人,尽管这次我们遇到太多的问题,但总归比一个人的效果要好,两个人一起合作讨论交流,思路开阔,容易发现一个人发现不了的错误,也可以及时改正错误,还可以增加团队合作意识,相信这对以后的训练很有帮助。(由于我俩编程比较差差了,没有实现全部的需求。尽我们最大的努力,也只能做到这了)遇到不会的问题就要去学习,一口吃不了个胖子,所幸我们能够一起努力,一起进步。
八、 结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会。
一根筷子容易折,一把筷子难折断,我想这就是群体的力量,一个人的编程设计往往会出现很多的问题,比如一些代码上的漏洞和设计功能等考虑的不全面,一个人编程的时候遇到问题有时候会卡好长时间,有时候很简单的错误也需要好久才能找见,但是结对编程的时候这种问题出现次数比较少,遇到问题时解决问题的思路和时间会很大幅度的减少,经过两个人的讨论会对问题理解的更透彻,效率更高,所以说结对编程和团队合作还是很有必要的。一个成功的项目后面往往有一个优秀的团队。