结对项目

一、【Coding.Net项目地址】https://git.coding.net/verde/Pair_Work.git

二、【对接口进行的设计】

看教科书和其它资料中关于Information Hiding, Interface Design, Loose Coupling的章节,说明你们在结对编程中是如何利用这些方法对接口进行设计的。

如下图SRC的目录结构:

如图一共有以下四个包:

  •  Information Hiding,Interface Design,Loose Coupling的实现:

 

1.信息隐藏:  

 

   项目中多个实体类封装数据,例如:Users类,Lists类,由于经过封装,信息访问只可通过get,set方法,对项目操作者是不可见的,实现了信息隐藏。主要体现在以下两方面:

 

       用户类封装了用户的个人信息,限定范围private直接联系到数据库。

 

       题目,结果,和算式分别在实体类Lists中建立三个LinkedList链表,expArr,resArr,addArr,在前台获取算式各种参数时只需要调用linkedList类的各种方法,例     如:get,set,get(index)操作简单,暴露信息少。

 

2.接口设计

 

     当初有了解过一些有关于框架的知识,所以这次项目结构设计也借鉴了一些接口思想:

 

           1.只有一个类(Function类)与前台交互使用实现接口,前台信息接受方便、只需创建一个对象,同时也保证了代码干净整洁。

 

           2.项目使用了面向对象思想,避免在jsp中加入过多的java代码,而是把各种功能写在类中的各种方法中,在jsp页面中直接调用方法。

 

           4.Tests类在后台功能实现的过程中边写代码边测试,在于前台交接之前一直使用junit代替前台传入的参数,这点使我们节省了时间。

 

2.松耦合

 

     java类的原则:“高内聚,低耦合”:每个类中功能健全,类与类间尽量减少关联

 

           生成式子等操作直接引用了上次作业的Main类的一些代码,DBUtil只与UsersOperation类有关;Operation包中getResult类、getExpression类,ToolDemo类只与Function类有关;Tests类只用于测试Function的方法,实体类只实现封装,只由Function类和jsp页面调用,类与类之间划归清晰,面向对象编程也大大实现了代码的重用性。

 

    

 

三、【计算模块接口的设计与实现过程】

           设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?说明你的算法的关键(不必列出源代码),以及独到之处。

(图片较小,右击图像 ---> 查看图像即可看大图):

 

 

 

四、【计算模块接口部分的性能改进】

          记录在改进计算模块性能上所花费的时间,描述你改进的思路,并展示一张性能分析图,并展示你程序中消耗最大的函数。

 

消耗最大的函数:

复制代码
      /** 得到算式,得到答案* 这个方法是把所有的整个式子,算式和结果分别放入三个ArrayList中* 新建树并产生用户获取到数目的算式,分别存放List中* 实现了逐个遍历* *///获取三个listpublic LinkedList<String> createList(int num,int symNum){ GetExpression bTree; for(int i=0;i<num;i++){ //构造树 bTree = new GetExpression(symNum); bTree.buildBTree(); //设置list类里面的expression,result String expression = bTree.toString(); String result = bTree.CalAndVal(); Lists l = new Lists(expression,result); //把expression和result获取出来  Lists.expArr.add(expression); Lists.resArr.add(result); Lists.addArr.add(l.toString()); } return Lists.expArr; }
复制代码

 

 

 

 

 

五、【计算模块部分单元测试展示】

  展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路。并将单元测试得到的测试覆盖率截图,发表在博客中。只需要测试命令行部分,且该部分覆盖率到90%以上,否则单元测试部分视作无效

复制代码
 1 package Function;
 2 
 3 import org.junit.Test;  4  5 import Entity.Lists;  6  7 public class Tests {  8  9  @Test 10 public void getList(){ 11 Function fun = new Function(); 12 fun.setSybNum(3); 13 Lists list = new Lists(); 14 fun.createList(100,fun.getSybNum()); 15  System.out.println(list.getExpArr()); 16  }//由于没有和前台交互,这时候随便传了几个参数 17 18  @Test 19 public void getFile(){ 20 Function fun = new Function(); 21 fun.ReadFile("C://Users//apple//Desktop//ttt.txt","C://Users//apple//Desktop//www.txt");; 22  }//获取文件 23 }
复制代码

六、【计算模块部分异常处理说明】

 在博客中详细介绍每种异常的设计目标。每种异常都要选择一个单元测试样例发布在博客中,并指明错误对应的场景

java异常主要分为以下这些种类,比较常见的有空指针异常,溢出异常,找不到类,找不到文件

由于我们的项目包含数据库,相对应的数据库操作的异常处理也很多.


 

 

复制代码
   /*
*增加用户
*/
@Testpublic void insertUsers(String nickname ,String password,String email) { Users users = new Users(); try { Class.forName(DRIVER); connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); String sql = "INSERT INTO db_user(nickname,password,email) VALUE(?,?,?)"; ps = connection.prepareStatement(sql); ps.setString(1, nickname); ps.setString(2, password); ps.setString(3, email); ps.execute(); } catch (Exception e) { System.out.println(e.getStackTrace()); } finally { try { connection.close(); ps.close(); } catch (SQLException e) { System.out.println(e.getStackTrace()); } } }
复制代码
复制代码
     /** 读取文件* */@Testpublic void ReadFile(String fromUrl,String toUrl){ try { BufferedWriter bw = new BufferedWriter(new FileWriter(toUrl)); BufferedReader br = new BufferedReader(new FileReader(fromUrl)); String s = null; for(int i=1;i<=100;i++){ s = String.valueOf(Math.random()); bw.write(s); bw.newLine(); } bw.flush(); while((s=br.readLine())!=null){ System.out.println((String)s); System.out.println("下一行"); } bw.close(); br.close(); } catch (IOException e) { e.printStackTrace(); }
复制代码
复制代码
    /*
*查询所有的用户
*/
    @Testpublic List<Users> queryAllUsers() {Connection connection = null;PreparedStatement ps = null; ResultSet rs = null; List<Users> list = new ArrayList<Users>(); try { Class.forName(DRIVER); connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); String sql = "SELECT * FROM db_user"; ps = connection.prepareStatement(sql); rs = ps.executeQuery(); while(rs.next()){ Users users = new Users(); users.setId(rs.getInt("id")); users.setNickName(rs.getString("nickname")); users.setPassword(rs.getString("password")); users.setEmail(rs.getString("email")); list.add(users); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }finally { try { if (rs != null) { rs.close(); } if (ps != null) { ps.close(); } if (connection != null) { connection.close(); } } catch (SQLException e){ e.printStackTrace(); } } return list; }
复制代码

 

七、【界面模块的详细设计过程】

  在博客中详细介绍界面模块是如何设计的,并写一些必要的代码说明解释实现过程。(5')

  我们用的是网页端来展示界面模块,所以主要是html,css,js来实现的界面模块设计,主要分为注册页面、登录页、主页面、做题页面、错题页面,

登录页

主页面

 

 

  做题页面

八、【界面模块与计算模块的对接】
  最为核心的做题页面采用的是jsp代码由主页面homePage.jsp传参到做题页面doYourAnswer.jsp,然后用户输入答案后,通过循环将answer进行判断,判断结束后,记录错题的题号,并通过URL传值进入错题页wrongQuestion.jsp,部分代码如下:

 <form action="doYourAnswer.jsp" method="post"><table><tr><td><input type="text" name="myAnswer"/></td><td><input type="submit" value = "提交"></td><td><%String myAnswer = request.getParameter("myAnswer");String answer = Lists.resArr.get(num);if (myAnswer == answer){out.print(num + "right");}else{out.print(num + "wrong");QuesNum[wrongNum]=num;wrongNum++;}}%></td></tr></table></form><a href="wrongQuestion.jsp?<%for ( int i=0 ;i<=wrongNum;i++ ) {%>re[]=<%=QuesNum[i] %><%}%>&&wrongNum=<%=wrongNum %>">查看错题</a>

九、描述结对的过程

  结对过程:我的队友是杨帆,十分感谢他在本次作业中的帮助,我们两人之前都是主学后台,由于我对前台略懂所以我的代码任务主要是负责页面,另外就是Jsp的页面完成前后台对接,对于用户管理的数据库操作和Java工具类的实现是队友协助完成的。做这个项目时,出现了不少Bug,

  结对照片:

十、【结对编程的优点和缺点】

看教科书和其它参考书,网站中关于结对编程的章节,例如:

http://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html

说明结对编程的优点和缺点。同时指出结对的每一个人的优点和缺点在哪里 (要列出至少三个优点和一个缺点)。(5')

       结对编程的优点:

       1.  取长补短,也许很多时候一个人想不到的东西结合两人的想法也许就能产生非凡的效果

    2.相互学习的机会,使两人共同进步,能促进同学间友好交流

       3.体验合作的快乐

       缺点:有时意见可能会不统一

 

       我的优缺点:

       优点:比较有耐心,坚持做好一件事,善于搜索信息,比较细心 。  

       缺点:有时不断坚持处理事情会稍不灵活。

 

       队友(杨帆)的优缺点:

       优点:认真自信,富有责任心,吃苦耐闹,处理事情比较灵活。

       缺点:比较。。。呃呃呃,感觉没啥毛病,大家一起合作,虽然有时会有一种修复Bug的无力感,但是至少谁也没有相互抱怨过,都是尽自己最大可能去互相帮助。

    

      

十一、【实际花费的时间】

PSP任务内容计划共完成需要的时间(min)实际完成需要的时间(min)
Planning计划 8 10
Estimate估计每个阶段的时间成本,并规划大致工作步骤 8 10
Development开发30004000
 Analysis 需求分析 (包括学习新技术) 60 60
 Design Spec 生成设计文档 40 50
 Design Review 设计复审 (和同事审核设计文档) 40 45
 Coding Standard 代码规范 (为目前的开发制定合适的规 范) 30 40
 Design 具体设计 120 100
 Coding 具体编码 180 200
 Code Review 代码复审 150 150
 Test 测试(自我测试,修改代码,提交修改) 90 90
Reporting报告 200 230
Test Report 测试报告 120 150
Size Measurement 计算工作量 20 20
 Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 60 60

 

转载于:https://www.cnblogs.com/liuz100/p/8769857.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国家开放大学形成性考核 统一资料 参考试题

试卷代号&#xff1a;1174 水工钢筋混凝土结构&#xff08;本&#xff09;参考试题 一、选择题&#xff08;每小题2分&#xff0c;共20分&#xff0c;在所列备选项中&#xff0c;选1项正确的或最好的作为答案&#xff0c;将选项号填入各题的括号中&#xff09; 1.钢筋混凝土结…

两个向量之间的夹角公式_向量的内积

向量的内积也叫向量的数量积、点积。我们定义两个向量的内积是一个数: 其中 是这两个向量的夹角。 对于向量的内积,最重要的一个结论是: 定理1:两向量垂直的充分必要条件是它们的内积为 0,即 这个定理我们几乎不用证明了,因为从定义来看,如果两个向量都不零向量,则只能…

springcloud 入门 10 (eureka高可用)

eureka高可用: 说白了&#xff0c;就是加一个实例作为原实例的备份&#xff0c;然后一起对外提供服务。这样可以保证在一台机器宕机的时候&#xff0c;整个系统不会死掉。保证其继续对外服务。 eureka的集群化&#xff1a; 服务注册中心Eureka Server&#xff0c;是一个实例&am…

为什么REST如此重要

这篇文章致力于REST&#xff0c;一种塑造Web服务的体系结构风格&#xff0c;以及IT历史上最容易被误解的概念。 这篇文章针对的是那些正在设计Web服务api的人&#xff0c;他们并未完全了解REST的实际含义。 我想给你个主意。 这篇文章也发给了那些想知道REST意味着什么的人&…

你真的懂js获取可视区宽高吗

可能你会觉得获取可视区宽高不是很简单吗 原生js获取高度不就是就window.innerHeight一句话的事&#xff0c;可是真的这么简单吗 来看个测试页面,如果页面带有横向纵向的滚动条&#xff0c;我们打印出各个高度进行查看对比 顺便你也可以看看document.body和document.documentEl…

詹金斯的Maven报告

代码质量是一个敏感的话题。 它会影响您的维护成本以及客户满意度。 更不用说您的开发人员使用代码的动力。 谁想要修复难看的代码&#xff0c;对吗&#xff1f; 讨论代码质量总是需要事实和数字&#xff01; 因此&#xff0c;这是一个简短的教程&#xff0c;介绍如何创建一些…

python实现矩阵叉乘_矩阵乘法的纯Python实现 | 离开Python库!!

点击关注我哦一篇文章带你了解矩阵乘法的纯Python实现在《这篇文章》中&#xff0c;我们有简单提到“矩阵乘法”的相关知识&#xff0c;如果你不记得了&#xff0c;可以复习一下这张图片。想起来了没&#xff1f;本篇文章将深入探讨在没有机器学习库的情况下如何从零实现矩阵乘…

Github Actions:再次改变软件开发

本文转自 FEPulse 公众号&#xff08;微信搜索 FEPulse&#xff0c;精选国内外最新前端资讯&#xff0c;为你把握前端脉搏&#xff09;。 Github Actions 是 GitHub Universe 大会上发布的&#xff0c;被 Github 主管 Sam Lambert 称为“再次改变软件开发”的一款重磅功能&…

为别人软件加入广告或者密码(特别思路)

洪雨的的这款软件比较奇特&#xff0c;是忽然想到一个思路&#xff0c;然后实现了一下。 exe文件都有一个很有趣的地方&#xff0c;只要内部完整&#xff0c;就可以运行。比如一个exe文件&#xff0c;我们运行的时候&#xff0c;电脑知道他是exe所以可以直接运行。假如洪雨将它…

Django 错误跳转页面

原网站&#xff1a;https://blog.csdn.net/goupper1991/article/details/50736826 django404&#xff0c;500错误自定义页面&#xff1a; 将 改为 1.修改settings文件DEBUG FalseALLOWED_HOSTS [127.0.0.1, localhost]或者ALLOWED_HOSTS [*]2.配置urls文件from django.conf.…

ElasticSearch-Hadoop:从Hadoop到ElasticSearch的产品视图计数索引和客户顶部搜索查询...

这篇文章涵盖了如何使用ElasticSearch-Hadoop从Hadoop系统读取数据并在ElasticSearch中对其进行索引。 它涵盖的功能是在最近n天中为每个客户的产品浏览量计数和热门搜索查询编制索引。 分析的数据可以进一步在网站上使用&#xff0c;以显示最近浏览过的客户&#xff0c;产品浏…

伸缩轨道_深度解析——伸缩喷漆房为什么这么受欢迎!

伸缩式喷漆房是一种环保喷漆设备&#xff0c;它可以在使用时&#xff0c;自动展开形成封闭或半封闭的环保喷漆房&#xff0c;不使用时收缩合拢到一处的特殊环保喷漆房设备&#xff0c;由于伸缩式喷漆房外观大方、简单实用且投资费用低&#xff0c;它在现代涂装应用中越发广泛。…

snippet,让你编码效率翻倍

为什么谈到Snippet 今天下午在用vscode做小程序的时候&#xff0c;发现很不方便&#xff0c;因为商店里提供的代码片段极为有限&#xff0c;而且平时几乎每天都需要用到代码片段&#xff0c;所以就在思考他们是怎么做到给别人提供代码的&#xff0c;我可以自定义代码片段吗。然…

day12-HTML基础之DOM操作

DOM&#xff08;Document Object Model 文档对象模型&#xff09; 一个web页面的展示&#xff0c;是由html标签组合成的一个页面&#xff0c;dom对象实际就是将html标签转换成了一个文档对象。可以通过dom对象中js提供的方法&#xff0c;找到html的各个标签。通过找到标签就可以…

小程序源码 租房管理系统_如何通过租房小程序开发快速引流

租房市场在整个房产市场占据了极大一部分市场份额&#xff0c;而随着租售同权政策的提出、房价的不断提升&#xff0c;租房市场份额将进一步扩大。合肥小程序开发智速新媒体公司传统的租房方式不管是出租方还是租房客户&#xff0c;彼此之间的消息不对等、沟通困难等因素导致房…

REST 101开发人员专用

本地代码执行 诸如C之类的高级语言中的函数将被汇编为Assembly中的过程 。 它们增加了一个间接级别&#xff0c;使我们不必考虑内存地址。 诸如Java之类的面向对象语言中的方法和多态性增加了另一种间接性 &#xff0c;使我们不必考虑一组相似功能的特定变体。 尽管有这些间…

一个基于Bmob的OPPO锁屏壁纸小程序,写过之后发现...好像没什么卵用...一脸懵逼

小程序之前写的&#xff0c;也就前段时间&#xff0c;毛毛糙糙的写了第一版... 因为使用OPPO手机&#xff0c;所以有个锁屏杂志的东西&#xff0c;里面的图片每天都是由OPPO官方的人进行精选然后推送给用户的&#xff0c;图片菲菲菲菲菲常漂亮&#xff0c;看到网上很多人提取不…

SQLAlchemy 操作数据库

SQLAlchemy 操作数据库 SQLAlchemy为Python提供了不同数据库的统一接口&#xff0c;采用ORM的方式操作数据库&#xff0c;简洁优雅 一、安装 直接通过pip安装即可 pip install sqlalchemy 二、连接数据库 这里用小巧的sqlite来做测试 from sqlalchemy import create_engine# 创…

贝塞尔曲线理解与应用

贝塞尔曲线并非是由贝塞尔发明的&#xff0c;但是是因为他把这个东西应用到当时的汽车领域而闻名的&#xff0c;所以取名为贝塞尔曲线。 在我看来&#xff0c;用简单的话来理解一下贝塞尔曲线&#xff0c;他是通过少量几个点&#xff0c;使用一套公式&#xff0c;生成一条平滑曲…

云服务器布置_【阿里云ECS】(一)云服务器上安装RStudio-server

【阿里云ECS】&#xff08;一&#xff09;云服务器上安装RStudio-server最近注册了阿里云个人版&#xff0c;打算研究研究shiny部署问题。进了阿里云ECS因为是Ubuntu16.04的对于安装R和RStudio还是要学习实践一下的。第一步&#xff0c;安装R语言。我们使用apt的方式进行安装,步…