国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于控制臺的通訊錄管理系統功能介紹

對面小姐姐 ? 來源:猿小馬 ? 作者:猿小馬 ? 2023-10-16 10:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

欄目介紹

本欄目專為入門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();
	}
}
  1. user的服務層代碼 UserService
package 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< User > 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< User > 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< User > 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;
	}
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    20

    文章

    3001

    瀏覽量

    116419
  • 軟件
    +關注

    關注

    69

    文章

    5332

    瀏覽量

    91575
  • 管理系統
    +關注

    關注

    1

    文章

    2921

    瀏覽量

    38568
  • MySQL
    +關注

    關注

    1

    文章

    905

    瀏覽量

    29517
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    設計手機通訊錄

    求大神請教,如何設計手機上的通訊錄,要求是什么?
    發表于 11-15 00:18

    如何去掉通訊錄的APK?

    如何去掉通訊錄的APK?
    發表于 03-03 07:02

    SCVMM 2008 R2管理控制臺介紹

    Server 2003虛擬機,并克隆l 創建硬件配置文件l 創建來賓操作系統配置文件一、SCVMM 2008 R2管理控制臺介紹微軟所提供的System Center 套件真正的實現
    發表于 10-24 16:55

    企業通訊錄app源碼

    企業通訊錄app源碼這是android 上的源碼。
    發表于 03-28 10:02 ?23次下載

    蘋果手機咋備份通訊錄,如何導出手機通訊錄聯系人?

    掃描結束后,進入到下個界面,這個界面是數據項恢復的主界面,在這里我們可以對通訊錄,備忘,短信等其他數據項進行恢復。
    發表于 07-23 22:13 ?2464次閱讀
    蘋果手機咋備份<b class='flag-5'>通訊錄</b>,如何導出手機<b class='flag-5'>通訊錄</b>聯系人?

    通訊錄管理系統

    計算機網絡的飛速發展,人們的生活擺脫了傳統式的記事本、電話簿,越來越多的靠計算機來幫助人們記住這些事情。這就需要有一個可供人們快速查詢的通訊錄管理系統,用戶可以方便的通過自己安裝的通訊錄
    發表于 03-19 14:42 ?43次下載

    Wind River Helix設備云中管理控制臺介紹

    本視頻介紹了Wind River Helix * Device Cloud中的管理控制臺
    的頭像 發表于 11-01 06:20 ?3349次閱讀

    如何恢復蘋果通訊錄

    蘋果通訊錄恢復方法
    的頭像 發表于 08-26 16:38 ?4460次閱讀

    通訊錄管理系統源碼,C語言鏈表實現

    如果有熟悉的小伙伴看到我,就知道又可以來學習源碼項目了!沒錯,咱們今天要分享的同樣也是經典管理系統項目之一:通訊錄管理系統!我們一起來看看吧
    的頭像 發表于 10-28 16:07 ?2208次閱讀

    C語言程序設計--通訊錄系統

    更深刻的了解,掌握利用數組存儲結構實現對聯系人管理的原理,為進一步開發出高質量的通訊錄系統打下堅實的基礎。
    發表于 04-10 09:17 ?8次下載

    基于JAVA+SQL電子通訊錄系統托盤(源代碼及配置文檔)

    基于JAVA+SQL電子通訊錄系統托盤(源代碼及配置文檔)
    發表于 06-09 16:07 ?0次下載

    基于Android系統手機通訊錄管理軟件的設計與開發

    電子發燒友網站提供《基于Android系統手機通訊錄管理軟件的設計與開發.doc》資料免費下載
    發表于 10-30 10:09 ?0次下載
    基于Android<b class='flag-5'>系統</b>手機<b class='flag-5'>通訊錄</b><b class='flag-5'>管理</b>軟件的設計與開發

    基于Android平臺的手機通訊錄管理系統

    電子發燒友網站提供《基于Android平臺的手機通訊錄管理系統.doc》資料免費下載
    發表于 10-30 10:13 ?0次下載
    基于Android平臺的手機<b class='flag-5'>通訊錄</b><b class='flag-5'>管理</b><b class='flag-5'>系統</b>

    基于Android平臺的個性通訊錄

    電子發燒友網站提供《基于Android平臺的個性通訊錄.doc》資料免費下載
    發表于 10-30 11:32 ?0次下載
    基于Android平臺的個性<b class='flag-5'>通訊錄</b>

    控制臺窗口主機是什么

    控制臺窗口主機(conhost),通常指的是在Windows操作系統中用于承載和控制控制臺窗口(即命令行界面或CMD窗口)的進程。以下是對控制臺
    的頭像 發表于 10-08 18:12 ?1w次閱讀