博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
201571030334/201571030323实验三 软件工程结对项目
阅读量:5047 次
发布时间:2019-06-12

本文共 6216 字,大约阅读时间需要 20 分钟。

实验三 软件工程结对项目

Github仓库主页链接地址:https://github.com/huicunzhang/Sizeyunsuan2

结对伙伴博客地址:http://www.cnblogs.com/mumay12447/p/8715603.html

一、需求分析

1. 由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错误不计分,20道题测试结束后给出测试总分;

2. 题库文件可采用实验二的方式自动生成,也可以手工编辑生成,文本格式如下:

(3)程序为用户提供三种进阶四则运算练习功能选择:百以内整数算式(必做)、带括号算式、真分数算式练习;

(4)程序允许用户进行多轮测试,提供用户多轮测试分数柱状图,示例如下:

(5)程序记录用户答题结果,当程序退出再启动的时候,可为用户显示最后一次测试的结果,并询问用户可否进行新一轮的测试。

(6)测试有计时功能,测试时动态显示用户开始答题后的消耗时间。

(7)程序人机交互界面是GUI界面(WEB页面、APP页面都可),界面支持中文简体(必做)/中文繁体/英语,用户可以进行语种选择。

二、设计类图:

 

Start类:用来创建进入系统的界面;

SimpleFrame类:做题界面、随机出题、调用shishi3类中的计时功能;

Sort类:成绩汇总界面,以柱状图的形式展现,用数组记录每次测试的结果。

三、程序流程图:

 

四、核心代码:

搭建系统开始界面

public Start()    {            JPanel south = new JPanel();                JLabel label1 = new JLabel("欢迎同学们,是否要开始测试?",JLabel.CENTER);         JButton btn1 = new JButton("确定");        JButton btn2 = new JButton("取消");        add(label1);        south.add(btn1);        south.add(btn2);        add(south,BorderLayout.SOUTH);        Font font=new Font("华文行楷",Font.BOLD,20);        label1.setFont(font);          label1.setForeground(Color.BLUE);//设置字体颜色        //label1.setBackground(Color.GREEN);                  btn1.setFont(font);           btn1.setForeground(Color.BLUE);          btn1.setBackground(Color.CYAN);         btn1.setBorder(BorderFactory.createRaisedBevelBorder());            btn1.addActionListener(new ActionListener()            {                public void actionPerformed(ActionEvent event)                {                    setVisible(false);                    SimpleFrame0 frame = new SimpleFrame0();                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                    frame.setVisible(true);                                    }            });                       btn2.setFont(font);           btn2.setBorder(BorderFactory.createRaisedBevelBorder());           btn2.setForeground(Color.BLUE);         btn2.setBackground(Color.CYAN);         btn2.addActionListener(new ActionListener()            {                public void actionPerformed(ActionEvent event)                {                    System.exit(0);                }            });                    setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        setTitle("四则运算系统");        setLocation(500,200);            }    }
View Code

计时器

class shishi3 extends Thread {            private long noww = 0l;            private long start = System.currentTimeMillis();// 程序启动时间的毫秒值            private long time;            public void run() {                int i=0;                while (true) {                    noww = System.currentTimeMillis();// 获取一秒之后的毫秒值                    time = noww - start;// 两个时间相减的到毫秒差                    timetime=time;                    String ssss=String.format("计时: %02d:%02d:%02d\n",                            time / (1000 * 60 * 60) % 60/* 时 */,                             time / (1000 * 60)% 60/* 分 */,                             (time / 1000 % 60)/* 秒 */);// 格式化字符串输出                                       l1.setText(ssss);                        i++;                        try {                            Thread.sleep(1000);                        } catch (InterruptedException e) {                            e.printStackTrace();                        }                                    }            }        }
View Code

绘制柱状图代码

public void paint(Graphics g)    {          int snum2 = Integer.parseInt(snum[0]);                File file = new File("result.txt");        StringBuilder result = new StringBuilder();        try        {            BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件            String s = new String();            do            {                for(int i=0;i<4;i++)                {                    s = br.readLine() ;//使用readLine方法,一次读一行                    save[i] = Integer.parseInt(s);                }            }            while((s = br.readLine())!=null);            br.close();            }           catch(Exception e){           e.printStackTrace();        }             int Width = 600;        int Height = 450;         Random ran = new Random();        int leftMargin = 10;//柱形图左边界          int topMargin = 50;//柱形图上边界          Graphics2D g2 = (Graphics2D) g;        g2.translate(10, 100);        int ruler = Height-topMargin-5;          int rulerStep = ruler/10;//将当前的高度评分为10个单位          g2.setColor(Color.BLACK);//绘制黑色背景          g2.fillRect(0, 0, Width, Height);//绘制矩形图          g2.setColor(Color.green);          for(int i=0;i<=10;i++){
//绘制绿色横线和百分比 g2.drawString((100-10*i)+"", 10, topMargin+rulerStep*i);//写下百分比 g2.drawLine(10, topMargin+rulerStep*i, Width, topMargin+rulerStep*i);//绘制灰色横线 } g2.setColor(Color.red); for(int i=0;i<4;i++){
//绘制柱形图 int value =save[i]*4;//产生柱形的百分比 int step = (i+1)*50;//设置每隔柱形图的水平间隔为50 g2.fillRoundRect(leftMargin+step*2, Height-value-10, 40, value, 40, 10); //绘制矩形 g2.drawString("第"+(i+1)+"轮测试", leftMargin+step*2, Height-value-15); //列出 测试轮次 }
View Code

五、运行结果:

 六、结对过程:

 

七、总结与评价

        在这次结队项目中,我和我的好朋友结为一对,因为平时一直在一起,互相特别熟悉,对彼此都比较信任,所以很自然的结为一对。我这个人平时做事希望做的完美一些,因此做事比较慢,在这次结对项目里伙伴的督促使我发现我应该改掉我的这个习惯,真的自己做事太慢了。虽然我们俩的编程基础都很弱,但我们都有一颗上进的心,我们都希望通过我两的努力,能做出一个比较好的项目。虽然现实有些残酷,我们在做的过程中有气馁想放弃的时候,但我们还是彼此鼓励,作出了一个相对比较可以的系统。在做的过程里,想在开始的界面里添加背景图片,可是试了好几次都没成功,希望后面通过学习可以将这一问题克服了。

        对于结对编程真的能够带来1+1>2的效果的说法,我是同意的。平时一个人做的时候,自己的想法是比较单一固定的,通过结对可以碰撞出更多想法。虽然一开始不理解对方的想法,但在不断地沟通交流后,一下明白了对方的想法。而且编程过程中有出错的地方,自己找不出的时候就很急躁,然后就不想继续了,然而有了伙伴可以一起找错,就不会很急躁,也能很快的找出错误,并解决问题。所以团结的力量是不容小觑的,好的合作会带来好的项目作品。  

八、PSP

PSP2.1

任务内容

计划共完成需要的时间(min)

实际完成需要的时间(min)

Planning

计划

10

10

·       Estimate

·  估计这个任务需要多少时间,并规划大致工作步骤

10

10

Development

开发

1302

1065

··       Analysis

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

10

20

·       Design Spec

·  生成设计文档

5

5

·       Design Review

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

2

5

·       Coding Standard

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

5

5

·       Design

  具体设计

30

25

·       Coding

  具体编码

1200

960

·       Code Review

·  代码复审

30

20

·       Test

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

20

25

Reporting

报告

25

28

··       Test Report

·  测试报告

10

5

·       Size Measurement

  计算工作量

5

3

·       Postmortem & Process Improvement Plan

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

10

20

 
 

 

转载于:https://www.cnblogs.com/zhangcunhui/p/8719324.html

你可能感兴趣的文章
(转)面向对象最核心的机制——动态绑定(多态)
查看>>
token简单的使用流程。
查看>>
django创建项目流程
查看>>
UIActionSheet 修改字体颜色
查看>>
Vue 框架-01- 入门篇 图文教程
查看>>
Spring注解之@Lazy注解,源码分析和总结
查看>>
多变量微积分笔记24——空间线积分
查看>>
Magento CE使用Redis的配置过程
查看>>
poi操作oracle数据库导出excel文件
查看>>
(转)Intent的基本使用方法总结
查看>>
Mac 下的Chrome 按什么快捷键调出页面调试工具
查看>>
Windows Phone开发(24):启动器与选择器之发送短信
查看>>
JS截取字符串常用方法
查看>>
Google非官方的Text To Speech和Speech Recognition的API
查看>>
stdext - A C++ STL Extensions Libary
查看>>
Django 内建 中间件组件
查看>>
bootstrap-Table服务端分页,获取到的数据怎么再页面的表格里显示
查看>>
进程间通信系列 之 socket套接字及其实例
查看>>
天气预报插件
查看>>
Unity 游戏框架搭建 (十三) 无需继承的单例的模板
查看>>