201571030316/201571030314《小学生四则运算练习软件》结对项目报告

github代码地址:https://github.com/mqqgd/Experiment2

小伙伴儿的博客地址链接:http://www.cnblogs.com/mjuan/p/8715700.html

我的学号:201571030316                  小伴儿的学号:201571030314

一、需求分析

     本次实验采用结对编程方式,设计开发一个小学生四则运算练习软件,使之具有以下功能:

  • 由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错误不计分,20道题测试结束后给出测试总分;
  • 题库文件可采用实验二的方式自动生成,也可以手工编辑生成,文本格式如下:

  • 程序为用户提供三种进阶四则运算练习功能选择:百以内整数算式(必做)、带括号算式、真分数算式练习;
  • 程序允许用户进行多轮测试,提供用户多轮测试分数柱状图,示例如下:

  • 程序记录用户答题结果,当程序退出再启动的时候,可为用户显示最后一次测试的结果,并询问用户可否进行新一轮的测试;
  • 测试有计时功能,测试时动态显示用户开始答题后的消耗时间。
  • 程序人机交互界面是GUI界面(WEB页面、APP页面都可),界面支持中文简体(必做)/中文繁体/英语,用户可以进行语种选择。

二、软件设计类图

三、核心功能代码展示

 1 import java.util.Random;
 2
 3 public class GetRandomDigit {
 4     private Random random;
 5     public GetRandomDigit(){
 6         random=new Random();
 7     }
 8     int oprator(){
 9         return random.nextInt(4)+1;
10     }
11     int Time(){
12         return random.nextInt(3)+3;
13     }
14     int randomDigit(){
15         return random.nextInt(100);
16     }
17     int probabilityQuestion(){
18         return random.nextInt(200);
19     }
20     int BracketsIndex(int time){
21         return random.nextInt(time-2);
22     }
23 }

随机出题

 1 public class LinkSql {
 2     private static final String url = "jdbc:mysql://127.0.0.1:3306/mqqgd";
 3     private  static final String user = "root";
 4     private  static final String password = "root";
 5     private static ResultSet ret = null;
 6     private  static final String name = "com.mysql.jdbc.Driver";
 7     public Connection conn = null;
 8     public PreparedStatement pst = null;
 9     public  LinkSql() {
10         try {
11             Class.forName(name);//指定连接类型
12             conn = DriverManager.getConnection(url, user, password);//获取连接
13             System.out.println("数据库链接成功");
14         } catch (Exception e) {
15             e.printStackTrace();
16         }
17     }
18
19     public void changeMySqlDate(String sql) {
20         try {
21             pst=conn.prepareStatement(sql);
22             pst.executeUpdate();
23             System.out.println("接收到修改数据库命令"+sql);
24         } catch (SQLException e) {
25             // TODO Auto-generated catch block
26             e.printStackTrace();
27         }
28     }
29     public ResultSet selectSqlDate(String sql) {
30         try {
31             System.out.println("接收到查询数据库命令"+sql);
32             pst=conn.prepareStatement(sql);
33             ret = pst.executeQuery();
34             return ret;
35         } catch (SQLException e) {
36             // TODO Auto-generated catch block
37             e.printStackTrace();
38             return null;
39         }
40     }
41     public void closeMySql() {
42         try {
43             this.conn.close();
44         } catch (SQLException e) {
45             e.printStackTrace();
46         }
47     }
48     @SuppressWarnings("static-access")
49     public void closeChart() {
50         try {
51             this.pst.close();
52             this.ret.close();
53         } catch (SQLException e) {
54             e.printStackTrace();
55         }
56     }
57 }

链接数据库

 1 import java.util.HashMap;
 2 import java.util.Stack;
 3 public class ArithmeticResult {
 4     public Double Result(String formula) {
 5         Stack<Double> s1 = new Stack<Double>();
 6         Stack<String> s2 = new Stack<String>();
 7         HashMap<String, Integer> hashMap = new HashMap<String, Integer>();
 8         hashMap.put("(", 0);
 9         hashMap.put("+", 1);
10         hashMap.put("-", 1);
11         hashMap.put("×", 2);
12         hashMap.put("÷", 2);
13         for (int i = 0; i < formula.length();) {
14             StringBuffer digit = new StringBuffer();
15             char c = formula.charAt(i);
16             while (Character.isDigit(c) || c == ‘.‘) {
17                 digit.append(c);
18                 i++;
19                 c = formula.charAt(i);
20             }
21             if (digit.length() == 0) {
22                 switch (c) {
23                 case ‘(‘: {
24                     s2.push(String.valueOf(c));
25                     break;
26                 }
27                 case ‘)‘: {
28                     String stmp = s2.pop();
29                     while (!s2.isEmpty() && !stmp.equals("(")) {
30                         double a = s1.pop();
31                         double b = s1.pop();
32                         double sresulat = calcDouble(b, a, stmp);
33                         s1.push(sresulat);
34                         stmp = s2.pop();
35                     }
36                     break;
37                 }
38                 case ‘=‘: {
39                     String stmp;
40                     while (!s2.isEmpty()) {
41                         stmp = s2.pop();
42                         double a = s1.pop();
43                         double b = s1.pop();
44                         double sresulat = calcDouble(b, a, stmp);
45                         s1.push(sresulat);
46                     }
47                     break;
48                 }
49                 default: {
50                     String stmp;
51                     while (!s2.isEmpty()) {
52                         stmp = s2.pop();
53                         if (hashMap.get(stmp) >= hashMap.get(String.valueOf(c))) {
54                             double a = s1.pop();
55                             double b = s1.pop();
56                             double sresulat = calcDouble(b, a, stmp);
57                             s1.push(sresulat);
58
59                         } else {
60                             s2.push(stmp);
61                             break;
62                         }
63
64                     }
65                     s2.push(String.valueOf(c));
66                     break;
67                 }
68                 }
69             } else {
70                 s1.push(Double.valueOf(digit.toString()));
71                 continue;
72             }
73             i++;
74         }
75         return s1.peek();
76     }
77
78     public double calcDouble(double a, double b, String stmp) {
79         double res = 0f;
80         char s = stmp.charAt(0);
81         switch (s) {
82           case ‘+‘:
83             res = a + b;
84             break;
85           case ‘-‘:
86             res = a - b;
87             break;
88           case ‘ב:
89             res = a * b;
90             break;
91           case ‘÷‘:
92             res = a / b;
93             break;
94         }
95         return res;
96     }
97 }  

计算过程

 1 //从这里开始
 2         CategoryPlot plot=chart.getCategoryPlot();//获取图表区域对象
 3         CategoryAxis domainAxis=plot.getDomainAxis();         //水平底部列表
 4         domainAxis.setLabelFont(new Font("黑体",Font.BOLD,14));         //水平底部标题
 5         domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12));  //垂直标题
 6         ValueAxis rangeAxis=plot.getRangeAxis();//获取柱状
 7         rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15));
 8         chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));
 9         chart.getTitle().setFont(new Font("宋体",Font.BOLD,20));//设置标题字体
10
11         //到这里结束,虽然代码有点多,但只为一个目的,解决汉字乱码问题
12         //这里也可以用chartFrame,可以直接生成一个独立的Frame
13         frame1=new ChartPanel(chart,true);
14
15     }
16
17     private CategoryDataset getDataSet() {
18         DefaultCategoryDataset dataset = new DefaultCategoryDataset();
19         System.out.println(times);
20         for(int i=0;i<times;i++){
21             System.out.println("lalal");
22             dataset.addValue(result[i],"第"+(i+1)+"轮","第"+(i+1)+"轮");
23         }
24         return dataset;
25     }
26
27     public ChartPanel getChartPanel(){
28         return frame1;
29     }
30 }  

绘制柱状图

 1 import javax.swing.JFrame;
 2
 3 @SuppressWarnings("serial")
 4 public class Tongji extends JFrame{
 5     PieChart pic;
 6     int time;
 7     int [] result;
 8     public Tongji(int[] result,int time){
 9         this.time=time;
10         this.result=result;
11         setFrame();
12     }
13
14     //登陆界面
15     private void setFrame(){
16         System.out.println(time);
17         pic=new PieChart(result,time);
18         this.setTitle("您最终的得分统计");
19         this.setSize(600,400);
20         this.setLocationRelativeTo(null);
21         this.setResizable(false);
22         this.setVisible(true);
23         this.add(pic.getChartPanel());
24
25     }
26 }

统计分数

四、程序运行

1.登录界面

2.数据库

3.做题界面

4.答题结束时,自动显示柱状图

五、结对过程

六、PSP


PSP2.1


任务内容


计划共完成需要的时间(min)


实际完成需要的时间(min)


Planning


计划


20


16


·       Estimate


·  估计这个任务需要多少时间,并规划大致工作步骤


20


16


Development


开发


1838


1736


··       Analysis


需求分析 (包括学习新技术)


20


20


·       Design Spec


·  生成设计文档


25


25


·       Design Review


·  设计复审 (和同事审核设计文档)


10


10


·       Coding Standard


代码规范 (为目前的开发制定合适的规范)


3


3


·       Design


具体设计


300


240


·       Coding


具体编码


1440


1400


·       Code Review


·  代码复审


10


8


·       Test


·  测试(自我测试,修改代码,提交修改)


30


30


Reporting


报告


33


30


··       Test Report


·  测试报告


3


2


·       Size Measurement


计算工作量


10


8


·       Postmortem & Process Improvement Plan


·  事后总结 ,并提出过程改进计划


20


20

七、用汉堡评价法给小伙伴的点评

  首先很感谢我的小伙伴,在这次结对过程中对我的帮助。我是个比较懒的人,每次作业都很喜欢拖到最后一天写,但是我的小伙伴儿督促我,我们一起完成任务。我和小伙伴在编程方面是个newbie??,当老师布置任务以后,我和小伙伴有些绝望,最后想了想,反正也躲不过??,还是乖乖做吧??。我们请教大神,在网上查找资料,看看那些早早做完作业的同学的作业,摸索着思考着我们的作业该如何做如何设计。在合作的过程中,我们不断的互换角色,谁也记不清哪行代码是谁敲的??我们之间也没有出现各执己见的情况,很感谢我的小伙伴,我们都用“桥梁”的方式(ps:在邹欣老师的博文中有详细的介绍),给彼此充分的条件相互了解,达成共识。

八、结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会

  通过这次和小伙伴结对完成这个任务,我觉得结对编程真的能带来1+1>2的效果。以前自己一个人在写作业的时候,遇到困难时并没有及时去解决问题,而是和朋友扣扣,淘淘宝或者干干其他事,最后什么都没干,白天的任务拖到晚上熬夜做,看起来我很用功似的。这次结对编程对我的帮助很大,我和小伙伴共用一台电脑,相互督促,在做作业的时候没有做和作业无关的事,我也没有熬夜做作业^o^,上课也精神满满^0^~~而且,上次没有实现的括号运算,我和小伙伴一起请教班里的大神,最后也完成了。很感谢我的小伙伴,我们班的大神,还有老师们,嘿嘿,总之,这次结对感觉很棒棒~

参考资料:

http://www.cnblogs.com/xinz/archive/2011/08/22/2148776.html

https://baike.baidu.com/item/%E7%BB%93%E5%AF%B9%E7%BC%96%E7%A8%8B/7526152?fr=aladdin

原文地址:https://www.cnblogs.com/mqqgd/p/8708953.html

时间: 2024-10-29 04:19:42

201571030316/201571030314《小学生四则运算练习软件》结对项目报告的相关文章

201571030314《小学生四则运算练习软件》结对项目

结对编程实现小学生四则运算练习软件 前言:按照结对编程的原则,我和邻宿舍的小伙伴进行了两人结对编程,我们开发的结对项目的是小学生四则运算练习软件,具体就是随机生成n道题,供学生答题并返回正误记录答题结果,进行多轮.具体需求分析以及功能设计与实现如下. github代码地址:https://github.com/mqqgd/Experiment2 一.需求分析 本次实验采用结对编程方式,设计开发一个小学生四则运算练习软件,使之具有以下功能: 由计算机从题库文件中随机选择20道加减乘除混合算式,用户

201571030134/201571030139《小学生四则运算练习软件需求说明》结对项目报告

任务一 首先,我们进行了用户体验,把我们已经完成的小学生四则运算软件发给我们要调研的人,他们体验了我们的程序后再填写需求分析调查问卷,这样可以更好的得到一个反馈,让我们的需求分析更加清楚. 其次,我们主要采取了精准的调查问卷来进行需求分析,调查对象主要为西北师大附属小学的二至六年级的小学生.师大附小的一些有经验的老师以及我们学院的一些孩子正在上小学的老师.这一点我们是主要考虑到: 大范围的发放调查问卷,填写人员职业和经验都有不确定性,所以不能作为有效的需求分析,所以我们采用了精准问卷调查,让我们

201571030121《小学四则运算练习软件软件需求说明》结对项目报告

201571030107/201571030121<小学四则运算练习软件软件需求说明>结对项目报告 结对小伙伴:冯晓(201571030107) 任务一 首先,我们进行了实例体验,把我们已经上线的<小学生四则运算网站>链接发给我们调研的人,在他们体验过我们的程序后在填写需求分析调查问卷,这样可以更好的得到一个反馈,让我们的需求分析更加清楚. 网站链接:http://123.56.24.117:8080/ 其次,我们主要采取了精准的问卷调查方式来进行需求分析,调查的主要对象为老师和有

201571030133/201571030102《小学四则运算练习软件软件需求说明》结对项目报告

我的学号:201571030133 结对伙伴的学号:201571030102 结对伙伴的博文链接:http://www.cnblogs.com/yuan1229/p/8873824.html 任务一: 以实验二个人项目.实验三结对项目所开发的小学生四则运算练习软件作为原型,实施小学生四则运算练习软件用户调研活动. 1. 调研对象:小学生.小学生家长和小学老师. 2. 需求调研方法:访谈.问卷调查 .原型评估. 问卷样本链接:https://www.wjx.cn/jq/22680152.aspx

201571030122/201571030129《小学四则运算练习软件软件需求说明》结对项目报告

<小学四则运算练习软件>博文链接:http://www.cnblogs.com/mzll/p/8709480.html GitHub的链接地址:https://github.com/13993013291/Shiyan3.git 任务一:        以实验二个人项目.实验三结对项目所开发的小学生四则运算练习软件作为原型,实施小学生四则运算练习软件用户调研活动. 1.调研对象:老师,学生以及家长: 2.调研方法:主要是问卷调查,其次通过即时通讯工具访谈了下当老师的同学: 3.问卷样本链接:h

实验四:201571030116/201571030106《小学四则运算练习软件需求说明》结对项目报告

任务1:以实验二个人项目.实验三结对项目所开发的小学生四则运算练习软件作为原型,实施小学生四则运算练习软件用户调研活动. 由于上次作业小伙伴很机智的把软件的操作过程录成了gif动图,所以在做基于原型的用户需求调查时减少了很多麻烦.对于这个任务我们采用了三种方法做用户需求调查:1.线上问卷调查 2.真实用户线上访谈 3.会议研讨 1.线上问卷调查:地址: 我们通过前两次作业整理了一些问题,用"问卷星"做了一份线上问卷调查,为了更精确的区分不同真实用户对软件的需求,我们把问卷调查分成了三个

201571030109/201571030104《小学四则运算练习软件软件需求说明》结对项目报告

我的学号:201571030109 小伙伴的学号:201571030104 小伙伴的博文链接: 小学生四则运算软件的链接:链接1:http://www.cnblogs.com/fukang/p/8711021.html   链接2:http://www.cnblogs.com/dwxuan/p/8711505.html Github仓库主页链接地址:https://github.com/feser-xuan/Arithmetic_test3_UI 1.引言 1.1 编写目的 本文档的目的是详细地

2015710301020/201571030119《小学四则运算练习软件软件需求说明》结对项目报告

任务一:以小学生四则运算练习软件作为原型,实施小学生四则运算练习软件用户调研活动 1.实践软件需求获取方式 调查问卷: 利用问卷星平台,列出来28道题分别对老师.家长以及小学生进行了问卷调查. 问卷样本链接:https://www.wjx.cn/jq/22531831.aspx 2.调查问卷分析 任务二:采用适当的建模方法描述任务1所获取的需求,请调研用户复查. 任务三: 1.<小学四则运算练习软件软件需求说明>链接:https://shimo.im/docs/OtKU7suLE2QKTihS

201571030120/201571030119《小学四则运算练习软件软件需求说明》结对项目报告

任务一:以小学生四则运算练习软件作为原型,实施小学生四则运算练习软件用户调研活动 1.需求获取方式 (1)老师:搭档父亲是一名小学老师,由她提前和他通了电话,他答应帮她把电子版的调查问卷发放给他的同事.然后让他对我们的原型进行了分析. (2)家长和学生:亲戚中有小孩上小学,我们将包含我们软件原型和博客的调查问卷发给他们,同时获取了小学生和家长的意见,考虑小学生的理解能力有限,我们提前和家长进行了沟通,帮助孩子理解题目并作答. 2.调查问卷设计(https://www.wjx.cn/m/22531