代码改变世界

结对项目——四则运算 “软件”之升级版

2018-10-29 10:25  CMis180kg  阅读(202)  评论(1编辑  收藏  举报

 

此作业要求来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2232

github远程仓库地址:https://github.com/cmkg/cm/tree/master/Operation

 

一、题目要求

 从个人项目出发,将程序改装成一个单机带用户界面(不是控制台)的程序,这个程序最基本要达到:

  • 生成题目,单个题目最多不能超过4个运算符,操作数小于100。
  • 用户可以输入答案
  • 若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。

二、扩展方向要求

  1. 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
  2. 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
  3. 用户答题结束以后,程序可以显示用户答题所用的时间
  4. 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
  5. 用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名 
  6. 程序可以出单个整数阶乘的题目:如:4!=24
  7. 程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。
  8. 程序可以设置皮肤功能,可以改变界面的颜色即可。

三、开发环境

  • 编程语言:Java语言
  • 开发工具:Intellij IDEA 2018.2.2

四、详细设计

1.实现的扩展要求

  • 用户登录界面,用户可用账号密码登录;
  • 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数;
  • 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数;
  • 程序可以设置皮肤功能,可以改变界面的颜色即可;
  • 程序可以出单个整数阶乘的题目:如:4!=24;
  • 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。

2.项目源代码

  • 项目源代码已上传到GitHub仓库。

3.实现的功能部分代码

  • 用户登录
public static  void login(){
        // TODO Auto-generated method stub
        JFrame f=new JFrame();
        f.setTitle("四则运算系统登录界面");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setExtendedState(JFrame.MAXIMIZED_BOTH);
        f.setVisible(true);

        //设置窗口的大小和位置
        f.setSize(500,400);
        f.setLocation(420,120);

        Container con=f.getContentPane();//生成一个容器
        con.setLayout(new GridLayout(7,1));
        //生成一个新的版面
        JPanel pan1=new JPanel();
        JLabel title=new JLabel("欢迎登录四则运算系统!");
        title.setFont(new Font("幼圆",Font.BOLD, 20));
        pan1.add(title);
        con.add(pan1);

        //最上面的登陆文字
        //生成一个新的版面
        JPanel pan2=new JPanel();
        JLabel name=new JLabel("用户名");
        pan2.add(name);
        JTextField nameTest=new JTextField(15);
        pan2.add(nameTest);
        con.add(pan2);

        //生成一个新的版面
        JPanel pan3=new JPanel();
        JLabel pass = new JLabel("密    码");
        pan3.add(pass);
        JPasswordField password=new JPasswordField(15);
        password.setEchoChar('*');
        pan3.add(password);
        con.add(pan3);
        //密码及其密码域放在第三个版面上
        // System.out.println(username+"   "+userPassword);
        JPanel pan4 = new JPanel();
        JButton b_log=new JButton("登录");
        b_log.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                //获取用户名和密码,进行校验
                String myUsername=nameTest.getText();
                String myPassword=password.getText();
                if(myUsername.equals("chen")&&myPassword.equals("0081")){
                    JOptionPane.showMessageDialog(null, "登陆成功!");
                    exercise();
                    //                System.exit(0);
                }else{
                    JOptionPane.showMessageDialog(null, "账号或密码错误!");
                    nameTest.setText("");
                    password.setText("");
                }
            }
        });
  • 整数阶乘
 a=(int) (Math.random()*9+1);
            s1=String.valueOf(a)+String.valueOf(h1[2]);//获取这个数进行阶乘
            L4.setText(s1);
            result=1;
            for(int i=1;i<=a;i++)
            {
                result=result*i;
            }
  • 生成四则运算
else {
                    if (b >= 0 && c >= 0) {
                        s1 = String.valueOf(a) + String.valueOf(h[j]) + String.valueOf(b) + String.valueOf(h[k]) + String.valueOf(c);
                        L4.setText(s1);
                        System.out.println(s1);
                    } else if (b < 0 && c >= 0) {
                        s1 = String.valueOf(a) + String.valueOf(h[j]) + String.valueOf(h1[0]) + String.valueOf(b) + String.valueOf(h1[1]) + String.valueOf(h[k]) + String.valueOf(c);
                        L4.setText(s1);
                        System.out.println(s1);
                    } else if (b >= 0 && c < 0) {
                        s1 = String.valueOf(a) + String.valueOf(h[j]) + String.valueOf(b) + String.valueOf(h[k]) + String.valueOf(h1[0]) + String.valueOf(c) + String.valueOf(h1[1]);
                        L4.setText(s1);
                        System.out.println(s1);
                    } else {
                        s1 = String.valueOf(a) + String.valueOf(h[j]) + String.valueOf(h1[0]) + String.valueOf(b) + String.valueOf(h1[1]) + String.valueOf(h[k]) + String.valueOf(h1[0]) + String.valueOf(c) + String.valueOf(h1[1]);
                        L4.setText(s1);
                        System.out.println(s1);
                    }
//题目个数
if (n > 5 || n < 1) {
                            JOptionPane.showMessageDialog(null, "题目个数≥1, ≤5", "注意", JOptionPane.INFORMATION_MESSAGE);
                        } 

  •  背景色
public void actionPerformed(ActionEvent cc) {
                                Color ch = JColorChooser.showDialog(p1, "背景颜色",
                                        p1.getBackground());
                                if (ch != null) {
                                    p1.setBackground(ch);
                                    p1.repaint();
                                }

 


五、运行结果

  • 用户登录界面

  • 答题系统界面

  • 阶乘及提示

  • 答题情况统计

  • 背景色


六、结对同伴

姓名:陈健雄

学号:201606120086

他的博客地址:https://www.cnblogs.com/cjx666/p/9869181.html

项目分工:我主要负责用户登录功能、阶乘和运算式的生成,同伴负责的是题目个数功能和背景色更换。其余的工作量和遇到的问题都是共同解决的。

结对过程图片

 


 七、结对软件过程耗时估计与统计表

PSP2.1 Personal Software Process Stages Time Senior Student(h) Time
Planning 计划 3 2.5
Estimate 估计这个任务需要多少时间 15 16
Development 开发 8 7.5
Analysis 需求分析 (包括学习新技术) 2 1.5
Design Spec 生成设计文档 2 1
Design Review 设计复审 1 0.5
Coding Standard 代码规范 1 1
Design 具体设计 5 6
Coding 具体编码 13 12
Code Review 代码复审 2 2
Test 测试(自我测试,修改代码,提交修改) 2 2
Reporting 报告 1 1.5
  测试报告 0 0
  计算工作量 2 1.5
  并提出过程改进计划 0.5 0.5

 


 八、总结

此次结对项目,遇到的问题有登录界面的跳转和背景颜色的更改;解决方法是跟同伴讨论和网上找方法解决。此次的结对项目让我们更深层次的认识到了与人合作的交流和遇到问题共同讨论找方法解决的重要性,也让我们真正的体会到了结对共同完成一个小项目一个程序的意义。希望此次的结对作业能在今后给我们在结对开发时带来不一样的体验和感受。