软件工程基础-结对项目

项目二:四则运算题目生成进度记录:

6.18更新:学了一段时间MFC以后,把此四则运算转换成了可视化图形界面版本的自动生成程序,源程序已经上传到Github上,下面是程序运行截图;html

整形数据前端

分数java

  主要是要调用MFC的一些接口和原本的程序代码进行绑定,逻辑上和本来的网页端差很少只是语法上有必定的差别。c++

  下面是原博客内容:git


 

  • 5月8日:因为上周有两门考试须要准备,我和个人室友小伙伴杰宝宝都投身于紧张刺激的组原和数电的复习之中,暂时的搁置了一下结对项目。今天上午和小伙伴商量了一下项目课题选择,结合咱们二人的优点最终选择了第二个项目,花了半小时安排了一下项目进程,也把各自的分工进行了明确。结对项目正式开工。
  • 5.27日:几门大考结束以后已经要开始着手准备这个结对项目各类项目了。

  以前准备是界面用HTML等搭建,而后执行c++编译后的exe文件,进行数据间的传递,达到可视化的效果。这是对界面库一无所知的小白最初的想法。可是事情远远没有这么简单!github

任务:将本来的四则运算(c++版本)拓展为网页版。bootstrap

一、GitHub:https://github.com/1120161970/Calculate浏览器

二、时间耗费 :框架

PSP2.1dom

Personal Software Process Stages

预估耗时(min)

实际耗时(min)

Planning

计划

30

 

Estimate

估计这个任务须要多少时间

1200

 

Development

开发

600

 

Analysis

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

120

 

Design Spec

生成设计文档

30

 

Design Review

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

10

 

Coding Standard

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

10

 

Design

具体设计

30

 

Coding

具体编码

120

 

Code Review

代码复审

30

 

Test

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

120

 

Reporting

报告

30

 

Test Report

测试报告

10

 

Size Measurement

计算工做量

10

 

Postmortem & Process Improvement Plan

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

30

 

 

合计

 

 

三、解题思路:

  1. 首先花了一点时间去学习js,并作了一个简单的计算器demo便与后续拓展
  2. 在和室友交流的过程当中发现咱们最初的那个想法有问题,由于html直接与c++程序或者是exe程序是没法直接交互的,这个时候查阅资料了解到了界面库,UI库之类的东西,可是迫于时间有限只能在后续再去尝试这个全新的领域了。
  3. 既然没法直接交互,那我想的是就写一个js版本的在线生成器,逻辑用js,而后前台界面用html+bootstrap。
  4. 后学考虑过升级成jsp+javabean版本。

四、设计实现过程

  1. 最初的计算器版本实现很简单,逻辑和页面分离的思路。
  2. 四则运算在线生成就相对要麻烦一点,可是仍是函数思想,给最初的button绑定一个play_all函数,用来生成题目和正确答案,这个函数会读取最初的input输入值来生成相应数量的题目。逻辑就再也不赘述,代码中都有详细的说明。

五、性能改进及思路

  1. html的优点在于界面很好上手,也很容易写一个很好看的界面,可是对于js和html界面的耦合性可能会很高,不利于代码分离。
  2. 我写的这个版本是属于网页版本,小伙伴的那个版本是c++版本,因此后续的改进就两个方向:一是用界面库升级c++版本,而是用jsp和javabean进一步用前端的思路去优化。

六、代码说明(思路解释+注释说明)

  1.  计算器demo
    var clearmsg = false;  
    var ispoint = true;  
    function show(obj){  
        var data =  obj.value;  
        var text = document.getElementById("text");  
        if(clearmsg){  
            text.value = "";  
            clearmsg=false;  
        }  
        if(data == "+" || data == "-" || data == "*" || data == "/"){  
            ispoint = true;  
        }  
        if(data == "0" && text.value == "0"){  
            text.value = parseInt(text.value) + 0;    
        }else if(text.value == "0" && data != "+" && data != "-" && data != "*" && data != "/"){  
            text.value = parseInt(text.value) + parseInt(data);  
        }else{  
            text.value += data;  
        }  
    }  
    //计算结果  
    function getResult(){  
        var data = document.getElementById("text");  
        try{  
            ispoint = true;  
            data.value = eval(data.value);  
            clearmsg = true;  
            //alert(ispoint);  
        }catch(err){  
            alert("这怎么算!");  
            data.value = "0";  
        }  
    }  
    //
    function point(){  
        var p = document.getElementById(".");  
        var text = document.getElementById("text");  
          
        if(ispoint){  
            text.value += p.value;  
            ispoint = false;  
        }  
        //if(text.value.indexOf(".") == true ){  
        //}else{  
        //  text.value += p.value;  
        //}           
    }  
    //清空  
    function funclear(){  
        var a = document.getElementById("text").value = "0";  
        clearmsg = false;  
        ispoint = true;  
        //if(a==null || a==""){  
        //  alert("null");  
        //}else{  
        //  alert(a);  
        //}  
    }  
    //退格键  
    function funback(){  
        var text = document.getElementById("text");  
        if(text.value == "0" || text.value == ""){  
            text.value = "0";  
        }else{  
            document.getElementById("text").value=document.getElementById("text").value.slice(0,-1);  
        }  
    }  

  上面是运用js写的运算逻辑,而后最后的界面是这样的:

    

  能够完成基本的四则运算,可是对于浮点数的表示就简单采起的四舍五入式。

  2. 改进后的四则运算生成的JavaScript代码:

    

function GetRandomNum(Min,Max){   
  var Range = Max - Min;   
  var Rand = Math.random();   
  return(Min + Math.round(Rand * Range));   
}  
// 获取随机数  
function max_num(x,y) {  
 var t;  
 while (y) {  
  t = x%y;  
  x = y;  
  y = t;  
 }  
 return x;  
}  
function fenshu(a,b,p) {  
 if (p==1) {  
  if (a>b) {  
   return a+"/"+b;  
  }else if(a<b){  
   return a+"/"+b;  
  }else {  
   return 1;  
  }  
 }else {  
  var x=a/p;  
  var y=b/p;  
  if(y==1){  
   return x;  
  }else{  
   return x+"/"+y;  
  }  
 }  
}  
function f_count(a,b,c,d) {  
  var Arr = ["+","-","*","/"];   
  var n = GetRandomNum(0,3);  
  switch(Arr[n]){  
   case "+":{  
   var sum_x=(a*d)+(b*c);  
   var sum_y=b*d;  
   max_x=max_num(sum_x,sum_y);  
   max_y=max_num(sum_x,sum_y);  
   var N=fenshu(sum_x,sum_y,max_x);  
   return a+"/"+b+"+"+c+"/"+d+"="+N;  
   break;  
   }  
   case "-":{  
   var sum_x=(a*d)-(b*c);  
    while (sum_x<0) {  
     var a = GetRandomNum(1,30);   
     var b = GetRandomNum(1,30);  
     var c = GetRandomNum(1,30);   
     var d = GetRandomNum(1,30);  
     var sum_x=(a*d)-(b*c);  
    }  
   var sum_y=b*d;  
   max_x=max_num(sum_x,sum_y);  
   max_y=max_num(sum_x,sum_y);  
   var N=fenshu(sum_x,sum_y,max_x);  
   return a+"/"+b+"-"+c+"/"+d+"="+N;  
   break;  
   }  
   case "*":{  
   var sum_x=a*c;  
   var sum_y=b*d;  
   max_x=max_num(sum_x,sum_y);  
   max_y=max_num(sum_x,sum_y);  
   var N=fenshu(sum_x,sum_y,max_x);  
   return a+"/"+b+"*"+c+"/"+d+"="+N;  
   break;  
   }  
   case "/":{  
   var sum_x=a*d;  
   var sum_y=b*c;  
   max_x=max_num(sum_x,sum_y);  
   max_y=max_num(sum_x,sum_y);  
   var N=fenshu(sum_x,sum_y,max_x);  
   return a+"/"+b+"÷"+c+"/"+d+"="+N;  
   break;  
   }  
  }  
}  
function count(a,b){  
  var Arr = ["+","-","*","/"];   
  var n = GetRandomNum(0,3);  
  switch(Arr[n]){  
   case "+":{  
   var sum=a+b;  
   return a+"+"+b+"="+sum;  
   break;  
   }  
   case "-":{  
   var sum=a-b;  
   while(sum<0){  
    var a = GetRandomNum(1,30);  
    var b = GetRandomNum(1,30);  
    var sum=a-b;  
   }  
   return a+"-"+b+"="+sum;  
   break;  
   }  
   case "*":{  
   var sum=a*b;  
   return a+"*"+b+"="+sum;  
   break;  
   }  
   case "/":{  
   var sum=a/b;  
   while(a%b!==0){  
    var max_x=max_num(a,b);  
    var N=fenshu(a,b,max_x);  
    return a+"÷"+b+"="+N;  
   }  
   return a+"÷"+b+"="+sum;  
   break;  
   }  
  }  
}  
function pl_f() {  
 var son_a = GetRandomNum(1,30);   
 var par_b = GetRandomNum(1,30);  
 var son_c = GetRandomNum(1,30);   
 var par_d = GetRandomNum(1,30);  
 var suma=f_count(son_a,par_b,son_c,par_d);  
 return suma;  
}  
function pl() {  
  var a = GetRandomNum(1,30);   
  var b = GetRandomNum(1,30);  
  var sumb=count(a,b);  
  return sumb;  
}  
  
function play_all() {  
  // var flag = 0;  
  var a = document.getElementById("tp").value;  
  var inta = parseInt(a);  
  for (i = 1; i <= inta; i++) {  
   var a = GetRandomNum(0,1);  
   document.getElementById("text").innerHTML+=("<br>"+"第"+i+"题:");  
   switch (a) {  
    case 0:  
     var A=pl();  
     var strs = A.split("=");  
     document.getElementById("text").innerHTML+=(strs[0]+"="+"<input>"+"<button>提交</button>"+"<br>");  
     document.getElementById("text2").innerHTML+=("<br>"+"第"+i+"题答案:"+"<span>"+strs[1]+"</span>"+"<br>");  
     break;  
    case 1:  
     var B=pl_f();  
     var strs = B.split("=");  
     document.getElementById("text").innerHTML+=(strs[0]+"="+"<input>"+"<button>提交</button>"+"<br>");  
     document.getElementById("text2").innerHTML+=("<br>"+"第"+i+"题答案:"+"<span>"+strs[1]+"</sapn>"+"<br>");  
     break;  
   }  
  }  
}  

  前台界面就用bootstrap框架简单搭建了一个,最终的界面是这样的:

  

    测试了最大的数目前是2000,超过这个的话浏览器容易崩溃,多是js不大适合直接拿来作逻辑运算吧。仍是有待提高。会在后续进一步更新

七、实际耗时

PSP2.1

Personal Software Process Stages

预估耗时(min)

实际耗时(min)

Planning

计划

30

25

Estimate

估计这个任务须要多少时间

1200

1400

Development

开发

600

700

Analysis

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

120

120

Design Spec

生成设计文档

30

20

Design Review

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

10

15

Coding Standard

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

10

20

Design

具体设计

30

40

Coding

具体编码

120

200

Code Review

代码复审

30

20

Test

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

120

60

Reporting

报告

30

30

Test Report

测试报告

10

10

Size Measurement

计算工做量

10

10

Postmortem & Process Improvement Plan

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

30

30

 

合计

 1200

 1300(目前)
相关文章
相关标签/搜索