Java课程设计——通讯录管理系统(含源码)

本文详细描述了一个使用Java、JDBC和SwingGUI技术实现的通讯录管理系统,涵盖了用户注册、登录、信息管理功能,以及数据库操作和模块化设计。通过实例展示了登录验证、注册流程、数据增删改查和界面设计等关键步骤。
摘要由CSDN通过智能技术生成

一、题目要求:

综合题:设计并实现一个通讯录管理系统包含以下功能:
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

源码实现了如下功能: 1.2 系统功能分析 1.2.1 基本功能 支持以下信息的录入: (1)基本信息:姓名、手机号码、电话、电子邮箱、生日、所属组、备注、相片 (2)工作单位:国家、省份、城市、地址、工作单位、所属部门、职位、邮编、电话、传真 (3)网络信息:个人主页、即时通信工具及号码、备用邮箱 (4)家庭资料:国家、省份、城市、地址、邮编、电话 1.2.2 查询功能 (1)默认显示所有条目 (2)模糊查询:可以按姓名、姓名的汉语拼音的声母或全拼查询。支持模糊查询,即输入部分数据后,可以查询出符合条件的全部条目。如:输入“张”,列出所有名字中有“张”的条目;输入“xl”,列出声母为该2个字母的所有条目。 (写该实验报告时,暂未实现按手机号码、电话号码查询。) (3)指定分组后,列出某分组的所有条目。查询结果如果有多个条目,应按照姓名排序,并使用姓或姓的第一个汉语拼音的字母分类。 1.2.3 删除和修改功能 (1)选中单个联系人后,可以修改其内容,可以删除该联系人 (2)选中一个分组后,可以删除该分组,同时删除分组下的全部联系人 (3)支持情况账户下的所有联系人数据 1.2.4 导入和导出 支持将账户下的所有文本文档联系人数据导出为CSV格式文件,支持将CSV文件导入到账户,并能够与主流手机或其他通讯录软件交换数据。 1.2.5 通讯录的显示 显示查询结果,可以设置一个条目可以显示或不显示哪些内容。 1.2.6 通讯录数据的录入 对于新建联系人,保存时如果有同名或同电话号码时,给出提示。 1.2.7 联系人星标 支持一键收藏联系人,联系人加星标后更加方便于用户查找与管理。 【系统设计文档】、【系统需求分析文档】、【系统实验报告】、【答辩展示PPT】另见我的资源……
实现了以下要求说明的功能: 1.要求使用GUI,采用 Swing 技术数据存储采用文件系统(可以是文本 文件、xml 文件、vCard 文件或其他自定义格式文件,但不能是 Excel 文件)。不 使用数据库。 2. 通讯录中每个项目包括: ( 1)基本信息:姓名、手机号码、电子邮箱、生日、所属组、备注、像片。 ( 2)工作单位:国家、省份、城市、地址、工作单位、所属部门、职位、 邮编、电话、传真 ( 3)网络信息:个人主页、即时通信工具及号码、备用邮箱 ( 4)家庭资料:国家、省份、城市、地址、邮编、电话 3 .通讯录数据的录入功能:输入并存储新的通讯录数据,输入时如果有同 名或同电话号码时,应该给出提示。 4 .通讯录数据的查询功能: ( 1)默认列出所有条目。 ( 2)模糊查询,可以按:姓名、电话号码、手机、姓名的汉语拼音的声母 或全拼查询。支持模糊查询即输入部分数据后,可以查询出符合条件的全部条目。 如:输入“张”,列出所有名字中有“张”的条目;输入“ 2645”列出电话中有 该 4个数字的所有条目;输入“xl ”,列出声母为该 2 个字母的所有条目 ( 3)指定分组后,列出某分组的所有条目 说明:查询结果如果有多个条目,应按照姓名排序,并使用姓或姓的第一 个汉语拼音的字母分类。 5 .删除和修改功能:查询到一个条目后,可以删除该条目或修改条目内容。 6 .通信录内容的导入和导出功能。要求能够以CSV 格式和 vCard 格式导入 和导出通讯录的全部内容。并能够与主流手机或其他通讯录软件交换数据。 7 .通讯录显示设置,可以设置在显示查询结果时,一个条目可以显示或不 显示哪些内容。 注意:本系统实现了读取和保存csv文件,同时csv文件中只保存了图片的路径。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值