软件工程 结对编程1

四则运算题目生成程序(Gui)

*这次博客的一个小目录

1.我和我的小伙伴的学号

2.项目开发的coding.net 地址

3.项目完成的五个部分

a.需求分析  b.程序设计  c.代码展示  d.程序运行  e.小结感受

4.描述结对的过程,提供非摆拍的两人在讨论、细化和编程时的结对照片

5.展示PSP

6.思考


1.我和我的小伙伴的学号

魏辉 201421123029   博客地址: https://home.cnblogs.com/u/weihui-01/

林青 201421123047   博客地址: http://www.cnblogs.com/lqwe/

2.项目开发的coding.net 地址

我的coding.net:   https://git.coding.net/weh/we.git  此处由于一直在更新代码,所以已最后一次上传为该题的最终代码。

Git使用教程:http://www.cnblogs.com/hebau-may/p/6382743.html

3.项目具体完成过程

a.需求分析:针对选择的2-3个新开发功能做分析。

a.1 http://blog.csdn.net/u010258605/article/details/46307425  通过搜索获得控制台界面与Gui相比的优缺点。

a.2 个人的一个深切体会。因为学习了linux系统,在使用的过程中一般都是基于命令行的操作,这样一来的话对于我而言就觉得上手比较慢,界面不够友好。而对于常用的windows系统,其具有良好的、友好的Gui界面,使用起来就更加的流畅。

a.3 对身边的一些同学进行了参访,采访了13人,大家都一致觉得Gui界面更适合小学生使用,计时有利于让使用者时刻对自己的速度有所把握,从而能够不断的进步。

a.4 在网上查找了一些关于小学生使用的App。都是基于Gui界面,这更加的增加了我的信心。

a.5 计时有利于形成一种竞争的机制,与训练的目的不谋而合。

b.程序设计:针对选择的2-3个新开发功能做设计,使用思维导图。

说明:这个思维导读是和我的小伙伴一起画的。用的是微软的visio软件。这个图从整体上展示了我们做的这个系统的界面以及功能。首先是登陆界面,该界面有主要的三个选择框:低年级版、高年级版、语言选择。以及几个小的辅助按键:左上的随机四则运算系统提示、左下的说明、右下的退出。下一个界面是由选择决定的,如果选择语言选择,则进入语言选择界面。会有三种语言供使用者进行选择:中文简体、中文繁体、英文。另一种选择是低年级版和高年级版的选择,进入低年级版或者是高年级版本后将出现答题界面。答题界面则实现了题目数量选择、题目总量统计、题目正错误判断、题目正错误数量统计、题目使用时间统计、每道题目使用时间限制等。

c.代码展示:展示每个功能的核心代码。

c.1 主界面

private void initialize() {        frame = new JFrame();frame.setTitle("随机四则运算系统");frame.setBounds(100, 100, 339, 390);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JButton button = new JButton("低年级");button.setFont(new Font("宋体", Font.PLAIN, 26));        JButton button_1 = new JButton("高年级");button_1.setFont(new Font("宋体", Font.PLAIN, 26));    JButton button_2 = new JButton("选语言");button_2.setFont(new Font("宋体", Font.PLAIN, 26));    JButton button_3 = new JButton("说明");button_3.setFont(new Font("宋体", Font.PLAIN, 18));    JButton button_4 = new JButton("退出");button_4.setFont(new Font("宋体", Font.PLAIN, 18));GroupLayout groupLayout = new GroupLayout(frame.getContentPane());groupLayout.setHorizontalGroup(groupLayout.createParallelGroup(Alignment.TRAILING).addGroup(groupLayout.createSequentialGroup().addGroup(groupLayout.createParallelGroup(Alignment.LEADING).addGroup(groupLayout.createSequentialGroup().addGap(48).addComponent(button_3, GroupLayout.PREFERRED_SIZE, 78, GroupLayout.PREFERRED_SIZE).addGap(55).addComponent(button_4, GroupLayout.PREFERRED_SIZE, 80, GroupLayout.PREFERRED_SIZE)).addGroup(groupLayout.createSequentialGroup().addGap(102).addGroup(groupLayout.createParallelGroup(Alignment.LEADING).addComponent(button_2).addComponent(button_1).addComponent(button)))).addContainerGap(72, Short.MAX_VALUE)));groupLayout.setVerticalGroup(groupLayout.createParallelGroup(Alignment.TRAILING).addGroup(groupLayout.createSequentialGroup().addContainerGap(75, Short.MAX_VALUE).addComponent(button).addGap(37).addComponent(button_1, GroupLayout.PREFERRED_SIZE, 33, GroupLayout.PREFERRED_SIZE).addGap(36).addComponent(button_2, GroupLayout.PREFERRED_SIZE, 33, GroupLayout.PREFERRED_SIZE).addGap(50).addGroup(groupLayout.createParallelGroup(Alignment.LEADING).addComponent(button_4, GroupLayout.PREFERRED_SIZE, 29, GroupLayout.PREFERRED_SIZE).addComponent(button_3)).addGap(30)));        button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0) {frame.setVisible(false);new Dnj();}});       button_1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0) {frame.setVisible(false);new Gnj();}});button_2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0) {frame.setVisible(false);new Yyxz();}});        button_3.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0) {new Sm();}});        button_4.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0) {System.exit(0);}});       Toolkit kit = Toolkit.getDefaultToolkit();        Dimension screenSize = kit.getScreenSize();        int w1 = screenSize.width;        int h = screenSize.height;        int x1 = w1/3;        int y1 = h/5;    frame.setLocation(x1,y1);frame.getContentPane().setLayout(groupLayout);frame.setVisible(true);//设置窗口的可见性frame.setResizable(false);//设置窗口大小的不可改变性
    }
}

说明:此段代码是系统的主界面代码,她主要对界面进行布局,实现友好的界面设置。在此处我设置了三个中间按钮分别是低年级、高年级、语言选择。在此三个主要按钮的基础上又加入了左上的进入系统提示语言、下面的说明和退出。

c.2 计时功能实现

public class Dnj {float sum;int dadui=0;int dacuo=0;int tishu;int noanswer=0;int summary=0;String parten = "0.00";DecimalFormat decimal = new DecimalFormat(parten);String str;static Timer timer = null; static SimpleDateFormat df=new SimpleDateFormat("mm:ss");     long starttime;long finishtime;long duration;long allduration;

说明:此处实现从用户输入答题数目后按下开始键开始计时,一直到答题结束、或者答题意外终止、超出预设的每题答题时间。(部分代码没有展示)


c.3 多种语言输出实现

public class Yyxz {private JFrame frame;public static void main(String[] args) {EventQueue.invokeLater(new Runnable() {public void run() {try {Yyxz window = new Yyxz();window.frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}public Yyxz() {initialize();}private void initialize() {//设置界面的布局frame = new JFrame();frame.setTitle("语言选择");frame.setBounds(100, 100, 325, 397);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JButton btnNewButton = new JButton("简体中文");btnNewButton.setFont(new Font("宋体", Font.PLAIN, 22));    JButton button = new JButton("繁体中文");button.setFont(new Font("宋体", Font.PLAIN, 22));        JButton button_1 = new JButton("英文");button_1.setFont(new Font("宋体", Font.PLAIN, 22));        JButton btnNewButton_1 = new JButton("退出");btnNewButton_1.setFont(new Font("宋体", Font.PLAIN, 18));GroupLayout groupLayout = new GroupLayout(frame.getContentPane());groupLayout.setHorizontalGroup(groupLayout.createParallelGroup(Alignment.LEADING).addGroup(groupLayout.createSequentialGroup().addContainerGap(57, Short.MAX_VALUE).addGroup(groupLayout.createParallelGroup(Alignment.LEADING, false).addGroup(groupLayout.createSequentialGroup().addPreferredGap(ComponentPlacement.RELATED).addComponent(btnNewButton, GroupLayout.DEFAULT_SIZE, 194, Short.MAX_VALUE)).addComponent(button, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(button_1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addGap(68)).addGroup(groupLayout.createSequentialGroup().addGap(118).addComponent(btnNewButton_1, GroupLayout.PREFERRED_SIZE, 82, GroupLayout.PREFERRED_SIZE).addContainerGap(119, Short.MAX_VALUE)));groupLayout.setVerticalGroup(groupLayout.createParallelGroup(Alignment.LEADING).addGroup(groupLayout.createSequentialGroup().addGap(42).addComponent(btnNewButton).addGap(57).addComponent(button, GroupLayout.PREFERRED_SIZE, 35, GroupLayout.PREFERRED_SIZE).addGap(57).addComponent(button_1, GroupLayout.PREFERRED_SIZE, 35, GroupLayout.PREFERRED_SIZE).addPreferredGap(ComponentPlacement.RELATED, 53, Short.MAX_VALUE).addComponent(btnNewButton_1).addGap(26)));        btnNewButton_1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {frame.setVisible(false);new Jm();}});btnNewButton.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {frame.setVisible(false);new Jm();}            });        button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {frame.setVisible(false);new Jm1();}            });button_1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {frame.setVisible(false);new Jm2();}            });frame.getContentPane().setLayout(groupLayout);//设置窗口的位置Toolkit kit = Toolkit.getDefaultToolkit();        Dimension screenSize = kit.getScreenSize();        int w1 = screenSize.width;        int h = screenSize.height;        int x1 = w1/3;        int y1 = h/5;    frame.setLocation(x1,y1);frame.setVisible(true);//设置窗口的可见性frame.setResizable(false);//设置窗口大小的不可变性
    }
}

说明:关于该问题的解决我考虑了很久,最终是采用了最直接也是最便捷最好操作的方式对该问题进行了解决。即是建立一个语言选择界面,而后通过对界面的一个简单迭代完成对语言的选择。关于此问题我与队友进行了很激烈的讨论,而后也查阅了一些材料。虽然有些做法代码量会减少很多,但是我觉得我这样简单的处理办法对于下一步的改进更加有利。比如针对于小学生的四则运算,其实我们应该在具体做的时候把它分成多个年级去做,这是其中一个维度。另一方面也应该考虑专项练习,比如关于整数运算的练习、关于分数运算的练习、关于整数和分数混合的练习,这是另外一个维度。不过呢,这只是一个小范围内的想法,如果真的去要就他的可行性,还是需要做功课,去调研的。

 

d.程序运行:程序运行及每个功能的使用截图。

d.1 主界面展示

说明:这里主要是一个主界面的展示。其中包括主界面的主要按钮和辅助按钮的功能实现。

d.2 低年级版

说明:这是一个初级版的运行界面,初级版主要是两个数的加减乘除运算。并且当题目完成时会输出消息框。

d.3  高年级版

说明:这是一个高级版的运行界面,高级版主要是三个数的加减乘除运算。以及计时功能的体现。

d.4 语言选择

说明:这是语言选择功能的体现,用户可以根据需要选择自己熟悉的语言。语言包括:简体中文、繁体中文、英文。

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

e.1 首先这是一个新的模式,我在与队友进行正式的工作前首先看了书本的相关内容,而后查阅网络上的关于合作的正确姿势的文章。读后开始行动。如此有了一定理论的支撑,真正的落实起来便容易了很多。

e.2 实践起来的第一步是寻找队友,这次结对作业我们大部分同学是找了自己的舍友作为结对的对象。当然我也在其列。选择的队友比较熟悉,这对于后面工作的具体开展打下了良好的铺垫。

e.3 结对编程的两个队员虽无优劣但有分工。结对编程的过程中,两个人一定要有一个领航的,这个人不一定是各方面都特别优秀的,但是必须要认真负责,有计划,能判断。本次的结对作业,由于对队友的了解,他是一个踏实认真,但是对于具体方向、切实计划把握不够的同学。所以由我来作为领航员。领航的过程中,收获很多。其中我体会最深的就是:责任。作为一个领航者,责任很重要。两个人也是一个小的团队,小的集体。丝毫不懈怠才能带着团队走向胜利。

e.4 具体的代码编写过程中自然是碰到了一些问题的,比如:两个人写代码的日常习惯不太一致,这就需要协调。找到两个人都能接受的一种方式去做。这样才能达到事半功倍的效果。此外便是碰到问题的时候要及时查找资料,自学,和队友讨论进行解决。

e.5 说了如此多,那我来回答一下结对编程真的能带来1+1>2的效果吗? 这个问题我觉得不能片面的理解。首先对于一个初次结对的我来说,我觉得如果不结队我一个人也能完成任务,甚至能够更早更快的完成。但是我细致的思考后觉得,结对编程潜移默化中让我学到了很多的东西。首先当然是友谊,与队友的合作必定会增进友谊。再者合作的过程也是一个自我提高的过程,由于合作我对自己的代码可读性提出了更高的要求,这样我能更快的进步。深层次来说,结对编程是未来工作的一个缩影,通过不断的磨合我相信我能不断的提高自己的结对编程意识、合作理念。从而达到1+1>2.

4.描述结对的过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。

结对过程:由于在一个宿舍,所以合作起来比较方便。我们在读完题后就制定了完成题目的计划。具体操作中互相配合,一个人负责编写的时候,另一个同学就负责旁查看,如发现错误便及时提醒更正。同时辅助的同学负责督促在写的同学尽快完成,不可懈怠,并及时查找需要的资料。

5.展示PSP

分析:经过第一作业,我对于psp有了更加深刻的体会和认识,它不仅是一个时间的记录、是自我完成情况与预期比较的直观表格,更是督促我在有限的时间里更快的完成任务的一个闹钟。此处估计大体上与实际情况出入不大,具体编程设计方面用了预期的更多的时间。这一点依旧是对于代码的熟练程度把握不够,对结对编程可能会使编程时间延长的预估不够的结果。以后课余时间会多多练习,争取尽快提高。


6.思考

6.1用“汉堡包”的方式来评价一下我的小伙伴。第一层(先来一片面包):由于在同一个宿舍生活了很久,彼此都比较熟悉,一些学习方法基本上都是互相借鉴的。所以在对于具体的代码编写遇到的问题上可以达成一致的解决方案。而且我的队友比较好相处,在具体的结对工作中相对很轻松。来点小提醒(再把肉放上):队友的执行力不强,有时候做一会儿就不能继续坚持了,碰到困难的时候也经常会选则放弃,而不是努力去攻破。最后再来一些建议(然后再来一片面包):希望队友在以后的学习生活中遇到困难,不要退缩,勇往直前,只要你努力一定都是可以解决的。

6.2 尽吾志也而不能至者,可以无悔矣。学习的路上自当不断努力,争取有最大的进步;竭尽全力,便不后悔。

转载于:https://www.cnblogs.com/weihui-01/p/6550945.html

软件工程 结对编程1相关推荐

  1. 现代软件工程 结对编程 (II) 电梯调度

    现代软件工程 结对编程 (II) 电梯调度 Pair Project II: Elevator Scheduler <现代软件工程> 的结对编程作业,  作者: 邹欣 怎样设计API?  ...

  2. 现代软件工程 结对编程 (II) 电梯调度 算法和测试框架

    [很多同学完成了上一个结对编程项目后,  很想知道下一个项目是什么, 我们这次要练习如何设计 接口, 测试框架,  和算法. ] [博客园的朋友们也可以试一试怎么高效地解决这个问题] 现代软件工程系列 ...

  3. 现代软件工程 结对编程 (I) 三维棋类游戏

    Pair Project I 3D Board Game Turn a usual 2D board game into 3D by transferring  board and game rule ...

  4. 清华大学 现代软件工程 结对编程项目 (一)

    Pair Project I:  Casual Game ++ Improve an existing casual game with incremental innovation. Skills ...

  5. 软件工程——结对编程第二次作业

    目录 1. 题目及要求 2. 功能的设计 3. GUI(图形用户界面)的设计 4. 容错机制的设计 4.1 选择运算符的容错处理 4.2 最大值和题目数输入的容错处理 4.3 打开文件容错处理 4.4 ...

  6. 【课程·研】软件工程 | 结对编程:建造金字塔(1157)

    本文专栏:研究生课程 点击查看系列文章 本文主要内容: 1.实验要求 2.待求解问题描述与数学模型 问题描述: 输入: 输出: 数据范围: 3.算法与数据结构设计 3.1 设计思路 3.2 算法流程图 ...

  7. 软件工程——结对编程第一次作业

    目录 1. 代码地址 2. C/C++代码审查表 3. 代码评价 1. 代码地址 这个项目由王宗波编写,并且已提交至Coding.net系统中,该项目实现的是霍夫曼编码(霍夫曼树)的算法,使用C/C+ ...

  8. [2022软工第三次作业]结对编程项目——最长英语单词链

    项目 内容 本作业所属课程 2022年北航敏捷软件工程教学实践 本作业要求 结对编程项目-最长英语单词链 个人课程目标 学习到软件工程的方法论,了解整个过程,并进行亲自实践 本作业在哪个具体方面帮助我 ...

  9. 罗杰软工第三次作业——结对编程

    BUAA-2023软件工程结对编程博客作业 项目 这个作业属于哪个课程 2023北航敏捷软件工程 这个作业的要求在哪里 结对项目-最长英语单词链 我在这个课程的目标是 学习并实践软件工程开发的方法论. ...

最新文章

  1. SpringBoot-JPA入门
  2. java麦克风编程,java – Synch 2类似的音频输入(一个靠文件,一个靠麦克风)
  3. 知乎热帖:Qt 这么强大为什么火不起来?
  4. html怎么设置页面自适应屏幕大小,网页设计设置页面自适应屏幕宽度
  5. 【机器学习】sklearn实现---归类为5大类
  6. 完全自主可控的安全关键领域仿真测试软件SkyEye可替代SCADE
  7. redis的内存优化【转】
  8. arm linux输出到lcd,求助 armlinux中实现lcd显示
  9. 常用命令2——VNC
  10. 在Fedora 25中更换openjdk为oracle jdk
  11. 咪咕:笔试题(20190916)
  12. 中间件——activityMQ
  13. Tableau开始试用期后的破解方法
  14. 打印机可以打印不能扫描怎么弄_打印机可以打印但是不能扫描是为何
  15. remains in conflict解决方法
  16. 苹果手机有护眼模式吗_暗黑模式=护眼模式?其实手机中的这个设置才真正护眼...
  17. USB3.2超高速协议规范
  18. java 输出乘法口诀第一列_java输出乘法口诀表
  19. ElasticSearch集成SpringBoot+实战
  20. 2022年值得购买的拍照手机推荐 这五款出片率极强

热门文章

  1. 超全面的移动端UI 设计规范整理汇总
  2. 码云的上传、下载项目
  3. 利用matlab对音频做FFT进行频谱分析
  4. CA DC SUL区别
  5. ERR_HTTP2_PROTOCOL_ERROR分析
  6. JavaSE - 数组的相关算法
  7. 缺芯导致全球汽车减产超一千万辆
  8. wps 甘特图_制作甘特图提升办公效率!亿图下的这款项目管理软件很不错
  9. 花千骨23日服务器维护,花千骨手游12日服务器数据互通维护通知
  10. C语言总结 — 知识点导论图