《小学生四则运算题卡》—— —— 毛锦媛

Posted 姝鲤鳅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《小学生四则运算题卡》—— —— 毛锦媛相关的知识,希望对你有一定的参考价值。

1.需求分析

   根据选择的题型,显示对应的题型10道,可答题,做完后显示正确答案,还可查看自己的错题。

分析出需要实现以下功能:

1)出题

      给出一组(10个)100以内正整数的加减乘除算式。

2)答题

      界面显示10个题,作答,点击“开始答题”,显示后开始计时。

3)统计

       显示正确答案,用时,正确率

2.设计

 

    数据库:

 

   具体设计思想:

 

  1.经过分析,将会有注册页面和登录页面,让小学生进行注册、登录,所以要创建数据库,保存用户的信息,成绩可以通过学生ID查询学生成绩。

 

  2.student表:账号ID,账号,密码

 

  3.grade表:成绩ID,学生账号ID,难度,成绩,使用的时间(秒),日期及时间。  

 

 

 

 

 

 //1.grade表添加外键

 alter table grade add constraint fk_student_grade foreign key(stuID) references student(sid);

Maven

 

 

 

项目结构:

  1. 使用json来实现注册和登录
  2. 使用MyBatis+Spring来实现对数据库的访问。
  3. 重点页面:出题页面

           要完成的功能:

      1. 定时器从打开页面开始计时  OK

      2. 获取select框里选的值   OK

      3. 根据选的值显示相应的题目  Ok

      4.点击提交按钮,会显示得分信息。(暂未实现)

      5.点击退出按钮,会回到首页   Ok 

3.编码

dao层(3个)

1 package cn.hnzj.dao;
2 
3 import cn.hnzj.entity.Student;
4 
5 public interface RegisterDao {
6     public void insertStu(Student s);    //插入学生
7     
8 }
1 package cn.hnzj.dao;
2 
3 import cn.hnzj.entity.Student;
4 
5 public interface LoginDao {
6     public Student findByStuName(String name);
7 }
 1 package cn.hnzj.dao;
 2 
 3 import java.sql.Date;
 4 
 5 import cn.hnzj.entity.Grade;
 6 
 7 public interface GradeDao {
 8     public void insertGrade(Grade g);   //插入成绩
 9     public Grade findByTime(Date t);    //根据日期查找对应的成绩信息
10 }

entity类(3个)

 1 package cn.hnzj.entity;
 2 /**
 3  * Student实体类
 4  * @author Asus
 5  *
 6  */
 7 public class Student {
 8     private int sid;    //账号ID
 9     private String name;   //名字
10     private String pwd;    //密码
11     public int getSid() {
12         return sid;
13     }
14     public void setSid(int sid) {
15         this.sid = sid;
16     }
17     public String getName() {
18         return name;
19     }
20     public void setName(String name) {
21         this.name = name;
22     }
23     public String getPwd() {
24         return pwd;
25     }
26     public void setPwd(String pwd) {
27         this.pwd = pwd;
28     }
29     @Override
30     public String toString() {
31         return "Student [sid=" + sid + ", name=" + name + ", pwd=" + pwd + "]";
32     }
33     
34     
35 
36 }
 1 package cn.hnzj.entity;
 2 /**
 3  * Grade成绩类
 4 
 5  * @author Asus
 6  *
 7  */
 8 
 9 import java.text.SimpleDateFormat;
10 import java.util.Date;
11 
12 public class Grade {
13      private int gid;
14      private Integer stuID;
15      private String step;
16      private int score;
17      private int used;
18      private Date time;
19     
20     
21     public int getGid() {
22         return gid;
23     }
24 
25 
26     public void setGid(int gid) {
27         this.gid = gid;
28     }
29 
30 
31     public Integer getStuID() {
32         return stuID;
33     }
34 
35 
36     public void setStuID(Integer stuID) {
37         this.stuID = stuID;
38     }
39 
40 
41     public String getStep() {
42         return step;
43     }
44 
45 
46     public void setStep(String step) {
47         this.step = step;
48     }
49 
50 
51     public int getScore() {
52         return score;
53     }
54 
55 
56     public void setScore(int score) {
57         this.score = score;
58     }
59 
60 
61     public int getUsed() {
62         return used;
63     }
64 
65 
66     public void setUsed(int used) {
67         this.used = used;
68     }
69 
70 
71     public Date getTime() {
72         return time;
73     }
74 
75 
76     public void setTime(Date time) {
77         this.time = time;
78     }
79 
80 
81     @Override
82     public String toString() {
83         //对时间进行格式化输出
84         String realTime = new SimpleDateFormat("yyyy-MM-dd").format(time);
85         return "Grade [gid=" + gid + ", stuID=" + stuID + ", step=" + step + ", score=" + score + ", used=" + used
86                 + ", time=" + realTime + "]";
87     }
88     
89      
90 }
 1 package cn.hnzj.entity;
 2 
 3 public class JsonResult<T> {
 4     private int status;   //状态码
 5     private String msg;   //错误信息
 6     private T data;
 7     
 8     public int getStatus() {
 9         return status;
10     }
11     public void setStatus(int status) {
12         this.status = status;
13     }
14     public String getMsg() {
15         return msg;
16     }
17     public void setMsg(String msg) {
18         this.msg = msg;
19     }
20     public T getData() {
21         return data;
22     }
23     public void setData(T data) {
24         this.data = data;
25     }
26     @Override
27     public String toString() {
28         return "JsonResult [status=" + status + ", msg=" + msg + ", data=" + data + "]";
29     }
30     
31     
32 
33 }

Subject类:

 1 package cn.hnzj.game;
 2 
 3 import java.util.ArrayList;
 4 
 5 import java.util.List;
 6 
 7 import cn.hnzj.utils.*;
 8 
 9 /**
10  * 习题类 定义了生成习题的方法
11  * 
12  * @author Asus
13  *
14  */
15 public class Subject {
16     private static String[] fu = { "+", "-", "*", "/" };
17 
18     /**
19      * 功能1. 根据传入的个数来生成题目
20      * 
21      * @param List<String>
22      */
23     public List<String> AllTwo_1_Examp(int count) {
24         List<String> examList = new ArrayList<String>();
25         for (int i = 0; i < count; i++) {
26             String create = Ti.two_1();
27             examList.add(create);
28         }
29         return examList;
30     }
31     
32     public List<String> AllTwo_2_Examp(int count) {
33         List<String> examList = new ArrayList<String>();
34         for (int i = 0; i < count; i++) {
35             String create = Ti.two_2();
36             examList.add(create);
37         }
38         return examList;
39     }
40 
41     public List<String> AllThree_Examp(int count) {
42         List<String> examList = new ArrayList<String>();
43         for (int i = 0; i < count; i++) {
44             String create = Ti.three();
45             examList.add(create);
46         }
47         return examList;
48     }
49     
50     /**
51      * 功能2.对生成的题目进行运算
52      * 
53      * @return List<String>
54      */
55 
56     public List<String> result(List<String> list) {
57         // 1. 创建用于保存答案的集合
58         List<String> resultList = new ArrayList<String>();
59         // 2. 调用方法遍历集合中的每个式子进行计算,并将计算出来的结果存进集合
60         for (String s : list) {
61             //因为生成的式子含有=,脚本不能对含有等号的式子计算,所以要把等号截掉
62             String newStr = s.substring(0, s.length() - 1);     
63             String d = SubjectUtils.count(newStr);
64             resultList.add(d);
65         }
66         return resultList;
67     }
68 
69 }

utils(四个)

 1 package cn.hnzj.utils;
 2 import java.util.Random;
 3 import javax.script.ScriptEngine;
 4 import javax.script.ScriptEngineManager;
 5 import javax.script.ScriptException;
 6 
 7 /**
 8  * Subject类所用的工具类
 9  * 
10  * @author Asus
11  *
12  */
13 public class SubjectUtils {
14     private static String[] fu1= {"+", "-"};
15     private static String[]  fu2={"*", "/"};
16       private static String[] fu3 = { "+", "-", "*", "/" };
17 
18     // 方法一:随机产生运算符
19     public static String createFu(String[] fu) {
20         int len=fu.length;
21         Random random = new Random();
22         int index = random.nextInt(len);
23         return fu[index];
24     }
25     // 方法三:  随机产生整数
26     public static int createNum() {
27         // 1. 创建随机数对象
28         Random ran = new Random();
29         // 2. 调用方法生成1~100之间的整数
30         int num=ran.nextInt(100)+1;
31         return num;
32     }
33 
34     // 方法四:对生成的题目进行计算,并以字符串的结果进行返回
35     public static String count(String s) {
36         ScriptEngine jse = new ScriptEngineManager().getEngineByName("javascript");
37         Object o_res;
38         String res = null;
39         try {
40             o_res = jse.eval(s);
41             String string = o_res.toString();
42             if (string.equals(".")) {
43                 int parseInt = Integer.parseInt(string);
44                 String valueOf = String.valueOf(parseInt);
45                 res=valueOf;
46                 return res;
47                 } 
48             res=string;
49         } catch (ScriptException e1) {
50             e1.printStackTrace();
51         }
52         return res;
53     }
54 
55 }
 1 package cn.hnzj.utils;
 2 /**
 3  * 1. 定义减法、除法,方便式子的合理性
 4  * 如果式子不合理,将重新生成
 5  * @author Asus
 6  *
 7  */
 8 public class CommonUtils {
 9      public static boolean jian(int n1,int n2) {
10          boolean flag=true;
11          if(n1-n2 < 0) {
12              return false;
13          }
14          return flag;
15      }
16      
17      public static boolean devide(int n1,int n2) {
18          boolean flag=true;
19          if(n1/n2 == 0) {
20              return false;
21          }
22          return flag;
23      }
24      
25      
26 }
 1 package cn.hnzj.utils;
 2 /**
 3  * 生成小学生选择生成的题型
 4  * @author Asus
 5  *
 6  */
 7 public class Ti {
 8     private static String[] fu1= {"+", "-"};
 9     private static String[]  fu2={"*", "/"};
10       private static String[] fu3 = { "+", "-", "*", "/" };
11    //第一大类
12      public static String two_1() {
13          String ti=" ";
14          // 1. 数字
15          int first = SubjectUtils.createNum();
16          int second=SubjectUtils.createNum();
17          // 2. 符号
18          String createFu = SubjectUtils.createFu(fu1);
19          // 3.生成
20          if(createFu.equals("-")) {
21              while(!CommonUtils.jian(first, second)) {
22                  first=SubjectUtils.createNum();
23              }
24          }
25          ti=first+createFu+second+"=";
26          
27          return ti;
28      }
29      public static String two_2() {
30          String ti=" ";
31          // 1. 数字
32          int first = SubjectUtils.createNum();
33          int second=SubjectUtils.createNum();
34          // 2. 符号
35          String createFu = SubjectUtils.createFu(fu2);
36          // 3.生成
37          if(createFu.equals("/")) {
38              while(!CommonUtils.devide(first, second)) {
39                  first=SubjectUtils.createNum();
40              }
41          }
42          ti=first+createFu+second+"=";
43          
44          return ti;
45      }
46   // 第二大类
47     public static String three() {
48         String ti=" ";
49          // 1. 数字
50          int first = SubjectUtils.createNum();
51          int second=SubjectUtils.createNum();
52          int third=SubjectUtils.createNum();
53          // 2. 符号
54          String createFu = SubjectUtils.createFu(fu3);
55          String createFu2 = SubjectUtils.createFu(fu3);
56          // 3.生成
57          if(createFu.equals("/") ) {
58              while(!CommonUtils.devide(first, second)) {
59                  first=SubjectUtils.createNum();
60              }
61              if(createFu2.equals("/")) {
62                  while(!CommonUtils.devide(first+second, third)) {
63                       third=SubjectUtils.createNum();
64                   }
65              }
66              if(createFu2.equals("-")) {
67                  while(!CommonUtils.jian(first+second, third)) {
68                       third=SubjectUtils.createNum();
69                   }
70             

以上是关于《小学生四则运算题卡》—— —— 毛锦媛的主要内容,如果未能解决你的问题,请参考以下文章

小学生五十以内口算题卡程序---计应193第五组于智博

云阅卷答题卡怎么把多张卡删除

毕设题目:Matlab答题卡识别

2018.12.15考试总结模拟+逆序对+树状数组+贪心+multiset爆零之旅

答题卡识别基于matlab GUI hough变换答题卡成绩统计(带面板)含Matlab源码 1828期

答题卡识别基于matlab GUI hough变换答题卡判定与成绩统计(带面板)含Matlab源码 1017期