第二次作业

[实验目的]

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"会删除当前结果的最后一个数字。

加法运算界面

 

减法运算界面

 

乘法运算界面

 

除法运算界面

 

开方运算界面

 退格界面

 清零界面

 

 

 

 

posted @ 2023-12-04 21:43  茕茕白兔。  阅读(21)  评论(0编辑  收藏  举报