• 201571030337/201571030327——《小学生四则运算》结对项目报告


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

     

     

     

  • 相关阅读:
    jenkins与gitlab集成,分支提交代码后自动构建任务(六)
    MySQL配置参数sync_binlog说明
    jenkins部署java项目(五)
    Mac OS X 中安装JDK 7
    centos 使用pip安装mysql-python
    CentOS6.4下安装TeamViewer8
    adb & adb shell 相关命令
    mac下限速
    mac 下 word 2011 使用笔记
    python twisted启动定时服务
  • 原文地址:https://www.cnblogs.com/xinxinzhou/p/8716805.html
Copyright © 2020-2023  润新知