功能要求:该程序实现十道100以内四则运算数学题,能根据题目计算出答案,与输入答案对比,判断做题是否正确,最后计算分数。
界面要求:图形界面实现,基于ArrayList、Vector等高级类。
GUI 界面打算用netbeans实现,再完善相应的代码。
整体源码如下:
package test; import java.util.ArrayList; import java.util.Random; /** * * @author 20633 */ public class test05 extends javax.swing.JFrame { ArrayList<String> namelist = new ArrayList<String> (); ArrayList<String> idlist = new ArrayList<String> (); ArrayList<String> x1list = new ArrayList<String> (); ArrayList<String> x2list = new ArrayList<String> (); ArrayList<String> oplist = new ArrayList<String> (); ArrayList<String> daanlist = new ArrayList<String> (); // 获取随机运算符 public static String Op() { String op = ""; Random random = new Random(); int i = random.nextInt(4); switch (i) { case 0: op = "+"; break; case 1: op = "-"; break; case 2: op = "×"; break; case 3: op = "÷"; break; } return op; } // 获取随机数 private int Sui() { Random random = new Random(); /* 0----十以内 1-----百以内 2-----千以内 */ int i = jComboBox1.getSelectedIndex(); int x = 0; switch (i) { case 0: x = random.nextInt(11); break; case 1: x = random.nextInt(101); break; case 2: x = random.nextInt(1001); break; default: x = random.nextInt(11); break; } return x; } // 得到正确答案 public String Daan(int x1, int x2, String op) { double daan = 0; if (op.equals("+")) { daan = (double) x1 + x2; } else if (op.equals("-")) { daan = (double) x1 - x2; } else if (op.equals("×")) { daan = (double) x1 * x2; } else { daan = (double) x1 / (double) x2; } return String.format("%.2f", daan); } public test05() { initComponents(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); namefiled = new javax.swing.JTextField(); jLabel3 = new javax.swing.JLabel(); idfiled = new javax.swing.JTextField(); jLabel4 = new javax.swing.JLabel(); jComboBox1 = new javax.swing.JComboBox<>(); jLabel5 = new javax.swing.JLabel(); dafiled = new javax.swing.JTextField(); jButton1 = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); area = new javax.swing.JTextArea(); shizifiled = new javax.swing.JTextField(); jButton2 = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setBackground(new java.awt.Color(204, 255, 255)); jLabel1.setFont(new java.awt.Font("宋体", 1, 36)); // NOI18N jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel1.setText("四则运算(测试版)"); jLabel1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jLabel2.setFont(new java.awt.Font("宋体", 0, 28)); // NOI18N jLabel2.setText(" 姓名:"); namefiled.setFont(new java.awt.Font("宋体", 0, 28)); // NOI18N namefiled.setToolTipText(""); namefiled.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { namefiledActionPerformed(evt); } }); jLabel3.setFont(new java.awt.Font("宋体", 0, 28)); // NOI18N jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel3.setText(" 学号:"); idfiled.setFont(new java.awt.Font("宋体", 0, 28)); // NOI18N idfiled.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { idfiledActionPerformed(evt); } }); jLabel4.setFont(new java.awt.Font("宋体", 0, 28)); // NOI18N jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel4.setText("难度:"); jComboBox1.setFont(new java.awt.Font("宋体", 0, 28)); // NOI18N jComboBox1.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "十以内", "百以内", "千以内", " " })); jComboBox1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jComboBox1ActionPerformed(evt); } }); jLabel5.setFont(new java.awt.Font("宋体", 1, 36)); // NOI18N jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel5.setText("="); dafiled.setFont(new java.awt.Font("宋体", 0, 36)); // NOI18N jButton1.setFont(new java.awt.Font("宋体", 1, 28)); // NOI18N jButton1.setText("提交答案"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); area.setColumns(20); area.setFont(new java.awt.Font("Monospaced", 0, 36)); // NOI18N area.setLineWrap(true); area.setRows(5); jScrollPane1.setViewportView(area); shizifiled.setFont(new java.awt.Font("宋体", 0, 36)); // NOI18N shizifiled.setHorizontalAlignment(javax.swing.JTextField.CENTER); shizifiled.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { shizifiledActionPerformed(evt); } }); jButton2.setFont(new java.awt.Font("宋体", 1, 36)); // NOI18N jButton2.setText("开始"); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addComponent(jScrollPane1) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 122, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(namefiled, javax.swing.GroupLayout.PREFERRED_SIZE, 195, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(62, 62, 62) .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(idfiled, javax.swing.GroupLayout.PREFERRED_SIZE, 269, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(shizifiled, javax.swing.GroupLayout.PREFERRED_SIZE, 235, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(9, 9, 9) .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(dafiled, javax.swing.GroupLayout.PREFERRED_SIZE, 226, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGap(80, 80, 80) .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jButton1) .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addContainerGap(62, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(namefiled, javax.swing.GroupLayout.DEFAULT_SIZE, 62, Short.MAX_VALUE) .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(idfiled) .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jComboBox1)) .addGap(60, 60, 60) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jLabel5) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(dafiled, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(shizifiled) .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGap(51, 51, 51) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 394, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 62, Short.MAX_VALUE)) ); pack(); }// </editor-fold> private void namefiledActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void idfiledActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void shizifiledActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: for(int i=0;i<10;i++){ x1list.add(String.valueOf(Sui())); x2list.add(String.valueOf(Sui())); oplist.add(Op()); } for(int i=0;i<10;i++){ daanlist.add(Daan(Integer.parseInt(x1list.get(i)),Integer.parseInt(x2list.get(i)),oplist.get(i))); } } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: if(namefiled.getText().equals("")||idfiled.getText().equals("")){ shizifiled.setText("请完善信息!"); }else{ namelist.add(namefiled.getText()); idlist.add(idfiled.getText()); shizifiled.setText(x1list.get(0)+oplist.get(0)+x2list.get(0)); } } int i=1; int j =0; int score = 0; private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { if(i<=9){ shizifiled.setText(x1list.get(i)+oplist.get(i)+x2list.get(i)); } i+=1; if(Math.abs(Double.parseDouble(dafiled.getText())-Double.parseDouble(daanlist.get(j)))<=0.01){ score += 10; } area.append(x1list.get(j)+oplist.get(j)+x2list.get(j)+"="+dafiled.getText()+" "+"正确答案为:"+daanlist.get(j)+"\n"); dafiled.setText(""); j+=1; if(j==10){ area.append("总分为100分,您的得分为:"+score); } } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new test05().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JTextArea area; private javax.swing.JTextField dafiled; private javax.swing.JTextField idfiled; private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JComboBox<String> jComboBox1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTextField namefiled; private javax.swing.JTextField shizifiled; // End of variables declaration }
代码较多,界面部分的代码系自动生成,不必过于关注。这里主要定义了三个方法,分别是 获取随机运算符(+,-,*,÷),生成随机数(根据所做的选择来生成相应范围的随机数),获取正确答案。
//获取随机运算符
public static String Op() { String op = ""; Random random = new Random(); int i = random.nextInt(4); switch (i) { case 0: op = "+"; break; case 1: op = "-"; break; case 2: op = "×"; break; case 3: op = "÷"; break; } return op; }
//生成随机数
public int Sui() { Random random = new Random(); /* 0----十以内 1-----百以内 2-----千以内 */ int i = jComboBox1.getSelectedIndex(); int x = 0; switch (i) { case 0: x = random.nextInt(11); break; case 1: x = random.nextInt(101); break; case 2: x = random.nextInt(1001); break; default: x = random.nextInt(11); break; } return x; }
//获得正确答案 ---此处保留两位小数
public String Daan(int x1, int x2, String op) { double daan = 0; if (op.equals("+")) { daan = (double) x1 + x2; } else if (op.equals("-")) { daan = (double) x1 - x2; } else if (op.equals("×")) { daan = (double) x1 * x2; } else { daan = (double) x1 / (double) x2; } return String.format("%.2f", daan); }
运行界面如下:
填写姓名和学号后,选择难度点击开始就可以出现式子,提交答案后,会对式子进行一个展示
做够十道题后会对分数进行统计,计算出最后得分:
以上代码只是实现了最基础的功能,再复杂一点可以连接数据库,存储每个学生的学号,姓名,所选择的难度及最后的得分。