前几天在装固态硬盘(SSD)分区的时候误把机械硬盘(HDD)分区删除,导致原创的很多程序代码和很多收藏的实用软件等等几百G的文件丢失(心痛啊)。现在决定把自己最近写的代码分享出来,不然下次不小心又弄没了灰都找不回来。
这个小学生数学练习题系统 是我们Java期末的作业,总共3个文件,下面是源代码,由于发布在博客原因代码格式化有问题。源代码最后提供下载。
Main.java文件
public class Main {
public static void main(String[] args) {
new CreateWindow().MainMenu();
}
}
CreateWindow.java文件
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.*;
public class CreateWindow implements ActionListener {
JFrame menuJFrame = null;
@SuppressWarnings("rawtypes")
private JComboBox item = null;
private JButton submit = null;
private JButton result = null;
private JButton pass = null;
private JTextField youResult[] = null;
JLabel Math[] = null;
JLabel labelAnswer[] = null;
JLabel labelResult[] = null;
private int[] mathList = null;
private int[] mathResult = new int[20];
private boolean passTag = false;
JPanel answerList[] = null;
private JLabel grade = null;
// 主菜单
@SuppressWarnings({ "unchecked", "rawtypes" })
public void MainMenu() {
/* 创建组件 */
menuJFrame = new JFrame("小学生数学练习题目自动生成系统");
// 标题栏
JPanel jp1 = new JPanel();
// 选项栏
JPanel jp2 = new JPanel();
// 按钮栏
JPanel jp3 = new JPanel();
// 提示信息
JPanel notice = new JPanel();
JTextArea text = new JTextArea(6, 34);
submit = new JButton("提交并生成题目");
JLabel title = new JLabel("小学生题目生成系统");
JLabel hint = new JLabel("题目类型:");
// 下拉框列表
String itemList[] = { "10以内加法", "10以内减法", "20以内加法", "20以内减法", "100以内加法", "100以内减法", "100以内乘法", "100以内除法" };
item = new JComboBox(itemList);
/* 组件创建结束 */
Container con = menuJFrame.getContentPane();
// 设置布局方式
con.setLayout(new GridLayout(4, 1));
jp1.setLayout(new FlowLayout(FlowLayout.CENTER));
jp2.setLayout(new FlowLayout(FlowLayout.CENTER));
jp3.setLayout(new FlowLayout(FlowLayout.CENTER));
// 将组件加入容器
jp1.add(title);
jp2.add(hint);
jp2.add(item);
jp3.add(submit);
notice.add(text);
con.add(jp1);
con.add(jp2);
con.add(jp3);
con.add(notice);
// 设置组件属性 事件监听
text.setText(
" 本系统是专门为小学生设计的题目练习系统,学生可以根据系统的选项选择相应的题目进行练习,学生提交答案后,系统会判断答案是否正确并统计最终成绩,点击答案按钮后,系统会将每一题的正确答案显示出来。");
text.setLineWrap(true);
text.setWrapStyleWord(true);
text.setForeground(Color.white);
text.setEditable(false);
title.setFont(new Font("方正舒体", 1, 26));
title.setForeground(Color.WHITE);
submit.setBackground(Color.LIGHT_GRAY);
jp1.setBackground(Color.DARK_GRAY);
notice.setBackground(Color.DARK_GRAY);
text.setBackground(Color.DARK_GRAY);
submit.addActionListener(this);
submit.setActionCommand("submit");
menuJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
menuJFrame.setVisible(true);
menuJFrame.setResizable(false);
menuJFrame.setBounds(600, 300, 400, 350);
}
// 题目显示界面
public void answer(String str) {
JDialog answerJFrame = new JDialog(menuJFrame, "答题面板", true);
answerList = new JPanel[22];
JPanel con = new JPanel();
answerList[20] = new JPanel();
answerList[21] = new JPanel();
youResult = new JTextField[20];
JLabel label[] = new JLabel[20];
Math = new JLabel[20];
labelResult = new JLabel[20];
labelAnswer = new JLabel[20];
grade = new JLabel("请计算下列题目(每题5分)");
passTag = false;
pass = new JButton("提交评卷");
result = new JButton("查看答案");
// 按键监听
pass.addActionListener(this);
result.addActionListener(this);
pass.setActionCommand("pass");
result.setActionCommand("result");
// 按钮颜色设置
pass.setBackground(Color.ORANGE);
pass.setForeground(Color.white);
result.setBackground(Color.gray);
result.setForeground(Color.white);
answerList[21].add(grade);
answerList[21].setBackground(Color.darkGray);
grade.setForeground(Color.white);
grade.setFont(new Font("幼圆", 1, 15));
con.add(answerList[21]);
con.setLayout(new BoxLayout(con, BoxLayout.Y_AXIS));
for (int i = 0; i < 20; i++) {
label[i] = new JLabel("题号" + String.format("%02d", i + 1) + ":");
labelAnswer[i] = new JLabel();
labelResult[i] = new JLabel();
Math[i] = new JLabel();
answerList[i] = new JPanel();
youResult[i] = new JTextField(4);
// 屏蔽非数字输入
youResult[i].addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
int keyChar = e.getKeyChar();
if (keyChar >= KeyEvent.VK_0 && keyChar <= KeyEvent.VK_9) {
} else {
e.consume(); // 关键,屏蔽掉非法输入
}
}
});
}
for (int i = 0; i < 20; i++) {
if (i % 2 != 0) {
answerList[i].setBackground(Color.darkGray);
label[i].setForeground(Color.white);
Math[i].setForeground(Color.white);
labelResult[i].setForeground(Color.white);
}
answerList[i].add(label[i]);
answerList[i].add(Math[i]);
answerList[i].add(youResult[i]);
answerList[i].add(labelAnswer[i]);
answerList[i].add(labelResult[i]);
con.add(answerList[i]);
}
answerList[20].add(result);
answerList[20].add(pass);
con.add(answerList[20]);
JScrollPane jsp = new JScrollPane(con);
answerJFrame.add(jsp);
setMath(str);
// answerJFrame.pack();
answerJFrame.setBounds(800, 200, 400, 740);
answerJFrame.setResizable(false);
answerJFrame.setVisible(true);
answerJFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public void setMath(String str) {
CreateMath math = new CreateMath();
switch (str) {
// 10以内加法
case "10以内加法":
for (int i = 0; i < 20; i++) {
mathList = math.Sum_10();
mathResult[i] = mathList[2];
Math[i].setText(mathList[0] + " + " + mathList[1] + " = ");
}
break;
// 20以内加法
case "20以内加法":
for (int i = 0; i < 20; i++) {
mathList = math.Sum_20();
mathResult[i] = mathList[2];
Math[i].setText(mathList[0] + " + " + mathList[1] + " = ");
}
break;
// 100以内加法
case "100以内加法":
for (int i = 0; i < 20; i++) {
mathList = math.Sum_100();
mathResult[i] = mathList[2];
Math[i].setText(mathList[0] + " + " + mathList[1] + " = ");
}
break;
// 100以内加法
case "100以内减法":
for (int i = 0; i < 20; i++) {
mathList = math.Reduce_100();
mathResult[i] = mathList[2];
Math[i].setText(mathList[0] + " - " + mathList[1] + " = ");
}
break;
// 10以内减法
case "10以内减法":
for (int i = 0; i < 20; i++) {
mathList = math.Reduce_10();
mathResult[i] = mathList[2];
Math[i].setText(mathList[0] + " - " + mathList[1] + " = ");
}
break;
// 20以内减法
case "20以内减法":
for (int i = 0; i < 20; i++) {
mathList = math.Reduce_20();
mathResult[i] = mathList[2];
Math[i].setText(mathList[0] + " - " + mathList[1] + " = ");
}
break;
// 100以内乘法
case "100以内乘法":
for (int i = 0; i < 20; i++) {
mathList = math.Mult();
mathResult[i] = mathList[2];
Math[i].setText(mathList[0] + " × " + mathList[1] + " = ");
}
break;
// 100以内除法
case "100以内除法":
for (int i = 0; i < 20; i++) {
mathList = math.Division();
mathResult[i] = mathList[2];
Math[i].setText(mathList[0] + " ÷ " + mathList[1] + " = ");
}
}
}
// 事件监听器
@Override
public void actionPerformed(ActionEvent e) {
String str = (String) item.getSelectedItem();
// 主菜单生成题目按钮事件
if (e.getActionCommand().equals("submit")) {
// menuJFrame.setVisible(false);
answer(str);
}
if (e.getActionCommand().equals("pass")) {
int status = JOptionPane.showConfirmDialog(null, "确定现在提交你的答案?", "提示信息", JOptionPane.YES_NO_OPTION);
if (status == 0) {
int tmp = 0, tmp2 = 0;
for (int i = 0; i < 20; i++) {
if (youResult[i].getText().length() > 0)
tmp2++;
}
if (tmp2 == 20) {
passTag = true;
try {
for (int i = 0; i < 20; i++) {
if (mathResult[i] == Integer.parseInt(youResult[i].getText())) {
labelAnswer[i].setText(" √ ");
labelAnswer[i].setForeground(Color.RED);
tmp += 5;
} else {
labelAnswer[i].setText(" × ");
labelAnswer[i].setForeground(Color.RED);
}
}
} catch (NumberFormatException e1) {
JOptionPane.showMessageDialog(null, "请检查你的输入是否有非数字项!", "警告信息", JOptionPane.INFORMATION_MESSAGE);
}
answerList[21].setBackground(Color.ORANGE);
grade.setText("你的最终成绩为:" + tmp + "分");
grade.setForeground(Color.RED);
} else {
JOptionPane.showMessageDialog(null, "需要回答完所有题目才能提交!!", "提示信息", JOptionPane.INFORMATION_MESSAGE);
}
} else {
}
}
if (e.getActionCommand().equals("result")) {
if (passTag == true) {
for (int i = 0; i < 20; i++) {
labelResult[i].setText(" 本题答案:" + mathResult[i]);
}
} else {
JOptionPane.showMessageDialog(null, "请先提交你的答案才能查看正确答案!", "提示信息", JOptionPane.INFORMATION_MESSAGE);
}
}
}
}
CreateMath.java文件
import java.util.Random;
public class CreateMath {
// 产生随机数
private Random ran = new Random();
/* 生成加法题目开始 */
public int[] Sum_10() {
// 10以内
int array[] = new int[3];
array[0] = ran.nextInt(8) + 1;
array[1] = ran.nextInt(9 - array[0]) + 1;
array[2] = array[0] + array[1];
return array;
}
public int[] Sum_20() {
// 20以内加法
int array[] = new int[3];
array[0] = ran.nextInt(18) + 1;
array[1] = ran.nextInt(19 - array[0]) + 1;
array[2] = array[0] + array[1];
return array;
}
public int[] Sum_100() {
// 100以内加法
int array[] = new int[3];
array[0] = ran.nextInt(98) + 1;
array[1] = ran.nextInt(99 - array[0]) + 1;
array[2] = array[0] + array[1];
return array;
}
/* 加法题目生成结束 */
/* 生成减法题目开始 */
public int[] Reduce_10() {
int array[] = new int[3];
int tmp_1 = ran.nextInt(8) + 1;
int tmp_2 = ran.nextInt(9 - tmp_1) + 1;
// 设置数据顺序 确保计算结果为正数
array[0] = tmp_1 > tmp_2 ? tmp_1 : tmp_2;
array[1] = tmp_1 > tmp_2 ? tmp_2 : tmp_1;
array[2] = array[0] - array[1];
return array;
}
public int[] Reduce_20() {
int array[] = new int[3];
int tmp_1 = ran.nextInt(18) + 1;
int tmp_2 = ran.nextInt(19 - tmp_1) + 1;
// 设置数据顺序 确保计算结果为正数
array[0] = tmp_1 > tmp_2 ? tmp_1 : tmp_2;
array[1] = tmp_1 > tmp_2 ? tmp_2 : tmp_1;
array[2] = array[0] - array[1];
return array;
}
public int[] Reduce_100() {
int array[] = new int[3];
int tmp_1 = ran.nextInt(98) + 1;
int tmp_2 = ran.nextInt(99 - tmp_1) + 1;
// 设置数据顺序 确保计算结果为正数
array[0] = tmp_1 > tmp_2 ? tmp_1 : tmp_2;
array[1] = tmp_1 > tmp_2 ? tmp_2 : tmp_1;
array[2] = array[0] - array[1];
return array;
}
/* 生成减法题目结束 */
/* 得数在100以内乘法 */
public int[] Mult() {
int array[] = new int[3];
array[0] = ran.nextInt(34) + 1;
array[1] = ran.nextInt(100 / array[0]);
array[2] = array[0] * array[1];
return array;
}
/* 生成除法题目 */
public int[] Division() {
int array[] = new int[3];
while (true) {
array[0] = ran.nextInt(99) + 1;
array[1] = ran.nextInt(99) + 1;
if (array[0] % array[1] == 0 && array[0] != array[1] && array[0] > array[1]) {
array[2] = array[0] / array[1];
break;
} else {
continue;
}
}
return array;
}
}
源代码下载 小学生数学练习题目自动生成系统源代码.zip
这个有点安逸,可以给我弟弟用了!哈哈
额(︶︿︶)=凸 :wink:
厉害了,…… :shock:
没什么厉害的,这个算是一个简单的程序了~
都写出来了,版权保护是个问题哦!
就没想这个~~~