package demo;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
public class AddressBookSystem extends JFrame {
private JList<String> contactsList;
private DefaultListModel<String> contactsModel;
private JComboBox<String> groupComboBox;
private DefaultComboBoxModel<String> groupModel;
private Connection connection;
//创建窗口
public AddressBookSystem() {
setTitle("通讯录");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 500);
setLocationRelativeTo(null);
ImageIcon icon = new ImageIcon("back.jpg");
setIconImage(icon.getImage());
createMenuBar();
createContactsList();
createGroupComboBox();
setLayout(new BorderLayout());
JScrollPane scrollPane = new JScrollPane(contactsList);
add(scrollPane, BorderLayout.CENTER);
add(new JScrollPane(contactsList), BorderLayout.CENTER);
add(groupComboBox, BorderLayout.NORTH);
}
//创建菜单栏
private void createMenuBar() {
JMenuBar menuBar = new JMenuBar();
JMenu contactsMenu = new JMenu("联系人管理");
JMenuItem addContactItem = new JMenuItem("添加联系人");
JMenuItem modifyContactItem = new JMenuItem("修改联系人");
JMenuItem removeContactItem = new JMenuItem("删除联系人");
JMenuItem searchContactItem = new JMenuItem("查询联系人");
contactsMenu.add(searchContactItem);
contactsMenu.add(addContactItem);
contactsMenu.add(modifyContactItem);
contactsMenu.add(removeContactItem);
menuBar.add(contactsMenu);
JMenu settingsMenu = new JMenu("全局操作");
JMenuItem deleteAllContactsItem = new JMenuItem("删除所有联系人");
JMenuItem showAllContactsItem = new JMenuItem("显示所有联系人");
settingsMenu.add(showAllContactsItem);
settingsMenu.add(deleteAllContactsItem);
menuBar.add(settingsMenu);
JMenu messageMenu = new JMenu("帮助");
JMenuItem showMessageItem = new JMenuItem("联系人显示格式");
showMessageItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(AddressBookSystem.this,
"姓名-性别-电话号码-备注", "格式", JOptionPane.INFORMATION_MESSAGE);
}
});
messageMenu.add(showMessageItem);
menuBar.add(messageMenu);
setJMenuBar(menuBar);
deleteAllContactsItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int option = JOptionPane.showConfirmDialog(AddressBookSystem.this,
"确定要删除所有联系人吗?", "删除所有联系人", JOptionPane.YES_NO_OPTION);
if (option == JOptionPane.YES_OPTION) {
deleteAllContacts();
}
}
});
showAllContactsItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
showAllContacts();
}
});
addContactItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JPanel inputPanel = new JPanel();
inputPanel.setLayout(new GridLayout(4, 2));
JTextField nameField = new JTextField();
JComboBox<String> genderComboBox = new JComboBox<>(new String[]{"男", "女"});
JTextField phoneNumberField = new JTextField();
JTextField remarksField = new JTextField();
inputPanel.add(new JLabel("姓名:"));
inputPanel.add(nameField);
inputPanel.add(new JLabel("性别:"));
inputPanel.add(genderComboBox);
inputPanel.add(new JLabel("电话号码:"));
inputPanel.add(phoneNumberField);
inputPanel.add(new JLabel("备注:"));
inputPanel.add(remarksField);
int option = JOptionPane.showConfirmDialog(AddressBookSystem.this, inputPanel,
"添加联系人", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
if (option == JOptionPane.OK_OPTION) {
String name = nameField.getText().trim();
String gender = (String) genderComboBox.getSelectedItem();
String phoneNumber = phoneNumberField.getText().trim();
String remarks = remarksField.getText().trim();
if (!name.isEmpty()) {
if (phoneNumber.isEmpty()) {
phoneNumber = " null ";
}
if (remarks.isEmpty()) {
remarks = " null ";
}
Contact contact = new Contact(name, gender, phoneNumber, remarks);
contactsModel.addElement(contact.toString());
String selectedGroup = groupComboBox.getSelectedItem().toString();
insertContactToGroup(contact, selectedGroup);
} else {
JOptionPane.showMessageDialog(AddressBookSystem.this,
"姓名不能为空", "添加联系人", JOptionPane.ERROR_MESSAGE);
}
}
}
});
modifyContactItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int selectedIndex = contactsList.getSelectedIndex();
if (selectedIndex != -1) {
String selectedContact = contactsModel.getElementAt(selectedIndex);
String[] contactInfo = selectedContact.split(" - ");
JPanel inputPanel = new JPanel();
inputPanel.setLayout(new GridLayout(4, 2));
JTextField nameField = new JTextField(contactInfo[0]);
JComboBox<String> genderComboBox = new JComboBox<>(new String[]{"男", "女"});
genderComboBox.setSelectedItem(contactInfo[1]);
JTextField phoneNumberField = new JTextField(contactInfo[2]);
JTextField remarksField = new JTextField(contactInfo[3]);
inputPanel.add(new JLabel("姓名:"));
inputPanel.add(nameField);
inputPanel.add(new JLabel("性别:"));
inputPanel.add(genderComboBox);
inputPanel.add(new JLabel("电话号码:"));
inputPanel.add(phoneNumberField);
inputPanel.add(new JLabel("备注:"));
inputPanel.add(remarksField);
int option = JOptionPane.showConfirmDialog(AddressBookSystem.this, inputPanel,
"修改联系人", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
if (option == JOptionPane.OK_OPTION) {
String name = nameField.getText().trim();
String gender = (String) genderComboBox.getSelectedItem();
String phoneNumber = phoneNumberField.getText().trim();
String remarks = remarksField.getText().trim();
if (name.isEmpty()) {
name = " null ";
}
if (phoneNumber.isEmpty()) {
phoneNumber = " null ";
}
if (remarks.isEmpty()) {
remarks = " null ";
}
String newContact = name + " - " + gender + " - " + phoneNumber + " - " + remarks;
contactsModel.setElementAt(newContact, selectedIndex);
String selectedGroup = groupComboBox.getSelectedItem().toString();
updateContactInGroup(selectedContact, newContact, selectedGroup);
}
}
}
});
removeContactItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int selectedIndex = contactsList.getSelectedIndex();
if (selectedIndex != -1) {
String selectedContact = contactsModel.getElementAt(selectedIndex);
int option = JOptionPane.showConfirmDialog(AddressBookSystem.this,
"确定要删除联系人吗?", "删除联系人", JOptionPane.YES_NO_OPTION);
if (option == JOptionPane.YES_OPTION) {
String selectedGroup = groupComboBox.getSelectedItem().toString();
removeContactFromGroup(selectedContact, selectedGroup);
contactsModel.removeElementAt(selectedIndex);
}
}
}
});
searchContactItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JTextField searchField = new JTextField();
searchField.setColumns(10);
JPanel searchPanel = new JPanel();
searchPanel.add(new JLabel("请输入联系人姓名:"));
searchPanel.add(searchField);
int option = JOptionPane.showConfirmDialog(AddressBookSystem.this, searchPanel,
"查询联系人", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
if (option == JOptionPane.OK_OPTION) {
String searchTerm = searchField.getText().trim();
if (!searchTerm.isEmpty()) {
searchContacts(searchTerm);
} else {
JOptionPane.showMessageDialog(AddressBookSystem.this,
"请输入联系人姓名", "查询联系人", JOptionPane.ERROR_MESSAGE);
}
}
}
});
}
//创建联系人列表
private void createContactsList() {
contactsModel = new DefaultListModel<>();
contactsList = new JList<>(contactsModel);
}
//创建分组下拉框
private void createGroupComboBox() {
groupModel = new DefaultComboBoxModel<>();
groupModel.addElement("朋友");
groupModel.addElement("家人");
groupModel.addElement("同学");
groupModel.addElement("室友");
groupModel.addElement("陌生人");
groupComboBox = new JComboBox<>(groupModel);
groupComboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
loadContacts();
}
});
}
//将通讯录连接至本地数据库并为分组创建表格
private void connectToDatabase() {
try { // 加载数据库驱动类
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("数据库驱动加载成功");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
String url = "jdbc:mysql://localhost:3306/address_book";
String username = "root";
String password = "mysql";
System.out.println("数据库连接成功");
connection = DriverManager.getConnection(url, username, password);
createGroupTable("朋友");
createGroupTable("家人");
createGroupTable("同学");
createGroupTable("室友");
createGroupTable("陌生人");
loadContacts();
} catch (SQLException e) {
e.printStackTrace();
}
}
//根据给定的分组名创建对应的表格
private void createGroupTable(String groupName) {
try {
Statement statement = connection.createStatement();
String sql = "CREATE TABLE IF NOT EXISTS " + groupName.toLowerCase() + " (" +
"id INT PRIMARY KEY AUTO_INCREMENT," +
"name VARCHAR(255)," +
"gender VARCHAR(10)," +
"phone_number VARCHAR(20)," +
"remarks VARCHAR(255))";
statement.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
//将联系人信息插入选中表中
private void insertContactToGroup(Contact contact, String groupName) {
try {
PreparedStatement statement = connection.prepareStatement(
"INSERT INTO " + groupName.toLowerCase() + " (name, gender, phone_number, remarks) VALUES (?, ?, ?, ?)");
statement.setString(1, contact.getName().isEmpty() ? " " : contact.getName());
statement.setString(2, contact.getGender());
statement.setString(3, contact.getPhoneNumber().isEmpty() ? " " : contact.getPhoneNumber());
statement.setString(4, contact.getRemarks().isEmpty() ? " " : contact.getRemarks());
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
//删除表中的选中的联系人信息
private void removeContactFromGroup(String contactString, String groupName) {
String[] contactInfo = contactString.split(" - ");
String name = contactInfo[0];
try {
PreparedStatement statement = connection.prepareStatement(
"DELETE FROM " + groupName.toLowerCase() + " WHERE name = ?");
statement.setString(1, name);
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
//修改选中的联系人信息
private void modifyContact() {
int selectedIndex = contactsList.getSelectedIndex();
if (selectedIndex != -1) {
String selectedContact = contactsModel.getElementAt(selectedIndex);
JPanel inputPanel = new JPanel();
inputPanel.setLayout(new GridLayout(4, 2));
JTextField nameField = new JTextField();
JComboBox<String> genderComboBox = new JComboBox<>(new String[]{"男", "女"});
JTextField phoneNumberField = new JTextField();
JTextField remarksField = new JTextField();
String[] contactInfo = selectedContact.split(" - ");
nameField.setText(contactInfo[0]);
genderComboBox.setSelectedItem(contactInfo[1]);
phoneNumberField.setText(contactInfo[2]);
remarksField.setText(contactInfo[3]);
inputPanel.add(new JLabel("姓名:"));
inputPanel.add(nameField);
inputPanel.add(new JLabel("性别:"));
inputPanel.add(genderComboBox);
inputPanel.add(new JLabel("电话号码:"));
inputPanel.add(phoneNumberField);
inputPanel.add(new JLabel("备注:"));
inputPanel.add(remarksField);
int option = JOptionPane.showConfirmDialog(AddressBookSystem.this, inputPanel,
"修改联系人", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
if (option == JOptionPane.OK_OPTION) {
String name = nameField.getText().trim();
String gender = (String) genderComboBox.getSelectedItem();
String phoneNumber = phoneNumberField.getText().trim();
String remarks = remarksField.getText().trim();
if (!name.isEmpty()) {
String newContact = name + " - " + gender + " - " + phoneNumber + " - " + remarks;
contactsModel.setElementAt(newContact, selectedIndex);
String selectedGroup = groupComboBox.getSelectedItem().toString();
updateContactInGroup(selectedContact, newContact, selectedGroup);
} else {
JOptionPane.showMessageDialog(AddressBookSystem.this,
"姓名不能为空", "修改联系人", JOptionPane.ERROR_MESSAGE);
}
}
}
}
//更新指定分组中的联系人信息
private void updateContactInGroup(String oldContact, String newContact, String groupName) {
String[] oldContactInfo = oldContact.split(" - ");
String[] newContactInfo = newContact.split(" - ");
try {
StringBuilder updateStatement = new StringBuilder("UPDATE ")
.append(groupName.toLowerCase())
.append(" SET name = ?, gender = ?, phone_number = ?, remarks = ? WHERE name = ?");
PreparedStatement statement = connection.prepareStatement(updateStatement.toString());
statement.setString(1, newContactInfo[0].isEmpty() ? " " : newContactInfo[0]); // Name
statement.setString(2, newContactInfo[1]); // Gender
statement.setString(3, newContactInfo[2].isEmpty() ? " " : newContactInfo[2]); // Phone number
statement.setString(4, newContactInfo[3].isEmpty() ? " " : newContactInfo[3]); // Remarks
statement.setString(5, oldContactInfo[0]); // Old name
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
//根据姓名全局查询联系人信息
private void searchContacts(String searchTerm) {
try {
PreparedStatement statement = connection.prepareStatement(
"SELECT * FROM 同学 WHERE name LIKE ? UNION " +
"SELECT * FROM 陌生人 WHERE name LIKE ? UNION " +
"SELECT * FROM 室友 WHERE name LIKE ? UNION " +
"SELECT * FROM 朋友 WHERE name LIKE ? UNION " +
"SELECT * FROM 家人 WHERE name LIKE ?");
statement.setString(1, "%" + searchTerm + "%");
statement.setString(2, "%" + searchTerm + "%");
statement.setString(3, "%" + searchTerm + "%");
statement.setString(4, "%" + searchTerm + "%");
statement.setString(5, "%" + searchTerm + "%");
ResultSet resultSet = statement.executeQuery();
StringBuilder result = new StringBuilder();
while (resultSet.next()) {
String name = resultSet.getString("name");
String gender = resultSet.getString("gender");
String phoneNumber = resultSet.getString("phone_number");
String remarks = resultSet.getString("remarks");
result.append("姓名: ").append(name).append("\n");
result.append("性别: ").append(gender).append("\n");
result.append("电话号码: ").append(phoneNumber).append("\n");
result.append("备注: ").append(remarks).append("\n\n");
}
if (result.length() > 0) {
JOptionPane.showMessageDialog(AddressBookSystem.this, result.toString(),
"查询结果", JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(AddressBookSystem.this,
"未找到匹配的联系人", "查询结果", JOptionPane.ERROR_MESSAGE);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
//加载指定组别的联系人并显示在界面上
private void loadContacts() {
contactsModel.clear();
String selectedGroup = groupComboBox.getSelectedItem().toString();
try {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM " + selectedGroup.toLowerCase());
while (resultSet.next()) {
String name = resultSet.getString("name");
String gender = resultSet.getString("gender");
String phoneNumber = resultSet.getString("phone_number");
String remarks = resultSet.getString("remarks");
Contact contact = new Contact(name, gender, phoneNumber, remarks);
contactsModel.addElement(contact.toString());
}
} catch (SQLException e) {
e.printStackTrace();
}
}
//删除所有联系人
private void deleteAllContacts() {
int option = JOptionPane.showConfirmDialog(AddressBookSystem.this,
"此操作将删除所有联系人。确定要继续吗?", "删除所有联系人", JOptionPane.YES_NO_OPTION);
if (option == JOptionPane.YES_OPTION) {
try {
Statement statement = connection.createStatement();
statement.executeUpdate("DELETE FROM 朋友");
statement.executeUpdate("DELETE FROM 家人");
statement.executeUpdate("DELETE FROM 同学");
statement.executeUpdate("DELETE FROM 室友");
statement.executeUpdate("DELETE FROM 陌生人");
contactsModel.clear();
JOptionPane.showMessageDialog(AddressBookSystem.this,
"所有联系人已成功删除", "删除所有联系人", JOptionPane.INFORMATION_MESSAGE);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//显示所有联系人
private void showAllContacts() {
JTextArea textArea = new JTextArea();
textArea.setEditable(false);
try {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM 朋友 UNION " +
"SELECT * FROM 家人 UNION " +
"SELECT * FROM 同学 UNION " +
"SELECT * FROM 室友 UNION " +
"SELECT * FROM 陌生人");
while (resultSet.next()) {
String name = resultSet.getString("name");
String gender = resultSet.getString("gender");
String phoneNumber = resultSet.getString("phone_number");
String remarks = resultSet.getString("remarks");
textArea.append("姓名: " + name + "\n");
textArea.append("性别: " + gender + "\n");
textArea.append("电话号码: " + phoneNumber + "\n");
textArea.append("备注: " + remarks + "\n\n");
}
if (textArea.getText().isEmpty()) {
textArea.setText("通讯录中没有联系人");
}
} catch (SQLException e) {
e.printStackTrace();
textArea.setText("无法显示联系人");
}
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setPreferredSize(new Dimension(300, 300));
JOptionPane.showMessageDialog(AddressBookSystem.this, scrollPane,
"所有联系人", JOptionPane.INFORMATION_MESSAGE);
}
//创建联系人Contact类
private static class Contact {
private String name;
private String gender;
private String phoneNumber;
private String remarks;
public Contact(String name, String gender, String phoneNumber, String remarks) {
this.name = name;
this.gender = gender;
this.phoneNumber = phoneNumber;
this.remarks = remarks;
}
public String getName() {
return name;
}
public String getGender() {
return gender;
}
public String getPhoneNumber() {
return phoneNumber;
}
public String getRemarks() {
return remarks;
}
@Override
public String toString() {
return name + " - " + gender + " - " + phoneNumber + " - " + remarks;
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
AddressBookSystem addressBook = new AddressBookSystem();
addressBook.connectToDatabase();
addressBook.setVisible(true);
}
});
}
}
基于数据库的通讯录管理系统(Java)
最新推荐文章于 2023-07-13 20:06:47 发布
该代码实现了一个基于JavaSwing的通讯录系统,用户可以通过菜单栏进行联系人的添加、修改、删除和查询操作。系统连接到本地数据库,根据不同的分组存储联系人信息,支持对分组中的联系人进行管理。此外,还提供了显示所有联系人和删除所有联系人等功能。
摘要由CSDN通过智能技术生成