Java课程设计——通讯录管理系统

发布时间:2024年01月13日

一、题目要求:

综合题:设计并实现一个通讯录管理系统包含以下功能:
a)用户注册、登录;
b) 通讯录信息的浏览、查找与增删改维护
其他说明:
????????要求采用JDBC连接数据库
????????界面可以选用Swing GUI技术或JSP技术

其中通讯录基本信息包括:
记录号、联系人、工作单位、电话号码、邮件、创建日期等(可根据需要扩展信息)

例如:

通讯录
记录号联系人工作单位电话号码邮件创建日期
r5王老师清华大学计算机工程学院0592-61811wang@qin.edu.cn2021/12/20
r21李经理腾讯公司86013388li@qq.com2022/6/25

二、程序设计:

1.实验目的

本实验致力于深入学习和应用Java编程语言以及相关技术,通过设计和实现一个通讯录管理系统,旨在达到以下具体目标:

  1. 学习和应用Java编程语言: 通过实际项目的开发,加深对Java编程语言的理解,并熟悉其面向对象的编程思想。实践中将涉及类的设计、继承、多态等概念,从而提高对Java语言特性的掌握。
  2. 掌握Java Swing桌面应用程序的设计与开发: 通过使用Java Swing框架,了解并实践图形用户界面(GUI)的设计与开发。在这个过程中,将学习如何创建窗体、面板、按钮、文本框等Swing组件,以及如何处理事件和实现用户交互。
  3. 理解并应用数据库设计和连接: 通过与MySQL数据库的交互,学会设计数据库表结构、进行增删改查等基本操作。使用JDBC连接数据库,实现系统与数据的有效交互,从而提升对数据库设计和连接技术的理解和应用。
  4. 培养软件设计和开发的能力:通过整个系统的设计与实现过程,培养学生的软件设计和开发能力。强调模块化设计,将系统拆分为不同的模块,使得代码结构清晰,易于维护和扩展。
  5. 包括模块化设计、代码解耦、异常处理等方面的技能: 在实际编码中,注重采用模块化设计原则,将系统划分为不同的功能模块,实现各模块之间的解耦。另外,要实现合理的异常处理,确保系统在面对不可避免的错误时能够很好地处理。

2. 系统简介

????????通讯录管理系统是一个便捷的工具,用于管理个人和工作联系人的信息。系统通过图形用户界面提供直观的操作方式,用户可以登录、注册,并对通讯录进行增删改查的操作。数据存储在MySQL数据库中,通过JDBC连接实现对数据库的高效操作。

系统主要包含三个界面:

  1. 登录界面 (LoginFrame): 用户通过输入用户名和密码登录系统。验证成功后,用户可以进入通讯录界面;否则,系统会提示登录失败信息。
  2. 通讯录界面 (ContactsFrame): 用户可以在这个界面进行通讯录的管理。可以添加、删除、更新联系人信息,也可以通过搜索功能查找特定联系人。界面使用Java Swing框架,表格显示联系人信息,用户友好的界面设计提高了用户体验。
  3. 注册界面 (RegistrationFrame): 新用户可以在这里进行注册。用户输入用户名、密码和确认密码后,系统验证信息并将用户存储到数据库中。注册成功后,用户可以返回登录界面进行登录。

????????系统通过合理的模块化设计,实现了界面和数据操作的解耦,提高了代码的可维护性。整体设计符合面向对象的原则,使得系统扩展和改进更加容易。

3. 系统设计

3.1 UML类图:

图3-1 UML类图

3.2 流程图:

图3-1 登录注册选择流程图

图3-2 登录流程图

图3-3 注册流程图

图3-4 主功能流程图

3.3?主要操作流程

  • 用户打开程序,进入登录界面 (LoginFrame)。
  • 用户输入用户名和密码,点击登录按钮。
  • 程序验证用户信息,如果验证通过,进入通讯录界面 (ContactsFrame);否则,提示错

误信息。

  • 在通讯录界面,用户可以进行添加、删除、更新和搜索联系人的操作。
  • 用户点击注册按钮,进入注册界面 (RegistrationFrame)。
  • 在注册界面,用户输入用户名、密码和确认密码,点击注册按钮。
  • 程序验证信息并将用户信息存储到数据库中,注册成功后返回登录界面。
  • 用户可以在登录界面输入新注册的账号信息进行登录。

4. 系统实现

系统的实现主要涉及用户登录和注册、通讯录的增删改查操作以及数据库连接和操作。以下是这些功能的代码实现和相应的文字分析。

———————————————————————————————————————

4.1 用户登录和注册

用户登录 (LoginFrame):

// 登录按钮点击事件处理
private void onLoginButtonClick() {
    String username = usernameField.getText();
    String password = String.valueOf(passwordField.getPassword());

    // 调用UserService进行用户验证
    boolean loginSuccessful = UserService.login(username, password);

    if (loginSuccessful) {
        // 登录成功,打开通讯录界面
        ContactsFrame = new ContactsFrame();
        contactsFrame.setVisible(true);
        dispose(); // 关闭当前登录窗口
    } else {
        // 登录失败,显示错误提示
        JOptionPane.showMessageDialog(this, "用户名或密码错误!", "登录失败", JOptionPane.ERROR_MESSAGE);
    }
}

文字分析:

当用户点击登录按钮时,获取输入的用户名和密码。

通过调用UserService的login方法进行用户验证。

如果验证成功,打开通讯录界面 (ContactsFrame),关闭当前登录窗口;否则,显示错误提示。

?

用户注册 (RegistrationFrame)

// 注册按钮点击事件处理
private void onRegisterButtonClick() {
    String username = usernameField.getText();
    String password = String.valueOf(passwordField.getPassword());
    String confirmPassword = String.valueOf(confirmPasswordField.getPassword());

    // 调用UserService进行用户注册
    boolean registrationSuccessful = UserService.register(username, password, confirmPassword);

    if (registrationSuccessful) {
        // 注册成功,返回登录界面
        LoginFrame i = new LoginFrame();
        loginFrame.setVisible(true);
        dispose(); // 关闭当前注册窗口
    } else {
        // 注册失败,显示错误提示
        JOptionPane.showMessageDialog(this, "注册失败,请检查输入信息!", "注册失败", JOptionPane.ERROR_MESSAGE);
    }
}

文字分析:

当用户点击注册按钮时,获取输入的用户名、密码和确认密码。

通过调用UserService的register方法进行用户注册。

如果注册成功,返回登录界面 (LoginFrame),关闭当前注册窗口;否则,显示错误提示。

———————————————————————————————————————

?

?4.2 通讯录的增删改查操作

添加联系人 (ContactsFrame)

private void addContact() {
    String name = JOptionPane.showInputDialog("请输入联系人姓名:");
    String workplace = JOptionPane.showInputDialog("请输入联系人工作地点:");
    String phone = JOptionPane.showInputDialog("请输入联系人电话:");
    String email = JOptionPane.showInputDialog("请输入联系人电子邮件:");

    if (name != null && !name.trim().isEmpty()) {
        // 获取数据库中当前最大ID值
        int maxId = DBUtil.getMaxId("contacts");

        // 插入新联系人,ID为最大ID+1
        boolean insertSuccessful = ContactService.addContact(maxId + 1, name, workplace, phone, email);

        if (insertSuccessful) {
            JOptionPane.showMessageDialog(this, "联系人添加成功!", "成功", JOptionPane.INFORMATION_MESSAGE);
            refreshTable(); // 刷新表格显示
        } else {
            JOptionPane.showMessageDialog(this, "联系人添加失败,请重试。", "失败", JOptionPane.ERROR_MESSAGE);
        }
    }
}

文字分析:

用户点击添加联系人按钮时,弹出输入对话框获取联系人信息。

通过调用DBUtil的getMaxId方法获取数据库中当前最大ID值。

调用ContactService的addContact方法插入新联系人,其中新联系人的ID为最大ID值+1。

根据插入结果显示相应的提示信息,成功则刷新表格显示。

删除联系人 (ContactsFrame)

private void deleteContact() {
    int selectedRow = contactsTable.getSelectedRow();
    if (selectedRow != -1) {
        int contactId = (int) contactsTable.getValueAt(selectedRow, 0);

        // 调用ContactService进行联系人删除
        boolean deleteSuccessful = ContactService.deleteContact(contactId);

        if (deleteSuccessful) {
            JOptionPane.showMessageDialog(this, "联系人删除成功!", "成功", JOptionPane.INFORMATION_MESSAGE);
            refreshTable(); // 刷新表格显示
        } else {
            JOptionPane.showMessageDialog(this, "联系人删除失败,请重试。", "失败", JOptionPane.ERROR_MESSAGE);
        }
    } else {
        JOptionPane.showMessageDialog(this, "请选择要删除的联系人。", "提示", JOptionPane.WARNING_MESSAGE);
    }
}

文字分析:

用户在表格中选择要删除的联系人行,点击删除联系人按钮。

获取选中联系人的ID。

调用ContactService的deleteContact方法进行联系人删除。

根据删除结果显示相应的提示信息,成功则刷新表格显示。

更新联系人 (ContactsFrame)

private void updateContact() {
    int selectedRow = contactsTable.getSelectedRow();
    if (selectedRow != -1) {
        int contactId = (int) contactsTable.getValueAt(selectedRow, 0);

        String name = JOptionPane.showInputDialog("请输入联系人姓名:");
        String workplace = JOptionPane.showInputDialog("请输入联系人工作地点:");
        String phone = JOptionPane.showInputDialog("请输入联系人电话:");
        String email = JOptionPane.showInputDialog("请输入联系人电子邮件:");

        // 调用ContactService进行联系人更新
        boolean updateSuccessful = ContactService.updateContact(contactId, name, workplace, phone, email);

        if (updateSuccessful) {
            JOptionPane.showMessageDialog(this, "联系人更新成功!", "成功", JOptionPane.INFORMATION_MESSAGE);
            refreshTable(); // 刷新表格显示
        } else {
            JOptionPane.showMessageDialog(this, "联系人更新失败,请重试。", "失败", JOptionPane.ERROR_MESSAGE);
        }
    } else {
        JOptionPane.showMessageDialog(this, "请选择要更新的联系人。", "提示", JOptionPane.WARNING_MESSAGE);
    }
}

文字分析:

用户在表格中选择要更新的联系人行,点击更新联系人按钮。

获取选中联系人的ID。

弹出输入对话框获取更新后的联系人信息。

调用ContactService的updateContact方法进行联系人更新。

根据更新结果显示相应的提示信息,成功则刷新表格显示。

搜索联系人 (ContactsFrame)

private void searchContacts(String keyword) {
    // 调用ContactService进行模糊搜索
    ResultSet resultSet = ContactService.searchContacts(keyword);

    // 更新表格显示搜索结果
    updateTable(resultSet);
}

文字分析:

用户在搜索文本框输入关键字,点击搜索按钮。

调用ContactService的searchContacts方法进行模糊搜索。

更新表格显示搜索结果。

———————————————————————————————————————

4.3 数据库连接和操作

DBUtil类

public class DBUtil {
    // 获取数据库连接
    public static Connection getConnection() {
        // 连接数据库的代码,此处省略
    }

    // 关闭数据库资源
    public static void close(Connection connection, Statement statement, ResultSet resultSet) {
        // 关闭数据库资源的代码,此处省略
    }

    // 获取数据表中当前最大ID值
    public static int getMaxId(String tableName) {
        int maxId = 0;
        try (Connection connection = getConnection();
             Statement statement = connection.createStatement()) {
            ResultSet resultSet = statement.executeQuery("SELECT MAX(id) FROM " + tableName);
            if (resultSet.next()) {
                maxId = resultSet.getInt(1);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return maxId;
    }
}

文字分析:

DBUtil类提供了获取数据库连接、关闭数据库资源以及获取数据表中当前最大ID值的方法。

getConnection方法用于获取数据库连接。

close方法用于关闭数据库连接、Statement和ResultSet。

getMaxId方法用于获取数据表中当前最大ID值。

?ContactService类

public class ContactService {
    // 添加联系人
    public static boolean addContact(int id, String name, String workplace, String phone, String email) {
        // 调用DBUtil进行数据库操作,此处省略
    }

    // 删除联系人
    public static boolean deleteContact(int contactId) {
        // 调用DBUtil进行数据库操作,此处省略
    }

    // 更新联系人
    public static boolean updateContact(int contactId, String name, String workplace, String phone, String email) {
        // 调用DBUtil进行数据库操作,此处省略
    }

    // 模糊搜索联系人
    public static ResultSet searchContacts(String keyword) {
        // 调用DBUtil进行数据库操作,此处省略
    }
}

文字分析:

ContactService类提供了添加、删除、更新联系人以及模糊搜索联系人的方法。

每个方法内部通过调用DBUtil进行相应的数据库操作。

?

4.5 测试效果图

登录界面:

图4-1 用户登录界面

注册界面:

图4-2 用户注册界面

通讯录界面:

图4-3 通讯录界面

联系人添加对话框:

图4-4 添加联系人

联系人删除提示:

图4-5 删除联系人操作

联系人更新对话框:

图4-6 联系人更新操作

联系人搜索:

图4-7 联系人查询搜索操作

5. 总结

通过这次实验,我深入学习了Java编程语言和相关技术的应用。设计和实现通讯录管理系统的过程中,我不仅提高了对Java语言的熟练度,还学到了如何设计和实现一个桌面应用程序。通过数据库的操作,我对数据存储和检索有了更深入的理解。在软件设计和开发的过程中,我注重了模块化设计和代码解耦,使得系统的可维护性得到提高。这次实验让我收获很多。

三、参考文献

[1]耿祥义.Java面向对象程序设计[M].北京: 清华大学出版社,2010.

[2]JAVA界面编程之弹窗、弹框JOptionPane的showMessageDialog方法详解

[3]java dispose()方法: Java dispose()方法详解

[4]【Java图形化界面---JOptionPane的使用】

[5]mysql怎么查询id最大值

[6]SQL 数据的插入(INSERT 语句的使用方法)

[7]Swing-JTable(查询记录)

[8] addrow方法

[9]java getvalueat

[10]mysql字段创建时间和更新时间

[11]JAVA日期处理(Timestamp)

[12]java+Swing创建表格

[13]Java——日期时间(SimpleDateFormat)

?

四、附录源码

https://download.csdn.net/download/m0_73059486/88735065icon-default.png?t=N7T8https://download.csdn.net/download/m0_73059486/88735065

文章来源:https://blog.csdn.net/m0_73059486/article/details/135555508
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。