Java 写的通讯录管理系统2 带详细设计报告 功能非常齐全 完整源码

该文章介绍了一个使用JavaSwing框架开发的通讯录管理系统,适用于学习JavaGUI编程、数据库连接和文件操作。系统具有用户注册、登录、管理通讯录(包含增删改查功能)、分类管理等功能,强调了模块化设计以提高灵活性和可靠性,并提供了完整源码和设计文档。开发环境为Eclipse或IDEA,数据库为MySQL。
摘要由CSDN通过智能技术生成

今天为大家分享一个java语言其他一个版本的通讯录管理系统,目前系统功相对前几天分享的通讯录管理系统,功能相对简单一些。但是涉及的到知识点非常多,是学习Java Swing编程、窗体、文件、数据库和事件的很好的材料。系统界面漂亮,有完整得源码,希望大家可以喜欢。喜欢的帮忙点赞和关注。一起编程、一起进步

开发环境

开发语言为Java,开发环境Eclipse或者IDEA都可以,数据为MySQL。运行主程序,或者执行打开JAR文件即可以运行本程序。

系统框架

利用JDK自带的SWING框架开发,下载。纯窗体模式,直接运行Main文件即可以。同时带有详细得设计文档。

系统主要功能

性能需求

系统结构化程序设计是讲一个完整的大的系统划分成若干个合适的小的功能,每个具体的功能模块相对独立,系统设计需要遵循以下一些原则。

  1. 系统性。从整个系统的角度进行考虑,系统的代码要统一,设计规范要标准,传递语言要尽可能一致,对系统的数据采集要做到数出一处、全局共享,使一次输入得到多次利用。

  1. 灵活性

系统应具有较好的开放性和结构的可变性,采用模块化结构,提高各模块的独立性,尽可能减少模块间的数据偶合,使各子系统间的数据依赖减至最低限度

  1. 可靠性

可靠性是指系统抵御外界干扰的能力及受外界干扰时的恢复能力。一个成功的管理信息系统必须具有较高的可靠性,如安全保密性、检错及纠错能力、抗病毒能力等。

4 经济性

经济性指在满足系统需求的前提下,尽可能减小系统的开销。一方面,在硬件投资上不能盲目追求技术上的先进,而应以满足应用需要为前提;另一方面,系统设计中应尽量避免不必要的复杂化,各模块应尽量简洁,以便缩短处理流程、减少处理费用

程序启动

1 下载程序源码,解压后导入到ECLIPSE或者IDEA。导入相关的JAR,然后运行Main.java文

件,然后程序进入到系统登陆界面

2 导入数据库文件到SQL SERVER数据库中

主要模块

经过认真的需求分析和调用,系统具备的主要功能有:

  1. 注册。

  1. 登录

  1. 管理自己的通讯录。通讯录信息包括:姓名、性别、分组、家庭电话、移动电话、备注等信息

  1. 分类管理。分类的新增,删除,修改。

运行效果

关键代码

package window;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import database.JDBC_CONNECTION;
import java.awt.*;
import java.awt.event.*;
import java.sql.SQLException;
public class mainframe extends JFrame implements ActionListener{

    //系统托盘的实现
    private SystemTray tray;
    private Image image;
    private PopupMenu popmenu;
    private MenuItem jmiexit,jmishow;
    private TrayIcon trayIcon;
    
    //声明菜单相关变量
    private JMenuBar jmb;
    private JMenu jmsettings;
    private JMenu jmhandle;
    private JMenuItem jmipsw,jmifind,jmiadd,jmidel,jmiather;
    
    //声明工具栏相关变量
    private JToolBar jtb;
    private JButton jbadd,jbdel,jbfind,jbather;
    
    //声明状态栏相关变量
    private JLabel jlstat;
    
    //声明树和表格变量
    private MyTree mytree;
    private MyExcel myexcel;
    
    //树
    private JSplitPane jspp;
    
    
    private DealTable dtable;
    
    FindDialog findlg;
    public mainframe()
    {
        SystePan();
        dtable = new DealTable();
        findlg = new FindDialog();
        
        //初始化菜单相关变量
        jmb = new JMenuBar();
        jmsettings = new JMenu("系统设置");
        jmhandle = new JMenu("基本操作");
        jmipsw = new JMenuItem("修改密码");
        jmifind = new JMenuItem("查找联系人");
        jmiadd = new JMenuItem("添加联系人");
        jmidel = new JMenuItem("删除联系人");
        jmiather = new JMenuItem("修改联系人");
        
        //将菜单项添加到菜单栏中
        jmb.add(jmsettings);
        jmb.add(jmhandle);
        jmsettings.add(jmipsw);
        jmhandle.add(jmifind);
        jmhandle.addSeparator();
        jmhandle.add(jmiadd);
        jmhandle.addSeparator();
        jmhandle.add(jmiather);
        jmhandle.addSeparator();
        jmhandle.add(jmidel);
        
        //初始化工具栏相关变量
        jtb = new JToolBar();
        jtb.setEnabled(false);
        jbadd = new JButton("添加");//"添加联系人"
        jbdel = new JButton("删除");//"删除联系"
        jbfind = new JButton("查找");//"联系人"
        jbather = new JButton("修改");//"联系人"
        
        jbadd.setToolTipText("添加联系人");
        jbdel.setToolTipText("删除联系人");
        jbfind.setToolTipText("查找联系人");
        jbather.setToolTipText("修改联系人");
        
        //将button添加到工具栏中
        jtb.add(jbadd);
        jtb.add(jbather);
        jtb.add(jbdel);
        jtb.add(jbfind);
        jtb.add(findlg);
        
        //状态栏初始化
        jlstat = new JLabel("课程设计");
        
        //初始化树
        mytree = new MyTree();
        myexcel = new MyExcel();
        jspp = new JSplitPane();    
        jspp.setOneTouchExpandable(true);
        jspp.setContinuousLayout(true);
        jspp.setPreferredSize(new Dimension(100,200));
        jspp.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
        
        jspp.setLeftComponent(mytree);
        jspp.setRightComponent(myexcel);
        jspp.setDividerLocation(150);
        jspp.setResizeWeight(0.1);
        jspp.setDividerSize(10);
        jspp.setEnabled(false);
        
        //将控件添加到窗口中
        this.setJMenuBar(jmb);
        this.add(jtb,BorderLayout.NORTH);
        this.add(jlstat,BorderLayout.SOUTH);
        this.add(jspp);
        
        //窗口设置
        Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
        int x = (screen.width - 750) / 2;
        int y = (screen.height - 500) / 2;
        this.setSize(750, 500);
        this.setLocation(x,y);
        //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("通信录管理系统");
        this.setVisible(true);
        this.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                setVisible(false);
            }
        });
        
        
        //按钮及菜单添加事件处理
        jbadd.addActionListener(this);
        jmiadd.addActionListener(this);
        jbather.addActionListener(this);
        jmiather.addActionListener(this);
        jbdel.addActionListener(this);
        jmidel.addActionListener(this);
        jmipsw.addActionListener(this);
        jbfind.addActionListener(this);
        jmifind.addActionListener(this);
        
    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        Object btn = e.getSource();
        if(btn == jbadd || btn == jmiadd)
        {
            new Dialog(this,"添加联系人").setVisible(true);
            String tsql = "SELECT *FROM TXL";
            dtable.TreeToExcel(myexcel.jtb, myexcel.dtm, tsql);
        }
        else if(btn == jbdel || btn == jmidel)
        {
            int  temp = JOptionPane.showConfirmDialog(null, "确认删除?","提示",JOptionPane.OK_CANCEL_OPTION);
            if(temp == 0)
            {
                if(dtable.DelPeople(myexcel.jtb))
                {
                    
                    JOptionPane.showMessageDialog(null, "删除成功!","提示",JOptionPane.INFORMATION_MESSAGE);
                    String tsql = "SELECT *FROM TXL";
                    dtable.TreeToExcel(myexcel.jtb, myexcel.dtm, tsql);
                }    
                else 
                    JOptionPane.showMessageDialog(null,"无法删除","警告",JOptionPane.WARNING_MESSAGE);
            }
            
        }
        else if(btn == jmipsw)
        {
            new pswDlg(this);
        }
        else if(btn == jbather || btn == jmiather)
        {    

            if(dtable.tableselct(myexcel.jtb))//   //myexcel.jtb.isRowSelected(1)
            {
                Dialog dlog = new Dialog(this,"修改联系人");
                String tempstr[] = dtable.xinxi(myexcel.jtb);
                dlog.setAltName(tempstr[0]);
                dlog.setText(tempstr);
                byte[] by = dtable.getPicture(myexcel.jtb);
                dlog.setPicture(by);
                dlog.setVisible(true);
                //确定之后显示修改
                String tsql = "SELECT *FROM TXL";
                dtable.TreeToExcel(myexcel.jtb, myexcel.dtm, tsql);
            }
            else
                JOptionPane.showMessageDialog(null, "请先选择要修改的联系人","提示",
                        JOptionPane.INFORMATION_MESSAGE);
            
        }
        else if(btn == jbfind || btn == jmifind)
        {
            if(findlg.isVisible())
            {
                findlg.setVisible(false);
            }
            else
                findlg.setVisible(true);
        }
        else if(btn == trayIcon)
        {
            setVisible(true);
        }
        else if(btn == jmiexit)
        {
            System.exit(0);
        }
        else if(btn == jmishow)
        {
            setVisible(true);
        }
    }

    public void SystePan()
    {
        if(SystemTray.isSupported())
        {
            try {
            tray = SystemTray.getSystemTray();
            image = Toolkit.getDefaultToolkit().getImage(getClass().getResource("t1.png"));
            popmenu = new PopupMenu();
            jmiexit = new MenuItem("退出");
            jmishow = new MenuItem("显示");
            popmenu.add(jmishow);
            popmenu.add(jmiexit);
            System.out.println("debug");
            trayIcon = new TrayIcon(image,"通信录管理系统",popmenu);
            trayIcon.addActionListener(this);
            jmishow.addActionListener(this);
            jmiexit.addActionListener(this);
            trayIcon.setImageAutoSize(true);
            
                tray.add(trayIcon);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                //e.printStackTrace();
            } 
        }
    }
}

源码下载另见:http://download.csdn.net/detail/laudukang/8341541 1.2 系统功能分析 1.2.1 基本功能 (1)基本信息:姓名、手机号码、电子邮箱、生日、所属组、备注、相片。 (2)工作单位:国家、省份、城市、地址、工作单位、所属部门、职位、邮编、电话、传真。 (3)网络信息:个人主页、即时通信工具及号码、备用邮箱。 (4)家庭资料:国家、省份、城市、地址、邮编、电话。 1.2.2 查询模块 (1)默认显示所有条目。 (2)模糊查询:可以按姓名、电话号码、手机、姓名的汉语拼音的声母或全拼查询。支持模糊查询即输入部分数据后,可以查询出符合条件的全部条目。如:输入“张”,列出所有名字中有“张”的条目;输入“2645”列出电话中有该4个数字的所有条目;输入“xl”,列出声母为该2个字母的所有条目。 (3)指定分组后,列出某分组的所有条目。 说明:查询结果如果有多个条目,应按照姓名排序,并使用姓或姓的第一个汉语拼音的字母分类。 1.2.3 删除和修改功能 查询到一个条目后,可以删除该条目或修改条目内容。 1.2.4 通信录内容的导入和导出 要求能够以CSV格式和vCard格式导入和导出通讯录的全部内容,并能够与主流手机或其他通讯录软件交换数据。 1.2.5通讯录的显示 可以设置在显示查询结果时,一个条目可以显示或不显示哪些内容。 1.2.6通讯录数据的录入 输入并存储新的通讯录数据,输入时如果有同名或同电话号码时,应该给出提示。 1.2.7联系人星标 一键收藏自己联系最多的人,更加方便于查找与管理。 1.2.8手机号码归属地识别 根据录入的手机号码,识别出相应的归属地,如号码“1382840****”会被识别为“广东广州移动”。
实现了以下要求说明的功能: 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文件中只保存了图片的路径。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计算机程序

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值