合作伙伴 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. RabbitMQ --- Work Queues(工作队列)

    目录 RabbitMQ --- Hello Mr.Tua 前言 Work Queues 即工作队列,它表示一个 Producer 对应多个 Consumer,包括两种分发模式:轮循分发(Round-r ...

  2. web端常见安全漏洞测试结果分析-- appscan

    基于appscan测试结果分析: 一.XSS跨站脚本 指的是攻击者往Web页面里插入恶意html代码,通常是JavaScript编写的恶意代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被 ...

  3. PAT (Basic Level) Practise (中文) 1023. 组个最小数 (20)

    1023. 组个最小数 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定数字0-9各若干个.你可以以 ...

  4. 使用xlrd模块从excel文件中导入数据

  5. C语言库函数探究

    1.strlen()求字符串长度 //模拟实现strlen函数 #include<stdio.h> #include<stdlib.h> #include<string. ...

  6. 项目记事【SpringMVC-1】:后台接收前端传来的JSON,并转成对象

    背景: 最近项目中使用SpringMVC,需要从前端接收JSON格式的请求,在后端自动转成一个与JSON格式相同的对象. 由于是一个老项目,Spring的版本是3.2.7. 问题1:POST or G ...

  7. Jenkins 环境搭建

    本文为jenkins入手教程,全文分为 jenkins安装.系统管理(配置全局安全.全局工具配置.管理插件).创建项目(同时创建证书),管理视图,jenkins 客户端,执行构建.查看任务历史 一.j ...

  8. 8.8.2 Final关键字

    final表示不可改变的含义   1.采用final 修饰的类不能被继承 2.采用final 修饰的方法不能被覆盖 3.采用final 修饰的变量不能被修改 4.final修饰的变量必须显示初始化(该 ...

  9. PHPcms9.6.0任意文件上传漏洞直接getshell 利用教程

    对于PHPcms9.6.0 最新版漏洞,具体利用步骤如下: 首先我们在本地搭建一个php环境,我这里是appserv或者使用phpnow (官网下载地址:http://servkit.org/) (只 ...

  10. Java入门(5)——类和对象还有构造方法

    类     类和对象的概念: 类是对一群具有相同属性.行为的事物的统称.        类是抽象的.       人以类聚 物以群分 对象:      对象是现实生活中的1个具体存在.      看得 ...