第二次作业

【实验目的】

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

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

【实验内容】

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

【实验环境及开发工具】

  1.使用visio绘制流程图

   2.使用Java语言与IntelliJ IDEA Community Edition作为开发工具

   3.使用MySQL数据库存储数据

   4.使用JDBC链接数据库

【具体操作】

  1.流程图

     (1)登录页面设计流程图

  

     (2)计算器流程图

2.  登陆界面代码

复制代码
<!DOCTYPE html>
<html>
 
<head>
    <title>登陆页面</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" type="text/css" href="style.css">
</head>
 
<body>
    <div class="login-container">
        <h2>欢迎登录</h2>
        <form>
            <label for="username">用户名:</label>
            <input type="text" id="username" name="username" placeholder="请输入用户名" required>
            <label for="password">密码:</label>
            <input type="password" id="password" name="password" placeholder="请输入密码" required>
            <button type="submit">登录</button>
        </form>
    </div>
</body>
 
</html>
复制代码

 

3.登陆界面展示

(1)登录失败界面

  

(2)登录成功界面

4.计算器功能模块实现

(1)代码

复制代码
public class Calculator extends Application {
    String num1 = "";
    String num2 = "";
    String op = "";
    static boolean flag2 = false;
    @Override
    public void start(Stage primaryStage) throws Exception {
        BorderPane pane = new BorderPane();
        pane.setPadding(new Insets(5, 5, 5, 5));
        TextField textField = new TextField("");
        textField.setFont(new Font(40));
        pane.setTop(textField);
 
        GridPane pane2 = new GridPane();
        pane2.setAlignment(Pos.CENTER);
        pane2.setHgap(5);
        pane2.setVgap(5);
        String[] buttonName = { "7", "8", "9", "*", "4", "5", "6", "/", "1", "2", "3", "C", "0", "+", "-", "=" };
        Button[] b = new Button[buttonName.length];
        int col = 0, line = 0;
        for (int i = 0; i < buttonName.length; i++) {
            b[i] = new Button(buttonName[i]);
            pane2.add(b[i], col++, line);
            b[i].setOnAction(e -> {
                String s = ((Button)(e.getSource())).getText();
                switch (s)
                {
                    case "*" :
                    case "/" :
                    case "+" :
                    case "-" :
                        if(num1.equals(""))
                        {
                            if(s.equals("*") || s.equals("/")) textField.setText("ERROR!!!  please set the num1");
                            else
                            {
                                num1 += s;
                                textField.setText(num1);
                            }
                        }
                        else
                        {
                            flag2 = false;
                            op = s;
                            textField.setText(num1 + s);
                            num2 = "";
                        }
                        break;
                    case "C" :
                        num1 = "";
                        num2 = "";
                        op = "";
                        textField.setText("");
                        break;
                    case "=" :
                        if(!num1.equals("") && op.equals("") && num2.equals(""))
                        {
                            num1 = String.valueOf(Double.parseDouble(num1));
                            textField.setText(num1);
                            break;
                        }
                        if(!num1.equals("") && !op.equals("") && !num2.equals(""))
                        {
                            double count = 0;
                            boolean flag = true;
                            switch (op)
                            {
                                case "+":
                                    count = Double.parseDouble(num1) + Double.parseDouble(num2);
                                    break;
                                case "-":
                                    count = Double.parseDouble(num1) - Double.parseDouble(num2);
                                    break;
                                case "*":
                                    count = Double.parseDouble(num1) * Double.parseDouble(num2);
                                    break;
                                case "/":
                                    if(Integer.parseInt(num2) == 0) flag = false;
                                    else count = Double.parseDouble(num1) / Double.parseDouble(num2);
                                    break;
                            }
                            if(flag)
                            {
                                num1 = String.valueOf(count);
                                op = "";
                                num2 = "";
                                textField.setText(num1);
                                flag2 = true;
                            }
                            else
                            {
                                num1 = "";
                                op = "";
                                num2 = "";
                                textField.setText("ERROR!!!");
                            }
                        }
                        else
                        {
                            num1 = "";
                            op = "";
                            num2 = "";
                            textField.setText("ERROR!!!");
                        }
                        break;
                    default:
                        if(flag2)
                        {
                            num1 = "";
                            flag2 = false;
                        }
                        if(op.equals(""))
                        {
                            num1 += s;
                            textField.setText(num1);
                        }
                        else
                        {
                            num2 += s;
                            textField.setText(num1 + op + num2);
                        }
                 }
            });
            if (col > 3) {
                col = 0;
                line++;
            }
            b[i].setStyle("-fx-font-size: 35px;-fx-pref-width:100px;-fx-pref-height:100px;");
        }
        pane.setCenter(pane2);
//        pane2.setGridLinesVisible(true);
 
        Scene scene = new Scene(pane,650,700);
        primaryStage.setTitle("一个普通的计算器");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}
复制代码

(2)计算器界面

  

 

(3)计算器功能测试结果

 

 

5.数据库的连接

复制代码
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<?php
$uname=$_GET['user'];
$pwd=$_GET['passwd'];
if($uname==null or $pwd==null){ echo "用户名或密码不能为空,请重新输入!";}
else{
  $con = mysqli_connect('127.0.0.1', 'root', '123','test');
  if (!$con) {
    die("连接失败: " . mysqli_connect_error());
  }
  echo "数据库连接成功";
  $sql="select username,password from test.users where username='$uname' and password='$pwd'";
  $result=mysqli_query($con,$sql);
  $row= mysqli_fetch_assoc($result);
  if($row){
    echo "登录成功,欢迎".$uname."!";
  }
  else{
    echo "登录失败!< a href='test.php'>重新登录";
  }
}
?>
复制代码

 

posted @   嘉士利  阅读(69)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示