201421123016郑怀勇     201421123017康建灿

程序代码 / 康建灿

一、需求分析

  1. 记录用户的对错总数。
  2. 程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。
  3. 有计时功能,能显示用户开始答题后的消耗时间。
  4. 具有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. 结对编程1 —— 基于GUI和Swing的四则运算题目生成器

    合作伙伴 201421123102 王艳秋 201421123106 陈 雄 代码地址 题目描述 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI( ...

  2. 结对作业--基于GUI的四则运算生成器

    组员:201421123015 陈麟凤 201421123019 张志杰 201421123020 黄海鸿 coding 地址 :https://coding.net/u/zhang1995/p/wo ...

  3. 结队编程-基于gui的四则运算生成器

    成员:卢少锐 201421123027.刘存201421033023 coding.net地址 1.需求分析:除了实现四则运算的功能外,还添加了计时器功能和语言选择功能 2.程序设计:这次作业是基于上 ...

  4. 结对作业1----基于GUI的四则运算生成器

    组员:201421123015 陈麟凤 201421123019 张志杰 201421123020 黄海鸿 coding 地址:代码点这里 需求分析: 1.除了整数的四则运算还要支持分数的四则运算: ...

  5. 结对编程1----基于java的四则运算生成器

    小组成员:王震(201421123054).王杰(201421123055) Coding地址:https://git.coding.net/a506504661/sssss.git 一.题目描述 我 ...

  6. 结对作业:基于GUI实现四则运算

    1)Coding.Net项目地址:https://git.coding.net/day_light/GUIszysLL.git 2)在开始实现程序之前,在下述PSP表格记录下你估计将在程序的各个模块的 ...

  7. 结对编程——paperOne基于java的四则运算 功能改进

    项目成员:张金生     张政 由于新的需求,原本使用JSP的实现方式目前改为Java实现,即去除了B/S端. 需求分析: 1.四则运算要满足整数运算.分数运算两种: 2.运算题目随机,并且可以打印题 ...

  8. 结对编程1--基于GUI的四则运算题目生成器

    最终项目详细代码(coding地址)/李志强的博客/我的详细代码/方言的博客 一.需求分析 1.实现之前项目的功能,如:除了整数之外,还要支持真分数的四则运算,真分数的运算,并且要求能处理用户的输入, ...

  9. 基于GUI的四则运算

    基于GUI的四则运算 李志强 201421123028 连永刚 201421123014 林方言 201421123023 coding 地址 https://git.coding.net/lizhi ...

随机推荐

  1. How to remotely shut down any PC on same network

    Syntax: net viewping (name of victim's PC)shutdown -i Empirical: Try one of the school's public PC R ...

  2. crm踩坑记(二)

    Linux tmux 如何查看 tmux如何进行滚动呢? prefix + [, prefix为tmux的前置动作,默认是ctrl + b. 使用方向键或者pageUp来进行翻页. q可以退出滚动模式 ...

  3. 使用pg_upgrade工具为PostgreSQL进行版本升级

    公司的测试环境和生产环境都是9.2.4版本,而开发环境是9.0.18版本. PS: 不知道公司里的其它同事,是如何做数据库迁移的,利用第三方可视化工具备份数据库,然后恢复到其它高版本的环境?反正我没成 ...

  4. Markdown简明教程

    一.Markdown到底是什么? Markdown是一种轻量级的标记语言,它使用很少量的符号控制文字的样式和排版,简单易学,使你更专注于文字. 二.Markdown的使用 接下来让我们一起来看下Mar ...

  5. linux几个重要的按键

    我们在用Windows系统时,有没有感觉快键键让我们工作更有效率,在Linux系统中仍有很好用的快捷键,这些快捷键可以辅助我们进行指令的编写与程序的中断呢,下面介绍几个经常用到的快捷键. 一.Tab- ...

  6. Linux下C程序的存储空间布局

    一个程序本质上都是由 BSS 段.data段.text段三个组成的.可以看到一个可执行程序在存储(没有调入内存)时分为代码段.数据区和未初始化数据区三部分. BSS段(未初始化数据区):在采用段式内存 ...

  7. KVO实现自定义文件复制进度展示

    一.创建文件 说明:自定义文件类,通过NSFileManager 以及NSFileHandle 实现文件的创建和copy,为了控制内存的并发使用,通过控制每次赋值的固定长度来分多次复制: NSStri ...

  8. Charles使用(二)

    Charles使用(二)   破解Charles 找到Charles应用-->右键显示包内容--->contents-->java:更换Charles.jar即可 链接: https ...

  9. 设计模式原则(2)--Liskov Substitution Principle(LSP)--里氏替换原则

    1.定义: 所有引用基类(父类)的地方必须能透明地使用其子类的对象.这一原则与继承紧密相关.如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的 ...

  10. (译)package.json详解

    原文链接 概述 本文囊括了所有package.json文件中你需要知道的细节.注意package.json必须是纯JSON的,而不仅仅是一个JavaScript对象字面量.该文件描述的很多行为都受np ...