结对编程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 ...
随机推荐
- rpmrebuild备份glibc
任务: 备份已安装的glibc为RPM包,还原. 准备: 下载rpmrebuild 上传至服务器 链接: https://pan.baidu.com/s/1pKNGnur 密码: wgy9 操作: 1 ...
- Modelsimse10.1如何编译altera库文件以支持IP仿真
前言 se版本默认没有ip之类的库支持,如果你用到了pll之类的ip,仿真前就得把库编译好. 流程 本例用的是altera的verilog库. 1.首先在modelsim安装目录下新建altera文件 ...
- 使用DbFunctions来解决EF按照日期分组数据
如下一张表 要进行MyDate的date部分进行分组,我们会发现如下写法会报异常 那么如何才能使linq正确转化为sql语句呢,这就要使用到了DbFunctions这个工具类 转到定义可以看到此类在e ...
- HDU 1159 Common Subsequence:LCS(最长公共子序列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 题意: 求最长公共子序列. 题解: (LCS模板题) 表示状态: dp[i][j] = max ...
- Oracle B-tree、位图、全文索引三大索引性能比较及优缺点汇总
引言:大家都知道“效率”是数据库中非常重要的一个指标,如何提高效率大家可能都会想起索引,但索引又这么多种,什么场合应该使用什么索引呢?哪种索引可以提高我们的效率,哪种索引可以让我们的效率大大降低(有时 ...
- Mac实用操作技巧(三)
远程协助 很多场景下需要用到远程协助,比如你遇到了某个搞不定的bug需要他人帮助,但是别人却不在身边,这时就需要别人通过网络来远程协助你解决问题.在Windows下有不少优秀软件,比如TeamView ...
- SQL中多条件查询括号的用途
界面: 代码 0 posted @ 2009-12-15 13:28 唔愛吃蘋果 阅读(8640) 评论(0) 编辑 收藏
- 【Mybatis】 JdbcType 与 JavaType对应关系
一.MyBatis 通过包含的jdbcType类型 BIT FLOAT CHAR TIMESTAMP OTHER UNDEFINED TINYINT REAL VARCHAR BINARY BLOB ...
- APUE 1 -- Unix数据结构
Unix 类操作系统支持不同进程间共享文件.对于所有的I/O,内核使用3种数据结构来表示一个打开的文件. 进程表.每个进程在进程表中有其相应的入口.文件结构中,每个进程表的入口是文件描述符表,每个文件 ...
- 7.21.03 while循环和do...while循环
while循环 while是最基本的循环,它的结构为: while( 布尔表达式 ) { //循环内容 } 只要布尔表达式为true,循环体会一直执行下去. 有时程序也需要死循环. 实例 public ...