合作伙伴 201421123102 王艳秋 201421123106 陈 雄

代码地址

题目描述

我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:

记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。

有计时功能,能显示用户开始答题后的消耗时间。

界面支持中文简体/中文繁体/英语,用户可以选择一种。

实现功能:

1、题目数量选择;

2、难度等级选择;

3、记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算;

4、有计时功能,能显示用户开始答题后的消耗时间;

5、多语言选择;

6、限定用户输入(不允许非数字)

结对分工

王艳秋(在下): 1、语言切换功能 2、代码规范

陈 雄(伙伴): 1、答题计时功能 2、对错总数功能

思维导图



关键代码

public void panelRepaint(JPanel a,JPanel b,JPanel c){
a.remove(b);
a.add(c);
a.revalidate();
a.repaint();
}

以testJFrame为顶级容器,panel为二级容器,panel下面七个面板作为三级容器放置各种组件。该函数实现了panel面板的重绘以便在各个三级面板之间切换。

if(e.getActionCommand().equals("sure")){
this.questNum=quesNumJTA.getText();
if(!questNum.matches("[0-9]*[1-9][0-9]*")){
panelRepaint(panel,quseNumJP,warningJP);
}
else{
panelRepaint(panel,quseNumJP,difficultyChooseJP);
}
}

程序中当用户输入题目数量时可能会出现输入的数为0,输入字符,输入小数,输入分数及输入负数的情况。在用户输入之后点击确定,这段代码会使用正则表达式对用户的输入进行匹配,若匹配不到大于0的整数界面将切换到warningJP提示用户重新输入。

if(e.getActionCommand().equals("easy")){
startTime=System.currentTimeMillis();
this.easyOrDifficult=1;
pMaker.creatExecercise(easyOrDifficult);
showQuestionJL.setText(pMaker.quesStr);
panelRepaint(panel,difficultyChooseJP,answerJP);
}
if(e.getActionCommand().equals("difficult")){
startTime=System.currentTimeMillis();
this.easyOrDifficult=2;
pMaker.creatExecercise(easyOrDifficult);
showQuestionJL.setText(pMaker.quesStr);
panelRepaint(panel,difficultyChooseJP,answerJP);
}
if(e.getActionCommand().equals("next")){
if(i<Integer.parseInt(questNum)){
panelRepaint(panel,nextJP,answerJP);
i++;
}
else{
endTime=System.currentTimeMillis();
File file=new File("D:/count.txt");
BufferedReader reader=null;
try {
reader=new BufferedReader(new FileReader(file));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
String i=null;
String i1=null;
try {
i=reader.readLine();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
i1=reader.readLine();
} catch (IOException e1) {
e1.printStackTrace();
}
PrintWriter writer=null;
try {
writer =new PrintWriter(new FileOutputStream(file));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
writer.println((Integer.parseInt(i)+trueCount));
writer.println((Integer.parseInt(i1)+(Integer.parseInt(questNum)-trueCount)));
writer.flush();
try {
reader=new BufferedReader(new FileReader(file));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
try {
i=reader.readLine();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
i1=reader.readLine();
} catch (IOException e1) {
e1.printStackTrace();
}
if(chineseOrEnglish==0){
showCountJL.setText("正确题数:"+trueCount+" 错误题数:"+(Integer.parseInt(questNum)-trueCount)+" 用时: "+((endTime-startTime)/1000)+" s"+" 历史总正确题数: "+i+" 历史总错误题数: "+i1);
}
else{
showCountJL.setText("true:"+trueCount+" false:"+(Integer.parseInt(questNum)-trueCount)+" time: "+((endTime-startTime)/1000)+" s"+" totaltrue: "+i+" totalfalse: "+i1);
}
panelRepaint(panel,nextJP,countJP);
}
}

这段代码实现了计时功能,用户选择完难度后计录系统时间作为开始时间,做完最后一题后用户按next记录系统时间作为结束时间。结束时间减去开始时间为做题时间。同时实现了对历史记录的写入读出功能。在D盘创建里count.txt文件第一行作为总的做对的题数,第二行作为总错题数。执行时先读入文件记录在将本次记录加上并写入。

最后读出并显示。

if(e.getActionCommand().equals("chinese")){
chineseOrEnglish=0;
numQuizJL.setText("你想测试多少题?");
difficultyQuizJL.setText("你想测试的难易程度?");
warningJL.setText("请输入一个大于0的整数!!");
sureJB.setText("确定");
easyJB.setText("容易");
difficultJB.setText("难");
nextJB.setText("下一题");
submitJB.setText("提交");
reenterJB.setText("重新输入");
panelRepaint(panel,languageChoJP,quseNumJP);
}
if(e.getActionCommand().equals("english")){
chineseOrEnglish=1;
numQuizJL.setText("how many questions u want test?");
difficultyQuizJL.setText("easy or difficult?");
warningJL.setText("please enter a number greater than 0!!");
sureJB.setText("sure");
easyJB.setText("easy");
difficultJB.setText("difficult");
nextJB.setText("next");
submitJB.setText("subnit");
reenterJB.setText("reenter");
panelRepaint(panel,languageChoJP,quseNumJP);
}

该代码实现了用户界面的中英文切换。一些特殊组件在显示时用if条件判断须显示中文还是英文。

实现功能截图



语言选择

中文版



选择题目数量



当输入0或非数字时的警告



难度选择



题目生成



回答正确



题目生成



回答错误,并给出正确答案



答题结束,显示结果

英文版



选择题目数量



当输入0或非数字时的警告



难度选择



题目生成



回答正确



回答错误,并给出正确答案



答题结束,显示结果

实验总结

1、结对编程中,伙伴总是能不厌其烦地为我解除疑惑,互帮互助,一起进步;

2、在结对编程中就算自己不想继续下去时,也会因为伙伴而坚持下去;

3、在上一次的作业中我没能好好的规范代码,在这一次的试验中我也深深的体会到了代码规范的重要性。

结对展示



PSP展示

PSP2.1 Personal Software Process Stages Time (%) Senior Student(/hour) Time (%)(/hour)
· Planning 计划 2 1.5
· Estimate 估计这个任务需要多少时间 41 52
· Analysis 需求分析 (包括学习新技术) 3 5
· Coding Standard 代码规范 0.5 1.5
· Design 具体设计 1.5 3
· Coding 具体编码 30 35
· Test 测试(自我测试,修改代码,提交修改) 2 3
Reporting 报告 2 3

结对编程1 —— 基于GUI和Swing的四则运算题目生成器的更多相关文章

  1. 结对编程——paperOne基于java web的简易四则运算出题网站

    项目成员:张金生     张政 需求分析: 1.要进行四则运算: 2.运算题目随机: 3.进行对错判断: 4.整数运算. 程序概要: 1.用JSP实现: 2.用户可选择题目数量: 3.答题页用表格列出 ...

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

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

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

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

  4. 结对编程(四则运算题目生成器core第七组)对接心得

    在这篇博客博主想记录一下此次结队编程作业中与ui组对接的心得.在这里我也想表达一下对涂涵越同学的敬佩,他遇到困难时孜孜不倦求解的毅力着实让我佩服,我们在dll的生成上遇到了很大的困难,要不是他的坚持我 ...

  5. 结对项目:四则运算题目生成器(C)

    一.Github项目地址:https://github.com/Spartaright/myapp(合作人:梁天龙.赖佑铭) 二.PSP表格(如下图) 1.项目地址 PSP表格 PSP2.1 Pers ...

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

    201421123016郑怀勇     201421123017康建灿 程序代码 / 康建灿 一.需求分析 记录用户的对错总数. 程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算. 有 ...

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

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

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

    项目代码地址 / WEB应用地址 / 合作伙伴iFurySt博文链接 需求分析 本次程序是基于原有的控制台四则运算器的基础上,改成WEB的形式,同时还增加了一些新的功能.同时因为交互方式的改变,代码也 ...

  9. 结对项目:四则运算题目生成器(Java)

    目录 一.需求分析 二.开发计划 三.实现方案 3.1 项目结构 3.2 代码说明 3.2.1 出题功能代码 3.2.3 批卷功能代码 3.2.3 四则运算功能代码 四.效能分析 4.1 程序效能 4 ...

随机推荐

  1. 安徽省2016“京胜杯”程序设计大赛_A_砝码称重

    砝码称重 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 61 Accepted: 37 Description 小明非常喜 ...

  2. 分享一道JS前端闭包面试题

    输出以下代码的结果 function fun(n,o){ console.log(o); return { fun:function(m){ return fun(m,n);//[1] } } } v ...

  3. 详解.Net 如何上传自己的包到Nuget平台以及如何使用Nuget包管理器

    首先需要一个Nuget账户,可以在官网注册:https://www.nuget.org.已有账户略. 需要一个ApiKeys,登录之后,在我的账户里找到ApiKeys进去; 创建ApiKeys 下载N ...

  4. MySQL索引篇

    innodb索引概念   总结记录下innodb的索引概念,以备查看   innodb索引分类: 聚簇索引(clustered index)     1)  有主键时,根据主键创建聚簇索引     2 ...

  5. Oracle基础--命令

    ====================== 基础命令====================== 1.su – oracle 不是必需,适合于没有DBA密码时使用,可以不用密码来进入sqlplus界 ...

  6. HTML中直接写js 函数

    1.在HTML中直接写JS函数: <body onload="javascript:{window.location.href='http://www.baidu.com/'}&quo ...

  7. 连上Wi-Fi 热点自动弹窗的实现方法

    当我们连上某个热点, 自动弹出登录窗口的专业名称叫做: Captive portal 原理, 实现方式有三种 1 : dns 跳转, 在热点上面实现配置, 把所有dns请求返回都配置为:服务器地址 : ...

  8. Android MediaCodec硬编兼容性测试方案

    作者:阿宝 更新:2016-08-15 来源:彩色世界(https://blog.hz601.org/2016/08/15/android-mediacodec-hardcode-compatibil ...

  9. NetBeans主题配色方案加设置.md

    1.网上下载主题的地址是:http://netbeansthemes.com/ **上面的主题我看了下但是感觉不太适合自己所以自己就仿照的设置了下下面我附上自己的配置信息 感兴趣的可以下载下来自己看下 ...

  10. 【VMware Workstation】NAT映射虚拟机所在网络

    配置虚拟网络编辑器 配置网络映射关系