第二次作业
[实验目的]
1.掌握软件开发的基本流程
2.掌握常用的软件开发方式和工具。
[实验内容]
1.设计一个包含登录界面的计算器软件,该软件可以实现第一次作业中的全部功能,同时可以保存用户的历史计算记录(保存数据最好使用数据库)。
[实验要求]
1.完成软件的UI设计、使用Visio设计软件中所涉及的所有流程图。
2.选择合适的集成开发环境和工具完成计算器软件的开发
3.将开发好软件进行测试并截图
4.将本次实验过程写成实验报告提交在本次作业的链接中
5.关键代码部分以代码块格式粘贴在实验报告正文中
6.软件架构以及开发技术不限
[实验过程]
1.注册流程图
2.登录流程图
3.实现代码
(1)这个程序会创建一个简单的窗口,包含用户名和密码输入字段以及登录和注册按钮。注册按钮会把新用户的用户名和密码加到一个HashMap中,而登录按钮则会检查输入的用户名和密码是否存在于这个HashMap中。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;
public class App {
private JFrame frame;
private Map<String, String> users;
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
try {
App window = new App();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
});
}
public App() {
initialize();
}
private void initialize() {
users = new HashMap<>();
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JTextField usernameField = new JTextField();
usernameField.setBounds(175, 43, 130, 26);
frame.getContentPane().add(usernameField);
usernameField.setColumns(10);
JPasswordField passwordField = new JPasswordField();
passwordField.setBounds(175, 81, 130, 26);
frame.getContentPane().add(passwordField);
JLabel lblUsername = new JLabel("Username:");
lblUsername.setBounds(85, 48, 80, 16);
frame.getContentPane().add(lblUsername);
JLabel lblPassword = new JLabel("Password:");
lblPassword.setBounds(85, 86, 80, 16);
frame.getContentPane().add(lblPassword);
JButton btnNewButton = new JButton("Login");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String username = usernameField.getText();
String password = new String(passwordField.getPassword());
if (users.containsKey(username) && users.get(username).equals(password)) {
JOptionPane.showMessageDialog(frame, "Login successful");
} else {
JOptionPane.showMessageDialog(frame, "Invalid username or password");
}
}
});
btnNewButton.setBounds(175, 119, 117, 29);
frame.getContentPane().add(btnNewButton);
JButton registerButton = new JButton("Register");
registerButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String username = usernameField.getText();
String password = new String(passwordField.getPassword());
if (users.containsKey(username)) {
JOptionPane.showMessageDialog(frame, "Username already exists");
} else {
users.put(username, password);
JOptionPane.showMessageDialog(frame, "Registration successful");
}
}
});
registerButton.setBounds(175, 160, 117, 29);
frame.getContentPane().add(registerButton);
}
}
注册界面
登录界面
(2)计算器界面,该程序在控制台中运行,用户可以输入操作符和数字进行计算。"+"、"-"、"*"、"/"代表加、减、乘、除运算,"sqrt"代表开方运算,"C"代表清零,"backspace"会删除当前结果的最后一个数字。
注意这个程序是一个简单示例,它没有处理可能的错误,如除以零或者输入无法解析为数字的字符串等等。在实际编程中,你需要对这些情况进行检查并适当处理。
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Calculator extends Application {
private TextField num1;
private TextField num2;
private Button btn;
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Calculator");
num1 = new TextField();
num1.setPromptText("First number");
num2 = new TextField();
num2.setPromptText("Second number");
btn = new Button("Calculate");
btn.setOnAction(event -> {
double number1 = Double.parseDouble(num1.getText());
double number2 = Double.parseDouble(num2.getText());
double result = number1 + number2;
btn.setText(String.valueOf(result));
});
VBox vBox = new VBox(num1, num2, btn);
vBox.setPadding(new Insets(10));
primaryStage.setScene(new Scene(vBox, 300, 200));
primaryStage.show();
}
}
public class Calculator {
private double result;
private Scanner scanner;
public Calculator() {
result = 0;
scanner = new Scanner(System.in);
}
public static void main(String[] args) {
Calculator calculator = new Calculator();
calculator.run();
}
public void run() {
while (true) {
System.out.println("Current result: " + result);
System.out.println("Enter operation (+, -, *, /, sqrt, C, backspace) and number:");
String operation = scanner.next();
switch (operation) {
case "+":
result += scanner.nextDouble();
break;
case "-":
result -= scanner.nextDouble();
break;
case "*":
result *= scanner.nextDouble();
break;
case "/":
result /= scanner.nextDouble();
break;
case "sqrt":
result = Math.sqrt(result);
break;
case "C":
result = 0;
break;
case "backspace":
String resultStr = Double.toString(result);
if (resultStr.length() > 2) {
resultStr = resultStr.substring(0, resultStr.length() - 2);
} else {
resultStr = "0";
}
result = Double.parseDouble(resultStr);
break;
default:
System.out.println("Unknown operation");
break;
}
}
}
该程序在控制台中运行,用户可以输入操作符和数字进行计算。"+"、"-"、"*"、"/"代表加、减、乘、除运算,"sqrt"代表开方运算,"C"代表清零,"backspace"会删除当前结果的最后一个数字。
加法运算界面
减法运算界面
乘法运算界面
除法运算界面
开方运算界面
退格界面
清零界面