201571030319 201571030322 小学四则运算结对项目

  • GitHub源码地址:https://github.com/nigulasiletai/Demo2
  • 1.需求分析:
  •   (1)随机选择20道混合运算;
  •   (2)用户输入答案,给出结果;

      (3)程序检查答案结果,正确计5分,错误不计分;

      (4)20道测试题结束给出总分;

      (5)带括号算式,真分数算式;

      (6)程序允许用户进行多轮测试,给出多轮测试分数柱状图;

      (7)程序记录用户答题结果,当程序退出再启动的时候,可为用户显示最后一次结果,并询问用户可否进行新一轮测试;

      (8)测试有记时功能,动态显示答题后的消耗时间;

      (9)程序人机交互界面是GUI界面;

    2.功能设计:

      (1)算式引用实验二的代码;

      (2)生成的题库显示在QuestionBank.docx 中;并随机产生20道算式;

      (3)调用包JfreeChart-1.0.13包;来生成柱状图;

      (4)倒计时用Thread.sleep和循环来完成;

      (5)多轮测试弹出框用JOptionPane类来完成;

    3.设计实现:

      (1)随机产生的20道算式放在ArrayList集合中,然后传参调入Gu类中;

      (2)倒计时时间设置为30分钟,以消耗的形式动态展现;

      (3)随机产生的算式得出的结果放在counter中,然后以传参形式放在Score类中,形成柱状图;

    4.核心代码:

      Gu类(界面)

    package cn.longteng.demo;
    
    import java.awt.BorderLayout;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.FileNotFoundException;
    import java.util.ArrayList;
    
    import javax.swing.*;
    
    public class Gu extends JFrame {
        static JFrame j;
        static JPanel jp, p1, p2;
        JLabel[] lab = new JLabel[20];
        JLabel[] lab3 = new JLabel[20];
        static JTextField[] txt = new JTextField[20];
        static JButton btn;
        static JLabel lab1;
    
        String[] str = new String[200];
        int[] num = new int[200];
        String[] sr = new String[20];
        static int[] nm = new int[20];
        static long time = 1800;
        static Main m = new Main();
        static int[] res=new int[20];
        static int counter=0;
        static String[] srs=new String[20];
        static int n;
        static int w;
        static ArrayList<Integer> lis=new ArrayList();
        public Gu() {
    
        }
    
        public void Jiemian(){
            j = new JFrame("小学生在线混合运算题库");
            j.setSize(1366, 735);
            jp = new JPanel();
            jp.setLayout(new BorderLayout());
            p1 = new JPanel();
            p1.setLayout(new BorderLayout());
            p2 = new JPanel();
            p2.setLayout(new GridLayout(10, 5, 10, 40));
            btn = new JButton("提交");
            lab1 = new JLabel();    
    
            for (int k = 0; k < 20; k++) {
                lab[k] = new JLabel("");
                txt[k] = new JTextField("   ");
                lab3[k] = new JLabel("                  ");
            }
    
            for (int i = 0; i < 20; i++) {
                p2.add(lab3[i]);
                p2.add(lab[i]);
                p2.add(txt[i]);
            }
    
            p1.add(lab1, BorderLayout.WEST);
            p1.add(btn, BorderLayout.EAST);
            j.add(jp);
            jp.add(p1, BorderLayout.NORTH);
            jp.add(p2, BorderLayout.CENTER);
            j.setVisible(true);
            j.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
        }
    
        public void SetLab(Main s) {
            try {
                s.Num();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            this.str = Main.ts;
            this.num = Main.s;
            int i = 0;
            for (int l = 0; l < 200; l = l + 10) {
                while (i < 20) {
                    sr[i] = str[l];
                    nm[i] = num[l];
                    lab[i].setText(sr[i]);
                    i++;
                    break;
                }
            }
            }
    
        public  void Time() {
            while(time >0) {
                long mm = time / 60 % 60;
                long ss = time % 60;
                lab1.setText("剩余答题时间:" + mm + ":" + ss);
                time--;
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    
        public void Chann(){
    
            btn.addActionListener(new ActionListener(){
                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    if(e.getSource()==btn){
                        for(int x=0;x<20;x++){
                            srs[x]=txt[x].getText().replaceAll(" ","");
                            if(srs[x].equals("")){
                                res[x]=0;
                            }
                            else{
                                res[x]=Integer.parseInt(srs[x].replaceAll(" ", ""));
                                if(res[x]==nm[x]){
                                    counter+=5;
                                }
                            }
                        }
                        lis.add(counter);
                        n=JOptionPane.showConfirmDialog(j, "是否提交?","系统提示",JOptionPane.INFORMATION_MESSAGE);
                        if(n==JOptionPane.YES_OPTION){
                            j.dispose();
                            w++;
                            new Score();
                        }
                        else{
                            return;
                        }
    
                    }
                }
    
            });
        }
    
        public void Ch(){
            if(time==0){
                for(int k=0;k<20;k++){
                    srs[k]=txt[k].getText().replaceAll(" ","");
                    if(srs[k].equals("")){
                        res[k]=0;    
    
                     }else{
    
                    res[k]=Integer.parseInt(srs[k].replaceAll(" ", ""));
                    if(res[k]==nm[k]){
                        counter+=5;
                    }
                }
            }
                lis.add(counter);
                j.dispose();
                w++;
                new Score();
            }
        }
    
    }

    Score类

    package cn.longteng.demo;
    
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.util.ArrayList;
    
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.axis.CategoryAxis;
    import org.jfree.chart.axis.ValueAxis;
    import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
    import org.jfree.chart.plot.CategoryPlot;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.chart.renderer.category.BarRenderer3D;
    import org.jfree.data.category.CategoryDataset;
    import org.jfree.data.category.DefaultCategoryDataset;
    
    public class Score extends JFrame{
        ChartPanel frame1;
        static JFrame frame;
        static Gu gu=new Gu();
        static Main m = new Main();
        static ArrayList<Integer> lis=new ArrayList();
        public Score(){
            CategoryDataset dataset=getData(gu);
    
            JFreeChart chart=ChartFactory.createBarChart3D("小学生在线测试分数结果", "测试的次数", "分数", dataset,  PlotOrientation.VERTICAL, true, false,false);
    
            CategoryPlot plot=chart.getCategoryPlot();
    
            CategoryAxis domainAxis=plot.getDomainAxis(); 
    
            domainAxis.setLabelFont(new Font("黑体",Font.BOLD,14));         //水平底部标题
    
            domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12));  //垂直标题
    
            domainAxis.setUpperMargin(0.2);
            //设置距离图片右端距离
            domainAxis.setLowerMargin(0.1);
            //透明度
           // plot.setForegroundAlpha(1.0f); 
    
            ValueAxis rangeAxis=plot.getRangeAxis();//获取柱状
    
            rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15));
    
            chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));
    
            chart.getTitle().setFont(new Font("宋体",Font.BOLD,20));//设置标题字体
    
            BarRenderer3D renderer = new BarRenderer3D();//3D属性修改 
    
            plot.setRenderer(renderer);//将修改后的属性值保存到图中 
    
            renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); 
    
            renderer.setBaseItemLabelsVisible(true);
    
            renderer.setBaseItemLabelPaint(Color.BLUE);//
    
            frame1=new ChartPanel(chart,true); 
    
            frame=new JFrame("小学生在线混合运算测试统计图");
    
            frame.setLayout(new GridLayout(2,2,10,10));
    
            frame.add(getChartPanel());           //添加柱形图
    
            frame.setBounds(300, 50, 600, 650);
    
            frame.setVisible(true);
            Clos();
        }
    
        public CategoryDataset getData(Gu g) {
            // TODO Auto-generated method stub
             DefaultCategoryDataset dataset = new DefaultCategoryDataset();
             this.lis=g.lis;
             for(int i=0;i<g.w;i++){
                 dataset.addValue(lis.get(i),"","第"+i+"轮测试");
             }
             return dataset;
        }
    
        public ChartPanel getChartPanel(){
            return frame1;
        }
    
        public static  void Clos(){
             frame.addWindowListener(new WindowAdapter(){
                 public void windowClosing(WindowEvent e){
                     int i=JOptionPane.showConfirmDialog(null, "是否再次测试","系统提示",JOptionPane.INFORMATION_MESSAGE);
                     if(i==JOptionPane.YES_OPTION){
                        Gu g = new Gu();
                        g.Jiemian();
                        g.SetLab(m);
                        g.Chann();
                        frame.dispose();
                        //g.Time();
                        g.Ch();
                     }
                     else {
                         System.exit(0);
                     }
                 }
             });
        }
    
    }

    5.测试结果截图:

    结对时:

    6.PSP:

    PSP2.1 任务内容 计划完成需要的时间(min) 实际完成的时间(min)
    planning 计划 30 40
    Estimate 估计这个任务需要多少时间 40 55
    Development 开发 100 120
    Analysis 需求分析 8 20
    Design Spec 生成设计文档 8 19
    Design Review 设计审查 5 5
    Coding Standard 代码规范 14 9
    Design 具体设计 20 31
    Coding 具体编码 60 110
    Code Review 代码复审 38 15
    Test 测试(自我测试,修改代码,提交修改) 8 20
    Reporting 报告 16 14
    Test Report 测试报告 10 13
    Size Measurement 计算工作量 4 6

    Postmortem & Process

    Improvement

    事后总结 10 12

    性。

  • 7.总结
  • 通过本次的结对项目明白了团结合作的重要性,同时也清楚了自身的不足 ,在这次的结对项目实验中我的小伙伴马中山充分展现了他的能力,每当遇到难题时,总是他在第一时间反应过来,找出正确的方向,并且解决问题,这一点我应该向他学习。而我的问题是对代码的理解与阅读不够,需要在课后多加练习,希望在今后的项目中能展显出更好的成绩。

原文地址:https://www.cnblogs.com/mashaohui/p/8719608.html

时间: 2024-10-10 04:27:20

201571030319 201571030322 小学四则运算结对项目的相关文章

2016012045 +小学四则运算联系项目报告

  2016012045 +x小学四则运算联系项目报告 代码仓库地址:https://git.coding.net/Enther/operation.git 一.需求分析. 此项目主要是为面向小学生的小学数学四则运算练习所用,所以归纳出以下几点要求: (1)     对于每个数而言不能过大,且其中不涉及小数与负数,即仅考虑100内整数形式的运算. (2)     题目中最少包含两个运算符且保证不一样,且涉及加减乘除. (3)     程序中需要输入参数n作为随机产生题目数量. 二.功能设计. 此

四则运算结对项目

结对项目 1.代码地址:https://git.coding.net/mx123422/sizeyunsuanGUI-master.git 2.PSP计划 PSP2.1 任务内容 计划共完成需要的时间(h) Planning 计划 0.5 ·        Estimate ·   估计这个任务需要多少时间,并规划大致工作步骤 0.5 Development 开发 35 ·        Analysis ·         需求分析 (包括学习新技术) 1 ·        Design Sp

结对-四则运算-结对项目总结

我们两个对于Python并不是很懂,过程中出现了很多问题,如果是让我自己一个人去完成这个"四则运算",我肯定坚持不下来,刚开始打的时候就问题不断,连最基本的框架都会出现Bug,遇见Bug却怎么都改不过来的时候太多,改到头昏眼晕,想过好多次放弃,还好有小伙伴的鼓励和陪伴,我们两个学习成绩很一般,上学期一起做的的贪吃蛇是在团队的帮助下完成的,自己的存在感很低很低,而四则运算就我和爽两个人,还是很有存在感的. #_*_coding:utf-8_*_import stringimport ra

小学四则运算软件(结对项目 -CAI)

小学四则运算题 项目Github地址:https://github.com/2876416732/SWPM 驾驶员:袁振钧   领航员:卢玉升 项目需求分析文档(卢玉升)UI界面布局(袁振钧) 一年级单元测试题: 49+19=        81-25=          20+30=       30+25= 65-25=        25+25=          60-35=       20+15-5= 二年级单元测试题: 16-2×7=       50+2×8=        2×

201571030335/201571030320《小学四则运算练习软件》结对项目报告

源码链接地址:  https://github.com/woaichimangguo(我的201571030335) https://github.com/mashifang(小伙伴的201571030320) 一. 需求分析: (1)由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错误不计分,20道题测试结束后给出测试总分. (2)题库文件可采用实验二的方式自动生成,也可以手工编辑生成,文本格式如下: (3)程序为用户提供三种进阶四

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.线上问卷调查:地址: 我们通过前两次作业整理了一些问题,用"问卷星"做了一份线上问卷调查,为了更精确的区分不同真实用户对软件的需求,我们把问卷调查分成了三个