201421123022 王若凡        201421123026  欧阳勇

https://git.coding.net/ttoyy/sizeyunsuan-GUI.git

a.需求分析:

     这个程序做成GUI(可以是Windows PC 上的,也可以是MacLinuxweb,手机上的),成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:

  1. 记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。
  2. 有计时功能,能显示用户开始答题后的消耗时间。
  3. 界面支持中文简体/中文繁体/英语,用户可以选择一种;

b.功能设计

      1.生成自定义数目算术题。

      2.支持整数和分数的加减乘除。

      3.输入答案判断对错,错误后写出正确答案。

      4.集中收集错题。

      5.简繁中英文切换。

      6.计时功能。


 

思维导图

 


 

c.设计实现与代码展示(Viewcode

计时功能:

B0.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e) {

                tishu=Integer.parseInt(T1.getText());//获取总题数

                timer = new Timer();

                finishtime=System.currentTimeMillis();

                starttime=finishtime;

                timer.schedule(new TimerTask()

                {

                    public void run() {    

                     finishtime=System.currentTimeMillis();

                     duration=finishtime-starttime;

                     String str=df.format(new Date(duration));

                     L12.setText(str);

                     if(summary==tishu){

                     try {

                     Thread.sleep(2000000);

                } catch (InterruptedException e) {             

                e.printStackTrace();

                }

                }

               }  

              }, 1000, 1000);

            }

        });

 

 出题功能:

B1.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e) {

                noanswer=tishu-dadui-dacuo;//算出未答题数

                L9.setText("");

                L8.setText(null);

                T3.setText(null);           

               if(summary==tishu)

                {   

                   JOptionPane.showMessageDialog(null, "答题已完成,答题总题数:"+tishu+",答对题数:"+dadui+",答错题数:"+dacuo+",未答数:"+noanswer);

                   frame.setVisible(false);

                }

                //生成一个随机算术.该处代码由上次作业改成。

     if(t==1){summary++;} } });

 

 

结果判断与输出

T3.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent d) {

                if(sum1.equals(T3.getText()))

                {

                    L9.setText("Right!");

                    dadui++;

                    L10.setText(String.valueOf(dadui));   

                }

                else

                {

                    L9.setText("Error!answer is:"+sum1);

                    dacuo++;  

                    FileWriter fw = null;

                    try {

                    //如果文件存在,则追加内容;如果文件不存在,则创建文件

                    File f=new File("D:/cuoti.txt");

                    fw = new FileWriter(f, true);

                    }

                    catch (IOException e) {

                    e.printStackTrace();

                    }

                    PrintWriter pw = new PrintWriter(fw);

                    pw.println(L8.getText()+"="+T3.getText()+"    "+"正确答案:"+sum1 +'\n');

                    pw.flush();

                    try {

                    fw.flush();

                    pw.close();

                    fw.close();

                    } catch (IOException e) {

                    e.printStackTrace();

                    }

                    L11.setText(String.valueOf(dacuo));

                }

 

            }

        });

 

 

 错题统计收集

FileWriter fw = null;

                    try {

                    //如果文件存在,则追加内容;如果文件不存在,则创建文件

                    File f=new File("D:/cuoti.txt");

                    fw = new FileWriter(f, true);

                    }

                    catch (IOException e) {

                    e.printStackTrace();

                    }

                    PrintWriter pw = new PrintWriter(fw);

                    pw.println(L8.getText()+"="+T3.getText()+"    "+"正确答案:"+sum1 +'\n');

                    pw.flush();

                    try {

                    fw.flush();

                    pw.close();

                    fw.close();

                    } catch (IOException e) {

                    e.printStackTrace();

                    }  
 B6.addActionListener(new ActionListener(){//错题本打开

            public void actionPerformed(ActionEvent d) {

                try

                {

                Runtime.getRuntime().exec("notepad.exe D:/cuoti.txt");

                }

                catch(Exception e)

                {

                System.out.println(e.getMessage());

                }

              }

            });

 

 

 语言切换

 

B3.addActionListener(new ActionListener(){//简体中文

            public void actionPerformed(ActionEvent e) {

                 L1.setText("题数:");

                 L2.setText("题目:");

                 L3.setText("输入答案:");

                 L4.setText("结果:");

                 L5.setText("答对题数:");

                 L6.setText("答错题数:");

                 L7.setText("答题时间:");

                 B0.setText("开始");

                 B1.setText("下一题");

                 B6.setText("错题集");

                //B2.setText("计时");

            }

        });

        B4.addActionListener(new ActionListener(){//繁体中文

            public void actionPerformed(ActionEvent e) {

                L1.setText("題數");

                L2.setText("題目:");

                 L3.setText("輸入答案:");

                 L4.setText("結果:");

                 L5.setText("答對題數:");

                 L6.setText("答錯題數:");

                 L7.setText("答題時間:");

                 B0.setText("開始");

                 B1.setText("下一題");

                 B6.setText("錯題集");

                

            }

        });

        B5.addActionListener(new ActionListener(){//英文

            public void actionPerformed(ActionEvent e) {

                 L1.setText("Question number");

                 L2.setText("Test:");

                 L3.setText("Enter the answer:");

                 L4.setText("Result:");

                 L5.setText("Right number:");

                 L6.setText("Wrong number:");

                 L7.setText("Answer times:");

                 B0.setText("Run");

                 B1.setText("Next");

                 B6.setText("WrongTest");

            

            }

        });

 

d.测试运行

 

   点击错题集:


 

 

PSP表格

 

PSP2.1

Personal Software Process Stages

Estimated timeh

actual timeh

Planning

计划

16

17

· Estimate

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

16

17

Development

开发

8

9

· Analysis

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

1

0.5

· Design Spec

生成设计文档

0.5

0.5

· Design Review

设计复审

1

1

· Coding Standard

代码规范

0.5

0.2

· Design

具体设计

2

1.5

· Coding

具体编码

8

8

· Code Review

代码复审

0.5

0.5

· Test

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

1

1.5

Reporting

报告

1.5

1.5

·

测试报告

 

 

·

计算工作量

0.5

1

·

并提出过程改进计划

1

1


 

  

 总结:

      此次结对编程任务与王若凡合作,开始我们先对需求进行了分析,对于功能实现先定了大致方向。基础四则运算算法取用王若凡的程序,在此基础上实现各种功能。在错题集功能上耗费时间较多,想对错题集里的错题进行编号的功能还是无法完成实现。

      结对编程无疑提高了我们编程的高效性,互相监督,取长补短,如我的思路较快,而他实际操作网上查找资料能力较强。两个人的思路想法在同一时间产生碰撞,让程序更好更快地完成。一个人编写另一个人旁边护航有效地发现一些错误特别是低级错误,

如此才不会产生当局者迷而陷入死循环。


 

汉堡包点评: 

     先来一片面包: 我们有着一个共同任务,对任务有着相同思路,并且我们可以互相信赖,主要是他看上了我的壁纸~;

     铺上肉与佐料:队友在编程中充分地展示了他强大的动手能力与资料知识搜索能力,而且他是一个很耐心的人,是能带着我认真打代码的引航者。

                          不足之处在于对问题解决思路不够清晰,思路的表达条理性不够。若有一个清晰的思路加上他强大的编程动手能力,那肯定会成为无敌的编程大神。

    然后再来一片面包:方向盘与gps导航,才能走的更远才能探索未知道路;互相配合,终能完成任务,更上一层楼。

 

 

posted on 2017-03-14 11:09  ii装糊涂  阅读(286)  评论(3编辑  收藏  举报