结对编程1-四则运算(基于GUI)
林晓芳201421123092、陈惠201421123096
coding 地址:https://git.coding.net/lianlian/92.96.1.git
一.题目描述
我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:
- 记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算;
 - 有计时功能,能显示用户开始答题后的消耗时间;
 - 界面支持中文简体/中文繁体/英语,用户可以选择一种。
 
二.分析实现
a.需求分析:
1.实现GUI界面;
2.实现历史对错题数记录;
3.能够显示用户答题时间;
4.提供中文简体/中文繁体/英语多种语言选择。
b.功能设计:
1.基本功能:多种语言选择、显示历史正确率、答题计时;
2.扩展功能:生成用户错题集。
c.设计实现:
- Background//后台事件处理类:
 
方法:createTest()//定义一个随机数
checkAnswer(String[] answers)//传入一组答案,校验答案
getQuestions()//获取完整的题目
getStandardAnswer()//获取标准答案
upDate(Integer right,Integer all)//上传正确率
- Client//客户端类:
 
方法:Client()//客户端构造器
createComponent()//创建面板
showTime()//显示答题时间
showHistory()//显示历史正确率
setLanguage()//设置客户端语言
actionPerformed(ActionEvent e)//按钮事件
- Calculator//计算类:
 
方法:add(Fraction a, Fraction b)//加法
sub(Fraction a, Fraction b)//减法
mul(Fraction a, Fraction b)//乘法
div(Fraction a, Fraction b)//除法
- Fraction//分数类:
 
属性:numerator//分子
denominator//分母
方法:creatfraction()//创建分数
GCD(int m, int n)//计算最大公约数
Reduction(int m, int n)//约分
compare(String m, String n)//比较输入结果与答案
- Test//运行类:
 
main函数执行
d.代码说明:
上传正确率:
    public void upDate(Integer right,Integer all){
        try {
            writer = new BufferedWriter(new FileWriter(new File("history/accuracy.txt")));
            writer.write(right.toString());
            writer.newLine();
            writer.write(all.toString());
            writer.newLine();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
显示答题时间:
public void showTime() {
        labTime = new JLabel(tips.get(1) + "00:00");
        labTime.setBounds(580, 0, 120, 50);
        jpMain.add(labTime);
        // 启动记时线程
        new Thread() {
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(1000);
                        seconds++;
                        if (seconds >= 60) {
                            seconds = 0;
                            minutes++;
                        }
                        // 修正分钟数和秒钟数
                        if (seconds < 10)
                            secStr = "0" + seconds.toString();
                        else
                            secStr = seconds.toString();
                        if (minutes < 10)
                            minStr = "0" + minutes.toString();
                        else
                            minStr = minutes.toString();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    labTime.setText(tips.get(1) + minStr + ":" + secStr);
                    if(isEnd)
                        break;
                }
            }
        }.start();
    }
显示历史正确率:
    public void showHistory() {
        labAccuracy = new JLabel();
        labAccuracy.setBounds(150, 0, 120, 50);
        try {
            reader = new BufferedReader(new FileReader(new File("history/accuracy.txt")));
            his_rightNum = reader.readLine();
            his_allNum = reader.readLine();
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        labAccuracy.setText(tips.get(2) + his_rightNum + "/" + his_allNum);
        jpMain.add(labAccuracy);
    }
设置客户端语言:
public void setLanguage() {
        String[] choiceLanguage = { "简体中文", "繁体中文", "English" };
        String language = (String) JOptionPane.showInputDialog(null, "请选择客户端的语言:\n", "Choice a language for client",
                JOptionPane.PLAIN_MESSAGE, new ImageIcon("icon.png"), choiceLanguage, "简体中文");
        if (language == null) {
            System.exit(-1);
        } else {
            try {
                reader = new BufferedReader(new FileReader(new File("language/" + language + ".txt")));
                String s;
                while ((s = reader.readLine()) != null) {
                    tips.add(s);
                }
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
e.测试运行:





三.PSP展示
| 
 PSP2.1  | 
 Personal Software Process Stages  | 
 Time (%) Senior Student  | 
 Time (%)  | 
| 
 Planning  | 
 计划  | 
 2h  | 
 2.5h  | 
| 
 · Estimate  | 
 估计这个任务需要多少时间  | 
 40h  | 
 42h  | 
| 
 · Analysis  | 
 需求分析 (包括学习新技术)  | 
 3h  | 
 4h  | 
| 
 · Coding Standard  | 
 代码规范  | 
 1h  | 
 1h  | 
| 
 · Design  | 
 具体设计  | 
 3h  | 
 3h  | 
| 
 · Coding  | 
 具体编码  | 
 25h  | 
 30h  | 
| 
 · Test  | 
 测试(自我测试,修改代码,提交修改)  | 
 1.5h  | 
 2h  | 
| 
 Reporting  | 
 报告  | 
 1h  | 
 1h  | 
四.总结
在我们看来,结对编程是能够带来1+1>2的效果。虽然第一次结对编程我们遇到了很多问题,但同时我们也收获了很多。作为“驾驶员”,在编程时就会格外的认真,注意每一段代码的格式,按照统一的规范来写,以便队友审查。作为“领航员”,你会时刻关注你旁边的人写的代码,思维在不停的运作,不仅提高了代码质量,也减少了复审所需要的时间,不用事后再去花大精力去阅读、修改代码。而且当一个人独自写程序时,我们总是容易出现懈怠的情绪,而当两个人结对编程时,通过互相监督、提醒,编程效率大大提高。

结对编程1-四则运算(基于GUI)的更多相关文章
- 第二次作业:结对编程,四则运算的GUI实现
		
小伙伴:201421123031 余洋 201421123044 潘志坚 题目要求: 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI(可以是W ...
 - 结对编程项目——四则运算vs版
		
结对编程项目--四则运算vs版 1)小伙伴信息: 学号:130201238 赵莹 博客地址:点我进入 小伙伴的博客 2)实现的功能: 实现带有用户界面的四则运算:将原只能在 ...
 - 20175324王陈峤宇 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结
		
20175324王陈峤宇 2018-2019-2<Java程序设计>结对编程项目-四则运算 第一周 阶段性总结 需求分析 这次的结对作业是要求我们利用栈来设计一个计算器. 自动生成四则运算 ...
 - 20175229许钰玮 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结
		
20175229许钰玮 2018-2019-2<Java程序设计>结对编程项目-四则运算 第一周 阶段性总结 需求分析 自动生成四则运算题目(加.减.乘.除). 既可以用前缀算法(波兰算法 ...
 - 20175311胡济栋 2018-2019-2《Java程序设计》结对编程项目-四则运算 第二周 阶段性总结
		
20175311胡济栋 2018-2019-2<Java程序设计>结对编程项目-四则运算 第二周 阶段性总结 需求分析 这是利用栈来设计一个计算器的第二阶段总结. 自动生成四则运算的题目( ...
 - 20165223 结对编程之四则运算week2-整体总结
		
目录 一.结对对象 二.需求分析 三.设计思路 四.核心代码 五.功能截图 六.结对感受 一.结对对象 担任角色(本周交换角色,流动学习) 驾驶员(Driver):20165218 赵冰雨(是控制键盘 ...
 - 20165223 结对编程之四则运算week1-阶段性总结
		
目录 一.结对对象 二.需求分析 三.设计思路 四.功能截图 五.结对感受 一.结对对象 担任角色 驾驶员(Driver):20165223 蔡霓(是控制键盘输入的人) 领航员(Navigator): ...
 - 2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-最后阶段
		
2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-最后阶段 最后的一周,时间越来越紧张,因为之前的拖沓和一些事情的耽误,导致了如今的紧张,这一周应该是我们小组效率最高 ...
 - 2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-准备阶段
		
2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-准备阶段 在一个人孤身奋斗了将近半个学期以后,终于迎来的我们的第一次团队协作共同编码,也就是,我们的第一个结对编程练 ...
 - 2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-中坚阶段
		
2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-中坚阶段 如今的编写,进入了一段时间的中坚阶段,小伙伴的思路虽然很一致,但是总是存在着一定问题,这就造成了我们中坚阶 ...
 
随机推荐
- gitlab 实现自动部署(简单Python实现)
			
功能说明: 当本地master分支执行push动作的时候,服务器端会自动执行master分支的pull操作(还可以执行一些自动化脚本) 原理: git hooks就是那些在git执行特定事件(如com ...
 - 初笔,JAVA.HelloWorld代码详解
			
HelloWorld.java //文件名 public class HelloWorld{ public static void main(String[] args){ System.out.pr ...
 - MySQL之删_delete-truncate
			
MySQL增删改查之删_delete-truncate 一.DELETE语句 删除数据记录 1.在单表中删除行 语法: DELETE [IGNORE] FROM tbl_name [WHERE whe ...
 - trycatch放在for循环的里面还是外面好
			
try放在for循环里面和外面的区别是什么呢?先看看下面的代码的区别:public class Test { public void test1(){ for (int count ...
 - C++算法接口使用参考
			
C++算法接口参考 算法参考:[algorithm] 编译:g++ -std=c++11 xxx_algorithm.cpp 运行:./a.out 1.保持原序列运算 all_of template ...
 - C进阶—详解编译、链接
			
被隐藏了的过程 现如今在流行的集成开发环境下我们很少需要关注编译和链接的过程,而隐藏在程序运行期间的过程可不简单,即使使用命令行来编译一个源代码文件,简单的一句"gcc hello.c ...
 - noip普及组2007 Hanoi双塔问题
			
Hanoi双塔问题 描述 给定A,B,C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的.现要将这些圆盘移到C柱上,在移动 ...
 - Android MediaCodec硬编兼容性测试方案
			
作者:阿宝 更新:2016-08-15 来源:彩色世界(https://blog.hz601.org/2016/08/15/android-mediacodec-hardcode-compatibil ...
 - jsp中一些重要的问题
			
jsp [1] 简介 > HTML - HTML擅长显示一个静态的网页,但是不能调用Java程序. > Servlet - Servlet擅长调用Java程序和后台进行交互,但是它不擅长显 ...
 - fodera20安装后的配置
			
最近安装了Fedora 20 64bit,以下是一些优化配置,使之更适合国人使用. 1,安装gnome-tweak-tool设置工具 Fedora 19自带的系统设置工具十分简单,一些重要的地方都不能 ...