第二次作业
【实验目的】
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'>重新登录"; } } ?>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现