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、需求分析

  该项目要求程序有人机交互界面,且可评判成绩。可为用户提供百以内整数算式、带括号算式、真分数算式三种练习,可为进行多轮测试并记录成绩生成柱状图并且记录用户消耗的时间。

2、功能分析

  • 可实现基本要求,即可生成数字在 0 和 100 之间,运算符在3个到5个之间的计算表达式,并计算出表达式的结果
  • 随机可生成带括号的运算式,括号不会超过运算符的个数
  • 生成真分数的四则运算
  • 有用户界面,可进行多轮测试
  • 记录测试结果,并将以往成绩以柱状图展示
  • 测试时,记录用户的测试用时

3、设计实现

 

4、运行测试

  • 设计交互界面,首页登陆,登录用户名“admin”,密码123456。

  • 答题界面 

 

  • 答题完毕后,可以点击保存练习过的题目(包括自己答题的答案)

  

  • 答题结束后,可以查看自己得分情况(具体的用一个柱状统计图展示)

  

5、核心代码

  • 登录界面
 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 }
View Code
  • 练习界面
  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语言 小学生算数出题系统 的设计与实现?

201571030314《小学生四则运算练习软件》结对项目

2016011990小学四则运算练习软件项目报告

2016012069小学四则运算练习软件项目报告

实现生成小学四则运算练习题

201571030106/201571030116《小学四则运算练习软件》结对项目报告