zoukankan      html  css  js  c++  java
  • 结对项目——四则运算 “软件”之升级版

    这个作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2232

    我的github远程仓库的地址为:https://github.com/zyd123d/zyd1

    一、题目基本要求

          从个人项目出发,将程序改装成一个单机带用户界面(不是控制台)的程序,这个程序最基本要达到:

    • 生成题目,单个题目最多不能超过4个运算符,操作数小于100。
    • 用户可以输入答案
    • 若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。

    二、扩展要求

    1. 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
    2. 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
    3. 用户答题结束以后,程序可以显示用户答题所用的时间
    4. 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
    5. 用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名 
    6. 程序可以出单个整数阶乘的题目:如:4!=24
    7. 程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。
    8. 程序可以设置皮肤功能,可以改变界面的颜色即可。

    三、结对项目详细设计过程

    • 使用的编译开发环境:IntelliJ IDEA 2017.2.3 x64
    • 使用的编程语言:Java语言
    • 实现的扩展要求
    1. 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
    2. 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
    3. 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
    4. 程序可以出单个整数阶乘的题目:如:4!=24
    5. 程序可以设置皮肤功能,可以改变界面的颜色即可。
    • 源代码
      已上传至我的github远程仓库
    • 部分主要源代码
    1. 用户可以选择出题的个数(最多不能超过5个题目且不少于1个)
      1  if(n>5||n<1)
      2                 {
      3                     //如果题目个数大于5或小于1,会弹出提示框
      4                     JOptionPane.showMessageDialog(null,"输入的题目个数不能大于5或者小于1","注意",JOptionPane.INFORMATION_MESSAGE);
      5                 }
    2. 更换背景颜色
       1  if(e.getSource()==B4)//换皮肤
       2             {
       3                 B4.addActionListener(new ActionListener() {
       4                     @Override
       5                     public void actionPerformed(ActionEvent cc) {
       6                         Color ch = JColorChooser.showDialog(p1, "颜色选择器",
       7                                 p1.getBackground());
       8                         if (ch != null) {
       9                             p1.setBackground(ch);
      10                             p1.repaint();
      11                         }
      12                     }
      13                 });
      14             }
    3. 随机生成四则运算题目(包括阶乘的运算及负整数的运算)
        1 void star()
        2     {
        3         a=(int) (Math.random()*200-100);//random出来的数为0-1之间,然后取-99到99的整数
        4         b=(int) (Math.random()*200-100);
        5         c=(int) (Math.random()*200-100);
        6         d=(int) (Math.random()*200-100);
        7         j=(int) (Math.random()*4);
        8         k=(int) (Math.random()*4);
        9         if(d<0)
       10         {
       11             a=(int) (Math.random()*9+1);//随机产生一个整数 范围是0-9(包括0和9)
       12             s1=String.valueOf(a)+String.valueOf(h1[2]);//获取这个数进行阶乘
       13             L4.setText(s1);
       14             result=1;
       15             for(int i=1;i<=a;i++)//从1开始一直乘到这个数字本身
       16             {
       17                 result=result*i;
       18             }
       19         }
       20         else
       21         {
       22             if(b>=0&&c>=0)
       23             {
       24                 //将变量转换成字符串
       25                 s1=String.valueOf(a)+String.valueOf(h[j])+String.valueOf(b)+String.valueOf(h[k])+String.valueOf(c);
       26                 L4.setText(s1);
       27                 System.out.println(s1);
       28             }
       29             else if(b<0&&c>=0)
       30             {
       31                 //检测到b小于0,为负数,给b的左右两边加上括号运算
       32                 s1=String.valueOf(a)+String.valueOf(h[j])+String.valueOf(h1[0])+String.valueOf(b)+String.valueOf(h1[1])+String.valueOf(h[k])+String.valueOf(c);
       33                 L4.setText(s1);
       34                 System.out.println(s1);
       35             }
       36             else if(b>=0&&c<0)
       37             {
       38                 //检测到c小于0,为负数,给c的左右两边加上括号运算
       39                 s1=String.valueOf(a)+String.valueOf(h[j])+String.valueOf(b)+String.valueOf(h[k])+String.valueOf(h1[0])+String.valueOf(c)+String.valueOf(h1[1]);
       40                 L4.setText(s1);
       41                 System.out.println(s1);
       42             }
       43             else
       44             {
       45                 //检测到b、c都小于0,都为负数,给b、c的左右两边都加上括号运算
       46                 s1=String.valueOf(a)+String.valueOf(h[j])+String.valueOf(h1[0])+String.valueOf(b)+String.valueOf(h1[1])+String.valueOf(h[k])+String.valueOf(h1[0])+String.valueOf(c)+String.valueOf(h1[1]);
       47                 L4.setText(s1);
       48                 System.out.println(s1);
       49             }
       50             if(k>1)  //后面的计算符为乘除,先算后面两个数;k=0时为加,k=1时为减
       51             {
       52                 if(k==2)
       53                 {
       54                     result=b*c;
       55                 }
       56                 else if(k==3)
       57                 {
       58                     result=b/c;
       59                 }
       60                 if(j==0)
       61                 {
       62                     result=result+a;
       63                 }
       64                 else if(j==1)
       65                 {
       66                     result=a-result;
       67                 }
       68                 else if(j==2)
       69                 {
       70                     result=a*result;
       71                 }
       72                 else if(j==3)
       73                 {
       74                     result=a/result;
       75                 }
       76             }
       77             else if(k<2)
       78             {
       79                 if(j==0)
       80                 {
       81                     result=b+a;
       82                 }
       83                 else if(j==1)
       84                 {
       85                     result=a-b;
       86                 }
       87                 else if(j==2)
       88                 {
       89                     result=a*b;
       90                 }
       91                 else if(j==3)
       92                 {
       93                     result=a/b;
       94                 }
       95                 if(k==0)
       96                     result=result+c;
       97                 if(k==1)
       98                     result=result-c;
       99             }
      100         }
      101         System.out.println(result);
      102         n--;
      103     }
      104 
      105 }

    四、结对同伴

     姓名:麦家滢 

    她的博客地址:https://www.cnblogs.com/makky1116/

     结对学习照片:


    五、程序运行结果演示

    1. 四则运算系统初始用户界面
    2. 输入题目个数(大于5小于1是弹窗提示错误)
    3. 随机出现阶乘与带括号的负数运算


    4. 运算结束显示正确与错误个数
    5. 更换背景颜色 


    六、总结

          在本次结对编程的过程中,真实的体会到了结对编程的实际意义。再开始接触这个结对任务的时候,我和我的结对同伴原本是打算使用C语言编写程序,并且已经编写好了代码,但是由于C语言的用户界面需要用到MFC的相关知识,导致我们的进度停滞了很久,最终决定使用java语言编写本次的程序。由于是结对编程,我和我的结对同伴可以互相指出对方的错误,也能帮助对方解决一些问题,整体的感受都非常良好,比平时自己编写一个程序的时候更加具有钻研的动力与热情。但是由于java语言对用户界面的编写同样不太不熟悉吗,导致我们也因为一些细节问题苦恼了很久,所幸在两个人的共同努力下,此个程序终于完成。希望在以后的学习中,能够体会到更多结对编程的益处。此次结对编程与我而言最大的收获便是学会如何与他人正确的合作,掌握好沟通技巧非常主要。希望在以后的学习中能够有更多的合作。

            


    七、结对软件过程耗时估计与统计表

    PSP2.1 Personal Software Process Stages Time Senior Student(h) Time(h)
    Planning 计划 3 1.5
    · Estimate 估计这个任务需要多少时间 10 15
    Development 开发 8 10
    · Analysis 需求分析 (包括学习新技术) 2 1
    · Design Spec 生成设计文档 2 1
    · Design Review 设计复审 1 1
    · Coding Standard 代码规范 0.5 1.5
    · Design 具体设计 4 4.5
    · Coding 具体编码 12 13
    · Code Review 代码复审 1 2
    · Test 测试(自我测试,修改代码,提交修改) 1 1.5
    Reporting 报告 1 3
    · 测试报告 0 0
    · 计算工作量 1 1
    · 并提出过程改进计划 0 0
  • 相关阅读:
    根据excel表格中的某一列内容,使用python将其拆分成多个excel表格
    Python操作excel
    opensips(三):load_balancer与NAT
    opensips(二):NAT官方脚本
    sip头域
    OPensips(一):NAT例子
    四、word2vec + siameseLSTM改进(1)
    三、word2vec + siameseLSTM
    二、LSTM处理不定长句子
    一、word2vec的使用
  • 原文地址:https://www.cnblogs.com/zyd1234/p/9853016.html
Copyright © 2011-2022 走看看