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个人的编程能力都不是很好,但也不能自暴自弃,更不能嫌弃对方,而是应该互相鼓励,强调我们可以做到更好;
然后再来一片面包:最后,思路与方向都清晰了,这时,更应该互相激励,努力做到更好。
七,综上,附上合照一张