Java实现小学四则运算练习系统(UI)
Posted dwXuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实现小学四则运算练习系统(UI)相关的知识,希望对你有一定的参考价值。
github项目地址 :https://github.com/feser-xuan/Arithmetic_test3_UI
小伙伴的博客链接:http://www.cnblogs.com/fukang/p/8711021.html
我的学号:201571030104
小伙伴的学号:201571030109
实验要求
-
在《实验二 软件工程个人项目》中,同学们实现了一个命令行四则运算出题小程序,本次实验采用结对编程方式,设计开发一个小学生四则运算练习软件,使之具有以下功能:
-
(1)由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错误不计分,20道题测试结束后给出测试总分;
-
(2)题库文件可采用实验二的方式自动生成,也可以手工编辑生成,文本格式如下:
-
(3)程序为用户提供三种进阶四则运算练习功能选择:百以内整数算式(必做)、带括号算式、真分数算式练习;
- (4)程序允许用户进行多轮测试,提供用户多轮测试分数柱状图,示例如下:
-
(5)程序记录用户答题结果,当程序退出再启动的时候,可为用户显示最后一次测试的结果,并询问用户可否进行新一轮的测试;
-
(6)测试有计时功能,测试时动态显示用户开始答题后的消耗时间。
-
(7)程序人机交互界面是GUI界面(WEB页面、APP页面都可),界面支持中文简体(必做)/中文繁体/英语,用户可以进行语种选择。
1、需求分析
4、运行测试
- 设计交互界面,首页登陆,登录用户名“admin”,密码123456。
- 答题界面
- 答题完毕后,可以点击保存练习过的题目(包括自己答题的答案)
- 答题结束后,可以查看自己得分情况(具体的用一个柱状统计图展示)
5、核心代码
- 登录界面
![](https://image.cha138.com/20210525/6d516d3724a24db69f339d70a80bf404.jpg)
1 public class Login { 2 3 public Login() 4 { 5 JFrame f=new JFrame(); 6 f.setTitle("小学生四则运算答题系统"); 7 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 8 f.setExtendedState(JFrame.MAXIMIZED_BOTH); 9 f.setVisible(true); 10 11 //设置窗口的大小和位置 12 f.setSize(500,500); 13 f.setLocation(200,200); 14 15 Container con=f.getContentPane();//生成一个容器 16 con.setLayout(new GridLayout(7,1)); 17 18 JPanel pan1 =new JPanel(); 19 JLabel title=new JLabel("欢迎登陆小学生四则运算答题系统"); 20 title.setFont(new Font("宋体",Font.BOLD, 20)); 21 pan1.add(title); 22 con.add(pan1); 23 //生成一个新的版 24 JPanel pan2 = new JPanel(); 25 JPanel pan3 = new JPanel(); 26 JPanel pan4 = new JPanel(); 27 JPanel pan5 = new JPanel(); 28 29 con.add(pan2); 30 con.add(pan3); 31 con.add(pan4); 32 con.add(pan5); 33 34 JLabel name=new JLabel("用户名"); 35 pan2.add(name); 36 TextField tf_name=new TextField(20); 37 pan2.add(tf_name); 38 39 JLabel pass = new JLabel("密码"); 40 pan3.add(pass); 41 TextField password=new TextField(20); 42 password.setEchoChar(\'*\'); 43 pan3.add(password); 44 45 JButton b_log=new JButton("登陆"); 46 b_log.addActionListener(new ActionListener() { 47 public void actionPerformed(ActionEvent e) { 48 // TODO Auto-generated method stub 49 //获取用户名和密码,进行校验 50 String myUsername=tf_name.getText(); 51 String myPassword=password.getText(); 52 if(myUsername.equals("admin")&& myPassword.equals("123456")){ 53 JOptionPane.showMessageDialog(null, "登陆成功!"); 54 f.dispose(); 55 MyExGUI ui = new MyExGUI(); 56 57 } 58 else{ 59 JOptionPane.showMessageDialog(null, "账号或密码错误!"); 60 name.setText( ""); 61 password.setText( ""); 62 } 63 64 } 65 }); 66 pan4.add(b_log); 67 68 JButton b_exit=new JButton("退出"); 69 b_exit.addActionListener(new ActionListener() { 70 public void actionPerformed(ActionEvent e) { 71 // TODO Auto-generated method stub 72 JOptionPane.showMessageDialog(null, "谢谢使用!"); 73 f.setVisible(false);//隐藏窗体 74 System.exit(0);//退出程序 75 } 76 }); 77 pan5.add(b_exit); 78 //登陆和退出这两个按钮放在第四个版面上 79 80 81 } 82 83 }
- 练习界面
![](https://image.cha138.com/20210525/6d516d3724a24db69f339d70a80bf404.jpg)
1 package ui_test; 2 3 import java.awt.*; 4 import java.awt.event.ActionEvent; 5 import java.awt.event.ActionListener; 6 import java.io.BufferedOutputStream; 7 import java.io.File; 8 import java.io.FileOutputStream; 9 import java.io.IOException; 10 import java.util.ArrayList; 11 12 import javax.swing.*; 13 14 15 public class MyExGUI extends JFrame{ 16 ArrayList<String> user_zongti = new ArrayList<String>(); 17 ArrayList<String> user_zonganswer = new ArrayList<String>(); 18 ArrayList<String> user_answer = new ArrayList<String>(); 19 ArrayList<String> true_answer = new ArrayList<String>(); 20 ArrayList<String> jta_timu = new ArrayList<String>(); 21 ArrayList<String> jta_zong = new ArrayList<String>(); 22 ArrayList<Integer> user_fenshu = new ArrayList<Integer>(); 23 JMenuBar jmb; //菜单条组件 24 JMenu menu1, menu2, menu3, menu4, menu5;//菜单 25 JMenuItem item1, item2, item3, item4, item5, item6;//菜单项 26 JMenu build; //二级菜单 27 JMenuItem file, project; 28 TextArea answer_all = new TextArea(); 29 TextField jta = new TextField(); 30 TextField jta_answer = new TextField(); 31 JLabel num_answer = new JLabel(); 32 JLabel answer1; 33 JToolBar jtb;//工具条 34 JButton jb1, jb2, jb3, jb4, jb5, jb6, jb7,jb_next; 35 int answer_count; 36 int answer_fenshu; 37 public MyExGUI() 38 { 39 //创建菜单 40 jmb = new JMenuBar(); 41 42 menu1 = new JMenu("文件(F)"); 43 menu1.setMnemonic(\'f\'); //助记符 44 menu2 = new JMenu("编辑"); 45 menu2.setMnemonic(\'E\'); 46 menu3 = new JMenu("格式"); 47 menu4 = new JMenu("查看"); 48 menu5 = new JMenu("帮助"); 49 50 build = new JMenu("新建"); 51 52 file = new JMenuItem("文件"); 53 project = new JMenuItem("答题"); 54 item1 = new JMenuItem("打开"); 55 item2 = new JMenuItem("保存(S)"); 56 item3 = new JMenuItem("另存为"); 57 item4 = new JMenuItem("页面设置"); 58 item5 = new JMenuItem("打印"); 59 item6 = new JMenuItem("退出"); 60 61 answer1 = new JLabel("第 1 题"); 62 63 64 65 //添加菜单项至菜单上 66 build.add(file); 67 build.add(project); 68 69 menu1.add(build); 70 menu1.add(item1); 71 menu1.add(item2); 72 menu1.add(item3); 73 menu1.addSeparator(); 74 menu1.add(item4); 75 menu1.add(item5); 76 menu1.add(item6); 77 //将菜单加入至菜单栏 78 jmb.add(menu1); 79 jmb.add(menu2); 80 jmb.add(menu3); 81 jmb.add(menu4); 82 jmb.add(menu5); 83 84 85 JPanel contentPanel = new JPanel(); 86 contentPanel.setLayout(null); 87 JLabel daan = new JLabel("答案"); 88 JLabel dengyu = new JLabel("="); 89 num_answer=answer1; 90 num_answer.setFont(new Font("宋体",Font.BOLD, 22)); 91 jb_next = new JButton("下一题"); 92 jta.setFont(new Font("宋体",Font.BOLD, 22)); 93 jta_answer.setFont(new Font("宋体",Font.BOLD, 22)); 94 jb_next.setFont(new Font("宋体",Font.BOLD, 22)); 95 daan.setFont(new Font("宋体",Font.BOLD, 22)); 96 dengyu.setFont(new Font("宋体",Font.BOLD, 22)); 97 98 contentPanel.add(num_answer); 99 contentPanel.add(daan); 100 contentPanel.add(dengyu); 101 contentPanel.add(jta); 102 103 contentPanel.add(jta_answer); 104 contentPanel.add(answer_all); 105 contentPanel.add(jb_next); 106 107 num_answer.setBounds(90, 20, 130, 50); 108 daan.setBounds(250, 20, 90, 50); 109 jta.setBounds(50, 70, 150, 30); 110 dengyu.setBounds(205, 70, 20, 20); 111 jta_answer.setBounds(230, 70, 100, 30); 112 jb_next.setBounds(350, 70, 110, 30); 113 answer_all.setBounds(50, 120, 400, 300); 114 115 this.setJMenuBar(jmb); //添加菜单栏,不能设定位置,会自动放在最上部 116 this.add(contentPanel); 117 118 this.setTitle("在线答题系统"); 119 this.setSize(600, 500); 120 this.setVisible(true); 121 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 122 item1.addActionListener(new ActionListener() { 123 124 @Override 125 public void actionPerformed(ActionEvent arg0) { 126 // TODO Auto-generated method stub 127 JFileChooser jfc=new JFileChooser(); 128 jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES ); 129 jfc.showDialog(new JLabel(), "选择"); 130 File file=jfc.getSelectedFile(); 131 if(file.isDirectory()){ 132 // System.out.println("文件夹:"+file.getAbsolutePath()); 133 }else if(file.isFile()){ 134 String s=file.getAbsolutePath(); 135 } 136 } 137 }); 138 item2.addActionListener(new ActionListener() { 139 140 @Override 141 public void actionPerformed(ActionEvent arg0) { 142 FileOutputStream outSTr = null; 143 BufferedOutputStream Buff = null; 144 boolean flag = true; 145 File file; 146 //String test ; 147 do{ 148 //test = "test"+count; 149 150 String inputValue = JOptionPane.showInputDialog("Please input file name"); 151 file = new File(inputValue+".txt"); 152 if (!file.exists()) { 153 // 创建文件 154 try { 155 156 flag=file.createNewFile(); 157 158 } catch (IOException e) { 159 e.printStackTrace(); 160 161 } 162 flag=false; 163 } 164 else{ 165 166 JOptionPane.showMessageDialog(null, "该文件名已存在,请重新输入", "ERROR", JOptionPane.ERROR_MESSAGE); 167 flag=true; 168 } 169 }while(flag); 170 //写入文件 171 String u_answer; 172 try { 173 outSTr = new FileOutputStream(file); 174 Buff = new BufferedOutputStream(outSTr); 175 System.out.println("选择是后执行的代码"+user_zongti.size()+user_answer.size()); 176 for (int i = 0; i < user_zongti.size(); i++) 177 { 178 try { 179 Buff.write(user_zongti.get(i).getBytes()); 180 Buff.write(" ".getBytes()); 181 u_answer = user_answer.get(i); 182 if(u_answer.equals("")) 183 u_answer ="没有作答"; 184 185 Buff.write(u_answer.getBytes()); 186 Buff.write("\\r\\n".getBytes()); 187 } catch (IOException e) { 188 e.printStackTrace(); 189 i--; 190 } 191 } 192 Buff.flush(); 193 Buff.close(); 194 195 } catch (IOException e) { 196 e.printStackTrace(); 197 } 198 //Buff.close(); 199 try { 200 outSTr.close(); 201 } catch (IOException e) { 202 e.printStackTrace(); 203 } 204 user_zongti.clear(); 205 user_answer.clear(); 206 } 207 }); 208 209 210 project.addActionListener(new ActionListener() { 211 212 @Override 213 public void actionPerformed(ActionEvent arg0) { 214 arithmetic art = new arithmetic(); 215 true_answer=art.list_answer; 216 jta_timu = art.list_timu; 217 jta_zong = art.list; 218 answer_count=1; 219 answer_all.setText(""); 220 for (int i = 0; i < art.list_timu.size(); i++) 221 { 222 user_zongti.add(jta_zong.get(i)); 223 answer_all.append(jta_timu.get(i)); 224 answer_all.append("\\r\\n"); 225 } 226 num_answer.setText("第 "+answer_count+" 题"); 227 jta.setText(jta_timu.get(answer_count-1)); 228 answer_count++; 229 230 231 } 232 }); 233 jb_next.addActionListener(new ActionListener() { 234 235 @Override 236 public void actionPerformed(ActionEvent arg0) { 237 String temp; 238 temp = jta_answer.getText(); 239 240 if(jta.getText().equals("")) 241 { 242 JOptionPane.showMessageDialog(null, "错误,请导入题库", "错误", JOptionPane.ERROR_MESSAGE); 243 return; 244 } 245 jta_answer.setText(""); 246 if(answer_count<=20) 247 { 248 if(isInteger(temp)) 249 { 250 251 user_answer.add(temp); 252 System.out.println("选择否后执行的代码"+temp+"user_size"+user_answer.size()); 253 num_answer.setText("第 "+answer_count+" 题"); 254 jta.setText(jta_timu.get(answer_count-1)); 255 answer_count++; 256 } 257 else{ 258 JOptionPane.showMessageDialog(null, "错误", "请输入数字", JOptionPane.ERROR_MESSAGE); 259 } 260 } 261 else{ 262 user_answer.add(temp); 263 System.out.println("选择否后执行的代码"+temp+"user_size"+user_answer.size()); 264 answer_fenshu=0; 265 for(int i=0;i<user_answer.size();i++) 266 { 267 if(user_answer.get(i).equals(true_answer.get(i))) 268 answer_fenshu+=5; 269 } 270 user_fenshu.add(answer_fenshu); 271 Object[] options = { "是", "取消" }; 272 int res=JOptionPane.showOptionDialog(null, "点击以继续 查看成绩", "答题完毕", 273 JOptionPane.DEFAULT_OPTION, JOptionPane.YES_NO_OPTION, 274 null, options, options[0]); 275 if(res==JOptionPane.YES_OPTION){ 276 chart ct =new chart(user_fenshu); 277 ct.setVisible(true); 278 279 }else{ 280 Object[] option = { "是", "取消" }; 281 int res1=JOptionPane.showOptionDialog(大一c语言 小学生算数出题系统 的设计与实现?