源码在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的,结对编程体验良好!