GitHub地址:https://github.com/zhouheqh

1、需求分析

  (1)由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错误不计分,20道题测试结束后给出测试总分;

  (2)题库自动生成或手动输入;

 

(3)程序为用户提供三种进阶四则运算练习功能选择:百以内整数算式(必做)、带括号算式、真分数算式练习;

(4)程序允许用户进行多轮测试,提供用户多轮测试分数柱状图,示例如下:

 

(5)程序记录用户答题结果,当程序退出再启动的时候,可为用户显示最后一次测试的结果,并询问用户可否进行新一轮的测试;

(6)测试有计时功能,测试时动态显示用户开始答题后的消耗时间。

(7)程序人机交互界面是GUI界面(WEB页面、APP页面都可),界面支持中文简体(必做)/中文繁体/英语,用户可以进行语种选择。

2、软件设计

 

3、核心代码

绘制图表
import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.util.Random; import javax.swing.JFrame; public class ChartPrint extends JFrame{ //绘制柱形统计图 private Random ran; public ChartPrint(){ super(); ran = new Random(); setTitle("绘制得分柱形图"); setBounds(100, 100, 400, 271); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } @Override public void paint(Graphics g){ int Width = getWidth(); int Height = getHeight(); int leftMargin = 20;//柱形图左边界 int topMargin = 50;//柱形图上边界 Graphics2D g2 = (Graphics2D) g; int ruler = Height-topMargin-5; int rulerStep = ruler/10;//将当前的高度评分为10个单位 g2.setColor(Color.WHITE);//绘制白色背景 g2.fillRect(0, 0, Width, Height);//绘制矩形图 g2.setColor(Color.LIGHT_GRAY); for(int i=0;i<=10;i++){//绘制灰色横线和百分比 g2.drawString((100-10*i)+"%", 5, topMargin+rulerStep*i);//写下百分比 g2.drawLine(5, topMargin+rulerStep*i, Width, topMargin+rulerStep*i);//绘制灰色横线 } g2.setColor(Color.cyan); for(int i=0;i<4;i++){//绘制柱形图 int value = ran.nextInt(Height-topMargin-10)+10;//随机产生柱形的百分比 int step = (i+1)*40;//设置每隔柱形图的水平间隔为40 //绘制矩形 // g2.drawRoundRect(leftMargin+step*2, Height-value, 40, value, 40, 10); g2.fillRoundRect(leftMargin+step*2, Height-value, 40, value, 40, 10); //列出产品的编号 g2.drawString("练习次数"+(i+1), leftMargin+step*2, Height-value-5); } } public static void main(String[] args) { ChartPrint demo = new ChartPrint(); demo.setVisible(true); } } 登录界面 import java.awt.BorderLayout; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; public class Login { private JFrame frame = new JFrame("四则运算"); private Container c = frame.getContentPane(); private JTextField username = new JTextField(); private JPasswordField password = new JPasswordField(); private JButton ok = new JButton("确定"); private JButton cancel = new JButton("取消"); public Login(){ frame.setSize(300,200); c.setLayout(new BorderLayout()); initFrame(); frame.setVisible(true); } private void initFrame() { //顶部 ok.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { new chuti(); } }); JPanel titlePanel = new JPanel(); titlePanel.setLayout(new FlowLayout()); titlePanel.add(new JLabel("学生登录")); c.add(titlePanel,"North"); //中部表单 JPanel fieldPanel = new JPanel(); fieldPanel.setLayout(null); JLabel l1 = new JLabel("学 号:"); l1.setBounds(50, 20, 50, 20); JLabel l2 = new JLabel("密 码:"); l2.setBounds(50, 60, 50, 20); fieldPanel.add(l1); fieldPanel.add(l2); username.setBounds(110,20,120,20); password.setBounds(110,60,120,20); fieldPanel.add(username); fieldPanel.add(password); c.add(fieldPanel,"Center"); //底部按钮 JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new FlowLayout()); buttonPanel.add(ok); buttonPanel.add(cancel); c.add(buttonPanel,"South"); } public static void main(String[] args){ new Login(); } } 随机出题 import java.util.Random; public class chuti { int a,b,c,d; int an[]=new int [5]; String bn[]=new String [5]; Random cn =new Random(); chuti(){ int i=0; do{ a=cn.nextInt(100); b=cn.nextInt(100); d=cn.nextInt(100)%4+1; switch(d){ case 1: an[i]=a+b; bn[i]=String.valueOf(a)+"+"+String.valueOf(b)+"="; i++; break; case 2: an[i]=a-b; bn[i]=String.valueOf(a)+"-"+String.valueOf(b)+"="; i++;break; case 3:an[i]=a*b; bn[i]=String.valueOf(a)+"*"+String.valueOf(b)+"="; i++; break; case 4:an[i]=a/b; bn[i]=String.valueOf(a)+"/"+String.valueOf(b)+"="; i++;break; } }while(i<5); for(int j=0;j<bn.length;j++) {System.out.println(bn[j]);System.out.println(an[j]); } new yunsuan(an,bn); } }
运算
import java.awt.BorderLayout; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; public class yunsuan extends JFrame{ JLabel l1 = new JLabel("答对题数:"); private JFrame frame = new JFrame("四则运算"); private Container c = frame.getContentPane(); private JButton KO = new JButton("确定"); private JTextField A = new JTextField(6); private JTextField AA = new JTextField(4); private JTextField AAA = new JTextField(4); private JTextField B = new JTextField(6); private JTextField BB = new JTextField(4); private JTextField BBB = new JTextField(4); private JTextField C = new JTextField(6); private JTextField CC = new JTextField(4); private JTextField CCC = new JTextField(4); private JTextField D = new JTextField(6); private JTextField DD = new JTextField(4); private JTextField DDD = new JTextField(4); private JTextField E = new JTextField(6); private JTextField EE = new JTextField(4); private JTextField EEE = new JTextField(4); private JPasswordField password = new JPasswordField(); private JButton ok = new JButton("确定"); private JTextField QQ = new JTextField(6); int num=0; int an[]=new int [5]; String bn[]=new String [5]; String cn[]=new String [5]; yunsuan(int a[],String b[]) { an=a; bn=b; JPanel fieldPanel = new JPanel(); fieldPanel.add(A);A.setBounds(30, 10, 100, 20); A.setVisible(true); fieldPanel.add(AA);AA.setBounds(40, 10, 100, 20); fieldPanel.add(AAA);AAA.setBounds(50, 10, 100, 20); fieldPanel.add(B);B.setBounds(30, 15, 50, 20); fieldPanel.add(BB);BB.setBounds(40, 15, 100, 20); fieldPanel.add(BBB);BBB.setBounds(50, 10, 100, 20); fieldPanel.add(C);C.setBounds(30, 20, 50, 20); fieldPanel.add(CC);CC.setBounds(40, 20, 100, 20); fieldPanel.add(CCC);CCC.setBounds(50, 10, 100, 20); fieldPanel.add(D);D.setBounds(30, 25, 50, 20); fieldPanel.add(DD);DD.setBounds(40, 25, 100, 20); fieldPanel.add(DDD);DDD.setBounds(50, 10, 100, 20); fieldPanel.add(E);E.setBounds(30, 30, 50, 20); fieldPanel.add(EE);EE.setBounds(40, 30, 100, 20); fieldPanel.add(EEE);EEE.setBounds(50, 10, 100, 20); fieldPanel.add(KO);KO.setBounds(30, 50, 20, 20); fieldPanel.add(l1);l1.setBounds(20, 60, 100, 20); fieldPanel.add(QQ);QQ.setBounds(40, 70, 100, 20); KO.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { cn[0]=AA.getText(); cn[1]=BB.getText(); cn[2]=CC.getText(); cn[3]=DD.getText(); cn[4]=EE.getText(); AAA.setText(String.valueOf(an[0])); BBB.setText(String.valueOf(an[1])); CCC.setText(String.valueOf(an[2])); DDD.setText(String.valueOf(an[3])); EEE.setText(String.valueOf(an[4])); for(int i=0;i<an.length;i++) if(String.valueOf(an[i]).equals(cn[i]))num++; QQ.setText(String.valueOf(num)); } }); fieldPanel.setVerifyInputWhenFocusTarget(true); A.setText(bn[0]); B.setText(bn[1]); C.setText(bn[2]); D.setText(bn[3]); E.setText(bn[4]); this.add(fieldPanel); this.setBounds(400, 400, 250, 270); this.setVisible(true); } }  

4、程序运

 

 

 

5、同学习过程:

 

 

 

6、展示PSP

PSP2.1

任务内容

计划完成需要的时间(min)

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

Planning

计划

30

30

 Estimate

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

50

50

Development

开发

300

360

Analysis

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

30

30

 Design Spec

生成设计文档

40

60

Design Review

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

20

10

Coding Standard

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

10

10

Design

具体设计

60

40

Coding

具体编码

180

150

Code Review

代码复审

10

20

est

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

40

60

Reporting

报告

30

45

Test Report

测试报告

25

30

Size Measurement

计算工作量

10

6

Postmortem & Process

Improvement Plan

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

10

20

7、对小伙伴的评价

        首先,我要谢谢我的小伙伴,因为她带给我学习过程中科院相互讨论相互学习的感觉,使我们都能投入到学习当中去,用我们共同的力量去寻求更好的解决问题的方法。这是一个难能可贵的优点,值得我们好好学习。总之,通过结对学习,使我们之间受益匪浅。

8、 结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会。

        通过这次编程,我觉得能够带来1+1>2的效果,之前一个人做的时候,遇到不懂得问题时,就会陷入迷茫。当两个人一起编程时,有不懂的还可以一起讨论,说出自己的意见,也为整个编程过程节约了时间,除此之外,两个人一起合作时就会产生更多更好的想法,可以更好的优化整个项目的设计,遇到问题时可以相互帮助解决问题,效率也比较高。两个人合作还可以发现多方身上的优点,找出自己身上的不足,并能相互监督让彼此变得更好,还可以彼此分享好的学习经验,所以我们认为两个人合作的效率远远大于一个人。

 

 

 

 

posted on 2018-04-04 21:25  mynameiszhouxin  阅读(146)  评论(1编辑  收藏