201571030139/201571030134 小学生四则运算软件结对编程
源码在Github的仓库主页链接地址
https://github.com/gzyt/Arithreic_Plus
一、题目要求:
使用JAVA编程语言,采用结对编程方式实现四则运算出题小程序,软件基本功能要求如下:
1.由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错误不计分,20道题测试结束后给出测试总分;
2.题库文件可采用实验二的方式自动生成,也可以手工编辑生成;
3.程序为用户提供三种进阶四则运算练习功能选择:百以内整数算式(必做)、带括号算式、真分数算式练习;
4.程序允许用户进行多轮测试,提供用户多轮测试分数柱状图;
5.程序记录用户答题结果,当程序退出再启动的时候,可为用户显示最后一次测试的结果,并询问用户可否进行新一轮的测试;
6.测试有计时功能,测试时动态显示用户开始答题后的消耗时间;
7.程序人机交互界面是GUI界面(WEB页面、APP页面都可),界面支持中文简体(必做)/中文繁体/英语,用户可以进行语种选择 。
二、需求分析:
1.程序人机交互界面是GUI界面,界面支持中文简体;
2.程序能够随机从题库选择试题,由用户输入答案,自动检查对错,统计成绩;
3.题库文件可基于实验二生成,也可自定义题库文件;
4.用户可以选择三种四则运算模式:百以内整数算式(结果非负,必须整数),带括号运算,真分数算式练习;
5.系统允许用户进行多轮测试,并实现用户测试测试分数的数据可视化(柱状图);
6.测试时提供计时功能。
三、功能设计:
1.采用java spring boot编程实现人机交互界面的设计;
2.设计前台登录与后台界面;
3.编写登录类与后台操作类;
4.设计计时功能展示、答题界面与成绩展示。
四、软件设计:
五、运行展示:
六、核心功能代码展示:
//系统后台界面
@RequestMapping("/Admin")
@Modifying
public String admin(HttpServletRequest request,Model model){
HttpSession httpSession = request.getSession();
user user = (com.example.demo.Entity.user) httpSession.getAttribute("user");
model.addAttribute("nameSesson",user);
return "index";
}
//答题界面
@RequestMapping("/ques_form")
public String ques_form(HttpServletRequest request,Model model){
List<arithreic> ArithList = arithRepository.findAll();
HttpSession httpSession = request.getSession();
user user = (com.example.demo.Entity.user) httpSession.getAttribute("user");
System.out.print(user.getUsername());
model.addAttribute("nameSesson",user);
model.addAttribute("arithList",ArithList);
return "ques_form";
}
//成绩展示界面
@RequestMapping("/score_chart")
public String score_chart(HttpServletRequest request,Model model){
HttpSession httpSession = request.getSession();
user user = (com.example.demo.Entity.user) httpSession.getAttribute("user");
score score = new score();
model.addAttribute("nameSesson",user);
return "score_chart";
}
//成绩查找
@RequestMapping(value="/getScore",method = RequestMethod.POST)
@ResponseBody
public Map<String, int[]> getScore(@RequestParam(value = "userpassword") String pwd, HttpServletRequest request, Model model){
List<String> scoreList = ScoreRepository.findBypassword(pwd);
Map<String, int[]> result=new HashMap<>();
int[] score=new int[]{50,40,60,80};
result.put("score",score);
return result;
}
//添加成绩
@RequestMapping(value="/addScore")
public String addScore(@RequestParam(value = "score") String score,@RequestParam(value = "userpassword") String pwd,HttpServletRequest request){
score scores = new score();
scores.setScore(score);
scores.setUserpassword(pwd);
ScoreRepository.save(scores);
return "ques_form";
}
七、此次结对编程的PSP:
PSP |
任务内容 |
计划共完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
60 |
100 |
Estimate |
估计这个任务需要多少时间,并规划大致工作步骤 |
60 |
100 |
Development |
开发 |
890 |
1256 |
Analysis |
需求分析 (包括学习新技术) |
6 |
10 |
Design Spec |
生成设计文档 |
30 |
20 |
Design Review |
设计复审 (和同事审核设计文档) |
4 |
6 |
Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
30 |
20 |
Design |
具体设计 |
100 |
150 |
Coding |
具体编码 |
600 |
700 |
Code Review |
代码复审 |
120 |
200 |
Test |
测试(自我测试,修改代码,提交修改) |
100 |
150 |
Reporting |
报告 |
38 |
32 |
Test Report |
测试报告 |
3 |
2 |
Size Measurement |
计算工作量 |
5 |
10 |
Postmortem & Process Improvement Plan |
事后总结 ,并提出过程改进计划 |
30 |
20 |
八、描述结对的过程,提供两人在讨论、细化和编程时的结对照片:
九、请使用汉堡评价法给你的小伙伴一些点评:
在对此次程序设计的过程中,在刚开始,我们一起对系统进行了详细的需求分析,并制定了程序设计的步骤,在此过程中,我发现了两个人一起开发系统,会产生一个比较好的效果,而且在,讨论中,小伙伴的一些想法恰恰是自己平时所不会考虑或关注的,但是这些又恰好是对自己想法的一个补充,这也正好可以弥补自己的不足。在开发过程中,小伙伴也指出了代码的一些规范书写,从而可以更好的去书写程序,也方便了以后系统的迭代与加工,所以,很期待和他下一次的合作。
十、 结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会:
这个是有的。结对编程并不是说两个人合作的代码量大于两个人单干的代码量就是1+1>2,并不是以代码量的多少来论的;而是一种思想的碰撞,正如你有一个苹果,我也有一个苹果,我们交换之后仍然每个人只有一个苹果;但是如果你有一种思想,我也有一种思想,两人交换之后就会有两种乃至多种思想。结对编程贵在合作,如果没有合作,当你一个人思考时,总是会陷入偏执,个人能力毕竟有限。而合作则让两个人的思想交融,当然前提是两个人心里的真实目标是一致的,这样才是一个团体。这次项目的效果在我看来,显然是1+1>2的,结对编程体验良好!