java实验:数据库应用(idea+mysql+php)设计用户注册和登录

设计用户注册和登录界面,实现用户注册和登录操作。

  1. 设计用户注册/登录界面;
  2. 使用工具在MySQL中创建user表,包括学号、姓名、密码、专业、班级;
  3. 实现注册操作:在user表中插入一条新纪录,但学号不能重复;
  4. 实现登录操作:使用输入的学号和密码在user表中查找,查找成功,弹出消息框显示“登录成功”,不成功,则回到输入界面;使用对象文件记住在本机登录的用户名,显示在用户名组合框中。

因为我是使用的php和Navicat for MySQL创建数据库(电脑上最好不要下载两个版本的mysql,否则会出现问题),而如果使用MySQL Installer for Windows来进行数据库设计,大家可以点击下面这个链接,这个博主大大写的超详细。(个人觉得Navicat for MySQL更方便,数据操作比较简单)。如果说之前没有安装过phpstudy,那就最好跟着下面这个博主尝试一下。

在Windows上配置MySql开发java,导入JDBC的jar包后连接SQL Server数据库&结合Java和MySql的一些简单实践-CSDN博客

一、首先去官网下载mysql和phpstudy。

这两个建议一起下,接着是配置环境,可以搜一下配置教程。

启动如上图所示的mysql和apache服务。

点击创建数据库。

根据提示填写,我这里的数据库名称是student,用户名ly,密码123456,最后点击确认。

接着转到mysql,

找到连接,点击mysql,会有一下窗户:

就依次按刚创建的数据库填写连接名,用户名,密码,其他不用改动,点击确定。

、打开创建好的连接,新建表

点击保存。

继续保存,ctrl+s。

、代码部分

代码是在idea中编写,首先要下载驱动文件mysql-connector-j-8.2.0.jar,mysql-connector-java下载_在下是小白的博客-CSDN博客

下载之后,把mysql-connector-j-8.2.0.jar复制到项目中

点击project structure,进入找到modules,点加号选第一个。

找到刚刚导入的mysql-connector-j-8.2.0.jar,双击点ok就可以了。

然后新建类粘贴一下代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;public class UserRegistrationLogin extends JFrame {private JTextField studentIdField;private JPasswordField passwordField;private JTextField nameField;private JTextField majorField;private JTextField classField;private JComboBox<String> usernameComboBox;private Connection conn;public UserRegistrationLogin() {super("User Registration and Login");this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setSize(400, 300);this.setLocationRelativeTo(null);JPanel panel = new JPanel(new GridLayout(6, 2));JLabel studentIdLabel = new JLabel("Student ID:");studentIdField = new JTextField();JLabel passwordLabel = new JLabel("Password:");passwordField = new JPasswordField();JLabel nameLabel = new JLabel("Name:");nameField = new JTextField();JLabel majorLabel = new JLabel("Major:");majorField = new JTextField();JLabel classLabel = new JLabel("Class:");classField = new JTextField();JLabel usernameLabel = new JLabel("Username:");usernameComboBox = new JComboBox<>();JButton registerButton = new JButton("Register");JButton loginButton = new JButton("Login");panel.add(studentIdLabel);panel.add(studentIdField);panel.add(passwordLabel);panel.add(passwordField);panel.add(nameLabel);panel.add(nameField);panel.add(majorLabel);panel.add(majorField);panel.add(classLabel);panel.add(classField);panel.add(usernameLabel);panel.add(usernameComboBox);panel.add(registerButton);panel.add(loginButton);this.getContentPane().add(panel);registerButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {registerUser();}});loginButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {loginUser();}});try {String driver = "com.mysql.cj.jdbc.Driver";String url = "jdbc:mysql://localhost/student?user=ly&password=123456";Class.forName(driver);conn = DriverManager.getConnection(url);loadUsernames();} catch (ClassNotFoundException | SQLException ex) {ex.printStackTrace();}}private void registerUser() {String studentId = studentIdField.getText();String password = new String(passwordField.getPassword());String name = nameField.getText();String major = majorField.getText();String className = classField.getText();if (studentId.isEmpty() || password.isEmpty() || name.isEmpty() || major.isEmpty() || className.isEmpty()) {JOptionPane.showMessageDialog(this, "Please fill in all fields");return;}try {PreparedStatement stmt = conn.prepareStatement("INSERT INTO student (student_id, name, password, major, class) VALUES (?, ?, ?, ?, ?)");stmt.setString(1, studentId);stmt.setString(2, name);stmt.setString(3, password);stmt.setString(4, major);stmt.setString(5, className);stmt.executeUpdate();JOptionPane.showMessageDialog(this, "Registration successful");studentIdField.setText("");passwordField.setText("");nameField.setText("");majorField.setText("");classField.setText("");loadUsernames();} catch (SQLException ex) {JOptionPane.showMessageDialog(this, "Registration failed: " + ex.getMessage());}}private void loginUser() {String studentId = studentIdField.getText();String password = new String(passwordField.getPassword());try {PreparedStatement stmt = conn.prepareStatement("SELECT * FROM student WHERE student_id = ? AND password = ?");stmt.setString(1, studentId);stmt.setString(2, password);ResultSet rs = stmt.executeQuery();if (rs.next()) {String name = rs.getString("name");JOptionPane.showMessageDialog(this, "Login successful. Welcome, " + name + "!");// Remember the username for future loginsString selectedUsername = (String) usernameComboBox.getSelectedItem();if (selectedUsername == null || !selectedUsername.equals(name)) {usernameComboBox.addItem(name);usernameComboBox.setSelectedItem(name);}studentIdField.setText("");passwordField.setText("");} else {JOptionPane.showMessageDialog(this, "Login failed. Please check your student ID and password.");}} catch (SQLException ex) {JOptionPane.showMessageDialog(this, "Login failed: " + ex.getMessage());}}private void loadUsernames() {try {Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT DISTINCT name FROM student");usernameComboBox.removeAllItems();while (rs.next()) {String name = rs.getString("name");usernameComboBox.addItem(name);}} catch (SQLException ex) {ex.printStackTrace();}}public static void main(String[] args) {SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {UserRegistrationLogin frame = new UserRegistrationLogin();frame.setVisible(true);}});}
}

效果展示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/201271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp使用vue-i18n国际化多国语言

前言&#xff1a;uniapp是自带有i18n这个插件的&#xff0c;如果没有npm安装即可 此插件需要自己去给每一个需要国际化的字符去手动配置key&#xff0c;所以如果是已经完成的项目可能工作量就稍微有点大了 第一步&#xff1a; 语言命名是有规范的不能乱取名&#xff0c;具体可…

电容电感特性的理解

04730电子技术基础 语雀 在前面&#xff0c;我们提到过电容元件具有隔直通交&#xff0c;通高阻低的特性&#xff0c;电感元件具有隔交通直&#xff0c;通低阻高的特性。那么如何理解这两句话呢&#xff1f;下面我们一一剖析 电容元件的隔直通交&#xff0c;通高阻低的特性 …

【C】递归函数

一、什么是递归 递归其实是⼀种解决问题的⽅法&#xff0c;在C语⾔中&#xff0c;递归就是函数⾃⼰调⽤⾃⼰。 我们先了解一个知识&#xff1a; 每一次函数调用&#xff0c;都会向内存栈区上申请一块空间。 这块空间主要用来存放函数中的局部变量&#xff0c;和函数调用过程中…

点滴生活记录1

2023/10/10 今天骑小电驴上班&#xff0c;带着小鸭子一起。路上的时候&#xff0c;我给小鸭子说&#xff0c;你要帮我看着点路&#xff0c;有危险的时候提醒我&#xff0c;也就刚说完没几分钟&#xff0c;一个没注意&#xff0c;直接撞到一个拦路铁墩子上&#xff0c;车子连人歪…

12、组合模式(Composite Pattern,不常用)

组合模式&#xff08;Composite Pattern&#xff09;&#xff0c;有时又叫作部分-整体模式&#xff0c;它是一种将对象组合成树状的层次结构的模式&#xff0c;用来表示“部分-整体”的关系&#xff0c;使用户对单个对象和组合对象具有一致的访问性。 它在我们树型结构的问题中…

2023年度端侧transformer类分类力作SwiftFormer模型解读

写在前面&#xff1a;本篇直接结合代码来理解网络的笔记 paper: Swiftformer-paper code: https://github.com/Amshaker/SwiftFormer 文章目录 网络结构精析零、整体一、patch embed二、stage 网络结构精析 零、整体 可以看到结构中&#xff0c;整体就是&#xff1a; stem -&…

深度学习——第3章 Python程序设计语言(3.4 Python自定义函数)

3.4 Python自定义函数 目录 1. 函数基础知识 2. 函数的定义&#xff08;声明&#xff09;和调用 3. 函数参数传递 4. 函数的返回值 5. lambda函数 随着学习的日渐深入&#xff0c;编写的代码将会越来越复杂&#xff0c;所以我们需要找一种方法对这些复杂的代码进行分解、重…

iphone/安卓手机如何使用burp抓包

iphone 1. 电脑 ipconfig /all 获取电脑网卡ip&#xff1a; 192.168.31.10 2. 电脑burp上面打开设置&#xff0c;proxy&#xff0c;增加一条 192.168.31.10:8080 3. 4. 手机进入设置 -> Wi-Fi -> 找到HTTP代理选项&#xff0c;选择手动&#xff0c;192.168.31.10:8080 …

Windows/Linux 设置固定IP

Windows/Linux 设置固定IP 在开发过程中 会经常遇到要与前端进行本地的联调 过了两天 发现 不知道为什么 ip发生了改变 所以 就写一个 windows 与linux 固定ip的博客 记录一下 Windows 话不多说 看下图 上方输入 ipconfig/all 就会出来一堆信息 下面是一些有用的信息 默认…

超使用的十个JavaScript技巧

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 JavaScript 作为最流行的语言之一&#xff0c;其语法灵活且每年都在不断吸纳新特性&#xff0c;即使是一个从业多年的老手&#xff0c; 偶尔也会有一些被…

04武忠祥0基础

收敛数列的性质 唯一性&#xff1a; 反证法&#xff1a; 发散不一定无界 举个例子&#xff0c;考虑以下数列&#xff1a; a_n (-1)^n 这个数列的每一项交替地取正负值。当 n 是偶数时&#xff0c;a_n 1&#xff0c;当 n 是奇数时&#xff0c;a_n -1。这个数列明显是发…

编程实战:类C语法的编译型脚本解释器(八)编译概览

系列入口&#xff1a;编程实战&#xff1a;类C语法的编译型脚本解释器&#xff08;系列&#xff09;-CSDN博客 前面已经介绍了Token、变量、变量表、表达式和语句&#xff0c;现在进入深水区&#xff0c;介绍编译过程&#xff0c;相当于解释型脚本的解释过程。 编译的好处是提前…

HarmonyOS鸿蒙操作系统架构

目录 1. 分布式架构&#xff1a; 2. 统一的开发平台&#xff1a; 3. 多内核共享&#xff1a; 4. 自适应界面&#xff1a; 5. AR、VR、MR支持&#xff1a; 6. 安全和隐私保护&#xff1a; 7. AI集成&#xff1a; 8. 应用生态系统&#xff1a; 9. 开源和开放&#xff1a…

振弦采集仪在土体与岩体监测中的可靠性与精度分析

振弦采集仪在土体与岩体监测中的可靠性与精度分析 振弦采集仪是一种用于土体和岩体监测的重要设备&#xff0c;它可以通过测量振动信号来获取土体或岩体的力学参数&#xff0c;如应力、应变、弹性模量等。而振弦采集仪的可靠性和精度是影响其应用效果的关键因素。 首先&#x…

鸿蒙4.0开发笔记之ArkTS语法基础之条件渲染和循环渲染的使用(十五)

文章目录 一、条件渲染&#xff08;if&#xff09;二、循环渲染&#xff08;ForEach&#xff09; 一、条件渲染&#xff08;if&#xff09; 1、定义 正如其他语言中的if…else…语句&#xff0c;ArkTS提供了渲染控制的能力&#xff0c;条件渲染可根据应用的不同状态&#xff0…

竞赛活动过程中评委亮灯是如何实现的

选秀节目中用到的那种评委爆灯效果要通过软件和硬件一起实现&#xff0c;软件实现在新一轮开始时&#xff0c;统一灭灯&#xff0c;评委通过按钮触发软件打开相应的灯&#xff0c;并自动发出声音。其实用到的物料包括&#xff1a;软件、按钮、灯、工业控制器。软件是核心&#…

virtualbox虚拟机安装ubuntu系统,启动黑屏

我在virtualbox虚拟机里面安装ubuntu系统&#xff0c;某次打开就卡在启动界面了。下面这样&#xff1a;&#xff08;这个截图信息是我在解决了问题之后重新进入ubnutu系统时截取的&#xff0c;不完整&#xff0c;但就是类似这样&#xff09; 报错信息&#xff1a; error: no s…

解决Kettle无法传输生偏字的问题

最近在搞数据传输&#xff0c;然后涉及到人名的时候&#xff0c;难免会碰到生僻字&#xff0c;utf8是无法存储的&#xff0c;然后我把目标表改为utf8mb4&#xff0c;但是还是无法传输生僻字&#xff0c;这就很奇怪了&#xff0c;明明两边的数据库都是MySQL 5.7x&#xff0c;但是…

【labview报错,缺少GOOP Development Suite】

操作 当labview报此错误时&#xff0c;第一类情况为缺少包&#xff0c;第二类为所使用的GPU包已失效 以下为第一类缺包的解决方式 登录VIPM&#xff0c;如何安装VIPM查看此贴&#xff1a;VIPM安装 打开VIPM后&#xff0c;右上角输入goop,双击搜索出的安装包 勾选需要安装的包…

Linux部署Kettle(pentaho-server-ce-9.4.0.0-343)记录/配置MySQL存储

下载地址 Kettle 是一个开源的数据集成工具&#xff0c;它是 Pentaho Data Integration&#xff08;PDI&#xff09;项目的一部分。要访问 Kettle 的官方网站&#xff0c;可以通过访问其母公司 Hitachi Vantara 的网站来找到相关信息 官方网站&#xff1a;https://www.hitachi…