简易四则运算生成程序——添加GUI支持

时间:2022-09-24 12:22:46

项目成员:张金生     张政

工程地址:

https://coding.net/u/jx8zjs/p/paperOne/git

ssh://git@git.coding.net:jx8zjs/paperOne.git

需求:

  1.GUI支持:用户界面新增支持 Windows GUI,同时保留原有命令行下所有功能。

  2.配置文件:提供用户可用文本编辑器修改的配置文件,在其中包括用户名、当前难度、总答题数、答错题数、答对题数。

  3.错题本:可回放做错的题目,提供再次练习的机会/删除特定错题。

设计:

  1.GUI编程可以使用windowbuilder辅助编写;

  2.配置文件可以在程序运行时读入并初始化设定,并且在用户答题之后点击按钮同时将错题记录下来并保存到文件中;

  3.回放错题时,将错题保存在arraylist中,删除时根据指定删除特定行,并在用户提交时将新的错题集覆盖写入错题本中。

运行:

  由于提供了图形化界面,操作提示更加通俗易懂,具体效果会在后面结果中展示。需要注意的是,答题结果以及部分错误提示会在窗口正下方展示,而不是以弹窗的方式。

代码:

  1.初始参数声明:主要定义了窗口、问题、答案等。

       private JFrame frmPaperone;
private JTextField textFieldNum; QuestionGen qg = new QuestionGen(); ArrayList<String[]> questions = new ArrayList<String[]>();
ArrayList<JTextField> answers = new ArrayList<JTextField>(); public MainWindow() {
initialize();
   }

  2.设置窗口:包括标签、按钮、输入框、排列方式等等。

         frmPaperone = new JFrame();
frmPaperone.setTitle("PaperOne出题助手");
frmPaperone.setBounds(100, 100, 761, 496);
frmPaperone.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmPaperone.getContentPane().setLayout(new BorderLayout(0, 0));
JPanel panelConfig = new JPanel();
frmPaperone.getContentPane().add(panelConfig, BorderLayout.NORTH);
JLabel lblNewLabel = new JLabel("出题难度");
panelConfig.add(lblNewLabel);
JComboBox<String> comboBoxComplex = new JComboBox<String>();
comboBoxComplex.setModel(new DefaultComboBoxModel<String>(new String[] { "简单", "普通", "中等", "复杂" }));
panelConfig.add(comboBoxComplex);
JLabel label = new JLabel("出题数量");
panelConfig.add(label);
textFieldNum = new JTextField();
textFieldNum.setText("10");
panelConfig.add(textFieldNum);
textFieldNum.setColumns(10);
JLabel label_1 = new JLabel("运行模式");
panelConfig.add(label_1);
JComboBox<String> comboBoxMode = new JComboBox<String>();
comboBoxMode.setModel(new DefaultComboBoxModel<String>(new String[] { "答题模式", "打印模式" }));
panelConfig.add(comboBoxMode);
JLabel label_2 = new JLabel("答题时间");
panelConfig.add(label_2);
JSpinner spinnerMinute = new JSpinner();
panelConfig.add(spinnerMinute);
JLabel label_3 = new JLabel("分");
panelConfig.add(label_3);
JSpinner spinnerSecond = new JSpinner();
panelConfig.add(spinnerSecond);
JLabel label_4 = new JLabel("秒");
panelConfig.add(label_4);
JPanel panelStatus = new JPanel();
frmPaperone.getContentPane().add(panelStatus, BorderLayout.SOUTH);
JLabel messageBar = new JLabel(" ");
panelStatus.add(messageBar);
JPanel panelMain = new JPanel();
frmPaperone.getContentPane().add(panelMain, BorderLayout.CENTER);
panelMain.setLayout(new MigLayout("", "[][grow]", "[][]"));

  3.设置按钮动作:点击“开始出题”按钮之后要进行的操作,包括检测用户输入的设置是否合法根据用户选择的难度出题检测用户选择的模式(答题模式或打印模式)答题模式下判断对错 等等。值得注意的是,在点击按钮时需要清空原本遗留的数据,比如Arraylist、JPanel等。

         JButton buttonStart = new JButton("开始出题");
buttonStart.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent event) {
frmPaperone.repaint();
messageBar.setText("");
String numstr = textFieldNum.getText();
int complex = comboBoxComplex.getSelectedIndex();
int mode = comboBoxMode.getSelectedIndex();
panelMain.removeAll();    //初始化
questions.clear();
answers.clear();
if (isNumeric(numstr)) {    //后续操作均是在用户输入合法条件下进行的
int num = Integer.parseInt(numstr);
for (int n = 0; n < num; n++) {
String[] question = new String[2];
switch (complex) {    //判断用户选择的出题难度
case 0: {
question[0] = qg.generateSimpleQuestion();
break;
}
case 1: {
question[0] = qg.generateCommonQuestion();
break;
}
case 2: {
question[0] = qg.generateMediumQuestion();
break;
}
case 3: {
question[0] = qg.generateComplexQuestion();
break;
}
default:
}
try {
question[0] = "Question " + (n + 1) + " :" + question[0];
question[1] = qg.answer;
questions.add(question);
} catch (Exception e) {
e.printStackTrace();
}
}
switch (mode) {    //判断用户所选的模式
case 0: {
for (int m = 0; m < num; m++) {
JLabel questionBar = new JLabel(" ");
panelMain.add(questionBar, "cell 0 " + m + ",alignx trailing");
JTextField answerBar = new JTextField("", 20);
panelMain.add(answerBar, "cell 1 " + m + " ,alignx trailing");
questionBar.setText(questions.get(m)[0]);
answers.add(answerBar);
}
JButton saveButton = new JButton("保存到错题本");
saveButton.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent event) { }
});
saveButton.setVisible(false);
panelStatus.add(saveButton); JButton sudmitButton = new JButton("提交");
sudmitButton.addMouseListener(new MouseAdapter() { //判断对错
public void mouseClicked(MouseEvent event) {
String faultQuestion = new String("");
String correctAnswer = new String("");
for (int s = 0; s < num; s++) {
String answer = new String();
answer = answers.get(s).getText();
if (!answer.trim().equals(questions.get(s)[1])) {
faultQuestion += (" " + (s + 1));
correctAnswer += (" " + questions.get(s)[1]);
}
System.out.println(answers.get(s).getText());
}
if (faultQuestion.isEmpty() || faultQuestion == "") {
messageBar.setText("恭喜你全部答对啦!真是个天才!");
saveButton.setVisible(false);
} else {
messageBar.setText("很遗憾,你的第" + faultQuestion + "题答错了.正确答案分别是:" + correctAnswer);
saveButton.setVisible(true);
}
}
});
panelMain.add(sudmitButton); break;
}
case 1: {
for (int m = 0; m < num; m++) {
JLabel questionBar = new JLabel(" ");
panelMain.add(questionBar);
questionBar.setText(questions.get(m)[0] + "=" + questions.get(m)[1]);
}
break;
}
default:
}
} else {
messageBar.setText("请输入数字!");
}
}
});
panelConfig.add(buttonStart);
}

  4.判断输入合法性的函数。

     public static boolean isNumeric(String str) {
Pattern pattern = Pattern.compile("[0-9]*");
return pattern.matcher(str).matches();
}

结果:

  1.主界面:

  简易四则运算生成程序——添加GUI支持

  2.答题模式:

  简易四则运算生成程序——添加GUI支持

  3.全部答对时:

  简易四则运算生成程序——添加GUI支持

  4.计算结果有误时:

  简易四则运算生成程序——添加GUI支持

  5.打印模式:

  简易四则运算生成程序——添加GUI支持

体会:

  争论点:

  1.打印方式  最初想法是逐个答题,答一道提交一道,然后再出下一道题;因为对用户不友好,故讨论新的展示方式;

  2.判断对错  主要是关于如何保存题目以及对应的答案的探讨。

  花费时间较长的问题:排版(Layout)问题。

简易四则运算生成程序——添加GUI支持的更多相关文章

  1. 为OLED屏添加GUI支持6:进度条控件

    为OLED屏添加GUI支持6:进度条控件 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:S ...

  2. 为OLED屏添加GUI支持3:字库

    为OLED屏添加GUI支持3:字库 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:STM3 ...

  3. 为OLED屏添加GUI支持2:2D图形库

    为OLED屏添加GUI支持2:2D图形库 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:S ...

  4. &OpenCurlyDoubleQuote;四则运算生成程序——GUI支持和部分功能改进”链接

    项目成员:张金生     张政 <正文随笔发布在张金生博客中> 四则运算生成程序——GUI支持和部分功能改进

  5. 四则运算生成程序——GUI支持和部分功能改进

    项目成员:张金生     张政 工程地址: https://coding.net/u/jx8zjs/p/paperOne/git ssh://git@git.coding.net:jx8zjs/pap ...

  6. &lbrack;Unity3D&rsqb;&lbrack;Vuforia&rsqb;&lbrack;IOS&rsqb;vuforia在unity3d中添加自己的动态模型,识别自己的图片,添加GUI,播放视频

    使用环境 unity3D 5 pro vuforia 4 ios 8.1(6.1) xcode 6.1(6.2) 1.新建unity3d工程,添加vuforia 4.0的工程包 Hierarchy中 ...

  7. 把自己Github上的代码添加Cocoapods支持

    转载请注明原链接:http://www.cnblogs.com/zhanggui/p/6003481.html 一.前言 这两天被cocoapods折磨的心力憔悴.看cocoapods官网的添加支持, ...

  8. Spring Boot 添加Shiro支持

    前言: Shiro是一个权限.会话管理的开源Java安全框架:Spring Boot集成Shiro后可以方便的使用Session: 工程概述: (工程结构图) 一.建立Spring Boot工程 参照 ...

  9. 在IntelliJ IDEA中添加框架支持时找不到Hibernate的解决办法

    问题描述 第一次在Add Frameworks support界面中添加hibernate支持的时候,异常中断,导致没有成功添加. 第二次进入Add Frameworks support窗口时,发现找 ...

随机推荐

  1. vs2008下面wince错误MSDiscoCodeGenerator

    引用webservice时候错误.网上也有很多解决方法,各不相同. 不多说了. 打开vs2008安装包 找到wcu目录下面有个NetCF 目录: 下面的NetCFSetupv2.msi,NetCFSe ...

  2. angular源码分析:angular中jqLite的实现——你可以丢掉jQuery了

    一.从function JQLite(element)函数开始. function JQLite(element) { if (element instanceof JQLite) { //情况1 r ...

  3. JS使用ActiveXObject读取数据库代码示例(只支持IE)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. Ubuntu 14&period;04 关于 TensorFlow 环境的配置

    Ubuntu 14.04 关于 TensorFlow 环境的配置   本教程截图于 TensorFlow 官方文档中文版  https://github.com/jikexueyuanwiki/ten ...

  5. AJAX原理及优缺点

    1.ajax技术的背景 不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax ...

  6. 【转】priority&lowbar;queue优先队列

    转自:http://www.cppblog.com/shyli/archive/2007/04/06/21366.html http://www.cppblog.com/shyli/archive/2 ...

  7. Python:爬虫之利用Python获取指定网址上的所有图片—Jaosn niu

    # coding=gbk import urllib.request import re import os import urllib def getHtml(url): #指定网址获取函数 pag ...

  8. Hdoj 2191&period;悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 题解

    Problem Description 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品 ...

  9. POJ 1228 &lpar;稳定凸包问题&rpar;

    <题目链接> <转载于  >>> > 首先来了解什么是稳定的凸包.比如有4个点: 这四个点是某个凸包上的部分点,他们连起来后确实还是一个凸包.但是原始的凸包可 ...

  10. 一个简单的Kubernetes应用部署示例

    说明 我们通过一个示例来演示一下kubernetes部署应用的基本配置. 这个示例相对比较简单,就是一个tomcat应用加上一个mysql数据库 在tomcat里运行一个简单的webappp,这个ap ...