一.前提
(1)作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213
(2)GitHub地址:https://github.com/P-and-A/learningGit/tree/master/arthematic
(3)调试环境:IntelliJ IDEA ,CHORME浏览器,Tomcat8.5.28
二.作业要求
(1)基本要求
- 自动生成题目,单个题目最多不能超过4个运算符,操作数小于100。
- 用户可以输入答案
- 若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。
(2)扩展要求
- 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数。
- 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
- 程序可以设置皮肤功能,可以改变界面的颜色即可。
- 程序可以出单个整数阶乘的题目:如:4!=24。
(3)结对成员
姓名:廖超凡 学号:201606120044 博客园地址:https://www.cnblogs.com/grate/
姓名:梁秋华 学号:201606120036 博客园地址:https://home.cnblogs.com/u/liangqiuhua/
三.时间估算
结对项目软件过程耗时估计表与统计表
(时间单位:小时)
PSP2.1 |
个人软件实现阶段 |
预计时间 |
实际时间 |
Planning |
计划 |
10 |
16 |
· Estimate |
估计这个任务需要多少时间 |
10 |
17 |
Development |
开发 |
10 |
10 |
· Analysis |
需求分析 (包括学习新技术) |
0.5 |
0.5 |
· Design Spec |
生成设计文档 |
0.5 |
0.5 |
· Design Review |
设计复审 |
0.2 |
0.2 |
· Coding Standard |
代码规范 |
0.1 |
0.1 |
· Design |
具体设计 |
0.2 |
0.2 |
· Coding |
具体编码 |
1 |
1 |
· Code Review |
代码复审 |
0.5 |
0.5 |
· Test |
测试(自我测试,修改代码,提交修改) |
1 |
1 |
Reporting |
报告 |
0.5 |
0.5 |
· |
测试报告 |
0.5 |
0.5 |
· |
计算工作量 |
1 |
1 |
· |
并提出过程改进计划 |
1 |
1 |
五.工作详情
(一)工作:
廖超凡: 架设服务器、数据库录入题目、设计实现获取题目及答案的Api接口、协助前端设计交互逻辑。
梁秋华: 设计前端的界面设计部分、按键、按钮、测试输入答案
(二) 部分功能代码介绍:
后端:
(1)处理请求
1 @RequestMapping(value = "get_questions/{num}") 2 @ResponseBody 3 public String getAllQuestion(@PathVariable("num")int num){ 4 return iQuestionService.getAllQuestion(num); 5 }
(2)随机选取题目并返回Json数据
1 public String getAllQuestion(int num){ 2 List<Question> questionList = questionMapper.getAllQuestion(); 3 List<Question> selectList = new ArrayList<>(); 4 Set<Integer> selected = new HashSet<>(); 5 int size = questionList.size(); 6 for(int i=0;i<num;){ 7 Random random = new Random(); 8 int randomNum = random.nextInt(size); 9 if(selected.add(randomNum)){ 10 selectList.add(questionList.get(randomNum)); 11 i++; 12 } 13 } 14 return ToJsonUtil.getToJsonUtil().objectToJson(selectList); 15 }
前端:
(1)题目选择显示功能:可以通过下拉框来选择题目显示的数目,此处可以从后端服务器数据库中获得题目,并更新页面状态
1 get:function(){ 2 //发送get请求 3 var num = $('#itemNum').val(); 4 this.ischeck = false; //刷新批改状态 5 this.$http.get('get_questions/'+this.selected).then(function(res){ 6 this.msg=res.body; 7 },function(){ 8 console.log('请求失败'); 9 }); 10 // 页面初始化 11 $.each( $('[data-index]'), function(index,item){ 12 var a = item.children; 13 a[1].value=""; 14 if(a[2].style.visibility="visible"){ 15 a[2].style.visibility="hidden"; 16 } 17 }); 18 },
(三)运行与测试结果
图1.回答并统计成绩
图2.有正误扣分提示
图3.选择题目数量并打印
图4.换肤功能演示
(四)结对照片
六.收获与感悟
(一)遇到的问题及解决方案
技术方面:
(1)Tomcat运行时,项目中有些类出现ClassNotFound。
通过搜索引擎查找相似的问题,发现问题出现使用idea构建Maven项目,将项目打包到Tomcat时,相关Jar包并没有加到Tomcat运行环境的Web模块中,导致某些类出现ClassNotFound,通过idea的Project Structure设置后,在Tomcat的部署环境中出现相关Jar包。
合作方面:
(1)有些需要边学边做,两人合作出现项目进度不好把控,容易出现延期。
如果项目赶工期的话,尽量采用双方熟悉的技术,避免耽误项目的完工。不赶工期的话,以做促学,可以有效提高技术水平,缺点是卡壳时会耽误进度。
(2)项目分工不明确(如对题目的预处理,在前端随机挑选还是后端挑选分工没有明确),有些功能实现出现了延期。
功能设计需要更加详细具体指明实现方。