第二次作业:结对编程,四则运算的GUI实现
小伙伴:201421123031 余洋 201421123044 潘志坚
题目要求:
我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:
- 记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。
- 有计时功能,能显示用户开始答题后的消耗时间。
- 界面支持中文简体/中文繁体/英语,用户可以选择一种。
题目分析:
1.GUI实现。
2.数据提取,保存历史纪录。
3.计时功能。
4.多语言的支持。
功能分析:
1.基本功能
实现GUI界面。
2.扩展功能
计时功能,支持多语言。
3.用户数据提取,历史纪录。
设计实现:
1.本实验采用JAVA。
2.编写GUI界面,调整窗口位置。
3.编写计时器类。
4.编写多语言支持类。
5.编写数据提取类。
代码说明:
1.GUI

public void createComponent() {
jpMain = new JPanel();
jpMain.setBackground(Color.gray);
jpMain.setLayout(null);
showTime();
showHistory();
btnSubmit = new JButton(tips.get(3));
btnSubmit.setBounds(250, 500, 90, 40);
btnSubmit.addActionListener(this);
jpMain.add(btnSubmit);
btnReset = new JButton(tips.get(4));
btnReset.setBounds(450, 500, 90, 40);
btnReset.addActionListener(this);
jpMain.add(btnReset);
jpTest = new JPanel();
jpTest.setLayout(new GridLayout(Background.testNum, 1, 20, 20));
jpTest.setBackground(Color.gray);
for (int i = 0; i < Background.testNum; i++) {
jpQuestions[i] = new JPanel();
jpQuestions[i].setBackground(Color.gray);
jpQuestions[i].setLayout(null);
labQuestions[i] = new JLabel(questions[i], JLabel.CENTER);
labQuestions[i].setFont(new Font("Consolas", 0, 20));
jpQuestions[i].add(labQuestions[i]);
labQuestions[i].setBounds(0, 0, 350, 25);
tfdAnswer[i] = new JTextField(8);
tfdAnswer[i].setFont(new Font("Consolas", 0, 12));
tfdAnswer[i].setBackground(Color.white);
jpQuestions[i].add(tfdAnswer[i]);
tfdAnswer[i].setBounds(350, 0, 60, 25);
jpTest.add(jpQuestions[i]);
}
jpMain.add(jpTest).setBounds(100, 60, 500, 400);
add(jpMain);
}

2.计时功能的实现。

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();
}

3.多语言的实现。

public void setLanguage() {
String[] choiceLanguage = { "简体", "繁体", "Eng" };
String language = (String) JOptionPane.showInputDialog(null, "选择语言:\n", "Choose language",
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();
}
}
}

4.数据提取的实现。

public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnSubmit) {
isEnd=!isEnd;
for (int i = 0; i < Background.testNum; i++) {
answers[i]=tfdAnswer[i].getText();
}
wrong= background.checkAnswer(answers);
String s=null;
if(wrong.length==0)
s=tips.get(5);
else{
s=tips.get(6)+"\n";
String standardAnswer[]=new String[Background.testNum];
standardAnswer=background.getStandardAnswer();
for(int i=0;i<wrong.length;i++){
s=s+new Integer(wrong[i])+":"+standardAnswer[new Integer(wrong[i])-1];
s=s+"\n";
}
}
JOptionPane.showMessageDialog(null, s, "report",JOptionPane.PLAIN_MESSAGE);
background.upDate(new Integer(his_rightNum+(Background.testNum-wrong.length)),new Integer(his_allNum+Background.testNum));
}
}
}

测试运行:
码市:https://coding.net/u/AJIAN044/p/cyuyan/git/tree/%E7%AC%AC%E4%BA%8C%E6%AC%A1%E4%BD%9C%E4%B8%9A/
PSP展示:
PSP | Personal Software Process Stages | Time (%) Senior Student | Time (%) |
Planning | 计划 | 3 | 2 |
· Estimate | 估计这个任务需要多少时间 | 78 | 111.5 |
Development | 开发 | 10 | 10 |
· Analysis | 需求分析 (包括学习新技术) | 1 | 1.5 |
· Design Spec | 生成设计文档 | 5 | 6 |
· Design Review | 设计复审 | 4 | 6 |
· Coding Standard | 代码规范 | 1 | 2 |
· Design | 具体设计 | 5 | 6 |
· Coding | 具体编码 | 36 | 60 |
· Code Review | 代码复审 | 7 | 9 |
· Test | 测试(自我测试,修改代码,提交修改) | 8 | 10 |
Reporting | 报告 | 1 | 1 |
小结:
第一次作业我用c语言编写,但是c语言编写GUI难度提升我就不会做了。于是我们采用java进行程序的重新编写,同时也对之前的一些缺点进行改进。由于对java比较生疏,这次编写过程中还是遇见了比较多的问题,对函数使用等较为生疏,但是我们一起解决问题,查找资料,分析错误。这次的结对编程让我体会到了合作的优势,之前一个人想要挺久的问题现在大多数都能比以前更快的解决,产生了1+1>2的效果。
汉堡包评价:
第一片面包:余洋同学认真,面对我们共同的短板没有气馁。不断传播积极的态度正能量,使我们在这个吃力的过程中任然保持了精神的愉悦。经常指出我犯得低级错误,大大提高了我们的效率。
中间的肉:结对编程优势在于两人有各自擅长的模块,能较高效率。
中间的青菜:因为不会使用C语言实现GUI,是我们俩共同的短板,所以在新的语言环境下花了较多的时间。
第二片面包:我由于编程基础并不扎实,以前学习都是停留在理论层次,实际操作能力并不强。我们这个学期的软件工程作业能很好地锻炼我们的实际操作能力。而且这次的结对编程也让我意识到很多自己的不足,希望以后能够共同进步。
第二次作业:结对编程,四则运算的GUI实现的更多相关文章
- 结对编程-四则运算生成程序-GUI界面
201421123118 张中结 201421123098 胡丹丹 a.需求分析 这个程序做成GUI(可以是Windows PC 上的,也可以是Mac.Linux,web,手机上的),成为一个有基本功 ...
- 王译潇20162314 实验报告三plus结对编程四则运算第一阶段
北京电子科技学院BESTI实验报告 课程:程序设计与数据结构 班级: 1623 姓名: 王译潇 学号:20162314 指导教师:娄佳鹏老师.王志强老师 实验日期:2017年5月12号 实验密级: 非 ...
- 20175226 2018-2019-2《java程序设计》结对编程-四则运算(第一周-阶段总结)
结对编程-四则运算(第一周-阶段总结) 需求分析 实现一个四则运算程序,要求: 自动随机生成小学四则运算题目(加,减,乘,除) 支持整数.真分数且支持多项式 能够利用栈的思想,将中缀转换为后缀表达式 ...
- 20175305张天钰Java结对编程四则运算(二)
Java结对编程四则运算(二) 一.题目描述及要求 Git提交粒度不要太粗,建议一个文件/一个类/一个函数/一个功能/一个bug修复都进行提交,不能一天提交一次,更不能一周一次,参考Commit Me ...
- 结对编程--四则运算(Java)梅进鹏 欧思良
结对编程--四则运算(Java)梅进鹏 欧思良 Github项目地址:https://github.com/MeiJinpen/Arithmetic 功能要求 题目:实现一个自动生成小学四则运算题目的 ...
- 20175305张天钰Java结对编程四则运算
Java结对编程四则运算 一.题目描述:如何对表达式进行求值运算呢 1.中缀表达式与后缀表达式(娄老师讲解) 中缀表达式就是运算符号在运算数中间的表达式,比如1+2,顾名思义,后缀表达式就是运算符在运 ...
- 结对编程--四则运算(Java)萧英杰 夏浚杰
结对编程--四则运算(Java)萧英杰 夏浚杰 Github项目地址 功能要求 题目:实现一个自动生成小学四则运算题目的命令行程序 使用 -n 参数控制生成题目的个数(实现) 使用 -r 参数控制题目 ...
- Java结对编程四则运算一周小结
Java结对编程四则运算一周小结 需求分析 对于四则运算来说最主要的就是要计算出产生的式子(字符串的形式). 设计思路 总体可将这个项目分解为几个部分:产生式子,计算式子,判断对错并记录: 具体的思路 ...
- 结对编程1 —— 基于GUI和Swing的四则运算题目生成器
合作伙伴 201421123102 王艳秋 201421123106 陈 雄 代码地址 题目描述 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI( ...
- 结对编程四则运算gui
码市地址:https://git.coding.net/linzhao/sizeyunsuangui.git 林 钊 -- 201421123105 吴世荣 -- 201421123119 王坤彬 - ...
随机推荐
- <经验杂谈>C#生成条形码
虽然二维码满天飞,但也不能忘了条形码,本篇介绍可以在C#中使用的1D/2D编码解码器.条形码的应用已经非常普遍,几乎所有超市里面的商品上面都印有条形码: 条形码的标准: 条形码的标准有ENA条形码.U ...
- 2016 "Bird Cup" ICPC7th@ahstu--“波导杯”安徽科技学院第七届程序设计大赛
"波导杯"安徽科技学院第七届程序设计大赛 原文章网页 Contest - 2016 "Bird Cup" ICPC7th@ahstu Start time: ...
- Node.js Up and Runing 学习日记(一)
认识一个Node.js程序 HTTP模块是专为快速非阻塞式HTTP服务器而用C重新编写的. 1. var http = require('http'); 2. http.createServer(fu ...
- python——序列 & 集合 & 映射
列表 & 元组 & 字典 & 集合 序列 序列: 每个元素可以是任何类型(也可以是序列),每个元素被分配一个序号(从0开始)(序号,也叫索引,表示元素的位置) Python中的 ...
- 关于修改了db2 instance下面文件夹权限导致的不可连接
前一段时间,我修改了db2inst1目录下的所有文件的权限,目的是方便其他用户访问和查看里面的文件信息.可是修改了之后,我用IBM data studio就始终连接不上数据库了. 查看了错误代码,看提 ...
- Leetcode Pasacl'sTriangle
对于Vector的用法,实在是知道的太少,算法思想比较简单,核心也就一行代码,但是实现错误就显示平时代码的不熟悉. Given numRows, generate the first numRows ...
- PYTHON:新闻聚合
这个项目看了有段时间,因为一直没跑通,而且关于NNTP也不是特别理解.这里是转载code123的分析. 原文地址:http://www.code123.cc/1327.html 书中的第四个练习,新闻 ...
- 安卓开发中SQLite的使用(附实例)
在Android平台上系统内置了丰富的API来供开发人员操作SQLite,我们可以轻松的完成对数据的存取.下面以我自己创建的收入信息表(InAccount)为例,来学习SQLite的使用. 主要是四个 ...
- unity slua整合帅气的lua-pb解析protobuf
了解到lua的一个protobuf库,接口帅气,比之前用过的一些lua protobuf库要好很多,深得我心.而且能保持更新,比其他库几年没更新要放心. lua-pb动态解析protobuf协议,无需 ...
- IT科技企业逻辑思维面试题
逻辑思维面试题 一.假设有一个池塘,里面有无穷多的水.现有2个空水壶,容积分别为5升和6升.问题是如何只用这2个水壶从池塘里取得3升的水.[请描述操作过程] 答:(1)先用容积为6升的水壶装满水: ( ...