import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
// 通讯录界面的类
public class ContactsFrame extends JFrame {
private JTable contactsTable; // 通讯录表格
private JTextField searchField; // 搜索框
// 构造方法,设置界面基本属性
public ContactsFrame() {
setTitle("通讯录"); // 设置界面标题
setSize(800, 400); // 设置界面大小
setLocationRelativeTo(null); // 将界面居中显示
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置关闭操作,结束窗口程序
JPanel panel = new JPanel(new BorderLayout()); // 创建面板,使用边界布局
add(panel); // 将面板添加到界面
// 创建一个空的表格模型
DefaultTableModel tableModel = new DefaultTableModel(
new Object[][]{},
new Object[]{"ID", "姓名", "工作地点", "电话", "电子邮件", "创建时间"}//列名
);
// 创建通讯录表格
contactsTable = new JTable(tableModel);
JScrollPane scrollPane = new JScrollPane(contactsTable);//把表格添加到滚动窗格里面
panel.add(scrollPane, BorderLayout.CENTER);
// 添加用于增删改查操作和搜索的组件
JButton addButton = new JButton("添加"); // 创建“添加”按钮
JButton deleteButton = new JButton("删除"); // 创建“删除”按钮
JButton updateButton = new JButton("更新"); // 创建“更新”按钮
JButton searchButton = new JButton("搜索"); // 创建“搜索”按钮
JPanel buttonPanel = new JPanel(); // 创建按钮面板,使用默认的FlowLayout布局
buttonPanel.add(addButton); //添加添加按钮
buttonPanel.add(deleteButton); //添加删除按钮
buttonPanel.add(updateButton); //添加更新按钮
searchField = new JTextField(20); // 创建搜索框
buttonPanel.add(searchField);
buttonPanel.add(searchButton); //添加搜索按钮
panel.add(buttonPanel, BorderLayout.SOUTH);
// 添加“添加”按钮的监听器
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
addContact(); // 执行添加联系人操作
}
});
// 添加“删除”按钮的监听器
deleteButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
deleteContact(); // 执行删除联系人操作
}
});
// 添加“更新”按钮的监听器
updateButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
updateContact(); // 执行更新联系人操作
}
});
// 添加“搜索”按钮的监听器
searchButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
searchContacts(searchField.getText()); // 执行搜索联系人操作
}
});
// 初始化表格内容
refreshTable(); // 刷新表格显示
}
// 添加联系人
private void addContact() {
String name = JOptionPane.showInputDialog("请输入联系人姓名:"); // 获取用户输入的姓名
String workplace = JOptionPane.showInputDialog("请输入联系人工作地点:"); // 获取用户输入的工作地点
String phone = JOptionPane.showInputDialog("请输入联系人电话:"); // 获取用户输入的电话号码
String email = JOptionPane.showInputDialog("请输入联系人电子邮件:"); // 获取用户输入的电子邮件地址
String created_at = null; // 初始化创建时间为null
Timestamp timestamp = null; // 初始化Timestamp对象
if (name != null && !name.trim().isEmpty()) { // 判断姓名是否为空
Connection connection = null; // 初始化数据库连接对象
try {
connection = DBUtil.getConnection(); // 获取数据库连接
int maxId = getMaxId(connection, "contacts"); // 查询当前表中的最大ID值
String sql = "INSERT INTO contacts (id, name, workplace, phone, email, created_at) VALUES (?, ?, ?, ?, ?, ?)"; // 构建插入语句
try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setInt(1, maxId + 1); // 设置ID为最大ID+1
preparedStatement.setString(2, name); // 设置姓名
preparedStatement.setString(3, workplace); // 设置工作地点
preparedStatement.setString(4, phone); // 设置电话号码
preparedStatement.setString(5, email); // 设置电子邮件地址
boolean validDate = false; // 初始化日期格式是否有效的标志
do {
created_at = JOptionPane.showInputDialog("请输入联系人创建时间:"); // 获取用户输入的创建时间
try {
if (created_at == null || created_at.trim().isEmpty()) {
timestamp = new Timestamp(System.currentTimeMillis()); // 如果用户未输入,使用系统当前时间
validDate = true;
} else {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
timestamp = new Timestamp(dateFormat.parse(created_at).getTime()); // 将用户输入的创建时间字符串转换为Timestamp对象
validDate = true;
}
} catch (ParseException e) {
JOptionPane.showMessageDialog(this, "日期格式错误,请输入正确的日期格式(例如:yyyy-MM-dd HH:mm:ss)", "错误", JOptionPane.ERROR_MESSAGE); // 处理日期格式错误,显示错误对话框
}
} while (!validDate);
preparedStatement.setTimestamp(6, timestamp); // 设置创建时间
int affectedRows = preparedStatement.executeUpdate(); // 执行插入操作
if (affectedRows > 0) {
JOptionPane.showMessageDialog(this, "联系人添加成功!", "成功", JOptionPane.INFORMATION_MESSAGE); // 显示成功提示框
refreshTable(); // 刷新表格显示
} else {
JOptionPane.showMessageDialog(this, "联系人添加失败,请重试。", "失败", JOptionPane.ERROR_MESSAGE); // 显示失败提示框
}
}
} catch (SQLException e) {
e.printStackTrace(); // 打印异常信息
} finally {
DBUtil.closeConnection(connection); // 关闭数据库连接
}
}
}
// 获取指定表的最大ID值的方法
private int getMaxId(Connection connection, String tableName) throws SQLException {
String sql = "SELECT MAX(id) AS max_id FROM " + tableName; // 构建查询最大ID的SQL语句
try
java课程设计:通讯录管理系统
需积分: 5 192 浏览量
2024-01-12
16:43:26
上传
评论 3
收藏 8KB RAR 举报
いいね!
- 粉丝: 1471
- 资源: 3
最新资源
- 高性能量化工具 hikyuu 2.0.3 python3.9 ubuntu 安装包
- Cyclone Version 9.51
- 高性能量化回测工具 hikyuu 2.0.3 python 3.12 windows 安装包
- 省级城乡居民基本养老保险情况数据集(2010-2022年).xlsx
- 舞队填写版.cpp
- 基于BP神经网络的多输入单输出回归预测.zip
- 高性能量化回测工具 hikyuu 2.0.3 python 3.9 windows 安装包
- 省级城镇职工基本养老保险情况2000-2022年.xlsx
- 高性能量化回测工具 hikyuu 2.0.3 python 3.10 windows 安装包
- 算法部署-使用OpenVINO+C#部署PaddleOCR字符识别算法-项目源码-优质项目实战.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈