基于控制台的通讯录管理系统功能介绍

栏目介绍本栏目专为入门java学习者设计的一些简单的入门项目
功能介绍本项目为简单的基于控制台的通讯录管理系统,所需要的环境仅仅为jdk以及mysql(版本不限)!只有一个简单的eclipse软件以及我们的mysql可视化工具(视频使用navicat)
本项目数据库表有二个,本项目是之前的单表项目的升级版本
本项目使用mvc设计模式,使用面向对象的开发思想
本项目使用最基础的jdbc的方式链接的数据库
本项目主要实现的功能有:
注册登录系统运行成功后的欢迎及菜单页面按照登录人添加联系人功能按照登录人进行联系人查询功能(分名称和手机号查询)按照登录人显示联系人列表按照登录人根据编号删除指定编号的联系人按照登录人修改指定编号的联系人退出登录业务点处理:
当前登录人操作只能操作自己的数据,用户登录成功后,显示的列表只能显示自己录入的数据!
注册:用户表按照的是用户名作为唯一标识,也就是不能注册重复的用户名
新增:对于不同用户来说通讯录的no是可以重复的,但是对于同一个用户来说录入的通讯通好友的编号no是不允许重复的
修改:用户修改也是通过编号以及自己的登录状态来修改自己的数据
删除:用户删除输入的编号也是只针对自己的数据
项目实现截图项目结构:
数据表结构1.登录用户表
2.用户的通讯录数据表
页面截图
项目功能及代码1.jdbc数据库连接工具类:
package com.maker.address.util;import java.sql.connection;import java.sql.drivermanager;import java.sql.resultset;import java.sql.sqlexception;import java.sql.statement;/** * 数据库连接工具类 * @author administrator * */public class dbutil { public static string db_url = jdbc:mysql://localhost:3306/addressbook?servertimezone=asia/shanghai&usessl=false&useunicode=true&characterencoding=utf-8; public static string db_user = root; public static string db_pass = 123456; public static connection getconn () { connection conn = null; try { class.forname(com.mysql.cj.jdbc.driver); conn = drivermanager.getconnection(db_url, db_user, db_pass); } catch (exception e) { e.printstacktrace(); } return conn; } /** * 关闭链接 * @param state * @param conn */ public static void close (statement state, connection conn) { if (state != null) { try { state.close(); } catch (sqlexception e) { e.printstacktrace(); } } if (conn != null) { try { conn.close(); } catch (sqlexception e) { e.printstacktrace(); } } } /** * 关闭链接 * @param state * @param conn */ public static void close (resultset rs, statement state, connection conn) { if (rs != null) { try { rs.close(); } catch (sqlexception e) { e.printstacktrace(); } } if (state != null) { try { state.close(); } catch (sqlexception e) { e.printstacktrace(); } } if (conn != null) { try { conn.close(); } catch (sqlexception e) { e.printstacktrace(); } } }}2.运行程序的主类:usermain
主类中包含各种页面显示以及主方法入口
package com.maker.address.web;import java.util.arraylist;import java.util.scanner;import com.maker.address.entity.login;import com.maker.address.entity.user;import com.maker.address.service.loginservice;import com.maker.address.service.userservice;//主类 程序从这里的main方法开始public class usermain { //静态的user服务层对象 static userservice user = new userservice(); //静态的用户登录服务层对象 static loginservice loginservice = new loginservice(); //静态的全局的用户输入对象 static scanner sc = new scanner(system.in); //登录对象保存 static login login = null; /** * main方法执行后先执行start方法 * 这里就是对登录注册的页面显示的操作 */ public static void start(){ system.out.println(=======请选择=====); system.out.println(【1】注册); system.out.println(【2】登录); int index = sc.nextint(); //根据用户输入的操作来进行下一步的指令 //每一个指令之后都是重新进行start方法,只有在登录成功的时候,登录方法内部进入了into这个方法,就是进入系统中了 switch(index){ case 1: //注册 toregist(); start(); break; case 2: //登录 login(); start(); break; default: system.out.println(请输入正确的指令!); start(); break; } } //登录方法 private static void login() { // todo auto-generated method stub system.out.println(请输入用户名:); string username = sc.next(); system.out.println(请输入密码:); string password = sc.next(); //根据输入的用户名密码来调用服务层接口 login = loginservice.tologin(username, password); if(login!=null){ //登录成功的时候会返回数据库中的登录对象,然后将对象赋值给全局的登录对象,这样在做其他操作的时候直接使用就行 //登录成功后进入系统中 into(); } } //注册的方法 private static void toregist() { // todo auto-generated method stub system.out.println(请输入用户名:); string username = sc.next(); system.out.println(请输入密码:); string password = sc.next(); system.out.println(请确认密码:); string repassword = sc.next(); //根据用户输入的用户名密码来进行校验 if(password.equals(repassword)){ //注册成功不做其他操作,在start方法中会重新执行start loginservice.toregist(username, repassword); }else{ system.out.println(二次密码输入不一致!); } } /** * 这里就是用户登录成功后进入系统的页面显示方法 */ public static void into() { system.out.println(=======通讯录管理系统=====); system.out.println(【1】添加联系人); system.out.println(【2】联系人查询); system.out.println(【3】显示联系人列表); system.out.println(【4】根据编号删除指定编号的联系人); system.out.println(【5】修改指定编号的联系人); system.out.println(【0】退出); system.out.println(=============================); int i = sc.nextint(); //接收用户输入的指令来进行不同的操作 switch (i) { case 1: //添加联系人 add(); into(); break; case 2: //联系人查询 system.out.println(【1】通过联系人姓名查询/【2】通过联系人电话查询); int a = sc.nextint(); findbyname(a); into(); break; case 3: //显示联系人列表 show(); into(); break; case 4: //根据编号删除指定编号的联系人 del(); into(); break; case 5: //修改指定编号的联系人 update(); into(); break; case 0: //退出 system.out.println(谢谢使用,再见!); system.exit(0); break; default: //不存在的指令 system.out.println(请输入正确的指令!); into(); break; } } /** * 修改用户的方法 * 1.接收用户输入的联系人编号以及修改的数据 * 2.然后中间进行手机号验证以及邮箱验证 * 3.最后调用服务层updateuser方法去执行修改操作 */ private static void update() { // todo auto-generated method stub system.out.println(请输入要修改的联系人编号:); int a = sc.nextint(); system.out.println(请输入姓名:); string b = sc.next(); system.out.println(请输入手机号:); string c = sc.next(); judgephone(c); system.out.println(请输入qq:); string d = sc.next(); system.out.println(请输入邮箱地址:); string e = sc.next(); judgeemail(e); user x = new user(a, b, c, d, e,login.getid()); if (user.updateuser(x)) { system.out.println(修改成功!); } } /** * 新增方法 * 1.接收用户输入的相关信息 * 2.中间进行手机号验证以及邮箱验证 * 3.调用服务器adduser新增接口 */ public static void add() { system.out.println(请输入联系人编号:); int a = sc.nextint(); system.out.println(请输入联系人姓名:); string b = sc.next(); system.out.println(请输入联系人手机号:); string c = sc.next(); judgephone(c); system.out.println(请输入联系人qq:); string d = sc.next(); system.out.println(请输入联系人邮箱地址:); string e = sc.next(); judgeemail(e); user x = new user(a, b, c, d, e,login.getid()); if (user.adduser(x)) { system.out.println(添加成功!); } } /** * 校验手机号 * 规则:11位 数字1开头 第二位为34589 后面9位1-9任意 * * 校验不通过后可以重新输入 * @param phone 手机号 */ public static void judgephone(string phone) { if (phone.matches(1[34589][0-9]{9})) { } else { system.out.println(手机号输入有误,请重新输入); string v = sc.next(); judgephone(v); } } /** * 校验邮箱 * 规则:不包括特殊字符 中间有@ * * 校验不通过后可以重新输入 * @param email 邮箱 */ public static void judgeemail(string email) { if (email.matches([a-za-z0-9]+@[a-za-z0-9_-]+(.[a-za-z0-9_-]+))) { } else { system.out.println(邮箱格式输入有误,请重新输入); string v = sc.next(); judgeemail(v); } } /** * 查询联系人方法 * * 查询方法调用user服务层接口然后参数加上当前登录人的id * * @param a 输入的指令 1按照姓名 2按照电话 */ public static void findbyname(int a) { if (a == 1) { system.out.println(请输入联系人姓名); } else { system.out.println(请输入联系人电话); } string name = sc.next(); user user = usermain.user.searchbyname(name,login.getid()); system.out.println(user); } /** * 显示所有联系人的方法 * 调用user服务层接口根据当前登录人的id查询 */ public static void show() { arraylist list = user.showinfo(login.getid()); for (object o : list) { system.out.println(o); } } /** * 删除方法 * 1.根据用户输入的要删除的联系人编号 * 2.调用user服务器接口根据当前登录人id以及要删除的联系人编号进行删除 */ public static void del() { system.out.println(请输入编号); int no = sc.nextint(); if (user.deluser(no,login.getid())) { system.out.println(删除成功); } } //运行程序的主方法,右键运行后会执行start方法 public static void main(string[] args) { start(); }}user的服务层代码 userservicepackage com.maker.address.service;import java.util.arraylist;import java.util.objects;import com.maker.address.dao.userdao;import com.maker.address.entity.user;/** * 用户服务层 * @author administrator * */public class userservice { userdao ud = new userdao(); //新增用户 public boolean adduser(user user){ //判断编号是否存在,存在的话将不允许新增 user record = ud.querybyno(user.getno(),user.getuserid()); if(record!=null){ system.out.println(编号已存在!); return false; } return ud.add(user); } /** * 公共的查询所有数据的方法 * 查询出当前登录人的所有的联系人 * @param userid 当前登录人id * @return */ public arraylist showinfo(integer userid){ return ud.getall(userid); } /** * 通过名称或者电话查询联系人 * 1.通过showinfo查询当前登录人的所有联系人 * 2.通过字段进行过滤查询出符合的联系人 * * @param name 用户输入的 * @param userid 当前登录人的id * @return */ public user searchbyname(string name,integer userid){ arraylist s = showinfo(userid); for (user user : s) { if (objects.equals(name,user.getname()) ||objects.equals(name,user.getphone())){ return user; } } return null; } /** * 修改方法 * @param user 要修改的实体 * @return */ public boolean updateuser(user user){ boolean num = ud.updateuser(user); if(!num) { system.out.println(该用户不存在); return false; } return true; } /** * 删除联系人的方法 * 1.通过showinfo查询当前登录人的所有联系人 * 2.过滤查询要删除的联系人的编号 * 3.执行删除 * @param no 要删除人的编号 * @param userid 当前登录人id * @return */ public boolean deluser(int no,integer userid){ arraylist s = showinfo(userid); user user = null; for(user u:s) { if(no == u.getno()) { user = u; break; } } if(user == null) { system.out.println(该用户不存在); return false; } return ud.remove(user); }}4.user的dao层代码 userdao
package com.maker.address.dao;import java.sql.connection;import java.sql.resultset;import java.sql.sqlexception;import java.sql.statement;import java.util.arraylist;import com.maker.address.entity.user;import com.maker.address.util.dbutil;/** * dao层处理对数据库的操作 * @author administrator * */public class userdao { //新增用户 public boolean add(user user) { // todo auto-generated method stub string sql = insert into user(no,name,phone,qq,email,userid) values (+user.getno()+,'+user.getname()+','+user.getphone()+','+user.getqq()+','+user.getemail()+',+user.getuserid()+); connection conn = dbutil.getconn(); statement state = null; int num = 0; system.out.println(sql); try { state = conn.createstatement(); num = state.executeupdate(sql); } catch (sqlexception e) { // todo auto-generated catch block e.printstacktrace(); } finally { dbutil.close(state, conn); } return num > 0; } //查询所有用户 public arraylist getall(integer userid) { // todo auto-generated method stub string sql = select * from user where userid = + userid; connection conn = dbutil.getconn(); statement state = null; arraylist list = new arraylist(); resultset rs = null; try { state = conn.createstatement(); rs = state.executequery(sql); while(rs.next()){ //结果集中有数据 代表查询出来有数据 //创建user对象,将数据存入到对象集合中 user user = new user(); user.setno(rs.getint(no)); user.setname(rs.getstring(name)); user.setphone(rs.getstring(phone)); user.setqq(rs.getstring(qq)); user.setemail(rs.getstring(email)); user.setuserid(rs.getint(userid)); list.add(user); } } catch (sqlexception e) { // todo auto-generated catch block e.printstacktrace(); } finally { dbutil.close(rs,state, conn); } return list; } //按照编号查询用户 public user querybyno(int no,integer userid) { // todo auto-generated method stub string sql = select * from user where no=+no + and userid=+userid; connection conn = dbutil.getconn(); statement state = null; user user = null; resultset rs = null; try { state = conn.createstatement(); rs = state.executequery(sql); while(rs.next()){ user = new user(); //结果集中有数据 代表查询出来有数据 //创建user对象,将数据存入到对象集合中 user.setno(rs.getint(no)); user.setname(rs.getstring(name)); user.setphone(rs.getstring(phone)); user.setqq(rs.getstring(qq)); user.setemail(rs.getstring(email)); } } catch (sqlexception e) { // todo auto-generated catch block e.printstacktrace(); } finally { dbutil.close(rs,state, conn); } return user; } //删除用户按照编号 public boolean remove(user user) { // todo auto-generated method stub string sql = delete from user where no = '+user.getno()+' and userid=+user.getuserid(); connection conn = dbutil.getconn(); statement state = null; int num = 0; try { state = conn.createstatement(); num = state.executeupdate(sql); } catch (sqlexception e) { // todo auto-generated catch block e.printstacktrace(); } finally { dbutil.close(state, conn); } return num > 0; } //修改用户按照编号修改 public boolean updateuser(user user) { // todo auto-generated method stub string sql = update user set name='+user.getname()+',phone='+user.getphone()+',qq='+user.getqq()+',email='+user.getemail()+' where no = +user.getno(); connection conn = dbutil.getconn(); statement state = null; int num = 0; try { state = conn.createstatement(); num = state.executeupdate(sql); } catch (sqlexception e) { // todo auto-generated catch block e.printstacktrace(); } finally { dbutil.close(state, conn); } return num > 0; }}

智能门锁中触摸设计注意事项
鸿蒙如何升级 华为鸿蒙系统升级汇总
普通光耦和高速光耦区别
iphone8什么时候上市?iphone8最新消息:iphone8四大看点,苹果十周年纪念版,我所知道的逆天功能
线上教育带领了哪一些领域的发展
基于控制台的通讯录管理系统功能介绍
水文监测设备的应用领域及其特点说明
电位计是什么?都有哪些用途
4G手机芯片 掀起各电子厂商车轮战
一个由Arduino驱动的数字时钟详解
数字集群对讲机介绍及PDT标准简介
50亿锂电池材料项目公布!
怎样自制二分频分频器 制作二分频器需要什么元器件?
硅基氮化镓技术原理 硅基氮化镓的优缺点
CH341与USB接口的基本连接
贸泽电子参加第四届深圳国际嵌入式系统展
掌握开关稳压器的5大基本知识(下)
AI+教育大势所趋,人工智能怎么培养人才?
成型机料位测量常见问题及应对办法
总投资20亿元,泽石固态硬盘模组及芯片封测生产基地签约落户