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

news2024/11/23 11:39:59

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

  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() {
            @Override
            public void actionPerformed(ActionEvent e) {
                registerUser();
            }
        });

        loginButton.addActionListener(new ActionListener() {
            @Override
            public 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 logins
                String 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() {
            @Override
            public void run() {
                UserRegistrationLogin frame = new UserRegistrationLogin();
                frame.setVisible(true);
            }
        });
    }
}

效果展示:

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

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

相关文章

通用plantuml 时序图(Sequence Diagram)模板头

通用plantuml文件 startuml participant Admin order 0 #87CEFA // 参与者、顺序、颜色 participant Student order 1 #87CEFA participant Teacher order 2 #87CEFA participant TestPlayer order 3 #87CEFA participant Class order 4 #87CEFA participant Subject order …

群晖Docker搭建HomeAssistant,结合内网穿透实现远程访问智能家居控制中心

使用群晖Docker搭建HomeAssistant并实现异地公网访问 文章目录 使用群晖Docker搭建HomeAssistant并实现异地公网访问一、下载HomeAssistant镜像二、内网穿透HomeAssistant&#xff0c;实现异地控制智能家居三、使用固定域名访问HomeAssistant HomeAssistant是一个可以控制 苹果…

Redis部署-集群

目录 集群 数据分片算法 哈希求余 一致性哈希算法 哈希槽分区算法 redis集群搭建 1.创建目录和配置. 2.将上述redis节点.构建成集群 3.使用客户端连接集群 集群模式下的故障转移流程 1.故障判定 2.故障迁移 集群扩容 集群 广义上的集群,只要是多个机器,构成了分布…

HarmonyOS架构及关键技术整理

技术解析&#xff1a;鸿蒙系统的底层优势 鸿蒙系统采用了先进的微内核设计&#xff0c;这是一种全新的系统架构&#xff0c;能够更好地适应现代智能设备的多样性和互联性。微内核通过最小化系统的核心功能&#xff0c;提高了系统的安全性和可定制性。此外&#xff0c;鸿蒙系统…

Day51力扣打卡

打卡记录 Plus and Multiply&#xff08;模拟&#xff09; 链接 要满足 a x b ∗ y n a^x b * y n axb∗yn 的关系&#xff0c;可以枚举满足 b ∗ y n − a x b * y n - a ^ x b∗yn−ax 的可余条件。 t int(input()) for _ in range(t):n, a, b map(int, input().…

Demystifying DeFi MEV Activities in Flashbots Bundle

目录 笔记后续的研究方向摘要引言贡献 Demystifying DeFi MEV Activities in Flashbots Bundle CCS 2023 笔记 本文介绍了对 Flashbots 捆绑包中的去中心化金融 &#xff08;DeFi&#xff09; 矿工可提取价值 &#xff08;MEV&#xff09; 活动的研究。作者开发了ActLifter&am…

无效的源发行版:18

启动项目出现报错&#xff1a;无效的源发行版&#xff1a;18 大概率是项目的jdk版本不一致造成的 我的项目是Gradle构建&#xff0c;主要检查这几方面 ①Gradle配置的JVM ②build.gradle文件的java版本 sourceCompatibility : 编译Java文件的jdk版本&#xff0c;涉及到具体…

【WPF.NET开发】创建简单WPF应用

本文内容 先决条件什么是 WPF&#xff1f;配置 IDE创建项目设计用户界面 (UI)调试并测试应用程序 通过本文你将熟悉在使用 Visual Studio 开发应用程序时可使用的许多工具、对话框和设计器。 你将创建“Hello, World”应用程序、设计 UI、添加代码并调试错误。在此期间&#…

车联网架构设计(二)_消息缓存

在上一篇博客车联网架构设计(一)_消息平台的搭建-CSDN博客中&#xff0c;我介绍了车联网平台需要实现的一些功能&#xff0c;并介绍了如何用EMQXHAPROXY来搭建一个MQTT消息平台。车联网平台的应用需要消费车辆发布的消息&#xff0c;同时也会下发消息给车辆&#xff0c;以实现车…

【Hive】——数据仓库

1.1 数仓概念 数据仓库&#xff08;data warehouse&#xff09;&#xff1a;是一个用于存储&#xff0c;分析&#xff0c;报告的数据系统 目的&#xff1a;是构建面向分析的集成化数据环境&#xff0c;分析结果为企业提供决策支持 特点&#xff1a; 数据仓库本身不产生任何数据…

robotFramwork 中如何禁用或跳过其中某个 testcase

在 Robot Framework 中&#xff0c;你可以通过添加一个特殊的标签&#xff08;tag&#xff09;来禁用某个测试用例。这个标签是 robot:skip。 robotframework *** Settings *** Test Setup Open Application*** Test Cases *** My Test Case[Tags] robot:skipDo Some…

Linux 环境下,jdbc连接mysql问题

1. 下载MySQL的JDBC驱动&#xff1a; 从MySQL官网下载最新的MySQL Connector/J&#xff0c;并将其解压到某个目录&#xff0c;比如/usr/local/mysql/。 2. 将JDBC驱动添加到类路径&#xff1a; 将JDBC驱动添加到类路径&#xff0c;可以使用以下命令&#xff1a; export CLA…

分布式系统硬件资源池原理和接入实践

一、硬件资源池理念产生背景 随着智能设备的发展和普及&#xff0c;越来越多的智能设备已经深入人们的生活&#xff0c;比如手机&#xff0c;PC&#xff0c;平板&#xff0c;各类穿戴设备等。当前单个设备的外设资源已经非常丰富&#xff0c;硬件能力也很强大。像我们的手机、…

什么是数字化工厂?

数字化工厂通常需要资金和技术支持&#xff0c;对大企业来说更容易投入建设。 中小企业难道就毫无机会了吗&#xff1f; 当然不是。中小企业也能够实现数字化工厂&#xff0c;只是可能需要采取不同的策略。虽然中小企业可能面临资源有限的挑战&#xff0c;但通过渐进式的方式和…

win10与 vm虚拟机win7共享文件夹创建

1:在win10&#xff08;主机&#xff09;电脑先随意共享一个文件夹 2&#xff1a;在win10&#xff08;主机&#xff09;上创建一个网络映射 右键此电脑选择映射网络驱动器 成功后会多出这个网络位置 3&#xff1a;win7虚拟机设置 在虚拟机中点击计算机右键添加一个网络位置

11月榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩平台)发布!

飞瓜轻数发布2023年11月飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数、带货数据等维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的B站U…

《WebGIS快速开发教程》第5版“惊喜”更新啦

我的书籍《WebGIS快速开发教程》第5版&#xff0c;经过忙碌的编写&#xff0c;终于发布啦&#xff01; 先给大家看看新书的封面&#xff1a; 这次的封面我们经过了全新的设计&#xff0c;不同于以往的任何一个版本。从封面就可以看出第5版肯定有不小的更新。 那么我们话不多说…

【musl-pwn】msul-pwn 刷题记录 -- musl libc 1.2.2

前言 本文不分析 musl libc 相关源码&#xff0c;仅仅为刷题记录&#xff0c;请读者自行学习相关知识&#xff08;看看源码就行了&#xff0c;代码量也不大&#xff09; starCTF2022_babynote 保护&#xff1a;保护全开 程序与漏洞分析&#xff1a; 程序实现了一个菜单堆&…

SL4010升压恒压控制器芯片 2.5V启动 最大10A电流 支持300W大功率

SL4010是一款升压恒压控制器芯片&#xff0c;它具有2.5V启动、最大10A电流、支持300W大功率等特点。该芯片采用先进的控制技术&#xff0c;能够实现高效的电能转换&#xff0c;同时保持稳定的输出电压和电流。 SL4010芯片的主要功能是将输入的直流电压升高到所需的电压&#xf…