综合题:设计并实现一个通讯录管理系统包含以下功能:
a)用户注册、登录;
b) 通讯录信息的浏览、查找与增删改维护
其他说明:
????????要求采用JDBC连接数据库
????????界面可以选用Swing GUI技术或JSP技术
其中通讯录基本信息包括:
记录号、联系人、工作单位、电话号码、邮件、创建日期等(可根据需要扩展信息)
例如:
记录号 | 联系人 | 工作单位 | 电话号码 | 邮件 | 创建日期 |
r5 | 王老师 | 清华大学计算机工程学院 | 0592-61811 | wang@qin.edu.cn | 2021/12/20 |
r21 | 李经理 | 腾讯公司 | 86013388 | li@qq.com | 2022/6/25 |
本实验致力于深入学习和应用Java编程语言以及相关技术,通过设计和实现一个通讯录管理系统,旨在达到以下具体目标:
????????通讯录管理系统是一个便捷的工具,用于管理个人和工作联系人的信息。系统通过图形用户界面提供直观的操作方式,用户可以登录、注册,并对通讯录进行增删改查的操作。数据存储在MySQL数据库中,通过JDBC连接实现对数据库的高效操作。
系统主要包含三个界面:
????????系统通过合理的模块化设计,实现了界面和数据操作的解耦,提高了代码的可维护性。整体设计符合面向对象的原则,使得系统扩展和改进更加容易。
图3-1 UML类图
图3-1 登录注册选择流程图
图3-2 登录流程图
图3-3 注册流程图
图3-4 主功能流程图
误信息。
系统的实现主要涉及用户登录和注册、通讯录的增删改查操作以及数据库连接和操作。以下是这些功能的代码实现和相应的文字分析。
———————————————————————————————————————
用户登录 (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),关闭当前注册窗口;否则,显示错误提示。
———————————————————————————————————————
?
添加联系人 (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方法进行模糊搜索。
更新表格显示搜索结果。
———————————————————————————————————————
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-1 用户登录界面
注册界面:
图4-2 用户注册界面
通讯录界面:
图4-3 通讯录界面
联系人添加对话框:
图4-4 添加联系人
联系人删除提示:
图4-5 删除联系人操作
联系人更新对话框:
图4-6 联系人更新操作
联系人搜索:
图4-7 联系人查询搜索操作
通过这次实验,我深入学习了Java编程语言和相关技术的应用。设计和实现通讯录管理系统的过程中,我不仅提高了对Java语言的熟练度,还学到了如何设计和实现一个桌面应用程序。通过数据库的操作,我对数据存储和检索有了更深入的理解。在软件设计和开发的过程中,我注重了模块化设计和代码解耦,使得系统的可维护性得到提高。这次实验让我收获很多。
[1]耿祥义.Java面向对象程序设计[M].北京: 清华大学出版社,2010.
[2]JAVA界面编程之弹窗、弹框JOptionPane的showMessageDialog方法详解
[3]java dispose()方法: Java dispose()方法详解
[4]【Java图形化界面---JOptionPane的使用】
[8] addrow方法
[10]mysql字段创建时间和更新时间
[12]java+Swing创建表格
[13]Java——日期时间(SimpleDateFormat)
?