基于CS模式的通讯录课程设计

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本设计是基于C/S模式的通讯录,主要运用了MVC三层架构、Swing技术、JDBC技术以及数据库的创建和使用。主要实现了使用手机号与密码的登录功能,以及对联系人的增删改查。


一、可视化界面的实现

通讯录中可视化界面都是使用java中的swing实现的,但由于编写界面过于繁琐,推荐使用WindowBuilder插件直接进行可视化操作。点击按钮事件可以通过监听方法获取所需数据,以及实现不同页面(JFrame)之间的跳转。具体使用本文章不做具体介绍。
效果如下:
在这里插入图片描述在这里插入图片描述

二、项目引入

1.引入依赖

打开项目之后需对相关的jar包进行引入,此设计中使用了druid.jar、mysql-connector-java.jar、commons-beanutils.jar、commons-logging.jar,具体需要使用jar包版本根据自身所安装的数据库决定。下方提供的jar包版本不适用数据库8以上,若报错可前往mvnrepository官网进行高版本jar包下载。

2.配置文件

properties配置文件需要根据数据库所占用的端口号进行更改使用。

三、程序实现

通过view层创建service层对象,调用service层来对请求进一步处理,最后调用Dao层对数据库进行操作。
上代码:
JDBC工具类

package utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class DBUtils {
    private static DataSource ds = null;
    static {
        InputStream resourceAsStream = DBUtils.class.getClassLoader().getResourceAsStream("java-mysql.properties");
        Properties properties=new Properties();
        try {
            properties.load(resourceAsStream);
            ds = DruidDataSourceFactory.createDataSource(properties);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }
    public static void close(Connection conn, Statement stmt){
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    public static void close(Connection conn, PreparedStatement pstmt, ResultSet res){
        close(conn,pstmt);
        if (res != null) {
            try {
                res.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

BaseDao类
将数据库中的数据转换为到java对象中(源码有多余测试方法,可以参考以下代码)

package BaseDao.BaseDaoImpl;

import utils.DBUtils;
import org.apache.commons.beanutils.BeanUtils;

import demoMain.User;

import java.lang.reflect.InvocationTargetException;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class BaseDao {
	public int update(String sql,Object[] params){
		//连接对象
        Connection conn = null;
        //数据库操作对象
        PreparedStatement pstmt=null;
        int b=0;
        {
            try {
                conn = DBUtils.getConnection();
                pstmt = conn.prepareStatement(sql);
                for (int i = 0; i < params.length ; i++) {
                    pstmt.setObject(i+1,params[i]);
                }
                b = pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                DBUtils.close(conn,pstmt);
            }
        }
        return b;
    }
    public <T>List<T> select(String sql, Object[] params, Class T) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet res = null;
        T t=null;
        List list=new ArrayList();
        try {
            conn = DBUtils.getConnection();
            pstmt = conn.prepareStatement(sql);
            if (params!=null){
                for (int i = 0; i < params.length; i++) {
                    pstmt.setObject(i + 1, params[i]);
                }
            }
            res = pstmt.executeQuery();
            ResultSetMetaData metaData = res.getMetaData();
            while (res.next()) {
                t= (T) T.newInstance();
                int columnCount = metaData.getColumnCount();
                for (int i = 0; i < columnCount; i++) {
                    String columnName = metaData.getColumnName(i + 1);
                    String columnLabel = metaData.getColumnLabel(i + 1);
                    Object object = res.getObject(columnName);
                    BeanUtils.copyProperty(t,columnLabel,object);
                }
                list.add(t);

            }

        } catch (SQLException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } finally {
            DBUtils.close(conn, pstmt, res);
        }
        return list;
    }
}

Dao层的实现类:

package BaseDao.BaseDaoImpl;

import demoMain.Linkman;
import demoMain.User;

import java.sql.ResultSet;
import java.util.List;

import BaseDao.Dao;

public class BaseDaoImpl extends BaseDao implements Dao {
    @Override
    public boolean selectUser(User user) {
        String sql="select * from user where userPhone=? and password=?";
        Object[] params={user.getUserPhone(),user.getPassword()};
        List<Object> list = super.select(sql, params, User.class);
        return list==null?false:true;
    }

	@Override
	public boolean addUser(User user) {
		// TODO Auto-generated method stub
		String sql="insert into user values (?,?,?)";
		Object[] params={user.getUserName(),user.getUserPhone(),user.getPassword()};
		return super.update(sql, params)==0?false:true;
	}

	@Override
	public boolean addLinkman( Linkman linkman) {
		// TODO Auto-generated method stub
		String sql="insert into linkman values (null,?,?,?,?,?,?,?)";
		Object[] params={linkman.getLkmKey(),linkman.getLkmName(),linkman.getLkmMobile(),linkman.getLkmEmail(),linkman.getLkmGroup(),linkman.getLkmAddr(),linkman.getLkmRemark()};
		return super.update(sql, params)==0?false:true;
	}

	@Override
	public Linkman selectLinkman(Linkman linkman) {
		// TODO Auto-generated method stub
		String sql="select * from linkman where lkmMobile=? and lkmKey=?";
		Object[] params={linkman.getLkmMobile(),linkman.getLkmKey()};
		List list=super.select(sql, params, Linkman.class);
		return  list.size()==0?null:(Linkman)list.get(0);
	}

	@Override
	public List<Linkman> listLinkmans(String userPhone) {
		// TODO Auto-generated method stub
		String sql="select * from linkman where lkmKey=?";
		Object[] params={userPhone};
		return super.select(sql, params, Linkman.class);
	}

	@Override
	public List<Linkman> obscureListByName(String lkmName, String userPhone) {
		// TODO Auto-generated method stub
		String name="%"+lkmName+"%";
		String sql="select * from linkman where lkmKey=? and lkmName like ?";
		Object[] params={userPhone,name};
		return super.select(sql, params, Linkman.class);
	}

	@Override
	public List<Linkman> obscureListBymob(String lkmName, String userPhone) {
		// TODO Auto-generated method stub
		String name="%"+lkmName+"%";
		String sql="select * from linkman where lkmKey=? and lkmMobile like ?";
		Object[] params={userPhone,name};
		return super.select(sql, params, Linkman.class);
	}

	@Override
	public boolean updateLinkman(Linkman linkman) {
		// TODO Auto-generated method stub
		String sql="update linkman set  lkmName=?,lkmMobile=?, lkmEmail=?,lkmAddr=?,lkmGroup=?, lkmRemark=? where lkmId=?;";
		Object[] params={linkman.getLkmName(),linkman.getLkmMobile(),linkman.getLkmEmail(),linkman.getLkmAddr(),linkman.getLkmGroup(),linkman.getLkmRemark(),linkman.getLkmId()};
		return super.update(sql, params)==0?false:true;
	}

	@Override
	public boolean deleteLinkman(Linkman linkman) {
		// TODO Auto-generated method stub
		String sql="delete from linkman where lkmId=?";
		Object[] params={linkman.getLkmId()};
		return super.update(sql, params)==0?false:true;
	}

}

Service层的实现类:

package Service.ServiceImpl;

import demoMain.Linkman;
import demoMain.User;

import java.sql.ResultSet;
import java.util.List;

import BaseDao.Dao;
import BaseDao.BaseDaoImpl.BaseDaoImpl;
import Service.Service;

public class ServiceImpl implements Service {
    static Dao baseDao=new BaseDaoImpl();
    static User user=null;
    @Override
    public boolean selectUser(User user) {
        return baseDao.selectUser(user);
    }
	@Override
	public boolean addUser(User user) {
		// TODO Auto-generated method stub
		return baseDao.addUser(user);
	}
	@Override
	public void baocun(User user) {
		// TODO Auto-generated method stub
		this.user=user;
	}
	@Override
	public boolean addLinkman(Linkman linkman) {
		// TODO Auto-generated method stub
		//查询该手机号是否已存在
		linkman.setLkmKey(user.getUserPhone());
		if(baseDao.selectLinkman(linkman)==null){
			return baseDao.addLinkman(linkman);
		}else{
			return false;
		}
		
	}
	@Override
	public List listLinkmans(Linkman linkman) {
		// TODO Auto-generated method stub
		if(linkman.getLkmName()==null||"".equals(linkman.getLkmName())){
			return baseDao.listLinkmans(user.getUserPhone());
		}else{
			boolean b=true;
			char[] chars=linkman.getLkmName().toCharArray();
			for(int i=0;i<chars.length;i++){
				if(chars[i]>='0'&&chars[i]<='9'){
					b=false;
					break;
				}
			}
			if(b){
				return baseDao.obscureListByName(linkman.getLkmName(),user.getUserPhone());
			}else{
				return baseDao.obscureListBymob(linkman.getLkmName(),user.getUserPhone());
			}
		}
	}
	
	@Override
	public boolean updateLinkman(Linkman linkman) {
		// TODO Auto-generated method stub
		return baseDao.updateLinkman(linkman);
	}
	@Override
	public boolean deleteLinkman(Linkman linkman) {
		// TODO Auto-generated method stub
		return baseDao.deleteLinkman(linkman);
	}
	
}

四、源码下载

链接:https://pan.baidu.com/s/1IdnwROiPDHzlo-tmy8gc-Q
提取码:k1ex

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值