作业2 四则运算

四则运算

编译环境:Eclipse

开发人员:钟鹏升,吴梓健

开发时间:2015-04-07到2015-04-09

实现功能:

  1. 登陆界面,用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序记住用户前一次输入的用户名
  2. 程序可以出0到100的正整数四则运算(不会出现除数为0的情况),除法保留两位小数且四舍五入,如:26/3= 8.67,特别注意:这里是8.67而非8.66
  3. 用户可以选择出题的个数(最多不能超过5个题目),题目做错会在下一题显示正确答案,在题目最后显示测验的题目,答对的题目,正确率。
  4. 程序可以设置皮肤功能,可以改变界面的颜色即可。
  5. 程序具有提示输入错误功能,自动判别输入的内容,如果输入错误会提示输入错误

缺点:

      1.界面还不够美观

    2.还没弄结果可以为分数形式,没弄表达式里含有负整数,时间线程还没加入。

结伴同学:

姓名:吴梓健

博客地址:http://www.cnblogs.com/wuzijian/

总结:

    1.很久没有用JAVA了,部分的知识有点忘记,遇到很多问题,经过百度和查看书籍后解决

    2.可以参考其它同学的代码,从中可以学到别人的想法和代码格式

    3.写代码一定要规范,最好有一个自己写的模板,多点练习,尝试做一些小型程序

下图是运行的结果截图(共3张):

工作时的照片:

下面是源代码:

import javax.swing.*;
import javax.swing.table.*;

import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;

public class MainFrame extends JFrame implements ActionListener{
    JLabel label1 = new JLabel("");
    JLabel label2 = new JLabel("");
    JLabel label3 = new JLabel("用户:");
    JTextField textField = new JTextField(10);
    JButton DengluBtn = new JButton("登陆");
    public Font firstFont = new Font("宋体",Font.PLAIN,20);
    public Font secondFont = new Font("黑体",Font.PLAIN,22);
    String yonghu;
    public MainFrame()
    {
        try{
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
            jbInit();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    private void jbInit() throws Exception{
        setTitle("登陆");
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(400,400);
        this.setLayout(null);
        label1.setFont(firstFont);
        label2.setFont(firstFont);
        label3.setFont(secondFont);
        label1.setBounds(50, 80, 300, 50);
        label2.setBounds(50, 80, 300, 50);
        label3.setBounds(80, 160, 80, 50);
        textField.setBounds(150, 170, 100, 30);
        DengluBtn.setBounds(260, 165, 60, 40);
        DengluBtn.addActionListener(this);
        yonghu = textField.getText();
        try{
            File fis = new File("foo.txt");
            BufferedReader bis=new BufferedReader(new FileReader(fis));
            String temp="";
            temp=bis.readLine();
            if(temp==null)
            {
                label1.setVisible(false);
                label2.setText("还没有用户,请随意输入以登陆!");
            }
            bis.close();
            label1.setText("之前的用户为:"+temp);
        }catch(FileNotFoundException ex){
            label1.setVisible(false);
            label2.setText("还没有用户,请随意输入以登陆!");
        }
         catch (IOException ex) {
            // TODO Auto-generated catch block
            ex.printStackTrace();
        }
        this.add(label1);
        this.add(label2);
        this.add(label3);
        this.add(textField);
        this.add(DengluBtn);
    }
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource()==DengluBtn)
        {
            try{
                File fs = new File("foo.txt");
                BufferedWriter os = new BufferedWriter(new FileWriter(fs));
                os.write(textField.getText());
                os.flush();
                os.close();
            }catch(Exception ex){
                ex.printStackTrace();
                }
            Cal cal=new Cal();
            this.setVisible(false);
            Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
            Dimension frameSize=cal.getSize();
            cal.setLocation((screenSize.width-frameSize.width)/2, (screenSize.height-frameSize.height)/2);
            cal.setVisible(true);
        }
    }
}
import javax.swing.*;
import javax.swing.table.*;

import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Cal extends JFrame implements ActionListener {
    public static String number;
     JLabel label = new JLabel("题目的数量:");
     JTextField textField = new JTextField(10);
     JButton confirmBtn = new JButton("确定");
     public Font firstFont = new Font("宋体",Font.PLAIN,24);
     public Cal()
        {
            try{
                jbInit();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        private void jbInit() throws Exception{
            setTitle("四则运算测试");
            setSize(475,450);
            this.setLayout(null);
            label.setBounds(60, 180, 150, 40);
            label.setFont(firstFont);
            confirmBtn.setBounds(310, 175, 60, 50);
            textField.setBounds(200, 180, 100, 40);
            confirmBtn.addActionListener(this);
            this.add(label);
            this.add(textField);
            this.add(confirmBtn);
        }
        public void actionPerformed(ActionEvent e)
        {
            if(e.getSource()==confirmBtn)
            {
                number = textField.getText();            

                if(!checkString(number)){
                        JOptionPane.showMessageDialog(null, "未输入数字!","提示",JOptionPane.ERROR_MESSAGE);
                        return;
                }
                else if((!checkInteger(number))){
                        textField.setText("");
                        JOptionPane.showMessageDialog(null, "请输入数字!","提示",JOptionPane.ERROR_MESSAGE);
                        return;
                }
                else if(Integer.parseInt(number)<=0){
                    textField.setText("");
                    JOptionPane.showMessageDialog(null, "输入错误!","提示",JOptionPane.ERROR_MESSAGE);
                    return;
            }
                else if(Integer.parseInt(number)>5){
                    textField.setText("");
                    JOptionPane.showMessageDialog(null, "5道题以内!","提示",JOptionPane.ERROR_MESSAGE);
                    return;
            }
                else {
                    CountPanel count=new CountPanel();
                    this.remove(this.getContentPane());
                    this.setContentPane(count);
                    this.setVisible(true);
                }
            }
        }
        /**
         * 检查输入的文本信息是否为空
         * @param text 输入的信息内容
         * @return 输入的文本信息是否为空
         */
        public boolean checkString(String text) {
                /*      当输入的文本去掉前后空格长度为0时返回false  */
                if(text.trim().length()==0){
                        return false;
                }
                return true;
        }

        /**
         * 检查输入的数字信息是否是整数
         * @param text 输入的信息内容
         * @return 输入的数字信息是否是整数
         */
        public boolean checkInteger(String text) {
                /*      当输入的文本去掉前后空格长度为0时返回false  */
                if(text.trim().length()==0){
                        return false;
                }
                try{
                        Integer.parseInt(text);
                }catch(Exception e){
                        /*      无法转换为整数时返回false   */
                        return false;
                }
                return true;
        }
}
import java.awt.*;
import java.awt.event.*;
import java.math.*;
import java.text.DecimalFormat;
import java.util.Random;

import javax.swing.*;

public class CountPanel extends JPanel implements ActionListener {
    JLabel L=new JLabel("");
    JLabel L1=new JLabel("");
    JLabel L2=new JLabel("");
    JLabel L3=new JLabel("");
    JLabel L4=new JLabel("");
    JTextField T = new JTextField(10);
    JButton B = new JButton("提交");
    JButton colorBtn=new JButton("变色");
    JPanel P1=new JPanel();
    public Font firstFont = new Font("宋体",Font.PLAIN,22);
    public Font secondFont = new Font("幼圆",Font.PLAIN,20);
    public Font thirdFont = new Font("幼圆",Font.PLAIN,18);
    int r=0;
    int n=1;
    int op;
    int a;
    int b;
    double ra;
    String t;
    Double answer;
    public CountPanel()
    {
        try{
            jbInit();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    private void jbInit() throws Exception
    {
        this.setLayout(null);
        L.setBounds(60, 150, 150, 40);
        L.setFont(firstFont);
        T.setBounds(190, 150, 80, 40);
        B.setBounds(280, 145, 60, 50);
        colorBtn.setBounds(380, 20, 60, 50);
        L1.setBounds(40, 220, 400, 40);
        L1.setFont(secondFont);
        L2.setFont(thirdFont);
        L3.setFont(thirdFont);
        L4.setFont(thirdFont);
        P1.setBounds(120, 300, 200, 200);
        B.addActionListener(this);
        colorBtn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                setBackground(new Color(
                          (new Double(Math.random() * 128)).intValue() + 128,
                          (new Double(Math.random() * 128)).intValue() + 128,
                          (new Double(Math.random() * 128)).intValue() + 128));
                P1.setBackground(new Color(
                          (new Double(Math.random() * 128)).intValue() + 128,
                          (new Double(Math.random() * 128)).intValue() + 128,
                          (new Double(Math.random() * 128)).intValue() + 128));

            }
        });
        a =new Random().nextInt(100);
        b =new Random().nextInt(100);
        op=new Random().nextInt(4);
        switch(op)
        {
        case 0:
            L.setText("题"+n+". "+a+"+"+b+"=");
            answer=(double) (a+b);
            break;
        case 1:
            L.setText("题"+n+". "+a+"-"+b+"=");
            answer=(double) (a-b);
            break;
        case 2:
            L.setText("题"+n+". "+a+"*"+b+"=");
            answer=(double) (a*b);
            break;
        case 3:
            while(b==0){
                b =new Random().nextInt(100);
            }
            L.setText("题"+n+". "+a+"/"+b+"=");
            BigDecimal   x   =   new   BigDecimal((double)a/b);
            answer  =   x.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();  

            break;
        }
        this.add(L);
        this.add(T);
        this.add(B);
        this.add(L1);
        this.add(P1);
        this.add(colorBtn);
        P1.add(L2);
        P1.add(L3);
        P1.add(L4);
    }

    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource()==B)
        {
            t = T.getText();            

            /*      检查学号是否输入      */
            if(!checkString(t)){
                    JOptionPane.showMessageDialog(null, "未输入数字!","提示",JOptionPane.ERROR_MESSAGE);
                    return;
            }
            else if((!checkInteger(t))){
                    T.setText("");
                    JOptionPane.showMessageDialog(null, "请输入数字!","提示",JOptionPane.ERROR_MESSAGE);
                    return;
            }
            else {
                n++;
                if(Double.parseDouble(t)==answer){
                    r++;
                    L1.setText("               答对了!");
                }
                else{
                    L1.setText("答错了!"+L.getText()+"的正确答案是:"+answer);
                }
                T.setText("");
                if(n<=Integer.parseInt(Cal.number)){
                    a =new Random().nextInt(100);
                    b =new Random().nextInt(100);
                    op=new Random().nextInt(4);
                    System.out.print(op);
                    switch(op)
                    {
                    case 0:
                        L.setText("题"+n+". "+a+"+"+b+"=");
                        answer=(double) (a+b);
                        break;
                    case 1:
                        L.setText("题"+n+". "+a+"-"+b+"=");
                        answer=(double) (a-b);
                        break;
                    case 2:
                        L.setText("题"+n+". "+a+"*"+b+"=");
                        answer=(double) (a*b);
                        break;
                    case 3:
                        while(b==0){
                            b =new Random().nextInt(100);
                        }
                        L.setText("题"+n+". "+a+"/"+b+"=");
                        BigDecimal   x   =   new   BigDecimal((double)a/b);
                         answer  =   x.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();
                        break;
                    }
                }
                else
                    {
                        B.setEnabled(false);
                        L2.setText("本次测验共"+Integer.parseInt(Cal.number)+"题");
                        L3.setText("你答对了"+r+"题");
                        ra=(double)r/(n-1);
                        DecimalFormat fmt = new DecimalFormat("0.##%");
                        L4.setText("正确率为:"+fmt.format(ra));
                    }
            }
        }
    }
    /**
     * 检查输入的文本信息是否为空
     * @param text 输入的信息内容
     * @return 输入的文本信息是否为空
     */
    public boolean checkString(String text) {
            /*      当输入的文本去掉前后空格长度为0时返回false  */
            if(text.trim().length()==0){
                    return false;
            }
            return true;
    }

    /**
     * 检查输入的数字信息是否是整数
     * @param text 输入的信息内容
     * @return 输入的数字信息是否是整数
     */
    public boolean checkInteger(String text) {
            /*      当输入的文本去掉前后空格长度为0时返回false  */
            if(text.trim().length()==0){
                    return false;
            }
            try{
                    Double.parseDouble(text);
            }catch(Exception e){
                    /*      无法转换为整数时返回false   */
                    return false;
            }
            return true;
    }
}
import java.awt.*;
import javax.swing.*;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MainFrame  frame=new MainFrame();
        Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize=frame.getSize();
        frame.setLocation((screenSize.width-frameSize.width)/2, (screenSize.height-frameSize.height)/2);
        frame.setVisible(true);
    }
}
时间: 2024-08-29 14:53:40

作业2 四则运算的相关文章

作业5 四则运算 测试与封装 5.2

作业5 四则运算 测试与封装  5.2 开发环境:   Eclipse 开发人员:   欧其锋(201306114305) 余汉城(201306114317)(http://www.cnblogs.com/yuhancheng/) 分工:   欧其锋:异常处理 余汉城:重构 源代码: 1 package GongNengpk; 2 3 import GongNengpkTest.ChuShuLingException; 4 import GongNengpkTest.JCException; 5

第二次作业:四则运算

需求分析: 编写一个能对0--10之间的整数(随机生成)进行四则运算的“软件”程序能接收用户输入的整数答案,并判断对错程序结束时,统计出答对.答错的题目数量. 设计思路: 我用的是Windows窗体应用程序,有3个Form窗体,如图: 在Form1中设置3个Textbox控件,表示随机数和输出结果,两个Label控件,代表运算符和“=”,7个Button控件代表“+.-.*./.开始.说明.结束”: Form2中4个Label控件,4个Textbox控件,表示“答题总数.正确数.错误数和正确率”

第一周作业——小学四则运算题

作业要求: 写一个能自动生成小学四则运算题目的命令行 “软件”, 分别满足下面的各种需求,这些需求都可以用命令行参数的形式来指定: a) 支持整数.真分数的四则运算.例如:  1/6 + 1/8 = 7/24 b) 逐步扩展功能和可以支持的表达式类型,最后希望能支持下面类型的题目(最多 10 个运算符,括号的数量不限制) 25 - 3 * 4 - 2 / 2 + 89 = ?      1/2 + 1/3 - 1/4 = ?       ( 5 - 4 ) * ( 3 +28 ) =? 设计思路

第二次作业《四则运算》

题目: 请编写一个能自动生成小学四则运算题目的 “软件”. 让程序能接受用户输入答案,并判定对错. 最后给出总共 对/错 的数量. 一:基本要求 1:题型选择界面设计,选择加.减.乘.除运算. 2:系统随机产生一百以内的两个数进行运算. 3:练习时,用户从键盘输入结果,正确和错误均有提示,按6,显示总题数和正确数. 二:需求分析 编写小学四则运算测试系统,要求完成两位数的加,减,乘,除四则运算.能根据用户的输入来选择运算种类,用户输入答案后可以判断正误,做完一次测试后,用户可以决定是否继续进行下

作业二--四则运算

#include <stdio.h> #include <stdlib.h> #include <time.h> int add(int num1,int num2) { return num1+num2; } int subtraction(int num1,int num2) { return num1-num2; } int mul(int num1,int num2) { return num1*num2; } float divis(int num1,int

结对编程作业:四则运算

截止日期 2018年4月12日15:30 提交地址 https://github.com/eudaem/homework2 本次结对编程作业分为以下两种类型Core(计算核心)和UI(用户界面),每组任选一个完成,原则上两种类型题目各占一半 Core 像<构建之法>的人物阿超那样,写一个能自动生成小学四则运算题目并给出答案的命令行 "软件", 如果我们要把这个功能放到不同的环境中去(例如,命令行,Windows 图形界面程序,网页程序,手机App),就会碰到困难,因为目前代

个人作业1——四则运算题目生成程序(基于控制台)

No.1 四则运算题目生成程序(基于控制台) 程序代码 需求分析: 能够根据用户自身对题目数量的需求自动生成一定数量的包含分数的四则运算题目的命令行程序. 功能设计: 除了整数以外,还要支持真分数的四则运算,真分数的运算 并且要求能处理用户的输入,并判断对错,打分统计正确率 要求能处理用户输入的真分数 使用 -n 参数控制生成题目的个数 设计实现: 程序是用c++实现的,主要有四个函数,主函数随机生成整数或者分数算法,divisor(int i, int j)计算最大公约数,zs为计算整数算法,

软件工程第一周作业----小学生四则运算题

实现功能: 1.整数和真分数的四则运算, 运算数和运算结果都可以是整数或分数: 2.能生成任意个运算数的算式(不超过100): 3.算式的个数.数的范围.运算数的个数由命令行输入: 4.不支持括号. 实现思路: 1.定义算式类,数据成员包含两个数组,分别存储运算数和算符:以及算式的结果: 方法成员包括一个初始化函数,随机生成算式并计算结果:一个输出函数,用来打印算式:以及其他辅助函数. 2.定义运算数类,数据成员包含两个整数,即分子和分母. 3.在主类里调用算式类的方法,来生成和输出算式:接受用

软件工程第一周作业----小学生四则运算题2.0

实现功能: 1.整数和真分数的四则运算, 运算数和运算结果都可以是整数或分数: 2.能生成任意个运算数的算式: 3.算式的个数.数的范围.运算数的个数由命令行输入: 4.保证生成的算式不重复; 5.支持括号. 实现思路: 1.新定义了表达式类,数据成员包含表达式的值,表达式的字符串形式,以及两个子表达式中间的算符. 方法成员包括两个构造函数,其中一个随机生成算式并计算结果,另一个是默认的,用来分配空间:一个输出函数,用来打印算式:以及其他辅助函数. 构造函数的思路:构造两个较短的子表达式,然后用