第二次作业

[实验目的]

1、掌握软件开发的基本流程

2、掌握常用的软件开发方式和工具

[实验内容]

1、设计包含登录界面的计算器 

2、连接数据库,用来储存用户的历史计算记录

[实验要求]

完成软件的UI设计,使用Visio设计软件中所涉及的所有流程图

用户登录流程图:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.awt.*;
import javax.swing.*;
import javax.swing.JFrame;//使窗体位于屏幕中间
public class Example10_2 {
    public static void main(String[] args) {
        JFrame window1=new JFrame();//java提供的JFrame类的实例是一个底层容器,即通常说的窗口,其他组件必须被添加到容器中,这里是创建了一个标题为“第一个窗口”的窗口
        window1.setTitle("用户登录界面");
        window1.setBounds(800,200,330,380);
        window1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//用来设置窗口右上角的图标关闭后,程序会如何处理,这里的是做出”结束窗口所在的应用程序“
        FlowLayout flow=new FlowLayout();//流式布局
        window1.setLayout(flow);//设置用户界面上的屏幕组件的格式布局,默认为流式布局
        //按钮
        JButton anniu =new JButton("登录");
        JButton guanbi =new JButton("关闭");
        //标签
        JLabel  hauny=new JLabel("                                                                                                                                       ");
        JLabel  xuehao=new JLabel("用户名:");
        JLabel  mima=new JLabel("密码:");
        //输入框
        JTextField xuehaowenjian=new JFormattedTextField();
        JPasswordField mimawenjian=new JPasswordField();
        //设置组件对象的属性
        Dimension daxiao = new Dimension(250,30);
        xuehaowenjian.setPreferredSize(daxiao);
        mimawenjian.setPreferredSize(daxiao);
        //添加组件
       window1.add(hauny);
        window1.add(xuehao);
        window1.add(xuehaowenjian);
        window1.add(mima);
        window1.add(mimawenjian);
        window1.add(anniu);
        window1.add(guanbi);
        window1.setVisible(true);//窗口是否可见,true为是
    }
}

 

登录成功:

登录失败:

 计算器代码:

复制代码
import java.awt.BorderLayout;

import java.awt.Button;
import java.awt.Color;
import java.awt.ComponentOrientation;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.WindowConstants;
import javax.swing.border.Border;import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;

public class mainJFrame extends JFrame {
//    private 
    boolean flag = false;
    static Connection con = null;//数据库?
    Button btn[] = new Button[] {

            new Button(""), new Button(""), new Button("mod"), new Button("log"), new Button("("), new Button(")"),
            new Button("CE"), new Button("Del"), new Button("7"), new Button("8"), new Button("9"), new Button("+"),
            new Button("4"), new Button("5"), new Button("6"), new Button("-"), new Button("1"), new Button("2"),
            new Button("3"), new Button("*"), new Button("0"), new Button("."), new Button("="), new Button("/"),

    };
    private JPanel content1 = new JPanel();
    private JPanel content = new JPanel();
    private JPanel jbt = new JPanel();
    private JPanel jpb = new JPanel();
    private JPanel jpa = new JPanel();
    private JTextField jtf = new JTextField();
    private JTextArea jta = new JTextArea("历史记录");
    

    public mainJFrame() {

        content.setLayout(new BorderLayout());
        content1.setLayout(new BorderLayout());

        jta.setEditable(false);
        jta.setBackground(Color.white);
        jta.setFont(new Font("宋体", Font.LAYOUT_LEFT_TO_RIGHT, 20));
        jpa.setLayout(new BorderLayout());

        Border border = BorderFactory.createLineBorder(Color.BLACK);
        jta.setBorder(BorderFactory.createCompoundBorder(border, BorderFactory.createEmptyBorder(10, 10, 10, 10)));

        jta.setLineWrap(true);   
          JScrollPane scrollPane = new JScrollPane(
                    jta,
                    ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
                    ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER
            );

           add(scrollPane);
          
        content1.add(jpa);
        
        this.add(content1, BorderLayout.EAST);

        JMenuBar menuBar = new JMenuBar();

        JMenu menu1 = new JMenu("清空历史");
        JMenuItem copyMenuItem = new JMenuItem("确定");
//        JMenuItem pasteMenuItem = new JMenuItem("粘贴");
        copyMenuItem.addActionListener(new meunlistent());
        
        menu1.add(copyMenuItem);
//        menu1.addActionListener(new meunlistent());
        menu1.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
//        menu1.setAlignmentX(Box.RIGHT_ALIGNMENT);
        menuBar.add(menu1);
        
        setJMenuBar(menuBar);
        
        jtf.setPreferredSize(new Dimension(300, 100));
        jtf.setEditable(false);
        jtf.setBackground(Color.white);
        jtf.setFont(new Font("宋体", Font.LAYOUT_LEFT_TO_RIGHT, 50));
        jtf.setHorizontalAlignment(JTextField.RIGHT);
        jpb.setLayout(new BorderLayout());
        jpb.add(jtf);
//        content.add(jpb);
        content.add(jpb, BorderLayout.NORTH);
//        this.add(jpb, BorderLayout.NORTH);

        jbt.setLayout(new GridLayout(6, 4));
        for (int i = 0; i < btn.length; i++) {
            jbt.add(btn[i]);
            if (i != 22 && i != 7 && i != 6 && i != 0)
                btn[i].addActionListener(new listen());
            else
                btn[i].addActionListener(new result());

        }
        content.add(jbt, BorderLayout.CENTER);
//        this.add(jbt, BorderLayout.CENTER);
        this.add(content, BorderLayout.WEST);
        setTitle("计算器");
        setSize(500, 400);
        setResizable(false);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String args[]) {
        new mainJFrame().init1();
        
    }

      void init1() {
        init();
        Statement stmt = null;
        ResultSet rs = null;
        try {
            String sql = "select * from mycal";
            stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
            rs = stmt.executeQuery(sql);
            while (rs.next()){
                jta.append("\r\n");
                jta.append(rs.getString("history"));
            } 
            System.out.println("查询成功");
        } catch (SQLException e1) {
            System.out.println("查询数据库出错");
            e1.printStackTrace();
        } finally {
            try {
                rs.close();
                stmt.close();
                con.close();
            } catch (SQLException e1) {
                System.out.println("关闭资源出错");

                e1.printStackTrace();
                rs = null;
                stmt = null;
                con = null;
            }
        }
        
    }

    class listen implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            if (flag) {
                jtf.setText("");
                flag = false;
            }
            Button temped = (Button) e.getSource();
            jtf.setText(jtf.getText() + temped.getLabel());
        }

    }

    class result implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == btn[22]) {
                String check = jtf.getText();

                String pp = String.valueOf(new Solution().calculate(check));
                jtf.setText(pp);

                
                init();
                Statement stmt = null;
                PreparedStatement ps = null;
                ResultSet rs = null;
                try {
                    String sql = "select * from mycal";
                    String sqlinsert = "insert into mycal(history) value(?)";

                    String mycount = check + "=" + pp;

                    stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
//                    rs=(ResultSet) con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); 

                    ps = con.prepareStatement(sqlinsert);

                    ps.setString(1, mycount);

                    ps.executeUpdate();

                    rs = stmt.executeQuery(sql);
                    rs.last();
                    System.out.println("列数" + rs.getRow());
//                    jta.setText("历史记录");
                    do {
                        jta.append("\r\n");
                        jta.append(rs.getString("history"));
                    } while (rs.next());
                    System.out.println("查询成功");
                } catch (SQLException e1) {
                    System.out.println("查询数据库出错?");
                    e1.printStackTrace();
                } finally {
                    try {
                        rs.close();
                        stmt.close();
                        con.close();
                    } catch (SQLException e1) {
                        System.out.println("关闭资源出错");

                        e1.printStackTrace();
                        rs = null;
                        stmt = null;
                        con = null;
                    }
                }

                
                flag = true;
            } else if (e.getSource() == btn[6]) {
                jtf.setText("");
            } else if (e.getSource() == btn[7]) {
                String tempStr = jtf.getText();
                jtf.setText(tempStr.substring(0, tempStr.length() - 1));
            } else if (e.getSource() == btn[0]) {
                jtf.setText(String.valueOf(new Solution().calculate(jtf.getText() + "*" + jtf.getText())));
            }
        }

    }
    
    class meunlistent implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            jta.setText("历史记录");
            init();
            Statement stmt = null;
            PreparedStatement ps = null;
            try {
                String sqldelect = "DELETE FROM mycal";

                stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

                ps = con.prepareStatement(sqldelect);

                ps.executeUpdate();


//                jta.setText("历史记录");
                
                System.out.println("删除成功");
            } catch (SQLException e1) {
                System.out.println("查询数据库出错");
                e1.printStackTrace();
            } finally {
                try {
//                    rs.close();
                    stmt.close();
                    con.close();
                } catch (SQLException e1) {
                    System.out.println("关闭资源出错");

                    e1.printStackTrace();
//                    rs = null;
                    stmt = null;
                    con = null;
                }
            }

        }
        
    }
    
    public static void init()
    {
        try {
            String dbUrl = "jdbc:mysql://localhost:3306/counter?useSSL=false&serverTimezone=UTC";
            String dbUserName = "root";
            String dbPassword = "123456";
            String jdbcName = "com.mysql.cj.jdbc.Driver";
            Class.forName(jdbcName);
            con = DriverManager.getConnection(dbUrl, dbUserName, dbPassword);
            System.out.println("测试连接成功");
        } catch (Exception e1) {
            e1.printStackTrace();
        }

    }
    
    
复制代码
复制代码
import java.math.BigDecimal;

public class Solution {
    @SuppressWarnings("null")
    public double calculate(String s) {
        int j = 0;
        char str[] = s.toCharArray();
        char str1[] = new char[str.length];
        for (int i = 0; i < str.length;) {
            while (i < str.length && str[i] == ' ')
                i++;
            while (i < str.length && str[i] != ' ')
                str1[j++] = str[i++];
            while (i < str.length && str[i] == ' ')
                i++;
        }
        int st = 0;
        String ans = String.valueOf(str1) + ' ';
        
        return new BigDecimal(helper(ans, st)).setScale(8, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    int end = 0;

    public double helper(String s, int i) {
        double num = 0.0, prev = 0.0, sum = 0;
        int choose = 0;
        int chooseop=0;
        String target1="";
        String target2="";
        String target="";
        int flag=0;//记录是否target
        char prevOp = '+';
        double indexcount=1.0;
        while (i < s.length()) {
            
            target=s.substring(i,i+1);
            if(i+1<s.length())
            target1=s.substring(i,i+2);
            if(i+2<s.length())
            target2=s.substring(i,i+3);
            if((target.equals("")||target1.equals("ln")||target2.equals("log")||target2.equals("mod"))&&flag==0)
            {
                if(target.equals("")) {chooseop=1;i+=1;System.out.println("i"+i);}
                else if(target2.equals("log")) {chooseop=2;i+=3;}
                else if(target2.equals("mod")) {chooseop=3;i+=2;}
                else if(target1.equals("ln")) {chooseop=4;i+=2;}
                flag=1;
            }
            //数字
            if (Character.isDigit(s.charAt(i))||s.charAt(i) == '.') {
                if (s.charAt(i) == '.') {
                    choose = 1;
                    i++;
                    indexcount=1;
                }
                if (choose == 0) {
                    num = num * 10  + (s.charAt(i++)- '0');
                } 
                else {
                    indexcount*=0.1;
                    num = num  + (double)(s.charAt(i++)- '0')* indexcount;
                    
                }
            } else if (s.charAt(i) == '(') {
                num = helper(s, ++i);
                i = end;
            } else{
                switch(chooseop)
                {
                case 1:
                    num=Math.sqrt(num);
                    break;
                case 2:
                    num=Math.log(num)/Math.log(10);
                    break;
//                case 3:
//                    prev %= num;                
//                    break;
                case 4:
                    num=Math.log(num);
                    break;
                case 0:
                    break;
                }
                switch (prevOp) {
                case '+':
                    sum += prev;
                    prev = num;
                    break;
                case '-':
                    sum += prev;
                    prev = -num;
                    break;
                case '*':
                    prev *= num;
                    break;
                case '/':
                    prev /= num;
                    break;
                case 'd':
                    prev=prev%num;
                    break;
                }
                if (s.charAt(i) == ')') {
                    i++;
                    break;
                }
                prevOp = s.charAt(i);// 操作符
                num = 0; // 数字重置
                choose = 0;
                chooseop=0;
                target1="";
                target2="";
                target="";
                flag=0;
                i++;
            }
        }
        end = i;
        return (sum + prev);
    }
}
复制代码

其界面如下:

 

 

 

 

 

 
posted @   怎么办lili  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示