三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

JAVA+SQL电子通讯录带系统托盘(论文+源代码)

JAVA+SQL电子通讯录带系统托盘(论文+源代码)

1. 项目概述

本项目是一个基于 Java Swing 和 SQLite 数据库开发的电子通讯录管理系统,具备完整的增删改查功能,并集成了系统托盘功能,可在后台运行。系统采用 MVC 架构设计,界面友好,操作简便,适合作为 Java 桌面应用开发的课程设计或毕业设计项目。

主要特性:

  • 联系人信息管理(姓名、电话、邮箱、地址、分组等)
  • 数据库持久化存储(SQLite)
  • 系统托盘支持(最小化到托盘、托盘菜单操作)
  • 数据导入导出(CSV/Excel格式)
  • 联系人分组与搜索功能
  • 用户友好的图形界面

2. 系统架构设计

2.1 技术栈

  • 开发语言:Java 8+
  • GUI框架:Swing
  • 数据库:SQLite 3.x
  • 构建工具:Maven
  • IDE:IntelliJ IDEA / Eclipse

2.2 项目结构

src/ ├── main/ │ ├── java/ │ │ ├── com/ │ │ │ └── addressbook/ │ │ │ ├── Main.java # 程序入口 │ │ │ ├── controller/ # 控制器层 │ │ │ │ ├── ContactController.java │ │ │ │ └── TrayController.java │ │ │ ├── model/ # 模型层 │ │ │ │ ├── Contact.java # 联系人实体类 │ │ │ │ └── DatabaseHelper.java # 数据库操作类 │ │ │ ├── view/ # 视图层 │ │ │ │ ├── MainFrame.java # 主窗口 │ │ │ │ ├── ContactDialog.java # 联系人对话框 │ │ │ │ └── TrayIconManager.java # 托盘管理 │ │ │ └── util/ # 工具类 │ │ │ ├── FileExporter.java │ │ │ └── Validator.java │ │ └── resources/ # 资源文件 │ │ ├── icons/ # 图标文件 │ │ └── db/ # 数据库文件 │ └── test/ # 测试代码 └── pom.xml # Maven配置文件

2.3 数据库设计

-- 联系人表CREATETABLEcontacts(idINTEGERPRIMARYKEYAUTOINCREMENT,nameTEXTNOTNULL,phoneTEXTNOTNULL,emailTEXT,addressTEXT,group_nameTEXTDEFAULT'默认',created_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP,updated_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP);-- 创建索引提高查询效率CREATEINDEXidx_nameONcontacts(name);CREATEINDEXidx_groupONcontacts(group_name);CREATEINDEXidx_phoneONcontacts(phone);

3. 核心功能实现

3.1 数据库连接与操作

// DatabaseHelper.javapackagecom.addressbook.model;importjava.sql.*;importjava.util.ArrayList;importjava.util.List;publicclassDatabaseHelper{privatestaticfinalStringDB_URL="jdbc:sqlite:addressbook.db";privateConnectionconnection;publicDatabaseHelper(){try{Class.forName("org.sqlite.JDBC");connection=DriverManager.getConnection(DB_URL);createTables();}catch(Exceptione){e.printStackTrace();}}privatevoidcreateTables(){Stringsql="CREATE TABLE IF NOT EXISTS contacts ("+"id INTEGER PRIMARY KEY AUTOINCREMENT,"+"name TEXT NOT NULL,"+"phone TEXT NOT NULL,"+"email TEXT,"+"address TEXT,"+"group_name TEXT DEFAULT '默认',"+"created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,"+"updated_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP)";try(Statementstmt=connection.createStatement()){stmt.execute(sql);}catch(SQLExceptione){e.printStackTrace();}}// 添加联系人publicbooleanaddContact(Contactcontact){Stringsql="INSERT INTO contacts(name, phone, email, address, group_name) VALUES(?,?,?,?,?)";try(PreparedStatementpstmt=connection.prepareStatement(sql)){pstmt.setString(1,contact.getName());pstmt.setString(2,contact.getPhone());pstmt.setString(3,contact.getEmail());pstmt.setString(4,contact.getAddress());pstmt.setString(5,contact.getGroupName());pstmt.executeUpdate();returntrue;}catch(SQLExceptione){e.printStackTrace();returnfalse;}}// 查询所有联系人publicList<Contact>getAllContacts(){List<Contact>contacts=newArrayList<>();Stringsql="SELECT * FROM contacts ORDER BY name";try(Statementstmt=connection.createStatement();ResultSetrs=stmt.executeQuery(sql)){while(rs.next()){Contactcontact=newContact();contact.setId(rs.getInt("id"));contact.setName(rs.getString("name"));contact.setPhone(rs.getString("phone"));contact.setEmail(rs.getString("email"));contact.setAddress(rs.getString("address"));contact.setGroupName(rs.getString("group_name"));contacts.add(contact);}}catch(SQLExceptione){e.printStackTrace();}returncontacts;}// 其他CRUD方法:updateContact, deleteContact, searchContacts等}

3.2 系统托盘实现

// TrayIconManager.javapackagecom.addressbook.view;importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionListener;publicclassTrayIconManager{privateTrayIcontrayIcon;privateSystemTraysystemTray;privateMainFramemainFrame;publicTrayIconManager(MainFrameframe){this.mainFrame=frame;if(SystemTray.isSupported()){initTrayIcon();}}privatevoidinitTrayIcon(){systemTray=SystemTray.getSystemTray();// 加载托盘图标Imageimage=Toolkit.getDefaultToolkit().getImage(getClass().getResource("/icons/addressbook_16.png"));// 创建弹出菜单PopupMenupopup=newPopupMenu();MenuItemshowItem=newMenuItem("显示主窗口");showItem.addActionListener(e->mainFrame.setVisible(true));MenuItemexitItem=newMenuItem("退出");exitItem.addActionListener(e->{systemTray.remove(trayIcon);System.exit(0);});popup.add(showItem);popup.addSeparator();popup.add(exitItem);// 创建托盘图标trayIcon=newTrayIcon(image,"电子通讯录",popup);trayIcon.setImageAutoSize(true);// 添加双击事件trayIcon.addActionListener(e->mainFrame.setVisible(true));try{systemTray.add(trayIcon);}catch(AWTExceptione){e.printStackTrace();}}publicvoidshowNotification(Stringtitle,Stringmessage){if(trayIcon!=null){trayIcon.displayMessage(title,message,TrayIcon.MessageType.INFO);}}publicvoidremoveFromTray(){if(trayIcon!=null&&systemTray!=null){systemTray.remove(trayIcon);}}}

3.3 主界面设计

// MainFrame.java 部分代码packagecom.addressbook.view;importjavax.swing.*;importjavax.swing.table.DefaultTableModel;importjava.awt.*;importjava.awt.event.*;publicclassMainFrameextendsJFrame{privateJTablecontactTable;privateDefaultTableModeltableModel;privateJButtonaddButton,editButton,deleteButton,searchButton;privateJTextFieldsearchField;privateTrayIconManagertrayManager;publicMainFrame(){initComponents();initTray();loadContacts();}privatevoidinitComponents(){setTitle("电子通讯录管理系统");setSize(800,600);setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);setLocationRelativeTo(null);// 窗口关闭事件处理addWindowListener(newWindowAdapter(){@OverridepublicvoidwindowClosing(WindowEvente){minimizeToTray();}});// 创建工具栏JToolBartoolBar=newJToolBar();addButton=newJButton("添加");editButton=newJButton("编辑");deleteButton=newJButton("删除");searchButton=newJButton("搜索");searchField=newJTextField(20);toolBar.add(addButton);toolBar.add(editButton);toolBar.add(deleteButton);toolBar.addSeparator();toolBar.add(newJLabel("搜索:"));toolBar.add(searchField);toolBar.add(searchButton);// 创建表格String[]columns={"ID","姓名","电话","邮箱","地址","分组"};tableModel=newDefaultTableModel(columns,0);contactTable=newJTable(tableModel);JScrollPanescrollPane=newJScrollPane(contactTable);// 布局setLayout(newBorderLayout());add(toolBar,BorderLayout.NORTH);add(scrollPane,BorderLayout.CENTER);// 按钮事件绑定addButton.addActionListener(e->showAddDialog());editButton.addActionListener(e->showEditDialog());deleteButton.addActionListener(e->deleteSelectedContact());searchButton.addActionListener(e->searchContacts());}privatevoidinitTray(){trayManager=newTrayIconManager(this);}privatevoidminimizeToTray(){setVisible(false);trayManager.showNotification("电子通讯录","程序已最小化到系统托盘");}privatevoidloadContacts(){// 从数据库加载联系人并更新表格}privatevoidshowAddDialog(){// 显示添加联系人对话框}privatevoidshowEditDialog(){// 显示编辑联系人对话框}privatevoiddeleteSelectedContact(){// 删除选中的联系人}privatevoidsearchContacts(){// 搜索联系人}}

4. 论文要点(毕业设计/课程设计)

4.1 摘要

本文设计并实现了一个基于 Java Swing 和 SQLite 数据库的电子通讯录管理系统。系统采用 MVC 设计模式,实现了联系人的增删改查、分组管理、数据导入导出等核心功能。特别地,系统集成了系统托盘功能,支持后台运行和快速唤醒,提升了用户体验。系统界面友好,操作简便,具有良好的可扩展性和维护性。

4.2 系统需求分析

  1. 功能需求

    • 用户管理:支持多用户登录(可选扩展)
    • 联系人管理:增删改查、批量操作
    • 分组管理:自定义分组、分组筛选
    • 数据备份:导入导出 CSV/Excel
    • 系统托盘:最小化到托盘、托盘菜单
  2. 非功能需求

    • 性能:响应时间 < 2秒
    • 可用性:支持 Windows/macOS/Linux
    • 可靠性:数据自动备份
    • 安全性:数据加密存储(可选)

4.3 系统设计

  1. 架构设计:MVC 三层架构
  2. 数据库设计:ER图、表结构设计
  3. 界面设计:原型图、布局设计
  4. 类设计:UML类图、时序图

4.4 实现与测试

  1. 开发环境搭建
  2. 核心模块实现
  3. 单元测试与集成测试
  4. 系统部署与运行

4.5 论文结构建议

  • 第一章:绪论(研究背景、意义、国内外现状)
  • 第二章:相关技术介绍(Java Swing、SQLite、系统托盘)
  • 第三章:系统需求分析
  • 第四章:系统设计
  • 第五章:系统实现
  • 第六章:系统测试
  • 第七章:总结与展望
  • 参考文献
  • 致谢
  • 附录(源代码、使用说明)

5. 项目部署与运行

5.1 环境准备

  1. 安装 JDK 8 或更高版本
  2. 安装 Maven(可选,用于构建)
  3. 安装 SQLite(可选,系统自带驱动)

5.2 项目导入与运行

# 1. 克隆或下载项目gitclone https://github.com/yourusername/addressbook-system.git# 2. 导入IDE(IntelliJ IDEA/Eclipse)# - File -> Open -> 选择项目文件夹# - 等待Maven依赖下载完成# 3. 运行主类# - 找到 Main.java# - 右键 -> Run 'Main.main()'

5.3 Maven 依赖配置

<!-- pom.xml --><dependencies><!-- SQLite JDBC驱动 --><dependency><groupId>org.xerial</groupId><artifactId>sqlite-jdbc</artifactId><version>3.42.0.0</version></dependency><!-- Apache Commons CSV(用于导入导出) --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-csv</artifactId><version>1.10.0</version></dependency><!-- JUnit测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies>

6. 功能演示与截图

6.1 主界面

+-----------------------------------------+ | 电子通讯录管理系统 | +-----------------------------------------+ | [添加] [编辑] [删除] | 搜索:[输入框] [搜索] | +-----------------------------------------+ | ID | 姓名 | 电话 | 邮箱 | |----|--------|------------|-------------| | 1 | 张三 | 13800138000| zs@qq.com | | 2 | 李四 | 13900139000| ls@qq.com | | 3 | 王五 | 13700137000| ww@qq.com | +-----------------------------------------+

6.2 系统托盘效果

  • 程序最小化后显示在系统托盘区
  • 右键托盘图标显示菜单:显示主窗口、退出
  • 双击托盘图标快速恢复主窗口
  • 支持托盘消息通知

7. 扩展功能建议

7.1 短期扩展

  1. 数据加密:使用 AES 加密敏感信息
  2. 云端同步:集成 WebDAV 或云存储
  3. 生日提醒:添加生日字段和提醒功能
  4. 导出PDF:支持联系人列表导出为PDF

7.2 长期扩展

  1. 多用户支持:用户注册登录系统
  2. 网络版:基于 Spring Boot 的 Web 版本
  3. 移动端:Android/iOS 客户端
  4. 智能搜索:基于拼音、模糊匹配的搜索

8. 常见问题与解决方案

8.1 数据库连接失败

问题java.sql.SQLException: no suitable driver found
解决:确保 sqlite-jdbc 依赖已正确添加,或手动添加驱动 jar 包。

8.2 系统托盘不显示

问题:在某些 Linux 桌面环境下系统托盘可能不工作
解决:检查系统是否支持 SystemTray,或使用第三方托盘库。

8.3 中文乱码

问题:数据库或界面显示中文乱码
解决

// 数据库连接时指定编码Stringurl="jdbc:sqlite:addressbook.db?charset=utf8";// Swing组件设置字体UIManager.put("Button.font",newFont("微软雅黑",Font.PLAIN,12));UIManager.put("Label.font",newFont("微软雅黑",Font.PLAIN,12));

8.4 打包为可执行文件

使用 Maven Assembly 插件或 Launch4j 打包:

<!-- 在pom.xml中添加 --><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><configuration><archive><manifest><mainClass>com.addressbook.Main</mainClass></manifest></archive><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration></plugin></plugins></build>

9. 源代码获取与使用

9.1 完整项目结构

项目包含以下核心文件:

  • Main.java- 程序入口
  • DatabaseHelper.java- 数据库操作类
  • Contact.java- 联系人实体类
  • MainFrame.java- 主界面类
  • ContactDialog.java- 联系人编辑对话框
  • TrayIconManager.java- 系统托盘管理
  • pom.xml
← 返回列表