基于Java+Swing+Mysql实现通讯录管理系统

该系统是一个基于JavaSwing图形界面和Mysql数据库的通讯录管理应用,具备用户登录、信息查询、新增联系人、修改及删除联系人等基本功能。数据库采用InnoDB引擎,包含addressbook和user两张表,存储联系人和用户信息。

一、系统介绍

1.登录系统
2.查询信息
3.新增信息
4.修改信息
5.删除信息

运行环境:idea/eclipse、mysql、jdk8(javaSE15效果最好)

二、功能展示

1.用户登陆

在这里插入图片描述

2.查询信息

在这里插入图片描述

3.新增信息

在这里插入图片描述

4.修改信息

在这里插入图片描述

5.删除信息

在这里插入图片描述

三、数据库

/*
 Navicat Premium Data Transfer

 Source Server         : test
 Source Server Type    : MySQL
 Source Server Version : 80021
 Source Host           : localhost:3306
 Source Schema         : addressbook

 Target Server Type    : MySQL
 Target Server Version : 80021
 File Encoding         : 65001

 Date: 03/07/2022 15:21:30
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for addressbook
-- ----------------------------
DROP TABLE IF EXISTS `addressbook`;
CREATE TABLE `addressbook`  (
  `sno` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `sex` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `school` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `professional` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `birthday` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `address` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `tel` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`sno`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of addressbook
-- ----------------------------
INSERT INTO `addressbook` VALUES ('10086', '王五', '男', '', '计算机软件', '', '', '13826882227', '1181203788@qq.com');
INSERT INTO `addressbook` VALUES ('20210901111', '张三', '男', '软件学校', '软件工程', '2000-11-22', '广东广州', '13726892227', '641205779@qq.com');
INSERT INTO `addressbook` VALUES ('20210901112', '李四', '女', '软件学院', '软件工程', '1996-08-09', '上海', '13729888888', '12345678@qq.com');

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `userid` int(0) NOT NULL AUTO_INCREMENT,
  `username` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  PRIMARY KEY (`userid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'admin', '123');

SET FOREIGN_KEY_CHECKS = 1;

四、其他系统实现

Java+Swing实现学生选课管理系统
Java+Swing实现学校教务管理系统
Java+Swing+sqlserver学生成绩管理系统
Java+Swing用户信息管理系统
Java+Swing实现的五子棋游戏
基于JavaSwing 银行管理系统
Java+Swing+mysql仿QQ聊天工具
Java+Swing 聊天室
Java+Swing+dat文件存储实现学生选课管理系统
Java+Swing可视化图像处理软件
Java+Swing学生信息管理系统
Java+Swing图书管理系统
Java+Swing图书管理系统2.0
基于java+swing+mysql图书管理系统3.0
大作业-基于java+swing+mysql北方传统民居信息管理系统

五、获取源码

点击下载
基于Java+Swing+Mysql实现通讯录管理系统

<think>好的,我现在需要帮助用户解决如何使用JavaSwingMySQL开发通讯录管理系统的问题。用户还希望得到示例代码。首先,我需要回忆之前提供的引用内容,看看是否有相关的信息可以利用。根据引用[1],里面提到了一些使用Java+Swing+MySQL实现的管理系统,包括通讯录管理系统。引用[2]和[3]更详细地描述了通讯录管理系统的功能设计和实现方法,比如联系人信息的管理、增删改查操作,以及数据库设计可能有四张表,用户模块和分组模块等。这些信息可以作为基础来构建回答。 首先,我应该概述系统的核心功能,比如用户登录、联系人管理、分组管理等。然后,数据库设计部分需要详细说明,包括表结构,比如用户表、联系人表、分组表以及可能的关联表。这里要注意用户和分组的关联,可能每个用户有自己的分组和联系人,所以需要外键来关联用户ID。接下来是技术实现部分,需要分模块讲解。首先是数据库连接,使用JDBC,示例代码需要展示如何建立连接,这里要注意加载驱动、连接字符串、用户名和密码。然后用户登录模块,涉及Swing的界面设计和事件处理,比如登录按钮的动作监听,验证用户名和密码是否正确,这里需要查询数据库。然后是主界面设计,可能用JFrame,包含菜单和操作按钮,比如添加联系人的按钮。联系人管理模块需要展示如何实现增删改查。添加联系人可能需要一个对话框,收集用户输入的信息,然后执行SQL插入操作。这里要处理可能的异常,比如重复数据或数据库连接问题。查询功能可能需要使用JTable来展示数据,从数据库中检索结果并填充到表格中。在代码示例部分,需要提供关键的代码片段,比如数据库连接工具类、登录事件处理、添加联系人的对话框和对应的DAO层代码。同时要提醒用户注意异常处理和资源释放,比如关闭Connection、Statement和ResultSet。 最后,生成相关问题,帮助用户深入理解,比如系统架构设计、Swing界面优化、数据库安全措施以及扩展功能等。这些问题应该围绕用户可能遇到的下一步问题展开,引导他们进一步学习。检查是否符合系统级指令:行内公式用$...$,但这里可能不需要数学公式。独立公式也没有涉及。LaTeX语法正确,使用中文回答,生成相关问题,引用标识正确添加。回答结构清晰,分步骤说明,示例代码用代码块包裹,参考了提供的引用内容。确认无误后,整理回答。</think>### Java+Swing+MySQL通讯录管理系统实现方法 #### 一、系统核心功能 1. 用户登录/注册模块 2. 联系人管理(增删改查) 3. 分组分类管理 4. 数据持久化存储(MySQL) 5. 联系人信息展示表格 #### 二、数据库设计(示例) ```sql -- 用户表 CREATE TABLE users ( user_id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) UNIQUE, password VARCHAR(100) ); -- 联系人表 CREATE TABLE contacts ( contact_id INT PRIMARY KEY AUTO_INCREMENT, user_id INT, name VARCHAR(100), phone VARCHAR(20), email VARCHAR(100), group_id INT, FOREIGN KEY (user_id) REFERENCES users(user_id) ); -- 分组表 CREATE TABLE groups ( group_id INT PRIMARY KEY AUTO_INCREMENT, user_id INT, group_name VARCHAR(50), FOREIGN KEY (user_id) REFERENCES users(user_id) ); ``` #### 三、技术实现步骤 1. **数据库连接模块** ```java public class DBUtil { private static final String URL = "jdbc:mysql://localhost:3306/contact_db"; private static final String USER = "root"; private static final String PASSWORD = "123456"; public static Connection getConnection() throws SQLException { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } return DriverManager.getConnection(URL, USER, PASSWORD); } } ``` 2. **用户登录界面** ```java public class LoginFrame extends JFrame { private JTextField tfUsername; private JPasswordField pfPassword; public LoginFrame() { // 界面组件初始化 JButton btnLogin = new JButton("登录"); btnLogin.addActionListener(e -> { String username = tfUsername.getText(); String password = new String(pfPassword.getPassword()); try (Connection conn = DBUtil.getConnection()) { String sql = "SELECT * FROM users WHERE username=? AND password=?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, password); ResultSet rs = pstmt.executeQuery(); if (rs.next()) { new MainFrame(rs.getInt("user_id")).setVisible(true); this.dispose(); } else { JOptionPane.showMessageDialog(this, "登录失败"); } } catch (SQLException ex) { ex.printStackTrace(); } }); } } ``` 3. **主界面设计** ```java public class MainFrame extends JFrame { private JTable contactTable; private DefaultTableModel tableModel; public MainFrame(int userId) { // 初始化表格 String[] columns = {"姓名", "电话", "邮箱", "分组"}; tableModel = new DefaultTableModel(columns, 0); contactTable = new JTable(tableModel); // 加载数据 loadContacts(userId); // 添加操作按钮 JButton btnAdd = new JButton("添加联系人"); btnAdd.addActionListener(e -> new AddContactDialog(userId, this).setVisible(true)); } private void loadContacts(int userId) { try (Connection conn = DBUtil.getConnection()) { String sql = "SELECT c.name, c.phone, c.email, g.group_name " + "FROM contacts c LEFT JOIN groups g ON c.group_id=g.group_id " + "WHERE c.user_id=?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, userId); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { tableModel.addRow(new Object[]{ rs.getString("name"), rs.getString("phone"), rs.getString("email"), rs.getString("group_name") }); } } catch (SQLException ex) { ex.printStackTrace(); } } } ``` #### 四、数据操作示例(DAO模式) ```java public class ContactDAO { public static void addContact(int userId, Contact contact) throws SQLException { try (Connection conn = DBUtil.getConnection()) { String sql = "INSERT INTO contacts (user_id, name, phone, email, group_id) " + "VALUES (?, ?, ?, ?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, userId); pstmt.setString(2, contact.getName()); pstmt.setString(3, contact.getPhone()); pstmt.setString(4, contact.getEmail()); pstmt.setObject(5, contact.getGroupId(), Types.INTEGER); pstmt.executeUpdate(); } } } ``` #### 五、注意事项 1. 使用`PreparedStatement`防止SQL注入 2. 数据库连接及时关闭 3. Swing界面线程与数据库操作线程分离 4. 使用`DefaultTableModel`实现表格数据动态更新 5. 密码字段需要加密存储(如MD5)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五星资源

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值