结对编程1-基于GUI的四则运算生成器
201421123016郑怀勇 201421123017康建灿
一、需求分析
- 记录用户的对错总数。
- 程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。
- 有计时功能,能显示用户开始答题后的消耗时间。
- 具有GUI界面
二、功能设计

三、代码展示:
读取记录:
boolean has = false;
int t=0,f=0;
File file = new File("D:/text.txt");
String line =null;
try {
BufferedReader br = new BufferedReader(new FileReader(file));
try {
while((line = br.readLine()) != null){
String[] num = line.split("#");
f=Integer.parseInt(num[1]);
t=Integer.parseInt(num[3]);
}} catch (IOException ex) {
}
}catch (Exception e) {
e.printStackTrace();
}
if(!has)
tagLabel1.setText("无记录");
文件数据保存:
public class pro {
int t = 0, f = 0;
void file(int d, int count) {
File file = new File("D:/text.txt");
String line = null;
try {
BufferedReader br = new BufferedReader(new FileReader(file));
try {
while ((line = br.readLine()) != null) {
String[] num = line.split("#");
t = Integer.parseInt(num[1]);
f = Integer.parseInt(num[3]);
}
} catch (IOException ex) {
}
} catch (FileNotFoundException ex) {
get(d, count);
}
get(d, count);
}
public void get(int d, int count) {
FileOutputStream fop = null;
File file;
String content = "错误#" + (d + t) + "#正确#" + (count + f) + "#";
try {
file = new File("D:/text.txt");
fop = new FileOutputStream(file);
if (!file.exists()) {
file.createNewFile();
}
byte[] contentInBytes = content.getBytes();
fop.write(contentInBytes);
fop.flush();
fop.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fop != null) {
fop.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
随机生成四则运算及正确答案:
int a[][]=null;
a=new int [1000][3];
String[] b=null;
b=new String [1000];
String stil[]=null;
stil=new String[1000];
int i = 0; for(;i<m;i++){
int h=(int)(0+Math.random()*(1-0+1));
if(h==1){
Zhengshu(i,b,c);
}
else
{
Fenshu(i,b,a,c);
}
answerEdit[i] = new JTextField();
panel.add(new JLabel(b[i]));
panel.add(answerEdit[i]);
} ``` public static String Fenshu(int i, String b[], int a[][], String c[]) {
int x = (int) (0 + Math.random() * (9 - 0 + 1));
int y = (int) (0 + Math.random() * (9 - 0 + 1));
while (x >= y || y == 0 || x == 0) {
x = (int) (0 + Math.random() * (9 - 0 + 1));
y = (int) (0 + Math.random() * (9 - 0 + 1));
}
int k = (int) (0 + Math.random() * (9 - 0 + 1));
int t = (int) (0 + Math.random() * (9 - 0 + 1));
while (k >= t || t == 0 || k == 0) {
k = (int) (0 + Math.random() * (9 - 0 + 1));
t = (int) (0 + Math.random() * (9 - 0 + 1));
}
int o = (int) (0 + Math.random() * (3 - 0 + 1));
if (o == 0) {
b[i] = "(" + x + "/" + y + ")+(" + k + "/" + t + ")=";
a[i][0] = x * t + k * y;
a[i][1] = y * t;
int n = divisor(a[i][0], a[i][1]);
c[i] = a[i][0] / n + "/" + a[i][1] / n;
}
if (o == 1) {
b[i] = "(" + x + "/" + y + ")-(" + k + "/" + t + ")=";
a[i][0] = x * t - k * y;
a[i][1] = y * t;
int n = divisor(a[i][0], a[i][1]);
c[i] = a[i][0] / n + "/" + a[i][1] / n;
}
if (o == 2) {
b[i] = "(" + x + "/" + y + ")*(" + k + "/" + t + ")=";
a[i][0] = x * k;
a[i][1] = y * t;
int n = divisor(a[i][0], a[i][1]);
c[i] = a[i][0] / n + "/" + a[i][1] / n;
}
if (o == 3) {
b[i] = "(" + x + "/" + y + ")÷(" + k + "/" + t + ")=";
a[i][0] = x * t;
a[i][1] = k * y;
int n = divisor(a[i][0], a[i][1]);
c[i] = a[i][0] / n + "/" + a[i][1] / n;
}
return b[i] + c[i];
}; public static String Zhengshu(int i, String b[], String c[]) {
int x = (int) (0 + Math.random() * (100 - 0 + 1));
int y = (int) (0 + Math.random() * (100 - 0 + 1));
int z = (int) (0 + Math.random() * (3 - 0 + 1));
if (z == 0) {
b[i] = x + "+" + y + "=";
c[i] = x + y + "";
}
if (z == 1) {
b[i] = x + "-" + y + "=";
c[i] = x - y + "";
}
if (z == 2) {
b[i] = x + "*" + y + "=";
c[i] = x * y + "";
}
if (z == 3) {
b[i] = x + "÷" + y + "=";
int n = divisor(x, y);
c[i] = x / n + "/" + y / n;
}
return b[i] + c[i];
} public static int divisor(int i, int j)// 最大公约数
{
int k = 1, s;
for (s = 1; s <= i && s <= j; s++) {
if (i % s == 0 && j % s == 0)
k = s;
}
return k; }
计时器:
JLabel timeText = new JLabel();
now.setHours(0);
now.setMinutes(0);
now.setSeconds(0);
final Timer timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
Date now2 = new Date(now.getTime() + 1000);
now = now2;
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
timeText.setText(formatter.format(now));
}
});
timer.start();
timeText.setText("用时 :" + timeText.getText());
// timeText.setText("time");
commitBtn = new JButton("确定");
commitBtn.addActionListener(this);
commitBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
timer.stop();
```
}
显示结果:
public result(int m2, int count2,double g2,String time2) {
// TODO Auto-generated constructor stub
this.setBounds(500, 250, 450, 200);
this.setResizable(true);
this.m=m2;
this.count=count2;
this.g=g2;
this.time=time2;
this.setTitle("四则运算");
jg();
}
private void jg(){
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout(5,5));
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(2,2));
panel.add(new JLabel("本次共出"+m+"题,答对"+count+"题,正确率为:"+g+",用时 :"+time));
JPanel panel2 = new JPanel();
mainPanel.add("Center",panel);
mainPanel.add("South",panel2);
add(mainPanel);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
四、测试运行截图:
主界面:

生成四则运算:

结果:

存储于文本:

五、PSP
| PSP2.1 | Personal Software Process Stages | Estimated time(h) | actual time(h) |
| Planning | 计划 | 1 | 1.5 |
| · Estimate | 估计这个任务需要多少时间 | 24 | 40 |
| Development | 开发 | 24 | 34 |
| · Analysis | 需求分析 (包括学习新技术) | 1 | 1.2 |
| · Design Spec | 生成设计文档 | 7 | 10 |
| · Design Review | 设计复审 | 0.5 | 0.5 |
| · Coding Standard | 代码规范 | 0.5 | 0.8 |
| · Design | 具体设计 | 1.5 | 1.5 |
| · Coding | 具体编码 | 20 | 30 |
| · Code Review | 代码复审 | 10 | 15 |
| · Test | 测试(自我测试,修改代码,提交修改) | 1 | 3 |
| Reporting | 报告 | 20 | 25 |
| · | 测试报告 | 1 | 1.5 |
| · | 计算工作量 | 0.5 | 1 |
| · | 并提出过程改进计划 | 2 | 4 |
六、总结
此次与康建灿一起完成结队作业,先对功能进行分析,最后选取了存储功能以及计时器功能,并以康建灿的代码作为基础代码进行扩展延伸。由于2个人的编程能力都不是很强,过程中一直磕磕碰碰,有很多不懂,尤其是在图形界面方面,可以说2个人都很薄弱,一直在巩固以前学习的Java知识。
而结队无疑提高了我们的效率,俗话说三个臭皮匠顶个诸葛亮,在编程过程中,能够达到互相监督,互相学习的效果。正所谓旁观者清,当其中一个人在编程,另一个人就能在旁边更直观地发现错误。
汉堡包点评:
先来一片面包:我们有着共同的目标,都想写好一个代码,能给对方予以依靠;
再把肉放上:就算2个人的编程能力都不是很好,但也不能自暴自弃,更不能嫌弃对方,而是应该互相鼓励,强调我们可以做到更好;
然后再来一片面包:最后,思路与方向都清晰了,这时,更应该互相激励,努力做到更好。
七,综上,附上合照一张

结对编程1-基于GUI的四则运算生成器的更多相关文章
- 结对编程1 —— 基于GUI和Swing的四则运算题目生成器
合作伙伴 201421123102 王艳秋 201421123106 陈 雄 代码地址 题目描述 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI( ...
- 结对作业--基于GUI的四则运算生成器
组员:201421123015 陈麟凤 201421123019 张志杰 201421123020 黄海鸿 coding 地址 :https://coding.net/u/zhang1995/p/wo ...
- 结队编程-基于gui的四则运算生成器
成员:卢少锐 201421123027.刘存201421033023 coding.net地址 1.需求分析:除了实现四则运算的功能外,还添加了计时器功能和语言选择功能 2.程序设计:这次作业是基于上 ...
- 结对作业1----基于GUI的四则运算生成器
组员:201421123015 陈麟凤 201421123019 张志杰 201421123020 黄海鸿 coding 地址:代码点这里 需求分析: 1.除了整数的四则运算还要支持分数的四则运算: ...
- 结对编程1----基于java的四则运算生成器
小组成员:王震(201421123054).王杰(201421123055) Coding地址:https://git.coding.net/a506504661/sssss.git 一.题目描述 我 ...
- 结对作业:基于GUI实现四则运算
1)Coding.Net项目地址:https://git.coding.net/day_light/GUIszysLL.git 2)在开始实现程序之前,在下述PSP表格记录下你估计将在程序的各个模块的 ...
- 结对编程——paperOne基于java的四则运算 功能改进
项目成员:张金生 张政 由于新的需求,原本使用JSP的实现方式目前改为Java实现,即去除了B/S端. 需求分析: 1.四则运算要满足整数运算.分数运算两种: 2.运算题目随机,并且可以打印题 ...
- 结对编程1--基于GUI的四则运算题目生成器
最终项目详细代码(coding地址)/李志强的博客/我的详细代码/方言的博客 一.需求分析 1.实现之前项目的功能,如:除了整数之外,还要支持真分数的四则运算,真分数的运算,并且要求能处理用户的输入, ...
- 基于GUI的四则运算
基于GUI的四则运算 李志强 201421123028 连永刚 201421123014 林方言 201421123023 coding 地址 https://git.coding.net/lizhi ...
随机推荐
- HDU--1003 Max Sum(最大连续子序列和)
Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum ...
- Spring (三)
1.1 Spring的事务管理 1.1.1事务 事务:指的是逻辑上一组操作,要么全部成功,要么全部失败. 事务特性: 原子性:事务不可分割. 一致性:事务执行前后,数据完整性保存一致. 隔离性:一个事 ...
- 基于 Laravel、Vue.js开发的全新社交系统----ThinkSNS+
什么是ThinkSNS+ ThinkSNS(简称TS)始于2008年,一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+.新的产品名 ...
- python——内置函数和匿名函数
内置函数 接下来,我们就一起来看看python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数.这 ...
- MYSQL updatexml报错注入
首先了解下updatexml()函数 UPDATEXML (XML_document, XPath_string, new_value); 第一个参数:XML_document是String格式,为X ...
- android_orm框架之greenDAO(二)
一.概述 在上次greenDao第一篇文章中,我们对greenDao的使用步骤和基本用法给大家做了介绍,文章链接:http://www.cnblogs.com/jerehedu/p/4304766.h ...
- asp.net core 运用 Redis 配置步骤
Redis可以用来存储session或直接存储键值对 首先要有asp.net core的项目,可以是webapi 或者MVC项目,还有有本地的Redis或者在远程服务器上,具体的安装就不讲述了 以下是 ...
- return 的返回值与结束功能
前言:大家好~我是阿飞~在js中return是很重要的基础.一定要彻底掌握理解它哦.否则js学习到中后期很容易懵逼的+_+ 什么是return? 1.在js中return是一个表达式语句,如果后面什么 ...
- java web面试技巧,数据库面试,java web轻量级开发面试教程
我最近看到一本比较好的讲java web方面面试的书,java web轻量级开发面试教程. 其中不仅用案例和视频讲述了Spring MVC,Hibernate, ORM等方面的技巧,而且还实际讲到了面 ...
- jquery的2.0.3版本源码系列(3):96行-283行,给JQ对象,添加一些方法和属性
jquery是面向对象的程序,面向对象就离不开方法和属性. 方法的简化 jQuery.fn=jQuery.prototype={ jquery: 版本 constructor: 修正指向问题 init ...