欄目介紹
本欄目專為入門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的服務層代碼
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
發布評論請先 登錄
相關推薦
熱點推薦
SCVMM 2008 R2管理控制臺介紹
Server 2003虛擬機,并克隆l 創建硬件配置文件l 創建來賓操作系統配置文件一、SCVMM 2008 R2管理控制臺介紹微軟所提供的System Center 套件真正的實現
發表于 10-24 16:55
蘋果手機咋備份通訊錄,如何導出手機通訊錄聯系人?
掃描結束后,進入到下個界面,這個界面是數據項恢復的主界面,在這里我們可以對通訊錄,備忘錄,短信等其他數據項進行恢復。
發表于 07-23 22:13
?2464次閱讀
通訊錄管理系統
計算機網絡的飛速發展,人們的生活擺脫了傳統式的記事本、電話簿,越來越多的靠計算機來幫助人們記住這些事情。這就需要有一個可供人們快速查詢的通訊錄管理系統,用戶可以方便的通過自己安裝的通訊錄
發表于 03-19 14:42
?43次下載
通訊錄管理系統源碼,C語言鏈表實現
如果有熟悉的小伙伴看到我,就知道又可以來學習源碼項目了!沒錯,咱們今天要分享的同樣也是經典管理系統項目之一:通訊錄管理系統!我們一起來看看吧
控制臺窗口主機是什么
控制臺窗口主機(conhost),通常指的是在Windows操作系統中用于承載和控制控制臺窗口(即命令行界面或CMD窗口)的進程。以下是對控制臺
基于控制臺的通訊錄管理系統功能介紹
評論