第二次作业

【实验目的】

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

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

【实验内容】

1.设计一个包含登录界面的计算器软件,该软件可以实现第一次作业中的全部功能,同时可以保存用户的历史计算记录(保存数据最好使用数据库)。

【实验环境及开发工具】

1.使用microsoft visio绘制流程图。

2.使用java和eclipse编写软件。

【流程图设计】

1.登录部分

2.运算部分

【UI界面设计】

1.登录界面

 2.计算器功能界面

【代码实现流程】

1. LoginFrame:登录界面类,包含用户名输入框、密码输入框和登录按钮。
2. CalculatorFrame:计算器功能实现界面类,包含a和b两个数据输入框、计算器+、-、*、/四个按钮和计算结果按钮。
3. Main:主类,用于启动程序。

【部分代码】

1. LoginFrame:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class LoginFrame extends JFrame {
private JTextField usernameField;
private JPasswordField passwordField;
private JButton loginButton;

public LoginFrame() {
setTitle("登录");
setSize(120, 50);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);

JPanel panel = new JPanel();
panel.setLayout(new GridLayout(3, 2));

JLabel usernameLabel = new JLabel("用户名:");
usernameField = new JTextField();
JLabel passwordLabel = new JLabel("密码:");
passwordField = new JPasswordField();
loginButton = new JButton("登录");

panel.add(usernameLabel);
panel.add(usernameField);
panel.add(passwordLabel);
panel.add(passwordField);
panel.add(new JLabel()); // 占位符
panel.add(loginButton);

add(panel);

loginButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String username = usernameField.getText();
String password = new String(passwordField.getPassword());
if (checkCredentials(username, password)) {
CalculatorFrame calculatorFrame = new CalculatorFrame();
calculatorFrame.setVisible(true);
dispose();
} else {
JOptionPane.showMessageDialog(null, "用户名或密码错误,请重试!", "错误", JOptionPane.ERROR_MESSAGE);
}
}
});
}

private boolean checkCredentials(String username, String password) {
// 在这里添加合适的用户和密码验证逻辑,例如:
if ("张三".equals(username) && "123456".equals(password)) {
return true;
}
return false;
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new LoginFrame().setVisible(true);
}
});
}
}

2. CalculatorFrame:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CalculatorFrame extends JFrame {
private JTextField input1Field;
private JTextField input2Field;
private JButton addButton;
private JButton subtractButton;
private JButton multiplyButton;
private JButton divideButton;
private JButton resultButton;
private JLabel resultLabel;

public CalculatorFrame() {
setTitle("计算器");
setSize(120, 50);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);

JPanel panel = new JPanel();
panel.setLayout(new GridLayout(6, 2));

JLabel input1Label = new JLabel("输入1:");
input1Field = new JTextField();
JLabel input2Label = new JLabel("输入2:");
input2Field = new JTextField();
addButton = new JButton("+");
subtractButton = new JButton("-");
multiplyButton = new JButton("*");
divideButton = new JButton("/");
resultButton = new JButton("计算结果");
resultLabel = new JLabel("结果:");

panel.add(input1Label);
panel.add(input1Field);
panel.add(input2Label);
panel.add(input2Field);
panel.add(addButton);
panel.add(subtractButton);
panel.add(multiplyButton);
panel.add(divideButton);
panel.add(new JLabel()); // 占位符
panel.add(resultButton);
panel.add(resultLabel);

addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
double input1 = Double.parseDouble(input1Field.getText());
double input2 = Double.parseDouble(input2Field.getText());
double result = input1 + input2;
resultLabel.setText("结果:" + result);
}
});

subtractButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
double input1 = Double.parseDouble(input1Field.getText());
double input2 = Double.parseDouble(input2Field.getText());
double result = input1 - input2;
resultLabel.setText("结果:" + result);
}
});

multiplyButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
double input1 = Double.parseDouble(input1Field.getText());
double input2 = Double.parseDouble(input2Field.getText());
double result = input1 * input2;
resultLabel.setText("结果:" + result);
}
});

divideButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
double input1 = Double.parseDouble(input1Field.getText());
double input2 = Double.parseDouble(input2Field.getText());
if (input2 == 0) {
JOptionPane.showMessageDialog(null, "除数不能为0,请重试!", "错误", JOptionPane.ERROR_MESSAGE);
} else {
double result = input1 / input2;
resultLabel.setText("结果:" + result);
}
}
});

resultButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
double input1 = Double.parseDouble(input1Field.getText());
double input2 = Double.parseDouble(input2Field.getText());
double result = input1 + input2;
resultLabel.setText("结果:" + result);
}
});

add(panel);
}
}

3. Main:

import javax.swing.SwingUtilities;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new LoginFrame().setVisible(true);
}
});
}
}

【相关示例】

1.用户名或密码输入错误弹出界面

2.数值输入异常弹出界面

 【链接数据库】

package database;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.sql.Statement;

public class database {
public static void main(String[] args) {
String database = "demo";
new database().getConn(database);
}
String mysqlDriver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/test";
String newUrl = "jdbc:mysql://localhost:3306/";
String username = "root";
String password = "";
Connection conn = null;
Connection newConn = null;
public Connection getConn(String database) {
try {
Class.forName(mysqlDriver);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
String tableSql = "create table t_user (username varchar(50) not null primary key,"
+ "password varchar(20) not null ); ";
String databaseSql = "create database " + database;
conn = DriverManager.getConnection(url, username, password);
Statement smt = conn.createStatement();
if (conn != null) {
System.out.println("数据库连接成功!");
smt.executeUpdate(databaseSql);
newConn = DriverManager.getConnection(newUrl + database,
username, password);
if (newConn != null) {
System.out.println("已经连接到新创建的数据库:" + database);
Statement newSmt = newConn.createStatement();
int i = newSmt.executeUpdate(tableSql);//DDL语句返回值为0;
if (i == 0) {
System.out.println(tableSql + "\n表已经创建成功!");
}
}
}
} catch (SQLException e1) {
e1.printStackTrace();
}
return conn;
}
}

 

posted @   南博兔  阅读(125)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示