一、项目源码
Github的仓库主页链接地址:https://github.com/LilyFuEnLi/Arithmetic_SE.git
二、项目报告
1. 需求分析
(1)由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错误不计分,20道题测试结束后给出测试总分;
(2)题库文件可采用实验二(详细内容请查看上一篇博客)的方式自动生成,文本格式如图1所示;
图 1 图 2
(3)程序为用户提供三种进阶四则运算练习功能选择:百以内整数算式、带括号算式、真分数算式练习;
(4)程序允许用户进行多轮测试,提供用户多轮测试分数柱状图,如图2所示;
(5)程序记录用户答题结果,当程序退出再启动的时候,可为用户显示最后一次测试的结果,并询问用户可否进行新一轮的测试;
(6)测试有计时功能,测试时动态显示用户开始答题后的消耗时间;
(7)程序人机交互界面是GUI界面(WEB页面、APP页面都可),界面支持中文简体/中文繁体/英语,用户可以进行语种选择。
2. 软件设计
(1)程序设计图如下所示:
(2)类图如下图所示:
(1)Main( )类:主函数类,弹出登录窗口界面;
(2)Start( )类:产生答题窗口类,利用按钮监听器接口,存储学生答案,显示结果,进行对比分析等操作。
(3)Calculate_SE()类:运算式产生类,结合上次作业,产生整数运算式、分数运算式文件。
(4)Timer()类:包含内部类Timer.CountingThread()类,产生计时窗口。
(5)Chart_H( )类:绘制成绩柱状图。
3. 核心功能代码展示
(1) 答题界面的监听器方法部分代码
1 //---------------------------------------整数------------------------- 2 JRadioButton buttonInteger=new JRadioButton("整数");//JRadioButton 3 buttonInteger.addItemListener(new ItemListener() { 4 public void itemStateChanged(ItemEvent arg0) { 5 frame2.pack(); 6 frame2.setVisible(true); 7 try { 8 CA.calaulate_AE(40); 9 } catch (IOException e) { 10 e.printStackTrace(); 11 } 12 String shizi = CA.IntegerQ.get(number); 13 NUM++; 14 label1.setText(shizi); 15 } 16 }); 17 //--------------------------------分数--------------------------------- 18 JRadioButton buttonFenshu = new JRadioButton("分数"); 19 buttonFenshu.addItemListener(new ItemListener() { 20 public void itemStateChanged(ItemEvent arg0) { 21 frame2.pack(); 22 frame2.setVisible(true); 23 try { 24 CA.fenshu(); 25 } catch (IOException e) { 26 e.printStackTrace(); 27 } 28 String shizi = CA.FractionQ.get(number); 29 NUM++; 30 label1.setText(shizi); 31 } 32 }); 33 //-------------------------------------下一题答案按钮的设定------------------------------------------------------- 34 JButton buttonNext=new JButton("下一题"); 35 buttonNext.addActionListener(new ActionListener() {//定义时间监听器 36 public void actionPerformed(ActionEvent e) { 37 if(buttonInteger.isSelected()) 38 { 39 String question=label1.getText(); 40 String result=text.getText(); 41 String ifRight=""; 42 if((CA.IntegerA.get(number)).equals(result)) 43 { 44 ifRight="正确"; 45 rightSum++; 46 } 47 else 48 { 49 ifRight="错误"; 50 } 51 String message=question+", "+"你的答案:"+result+", "+"正确答案: "+CA.IntegerA.get(number)+", 状态: "+ifRight; 52 list.add(message); 53 text.setText(""); 54 number++; 55 String shizi=CA.IntegerQ.get(number); 56 NUM++; 57 label1.setText(shizi); 58 if(NUM==20) 59 { 60 JOptionPane.showMessageDialog(null, "本题为第20道题,答题结束,请提交答案。", "答题结束", JOptionPane.INFORMATION_MESSAGE); 61 text.setText(result); 62 } 63 } 64 if(buttonFenshu.isSelected()) 65 { 66 String question=label1.getText(); 67 String result=text.getText(); 68 String ifRight=""; 69 if(CA.FractionA.get(number).equals(result)) 70 { 71 ifRight="正确"; 72 rightSum++; 73 } 74 else 75 { 76 ifRight="错误"; 77 } 78 String message=question+", "+"你的答案:"+result+", "+"正确答案: "+CA.FractionA.get(number)+", 状态: "+ifRight; 79 list.add(message); 80 text.setText(""); 81 number++; 82 String shizi=CA.FractionQ.get(number); 83 NUM++; 84 label1.setText(shizi); 85 if(NUM==20) 86 { 87 JOptionPane.showMessageDialog(null, "本题为第20道题,答题结束,请提交答案。", "答题结束", JOptionPane.INFORMATION_MESSAGE); 88 text.setText(result); 89 } 90 } 91 } 92 });