结对作业(1)----基于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());
btnSubmit.setBounds(, , , );
btnSubmit.addActionListener(this);
jpMain.add(btnSubmit);
btnReset = new JButton(tips.get());
btnReset.setBounds(, , , );
btnReset.addActionListener(this);
jpMain.add(btnReset);
jpTest = new JPanel();
jpTest.setLayout(new GridLayout(Background.testNum, , , ));
jpTest.setBackground(Color.gray);
for (int i = ; 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", , ));
jpQuestions[i].add(labQuestions[i]);
labQuestions[i].setBounds(, , , );
tfdAnswer[i] = new JTextField();
tfdAnswer[i].setFont(new Font("Consolas", , ));
tfdAnswer[i].setBackground(Color.white);
jpQuestions[i].add(tfdAnswer[i]);
tfdAnswer[i].setBounds(, , , );
jpTest.add(jpQuestions[i]);
}
jpMain.add(jpTest).setBounds(, , , );
add(jpMain);
}
2.计时功能的实现。
public void showTime() {
labTime = new JLabel(tips.get() + "00:00");
labTime.setBounds(, , , );
jpMain.add(labTime);
new Thread() {
public void run() {
while (true) {
try {
Thread.sleep();
seconds++;
if (seconds >= ) {
seconds = ;
minutes++;
}
if (seconds < )
secStr = "" + seconds.toString();
else
secStr = seconds.toString();
if (minutes < )
minStr = "" + minutes.toString();
else
minStr = minutes.toString();
} catch (InterruptedException e) {
e.printStackTrace();
}
labTime.setText(tips.get() + 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(-);
} 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 = ; i < Background.testNum; i++) {
answers[i]=tfdAnswer[i].getText();
}
wrong= background.checkAnswer(answers);
String s=null;
if(wrong.length==)
s=tips.get();
else{
s=tips.get()+"\n";
String standardAnswer[]=new String[Background.testNum];
standardAnswer=background.getStandardAnswer();
for(int i=;i<wrong.length;i++){
s=s+new Integer(wrong[i])+":"+standardAnswer[new Integer(wrong[i])-];
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 |
小结:
个人作业1使用的是C语言实现,但不会使用C语言实现GUI,便查阅资料使用JAVA实现此次实验。有一个伙伴,坐在一起,并肩作战,面对着同一台显示器,使用着同一键盘,同一个鼠标,一起思考,一起分析,一起编程是一个有趣的过程,通过此次实验我了解到1+1有时会>2,所谓旁观者清,这样会更好更快速准确的找到错误并修改,事半功倍。
汉堡包评价:
第一片面包:潘志坚同学认真,愿意面对困难并设法解决问题,比较耐心,和我性格互补所以选择同他合作,两个人结对编程,可以优势互补,互相学习。
中间的肉:结对编程优势在于两人有各自擅长的模块,能较高效率。
中间的青菜:因为不会使用C语言实现GUI,是我们俩共同的短板,所以在新的语言环境下花了较多的时间。
第二片面包:我本身没有很扎实的编程基础,在编写过程中会有些吃力,而这次结对编程则给我留下了深刻的印象,不仅在一定程度上避免了这些问题,还让我明显体会到了结对编程的优越性。两个人一起编程可以有效避免一些可笑的低级错误,还有可以一起分析、解决问题,就好像是通过两人不断的头脑风暴和知识碰撞来解决问题。

结对作业(1)----基于GUI的四则运算的更多相关文章
- 结对作业:基于GUI实现四则运算
1)Coding.Net项目地址:https://git.coding.net/day_light/GUIszysLL.git 2)在开始实现程序之前,在下述PSP表格记录下你估计将在程序的各个模块的 ...
- 结对作业1----基于GUI的四则运算生成器
组员:201421123015 陈麟凤 201421123019 张志杰 201421123020 黄海鸿 coding 地址:代码点这里 需求分析: 1.除了整数的四则运算还要支持分数的四则运算: ...
- 结对作业1--基于GUI的四则运算
201421123002 翁珊,201421123006 黄月梅,201421123007 徐晓珊 题目描述: 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程 ...
- 基于GUI的四则运算
基于GUI的四则运算 李志强 201421123028 连永刚 201421123014 林方言 201421123023 coding 地址 https://git.coding.net/lizhi ...
- 结对作业--基于GUI的四则运算生成器
组员:201421123015 陈麟凤 201421123019 张志杰 201421123020 黄海鸿 coding 地址 :https://coding.net/u/zhang1995/p/wo ...
- 结队编程-基于gui的四则运算生成器
成员:卢少锐 201421123027.刘存201421033023 coding.net地址 1.需求分析:除了实现四则运算的功能外,还添加了计时器功能和语言选择功能 2.程序设计:这次作业是基于上 ...
- 结队编程--基于GUI的四则运算
coding地址 https://git.coding.net/lizhiqiang0x01/GUI-sizeyunsuan.git 李志强 201421123028 连永刚 201421123014 ...
- 【第二次个人作业】结对作业Core第一组:四则运算生成PB16061082+PB16120517
[整体概况] 1.描述最终的代码的实现思路以及关键代码. 2.结对作业两个人配合的过程和两个人分工. 3.API接口文档和两个组的对接. 4.效能分析,优化分析和心得体会. [代码实现] 一. 实现功 ...
- 结对作业-基于GUI的四则运算
一.需求分析 1.题目要求: 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac.Linux,web ...
随机推荐
- AngularJS--购物车全选/取消全选功能实现
刚学习angularJS,于是练习写了一个类似于购物车的全选/取消全选的功能,主要实现的功能有: 1.勾选全选checkbox,列表数据全部被勾选,取消同理,用ng-model实现双向绑定: 2.选中 ...
- 运行和控制Nginx
Nginx命令行选项 启动.停止.重启nginx命令 如何重新加载nginx配置文件 nginx程序不重启平滑升级可执行文件 nginx命令行参数 不像许多其他软件系统,Nginx 仅有几个命令行 ...
- linux守护进程、SIGHUP与nohup详解
前端时间帮忙定位个问题.docker容器故障恢复后,其中的keepalived进程始终无法启动,也看不到Keepalived的日志. strace 查看系统调用之后,发现了原因所在 socket(PF ...
- mongodb相关 (population)
记录Mongodb的populate Mongodb是文档型数据库,不存在像关系型数据库一样的外键设置,但通过Mongodb中的populate函数可以模拟关系型数据库的外键连接后的查询功能. 文档型 ...
- Mac terminal commands
Mac terminal commands 1.install_name_tool修改dylib安装名称的命令 2.codesign 签名及查看 3.xcode 工程编译 4.程序打包app---&g ...
- ARP协议详解RARP
简单来说,ARP协议是IP地址转换成MAC地址的协议.链路层协议.过程如下: 1:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系. 2:当源主机要 ...
- iOS组件化方案的几种实现
最近研究了一下项目的组件化,把casa.bang.limboy的有关组件化的博客看了一遍,学到了不少东西,对目前业界的组件化方案有了一定的了解.这些高质量的博客大致讨论了组件化的三种方案:url-bl ...
- 在Android中使用枚举注解而不是枚举
Enums often require more than twice as much memory as static constants. You should strictly avoid us ...
- python 符合Python风格的对象
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 25.0px Helvetica } 对象表示形式 每门面向对象的语言至少都有一种获取对象的字符串表示形式的 ...
- TCP三次握手和四次挥手
三次握手 (1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认. (2)第二次握手: ...