《小学生四则运算题卡》—— —— 毛锦媛
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:
项目结构:
- 使用json来实现注册和登录
- 使用MyBatis+Spring来实现对数据库的访问。
- 重点页面:出题页面
要完成的功能:
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以上是关于《小学生四则运算题卡》—— —— 毛锦媛的主要内容,如果未能解决你的问题,请参考以下文章
2018.12.15考试总结模拟+逆序对+树状数组+贪心+multiset爆零之旅