Java课设-简单的通讯录系统(增删改查连接数据库)

一.题目介绍

 二.实验思路

       这里主要是运用到了jdbc来连接数据库,而在数据库中存在的是通讯录的记录,有id,姓名,手机号,创建时间,修改时间。同时使用的是swing的来做可视化界面,其中运用到了弹窗,按钮,标签,表格等组件,同时还有着监视器来监测的是按钮的动作。

       理论知识:这里使用的是手写sql语句,而不采取MyBatis框架,首先要连接数据库,通过sql语句来读取与更新数据,要学会select,update,delete语句的使用。同时要运用到接口与实现类的结构模式,简化开发操作。

三.实验代码简单展示及数据库表的简单展示

1.项目的结构简介

 2.项目主界面代码及连接数据库层的接口实现类代码

主界面的代码:

package view;


import service.ViewService;
import service.impl.ViewServiceImpl;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.sql.SQLException;

//主窗口的进入
public class Mainview extends JFrame {
    ViewService v = new ViewServiceImpl();
    public void Mainview() throws ClassNotFoundException, SQLException {
        //数据库的加入
        JFrame jFrame = new JFrame("通讯录系统");//创建对象
        jFrame.setVisible(true);//窗口的可视化
        jFrame.setBounds(650, 150, 700, 400);//窗口的初始化
        jFrame.setResizable(false);
        Container container = jFrame.getContentPane();
        container.setBackground(Color.lightGray);
        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭事件
        container.setLayout(null);
        //初始化按钮信息
        JLabel jLabelr = new JLabel("通讯录管理系统By陈某宏");
        jLabelr.setFont(new Font("行书", Font.BOLD, 30));
        jLabelr.setForeground(Color.BLUE);
        jLabelr.setBounds(180, 250, 400, 100);
        container.add(jLabelr);
        JButton button1 = new JButton("浏览所有的通讯信息");
        JButton button2 = new JButton("增加通讯录信息");
        JButton button3 = new JButton("查询相应ID或姓名的通讯录成员");
        JButton button4 = new JButton("删除指定的通讯录成员");
        JButton button5 = new JButton("修改指定的通讯录成员");
        jFrame.update(jFrame.getGraphics());
        button1.setBounds(150, 20, 400, 40);
        button2.setBounds(150, 70, 400, 40);
        button3.setBounds(150, 120, 400, 40);
        button4.setBounds(150, 170, 400, 40);
        button5.setBounds(150, 220, 400, 40);
        //添加按钮
        container.add(jLabelr);
        container.add(button1);
        container.add(button2);
        container.add(button3);
        container.add(button4);
        container.add(button5);
        jFrame.update(jFrame.getGraphics());
        button1.addActionListener(new AbstractAction() {//按钮1 增加学生信息
            @Override
            public void actionPerformed(ActionEvent e) {
                v.selectAll();
            }
        });
        //按钮2
        button2.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                v.add();
            }
        });
        button3.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                v.selectByxx();

            }
        });
        button4.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                v.delete();
            }
        });
        button5.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                v.update();
            }
        });
    }
}
















连接数据库,实现增删改查的操作代码:

package dao.impl;

import dao.PhonerelationshipDao;
import entity.PhonerelationshipEntity;
import utils.MysqlDriverutil;

import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class PhonerelationshipImpl implements PhonerelationshipDao {

    Connection connection;

    {
        try {
            connection = new MysqlDriverutil().getconnection();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

    @Override

    public List<PhonerelationshipEntity> selectAll() {
        String sql = "select * from phonerelationship";
        PreparedStatement std;
        ArrayList<PhonerelationshipEntity> phonerelationshipEntities = new ArrayList<>();
        try {
            std = connection.prepareStatement(sql);
            ResultSet resultSet = std.executeQuery(sql);
            while (resultSet.next()) {
                PhonerelationshipEntity p = new PhonerelationshipEntity();
                p.setId(resultSet.getString("id"));
                p.setName(resultSet.getString("name"));
                p.setPhonenum(resultSet.getString("phonenum"));
                p.setCreattime(resultSet.getDate("createtime"));
                p.setUpdatetime(resultSet.getDate("updatetime"));
                phonerelationshipEntities.add(p);
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return phonerelationshipEntities;
    }

    @Override
    public List<PhonerelationshipEntity> selectByIdorName(String idorname) {
        String sql = "select * from phonerelationship where `id`=" + "'" + idorname + "'" + " or `name` like" + " '%" + idorname + "%'";
        PreparedStatement std;
        ArrayList<PhonerelationshipEntity> phonerelationshipEntities = new ArrayList<>();
        try {
            std = connection.prepareStatement(sql);
            ResultSet resultSet = std.executeQuery(sql);
            while (resultSet.next()) {
                PhonerelationshipEntity p = new PhonerelationshipEntity();
                p.setId(resultSet.getString("id"));
                p.setName(resultSet.getString("name"));
                p.setPhonenum(resultSet.getString("phonenum"));
                p.setCreattime(resultSet.getDate("createtime"));
                p.setUpdatetime(resultSet.getDate("updatetime"));
                phonerelationshipEntities.add(p);
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return phonerelationshipEntities;

    }

    @Override
    public int deleteById(String idorallname) {
        String sql = "delete from phonerelationship where `id`=" + "'" + idorallname + "'" + " or `name`=" + "'" + idorallname + "'";
        PreparedStatement std;
        int i = 0;
        try {
            std = connection.prepareStatement(sql);
            i = std.executeUpdate(sql);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return i;

    }

    @Override
    public int updateById(PhonerelationshipEntity p) {
        PreparedStatement std = null;
        Timestamp timestamp = new Timestamp(new Date().getTime());
        int i = 0;
        String sql = "update phonerelationship set `name`=" + "'" + p.getName() + "'" + ",`phonenum`=" + "'" + p.getPhonenum() + "'" + ",updatetime=" + "'" + timestamp + "'" + " where id=" + "'" + p.getId() + "'";
        try {
            std = connection.prepareStatement(sql);
            i = std.executeUpdate(sql);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return i;
    }

    @Override
    public void add(PhonerelationshipEntity p) {
        PreparedStatement std = null;
        String sql = "insert into phonerelationship (`id`,`name`,`phonenum`,`createtime`,`updatetime`) value (?,?,?,?,?)";
        try {
            std = connection.prepareStatement(sql);
            std.setString(1, p.getId());
            std.setString(2, p.getName());
            std.setString(3, p.getPhonenum());
            std.setString(4, String.valueOf(new Timestamp(new Date().getTime())));
            std.setString(5, String.valueOf(new Timestamp(new Date().getTime())));
            std.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }
}

数据库展示(mysql):

四.实验结果展示

主界面:

 浏览所有的通讯信息:

增加通讯信息:

 

查询界面(这里可以进行的是id或者是姓名的模糊查询) :

 

删除界面: 

 修改界面:

 

 五.总结

本实验实现的是简单的通讯录系统,仅供参考。

实现了以下要求说明的功能: 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.2 系统功能分析 1.2.1 基本功能 支持以下信息的录入: (1)基本信息:姓名、手机号码、电话、电子邮箱、生日、所属组、备注、相片 (2)工作单位:国家、省份、城市、地址、工作单位、所属部门、职位、邮编、电话、传真 (3)网络信息:个人主页、即时通信工具及号码、备用邮箱 (4)家庭资料:国家、省份、城市、地址、邮编、电话 1.2.2 查询功能 (1)默认显示所有条目 (2)模糊查询:可以按姓名、姓名的汉语拼音的声母或全拼查询。支持模糊查询,即输入部分数据后,可以查询出符合条件的全部条目。如:输入“张”,列出所有名字中有“张”的条目;输入“xl”,列出声母为该2个字母的所有条目。 (写该实验报告时,暂未实现按手机号码、电话号码查询。) (3)指定分组后,列出某分组的所有条目。查询结果如果有多个条目,应按照姓名排序,并使用姓或姓的第一个汉语拼音的字母分类。 1.2.3 删除和修改功能 (1)选中单个联系人后,可以修改其内容,可以删除该联系人 (2)选中一个分组后,可以删除该分组,同时删除分组下的全部联系人 (3)支持情况账户下的所有联系人数据 1.2.4 导入和导出 支持将账户下的所有文本文档联系人数据导出为CSV格式文件,支持将CSV文件导入到账户,并能够与主流手机或其他通讯录软件交换数据。 1.2.5 通讯录的显示 显示查询结果,可以置一个条目可以显示或不显示哪些内容。 1.2.6 通讯录数据的录入 对于新建联系人,保存时如果有同名或同电话号码时,给出提示。 1.2.7 联系人星标 支持一键收藏联系人,联系人加星标后更加方便于用户查找与管理。 【系统计文档】、【系统需求分析文档】、【系统实验报告】、【答辩展示PPT】另见我的资源……
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

jakeonil

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

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

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

打赏作者

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

抵扣说明:

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

余额充值