第二次作业

 

//实验说明,老师,我的电脑idea和MySQL环境您也见了,是真的装不上啊,我们上次在办公室尝试了一早上以及课后我跟教程尝试了很多次,都失败告终,迫于无奈以及时间原因,我就只好写了一个简易计算器和简易登录界面,请您原谅。相应知识也会在后期补齐。本次作业后面数据库部分我只好在网站上以及CSDN上学习尝试着写了一个,那个就凭空写了一下,主要是没有数据库支撑,MySQL下不下来,我会在继续学习努力把这个环境等问题解决掉。

[实验目的]

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

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

[实验内容]

  1. 设计一个包含登录界面的计算器软件,该软件可以实现第一次作业中的全部功能
  2. 使用Microsoft Visio作绘图工具
  3. 使用Java语言与IntelliJ IDEA Community Edition作开发工具
  4. 使用MySQL数据库储存数据
  5. 使用Navicat管理操作数据库

一、程序流程图设计

1、注册流程图

 

2、用户登录

二、功能展示

1、登录界面

2、登陆成功

3、登录失败(不存在该用户)

4、注册失败

5、注册成功

6、罗少铭计算器界面

三、主要代码展示

 

①罗少铭计算器部分主要代码:包括计算器功能实现,计算器界面设计

复制代码
package jisuanqi11;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.math.BigDecimal;
import java.util.Vector;
import java.lang.Math.*;



public class calculator{

String str1 = "0";
String str2 = "0";
String signal = "+";
String result = "";
JFrame frame = new JFrame("罗少铭计算器");
JTextField result_TextField = new JTextField(result, 60);
JButton clear_Button = new JButton("清除");

//罗少铭数字键设计
JButton button0 = new JButton("0");
JButton button1 = new JButton("1");
JButton button2 = new JButton("2");
JButton button3 = new JButton("3");
JButton button4 = new JButton("4");
JButton button5 = new JButton("5");
JButton button6 = new JButton("6");
JButton button7 = new JButton("7");
JButton button8 = new JButton("8");
JButton button9 = new JButton("9");
//“等于”按钮
JButton button_dy = new JButton("=");

int k1 = 1;
int k2 = 1;
int k3 = 1;
int k4 = 1;
int k5 = 1;
JButton store;
@SuppressWarnings("rawtypes")
Vector vt = new Vector(30, 30);

//进行罗少铭计算类设计
public calculator() {
button0.setMnemonic(KeyEvent.VK_0);
result_TextField.setHorizontalAlignment(JTextField.RIGHT);
JPanel pan = new JPanel();
pan.setLayout(new GridLayout(6, 6, 8, 8));
//罗少铭计算器操作键
JButton button_dian = new JButton(".");
JButton button_jia = new JButton("+");
JButton button_jian = new JButton("-");
JButton button_cheng = new JButton("*");
JButton button_chu = new JButton("/");
JButton button_kai= new JButton("√");
JButton button_dui=new JButton("log10");
JButton button_sin=new JButton("sin");
JButton button_cos=new JButton("cos");
JButton button_tan=new JButton("tan");
JButton button_abs=new JButton("abs");
JButton button_pow=new JButton("pow")
//进行罗少铭计算器按钮
添加操作
pan.add(button7);
pan.add(button8);
pan.add(button9);
pan.add(button_chu);
pan.add(button4);
pan.add(button5);
pan.add(button6);
pan.add(button_cheng);
pan.add(button1);
pan.add(button2);
pan.add(button3);
pan.add(button_jian);
pan.add(button0);
pan.add(button_dian);
pan.add(button_dy);
pan.add(button_jia);
pan.add(button_kai);
pan.add(button_dui);
pan.add(button_sin);
pan.add(button_cos);
pan.add(button_tan);
pan.add(button_abs);
pan.add(button_pow);
pan.setBorder(BorderFactory.createEmptyBorder(10, 12, 7, 7));
JPanel pan2 = new JPanel();
pan2.setLayout(new BorderLayout());
pan2.add(result_TextField, BorderLayout.WEST);
pan2.add(clear_Button, BorderLayout.EAST);

frame.setLocation(500, 500);

//罗少铭计算器窗体添加两个面板
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(pan2, BorderLayout.NORTH);
frame.getContentPane().add(pan, BorderLayout.CENTER);

//罗少铭计算器窗体显示
frame.pack();
frame.setVisible(true)

//罗少铭计算器数字键的响应
class Listener implements ActionListener {
@SuppressWarnings("unchecked")
public void actionPerformed(ActionEvent e) {
String ss = ((JButton) e.getSource()).getText();
store = (JButton) e.getSource();
vt.add(store);
if (k1 == 1) {
if (k3 == 1) {
str1 = "";
k5 = 1;
}
str1 = str1 + ss;

k3 = k3 + 1;
result_TextField.setText(str1);

} else if (k1 == 2) {
if (k4 == 1) {
str2 = "";

k5 = 1;
}
str2 = str2 + ss;
k4 = k4 + 1;
result_TextField.setText(str2);
}

}
}

//计算器小数点的响应
class Listener_xiaos implements ActionListener {
@SuppressWarnings("unchecked")
public void actionPerformed(ActionEvent e) {
store = (JButton) e.getSource();
vt.add(store);
if (k5 == 1) {
String ss2 = ((JButton) e.getSource()).getText();
if (k1 == 1) {
if (k3 == 1) {
str1 = "";
// 还原开关k5状态
k5 = 1;
}
str1 = str1 + ss2;

k3 = k3 + 1;

// 显示结果
result_TextField.setText(str1);

} else if (k1 == 2) {
if (k4 == 1) {
str2 = "";
k5 = 1;
}
str2 = str2 + ss2;

k4 = k4 + 1;

result_TextField.setText(str2);
}
}

k5 = k5 + 1;
}
}

//运算符号的处理
class Listener_signal implements ActionListener {
@SuppressWarnings("unchecked")
public void actionPerformed(ActionEvent e) {
String ss2 = ((JButton) e.getSource()).getText();
store = (JButton) e.getSource();
vt.add(store);

if (k2 == 1) {

k1 = 2;
k5 = 1;
signal = ss2;
k2 = k2 + 1;
} else {
int a = vt.size();
JButton c = (JButton) vt.get(a - 2);

if (!(c.getText().equals("+"))
&& !(c.getText().equals("-"))
&& !(c.getText().equals("*"))
&& !(c.getText().equals("/")))

{
cal();
str1 = result;

k1 = 2;
k5 = 1;
k4 = 1;
signal = ss2;
}
k2 = k2 + 1;

}

}
}

//罗少铭计算器等于号的响应
class Listener_dy implements ActionListener {
@SuppressWarnings("unchecked")
public void actionPerformed(ActionEvent e) {

store = (JButton) e.getSource();
vt.add(store);
cal();


k1 = 1;


k2 = 1;


k3 = 1;


k4 = 1;


str1 = result;
}
}

//罗少铭计算器清除键的响应
class Listener_clear implements ActionListener {
@SuppressWarnings("unchecked")
public void actionPerformed(ActionEvent e) {
store = (JButton) e.getSource();
vt.add(store);
k5 = 1;
k2 = 1;
k1 = 1;
k3 = 1;
k4 = 1;
str1 = "0";
str2 = "0";
signal = "";
result = "";
result_TextField.setText(result);
vt.clear();
}
}

//注册计算器按键监听器

//监听计算器等于键
Listener_dy jt_dy = new Listener_dy();
button_dy.addActionListener(jt_dy);

//监听计算器数字键
Listener jt = new Listener();
button0.addActionListener(jt);
button1.addActionListener(jt);
button2.addActionListener(jt);
button3.addActionListener(jt);
button4.addActionListener(jt);
button5.addActionListener(jt);
button6.addActionListener(jt);
button7.addActionListener(jt);
button8.addActionListener(jt);
button9.addActionListener(jt);

//监听计算器符号键
Listener_signal jt_signal = new Listener_signal();
button_jia.addActionListener(jt_signal);
button_jian.addActionListener(jt_signal);
button_cheng.addActionListener(jt_signal);
button_chu.addActionListener(jt_signal);
button_kai.addActionListener(jt_signal);
button_dui.addActionListener((jt_signal));
button_sin.addActionListener(jt_signal);
button_cos.addActionListener(jt_signal);
button_tan.addActionListener(jt_signal);
button_abs.addActionListener(jt_signal);
button_pow.addActionListener(jt_signal);
//监听清除键
Listener_clear jt_c = new Listener_clear();
clear_Button.addActionListener(jt_c);
//监听小数点键
Listener_xiaos jt_xs = new Listener_xiaos();
button_dian.addActionListener(jt_xs);
//窗体关闭事件的响应程序
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

}

//实现计算方法cal()
public void cal() {
// 操作数1
double a2;
// 操作数2
double b2;
// 运算符
String c = signal;
// 运算结果
double result2 = 0;
int c3=0;

if (c.equals("")) {
result_TextField.setText("Please input operator");

} else {
// 手动处理小数点的问题
if (str1.equals("."))
str1 = "0.0";
if (str2.equals("."))
str2 = "0.0";
a2 = Double.valueOf(str1).doubleValue();
b2 = Double.valueOf(str2).doubleValue();
//加法
if (c.equals("+")) {
result2 = a2 + b2;
}
//减法
if (c.equals("-")) {
result2 = a2 - b2;
}
//乘法
if (c.equals("*")) {
BigDecimal m1 = new BigDecimal(Double.toString(a2));
BigDecimal m2 = new BigDecimal(Double.toString(b2));
result2 = m1.multiply(m2).doubleValue();
}
//除法
if (c.equals("/")) {
if (b2 == 0) {
result2 = 0;
} else {
result2 = a2 / b2;
}
}
//开根号
if(c.equals("√")){
result2=Math.sqrt(a2);
}
//log10运算
if(c.equals("log10")){
result2=Math.log10(a2);
}
//sin运算
if(c.equals("sin")){
result2=Math.sin(a2);
}
//cos运算
if(c.equals("cos")){
result2=Math.cos(a2);
}
//tan
if(c.equals("tan")){
result2=Math.tan(a2);
}
//取余
if(c.equals("abs")){
result2=Math.abs(a2);
}

result = ((new Double(result2)).toString());

result_TextField.setText(result);
}
}
public static void main(String[] args) {
calculator a = new calculator();
}
}
复制代码

②登录界面设计:主要可以实现用户的登录注册,以及判断用户输入的信息是否正确,并存储相应的信息

复制代码
package jisuanqi11;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class test {
    public char[] D= {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
    public char[] d = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    public char[] s = {'0','1','2','3','4','5','6','7','8','9'};
    public JTextField jtext0,jtext1;
    public String get_jtext0,get_jtext1;
    public JFrame jf;
    //目标文件
    final String TARGET_FILE = "2000300420.txt";
    File targetFile = new File(TARGET_FILE);

    public test() throws IOException {
        jf = new JFrame("罗少铭计算器注册登录页面");
        jf.setSize(400, 400);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        JPanel jp0 = new JPanel();
        JPanel jp1 = new JPanel();
        JPanel jp2 = new JPanel();

        jp0.add(new JLabel("用户名:"));
        jtext0 = new JTextField(20);
        jp0.add(jtext0);

        jp1.add(new JLabel("密  码:"));
        jtext1 = new JTextField(20);
        jp1.add(jtext1);

        JButton jb0 = new JButton("注册");
        JButton jb1 = new JButton("登录");
        jp2.add(jb0);
        jp2.add(jb1);

        if(targetFile.createNewFile()) {
            System.out.println("用户不存在,创建成功");
        }else {
            System.out.println("用户存在");
        }

        //    用户 注册操作
        jb0.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String get_jtext0 = jtext0.getText();
                String get_jtext1 = jtext1.getText();
                int found0 =0,found1 =0,found2 =0;

                char[] a=get_jtext1.toCharArray();
                for(int yy=0;yy<a.length;yy++) {
                    for(int y=0;y<26;y++) {
                        if(a[yy]==DD[y]) {
                            found0=1;
                            break;
                        }
                    }
                }
                for(int yy=0;yy<a.length;yy++) {
                    for(int y=0;y<26;y++) {
                        if(a[yy]==dd[y]) {
                            found1=1;
                            break;
                        }
                    }
                }
                for(int yy=0;yy<a.length;yy++) {
                    for(int y=0;y<10;y++) {
                        if(a[yy]==ss[y]) {
                            found2=1;
                            break;
                        }
                    }
                }
                System.out.println(found0+found1+found2);
                if(found0==0||found1==0||found2==0) {
                    System.out.println("密码格式错误!");
                    //登录 消息对话框无返回, 仅做通知作用
                    JOptionPane.showMessageDialog(
                            jf,
                            "密码必须包含大写、小写字母和数字!",
                            "注册失败",
                            JOptionPane.INFORMATION_MESSAGE
                    );
                }else {
                    try {
                        //打开文件字符输出流
                        FileWriter writer = new FileWriter(targetFile,true);
                        //写入文件
                        writer.write("\n");
                        writer.write(get_jtext0);
                        System.out.println(get_jtext0);
                        writer.write("\n");
                        writer.write(get_jtext1);
                        writer.flush();
                        //关闭输出流
                        writer.close();
                        // 消息对话框无返回, 仅做通知作用
                        JOptionPane.showMessageDialog(
                                jf,
                                "注册成功!",
                                "注册",
                                JOptionPane.INFORMATION_MESSAGE
                        );
                        // 消息对话框无返回, 仅做通知作用
                        JOptionPane.showMessageDialog(
                                jf,
                                "登录成功!",
                                "登录",
                                JOptionPane.INFORMATION_MESSAGE
                        );
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                }
            }
        });
        jb1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String get_jtext0 = jtext0.getText();
                String get_jtext1 = jtext1.getText();

                //
                FileReader in = null;
                try {
                    in = new FileReader("2000300420.txt");
                } catch (FileNotFoundException e2) {
                    // TODO Auto-generated catch block
                    e2.printStackTrace();
                }
                BufferedReader bufIn = new BufferedReader(in);
                String line = null;
                String[] datas = new String[100];
                //    读入结果
                int i=0;
                int j=0;
                try {
                    while ( (line = bufIn.readLine()) != null) {
                        datas[i]=line;
                        i++;
                    }
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                while(true) {
                    if(datas[j].equals(get_jtext0)&&datas[j+1].equals(get_jtext1)) {
                        // 消息对话框无返回, 仅做通知作用
                        calculator Calculator;
                        JOptionPane.showMessageDialog(jf, "登录成功!", "登录", JOptionPane.INFORMATION_MESSAGE);
                        new calculator();
                        break;
                    }
                    j++;
                    if(datas[j]==null) {
                        System.out.println("不存在该用户!");
                        //  清除框内输入字符
                        jtext0.setText("");
                        jtext1.setText("");
                        // 消息对话框无返回, 仅做通知作用
                        JOptionPane.showMessageDialog(
                                jf,
                                "不存在该用户!",
                                "登录失败",
                                JOptionPane.INFORMATION_MESSAGE
                        );
                        break;
                    }
                }
                // 关闭 输入流
                try {
                    bufIn.close();
                    in.close();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
        });
        // 创建一个垂直盒子容器, 把上面 3 个 JPanel 串起来作为内容面板添加到窗口
        Box vBox = Box.createVerticalBox();
        vBox.add(jp0);
        vBox.add(jp1);
        vBox.add(jp2);

        jf.setContentPane(vBox);
//        jf.pack();
        jf.setLocationRelativeTo(null);
        jf.setVisible(true);
    }
    public static void main(String[] args) throws IOException {
        new test();
    }
}
复制代码

③主函数

复制代码
import jisuanqi11.calculator;
import jisuanqi11.test;

import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        calculator cal = new calculator();
        try {
            new test();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
复制代码

④连接数据库,实现存储用户注册登录信息,以及计算器计算信息

//老师,我的数据库真的下载不下来,所以就没有连接数据库,就只能在网站上学习了一下怎么写所以请您见谅,我的环境是真的装不上啊~

复制代码
package jisuanqi11;

import javax.swing.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class Record {

    String ID;

    private String driver = "com.mysql.cj.jdbc.Driver";
    private String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf-8";
    private String user = "root";
    private String sqlpassword = "123456";


    void setID(String ID) {
        this.ID = ID;
    }


    boolean dong() throws SQLException, ClassNotFoundException {
        JOptionPane.showMessageDialog(null, "记录成功");
        record();
        return true;
    }

    void record() throws ClassNotFoundException, SQLException {
        String sql = "insert into calculator (id, record, result) values (?,?,?)";
        Class.forName(driver);
        try {
            Connection conn = DriverManager.getConnection(url, user, sqlpassword);
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, this.ID);
        /*    ps.setString(2, this.record);
            ps.setString(3, this.result);*/
            ps.executeUpdate();
            ps.close();
            conn.close();

        } catch (SQLException ex) {
            System.out.println("添加信息失败!");
        }
    }
}
复制代码
复制代码

package jisuanqi11;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class sql {
    static Connection conn=null;
    public Connection getConnection() throws SQLException {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            System.out.print("mySQL的驱动");
            String url="jdbc:mysql:///liveshop?useUnicode=true&characterEncoding=UTF-8";
            String password="123456";
            String username="sleep";//数据库用户名的名字
            conn=DriverManager.getConnection(url, username, password);
            System.out.println("与数据库连接");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return conn;
    }
    public static <CreateMysql> void main(String[] arg) {
        sql mySQL=new sql ();
        PreparedStatement preparedStatement = null;
        ResultSet resultSet= null;
        try {
            mySQL.getConnection();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String sql="select * from address where name = ?";
        try {
            preparedStatement = conn.prepareStatement(sql);
            preparedStatement.setString(1,"myt");
            resultSet = preparedStatement.executeQuery();
            while(resultSet.next()) {
                System.out.println(resultSet.getString("name"));
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            if(resultSet!=null) {
                try {
                    resultSet.close();

                } catch (SQLException e) {
                    TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        if(preparedStatement!=null) {
            try {
                preparedStatement.close();

复制代码

计算器运算界面

⑧计算过程

序号

输入结果

输出结果

1

569-456

113

2

136+89

225

3

45*79

3555

4

965/56

17.232142857142


 

posted @   没有神的过往123  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示