林晓芳201421123092、陈惠201421123096

coding 地址:https://git.coding.net/lianlian/92.96.1.git


一.题目描述

我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:

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

二.分析实现

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)的更多相关文章

  1. 第二次作业:结对编程,四则运算的GUI实现

    小伙伴:201421123031 余洋 201421123044  潘志坚  题目要求: 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI(可以是W ...

  2. 结对编程项目——四则运算vs版

    结对编程项目--四则运算vs版 1)小伙伴信息:        学号:130201238 赵莹        博客地址:点我进入 小伙伴的博客 2)实现的功能: 实现带有用户界面的四则运算:将原只能在 ...

  3. 20175324王陈峤宇 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结

    20175324王陈峤宇 2018-2019-2<Java程序设计>结对编程项目-四则运算 第一周 阶段性总结 需求分析 这次的结对作业是要求我们利用栈来设计一个计算器. 自动生成四则运算 ...

  4. 20175229许钰玮 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结

    20175229许钰玮 2018-2019-2<Java程序设计>结对编程项目-四则运算 第一周 阶段性总结 需求分析 自动生成四则运算题目(加.减.乘.除). 既可以用前缀算法(波兰算法 ...

  5. 20175311胡济栋 2018-2019-2《Java程序设计》结对编程项目-四则运算 第二周 阶段性总结

    20175311胡济栋 2018-2019-2<Java程序设计>结对编程项目-四则运算 第二周 阶段性总结 需求分析 这是利用栈来设计一个计算器的第二阶段总结. 自动生成四则运算的题目( ...

  6. 20165223 结对编程之四则运算week2-整体总结

    目录 一.结对对象 二.需求分析 三.设计思路 四.核心代码 五.功能截图 六.结对感受 一.结对对象 担任角色(本周交换角色,流动学习) 驾驶员(Driver):20165218 赵冰雨(是控制键盘 ...

  7. 20165223 结对编程之四则运算week1-阶段性总结

    目录 一.结对对象 二.需求分析 三.设计思路 四.功能截图 五.结对感受 一.结对对象 担任角色 驾驶员(Driver):20165223 蔡霓(是控制键盘输入的人) 领航员(Navigator): ...

  8. 2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-最后阶段

    2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-最后阶段 最后的一周,时间越来越紧张,因为之前的拖沓和一些事情的耽误,导致了如今的紧张,这一周应该是我们小组效率最高 ...

  9. 2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-准备阶段

    2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-准备阶段 在一个人孤身奋斗了将近半个学期以后,终于迎来的我们的第一次团队协作共同编码,也就是,我们的第一个结对编程练 ...

  10. 2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-中坚阶段

    2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-中坚阶段 如今的编写,进入了一段时间的中坚阶段,小伙伴的思路虽然很一致,但是总是存在着一定问题,这就造成了我们中坚阶 ...

随机推荐

  1. NYOJ--257--郁闷的C小加(一)(中缀表达式变后缀表达式 )

    郁闷的C小加(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说 ...

  2. Section 1.1 Your Ride Is Here

    Your Ride Is Here It is a well-known fact that behind every good comet is a UFO. TheseUFOs often com ...

  3. Python 协程总结

    Python 协程总结 理解 协程,又称为微线程,看上去像是子程序,但是它和子程序又不太一样,它在执行的过程中,可以在中断当前的子程序后去执行别的子程序,再返回来执行之前的子程序,但是它的相关信息还是 ...

  4. Spring 并发访问的线程安全性问题

    首先对于spring的IOC来说,对象是由Spring来帮我们管理,也就是在Spring启动的时候,在Spring容器中,由Spring给我们创建的,Spring会帮我们维护,一般都是单例的,也就是一 ...

  5. [Noi2008]假面舞会

    考试的时候果断放弃,cout<<"-1 -1"骗10分hhh... 这也是图上问题.注意题目意思: ①如果有多个点指向同一个点,那么他们属于同一类别. ②一个点看到的所 ...

  6. JUnit4在Eclipse中的使用

    测试是项目开发中很重要的一环.实际上,建议的项目前期编写过程是:构思-> 编写单元测试代码-> 编写接口->编写实现类-> 测试实现类->编写主类....JUnit是一个 ...

  7. Python requests 安装与开发

    Requests 是用Python语言编写HTTP客户端库,跟urllib.urllib2类似,基于 urllib,但比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求, ...

  8. python学习===判断两个日期的间距天数

    import datetime   d1 = datetime.date(2015,10,7) d2 = datetime.date(2015,8,15) print((d1-d2).days)

  9. 项目管理利器---Maven

    Maven快速入门 maven介绍 maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建.报告和软件的项目管理工具.简单来说,maven可以帮助我们更有效的管理项目,也是一套 ...

  10. 【EntityFramework 6.1.3】个人理解与问题记录(3)

    前言 说点题外话:前几天接连微软老爹发布了 .net core 2.0 / asp.net core 2.0 / ef core 2.0 / .net standard 2.0(此处撒花,不管是否后面 ...