第二次作業(yè)
[實(shí)驗(yàn)?zāi)康腯
1.掌握軟件開發(fā)的基本流程
2.掌握常用的軟件開發(fā)方式和工具。
[實(shí)驗(yàn)內(nèi)容]
1.設(shè)計一個包含登錄界面的計算器軟件,該軟件可以實(shí)現(xiàn)第一次作業(yè)中的全部功能,同時可以保存用戶的歷史計算記錄(保存數(shù)據(jù)最好使用數(shù)據(jù)庫)。
[實(shí)驗(yàn)要求]
1.完成軟件的UI設(shè)計、使用Visio設(shè)計軟件中所涉及的所有流程圖。
2.選擇合適的集成開發(fā)環(huán)境和工具完成計算器軟件的開發(fā)
3.將開發(fā)好軟件進(jìn)行測試并截圖
4.將本次實(shí)驗(yàn)過程寫成實(shí)驗(yàn)報告提交在本次作業(yè)的鏈接中
5.關(guān)鍵代碼部分以代碼塊格式粘貼在實(shí)驗(yàn)報告正文中
6.軟件架構(gòu)以及開發(fā)技術(shù)不限
[實(shí)驗(yàn)過程]
1.注冊流程圖

2.登錄流程圖

3.實(shí)現(xiàn)代碼
(1)這個程序會創(chuàng)建一個簡單的窗口,包含用戶名和密碼輸入字段以及登錄和注冊按鈕。注冊按鈕會把新用戶的用戶名和密碼加到一個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)計算器界面,該程序在控制臺中運(yùn)行,用戶可以輸入操作符和數(shù)字進(jìn)行計算。"+"、"-"、"*"、"/"代表加、減、乘、除運(yùn)算,"sqrt"代表開方運(yùn)算,"C"代表清零,"backspace"會刪除當(dāng)前結(jié)果的最后一個數(shù)字。
注意這個程序是一個簡單示例,它沒有處理可能的錯誤,如除以零或者輸入無法解析為數(shù)字的字符串等等。在實(shí)際編程中,你需要對這些情況進(jìn)行檢查并適當(dāng)處理。
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;
}
}
}
該程序在控制臺中運(yùn)行,用戶可以輸入操作符和數(shù)字進(jìn)行計算。"+"、"-"、"*"、"/"代表加、減、乘、除運(yùn)算,"sqrt"代表開方運(yùn)算,"C"代表清零,"backspace"會刪除當(dāng)前結(jié)果的最后一個數(shù)字。
加法運(yùn)算界面

減法運(yùn)算界面

乘法運(yùn)算界面

除法運(yùn)算界面

開方運(yùn)算界面

退格界面

清零界面


浙公網(wǎng)安備 33010602011771號