It Study/프로그래밍 공부
팀프로젝트 연습 코드(주소록)
prlkt5200
2024. 10. 1. 17:31
반응형
데이터베이스 테이블이나, db연동에서 차이가 있으니 간단하게 무엇이 있다라고만 확인해주시면 좋을듯 합니다.
package phone_app;
import java.util.Scanner;
public class Total_Lobby {
public static Phone_Manager manager = new Phone_Manager();
public Total_Lobby() {
}
public static void main(String[] args) {
manager.Main_Menu_Open();
}
}
package phone_app;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.time.LocalDateTime;
import java.util.Scanner;
import book_app.Book_List;
public class Phone_Manager {
public String driver = "com.mysql.cj.jdbc.Driver";
public String url = "jdbc:mysql://:3306/phoneDB?severTimeZone=UTC";
public String id = "root";
public String pw = "1234";
public static String p_phone_number;
public String user_id;
public String user_name;
public String phone_number;
public String block_yn = "n";
public Connection conn = null;
public Statement stmt = null;
public Phone_DBManager[] blockedList = null;
private int history_no;
// private int user_id;
// private String phone_number;
private LocalDateTime call_date;
public String getUser_id() {
return user_id;
}
public void setUser_id(String user_id) {
this.user_id = user_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public String getBlock_yn() {
return block_yn;
}
public void setBlock_yn(String block_yn) {
this.block_yn = block_yn;
}
// public Phone_Call_History(String phone_number, LocalDateTime call_date) {
// this.phone_number=phone_number;
// this.call_date=call_date;
// }
// public Phone_Call_History(String number) {
// this.phone_number=number;
// }
public int getHistory_no() {
return history_no;
}
public void setHistory_no(int history_no) {
this.history_no = history_no;
}
public String getPhone_number() {
return phone_number;
}
public void setPhone_number(String phone_number) {
this.phone_number = phone_number;
}
public LocalDateTime getCall_date() {
return call_date;
}
public void setCall_date(LocalDateTime call_date) {
this.call_date = call_date;
}
public Phone_Manager() {
// TODO Auto-generated constructor stub
}
public void Main_Menu_Open() {
while(true) {
System.out.println("=======================");
System.out.println(" 프로젝트 메인화면");
System.out.println("=======================");
System.out.println("1. 전화, 2. 도서, 3. 종료" );
System.out.println("★ 메뉴 번호를 선택해 주세요");
Scanner in = new Scanner(System.in);
int number = in.nextInt();
if(number < 1 || number >= 4) {
System.out.println("메뉴번호가 틀렸습니다.");
continue;
} else {
switch(number) {
case 1:
System.out.println("전화");
Phone_Menu_Open();
break;
case 2:
System.out.println("도서");
Book_List blist = new Book_List();
blist.bookMenu();
break;
case 3:
System.out.println("종료합니다.");
return;
}
}
}
}
public void Phone_Menu() {
System.out.println("======================================");
System.out.println();
System.out.println("전화");
System.out.println();
System.out.println("======================================");
System.out.println("1.전화걸기");
System.out.println("2.연락처");
System.out.println("3.통화기록");
System.out.println("4.차단목록");
System.out.println("5.전화 앱 종료");
}
public void Phone_Menu_Open() {
Scanner input = new Scanner(System.in);
boolean end_flag = false;
while (true) {
Phone_Menu();
System.out.print("메뉴번호를 선택해 주세요 : ");
int number = input.nextInt();
if (number < 1 || number > 5) {
System.out.println("메뉴번호가 틀렸습니다.다시 선택해 주세요.");
continue;
}
switch (number) {
case 1:
call();
break;
case 2:
contacts();
break;
case 3:
callList();
break;
case 4:
blockList();
case 5:
end_flag = true;
break; // 전화 앱 종료
default:
}
if (end_flag) {
break;
}
}
}
public void call() {
Phone_DBManager manager = new Phone_DBManager();
Phone_Call phone_call= new Phone_Call();
manager.initDBConnect();
Scanner input=new Scanner(System.in);
System.out.println("1\t2\t3");
System.out.println();
System.out.println("4\t5\t6");
System.out.println();
System.out.println("7\t8\t9");
System.out.println();
System.out.println("*\t0\t#");
System.out.print("번호: ");
String number=input.nextLine();
manager.call(number);
// manager.showCallHistory();
// Phone_DBManager manager = new Phone_DBManager();
// Phone_Call phone_call= new Phone_Call();
// manager.initDBConnect();
//
// Scanner input=new Scanner(System.in);
//
// System.out.println("1\t2\t3");
// System.out.println();
// System.out.println("4\t5\t6");
// System.out.println();
// System.out.println("7\t8\t9");
// System.out.println();
// System.out.println("*\t0\t#");
//
// System.out.print("번호: ");
// String number=input.nextLine();
//
// phone_call.Phone_call(number);
//
// //showCallHistory();
}
public void contacts() {
System.out.println("주소록");
Phone_DBManager manager = new Phone_DBManager();
manager.getAllUser();
System.out.println("어떤 작업을 선택하시겠습니까?");
System.out.println("1.연락처 추가 2.연락처 삭제 3.뒤로 가기");
Scanner input = new Scanner(System.in);
int select_no = input.nextInt();
switch(select_no) {
case 1:
manager.insert_user_list();
break;
case 2:
manager.delete_user_list();
break;
default :
break;
}
}
public void callList() {
Phone_DBManager manager = new Phone_DBManager();
manager.initDBConnect();
manager.showCallHistory();
}
public void blockList() {
Scanner input = new Scanner(System.in);
System.out.println("############################");
System.out.println("차단목록리스트");
System.out.println();
Phone_DBManager manager = new Phone_DBManager();
manager.initDBConnect();
//allFetch 메소드에서 차단한 레코드를 blockedlist 변수와 이어준다.
manager.allFetch();
// get으로 레코드 정보를 담은 테이블 객체를 가져와서 새로운 변수와 이어준다.
Phone_DBManager[] blockedList = manager.getBlockedList();
for (int i = 0; i < blockedList.length; i++) {
System.out.println(blockedList[i].getPhone_number());
} // 차단리스트 불러오기
System.out.println();
System.out.println("############################");
System.out.println();
System.out.println("1.추가하기");
System.out.println("2.해제하기");
System.out.println("3.뒤로가기");
boolean end_flag = false;
while (true) {
System.out.print("메뉴번호를 선택해 주세요 : ");
int number = input.nextInt();
if (number < 1 || number > 3) {
System.out.println("메뉴번호가 틀렸습니다.다시 선택해 주세요.");
continue;
}
switch (number) {
case 1:
addBlock();
break;
case 2:
unblock(blockedList);
break;
case 3:
end_flag = true;
break;
}
if (end_flag) {
break;
}
}
}
public static void addBlock() {
Phone_DBManager manager = new Phone_DBManager();
System.out.println("차단하실 전화번호를 입력해주세요.");
Scanner input = new Scanner(System.in);
String phnumber = input.nextLine();
if (manager.selectNumber(phnumber)) {
System.out.println("이미 차단된 전화번호입니다.");
} else {
manager.inputNumber(phnumber);
System.out.println("해당 번호가 차단되었습니다.");
}
}
public static void unblock(Phone_DBManager[] blockedList) {
Phone_DBManager manager = new Phone_DBManager();
//Phone_DBManager[] blockedList = manager.getBlockedList();
System.out.println("어느 번호를 차단해제하시겠습니까? 차단해제하실 번호를 입력하세요.");
while (true) {
Scanner input = new Scanner(System.in);
String phnumber = input.nextLine();
boolean end_flag = false;
if (manager.selectNumber(phnumber)) {
for (int i = 0; i < blockedList.length; i++) {
if (blockedList[i].getPhonenumber() == phnumber) {
for (int j = i; j < blockedList.length - 1; j++) {
blockedList[j] = blockedList[j + 1];
}
blockedList[blockedList.length - 1] = null;
break;
}
}
end_flag = true;
String n = "N";
manager.outputNumber(phnumber);
System.out.println("해당 번호가 차단해제 되었습니다.");
} else {
System.out.println("없는 번호입니다. 다시입력해주세요.");
continue;
}
if (end_flag) {
break;
}
}
}
public void callAppEnd() {
System.out.println("통화앱을 종료합니다");
}
public static String getPhonenumber() {
return p_phone_number;
}
public void setPhonenumber(String phonenumber) {
this.p_phone_number = phonenumber;
}
}
package phone_app;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLIntegrityConstraintViolationException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.Scanner;
public class Phone_DBManager {
private static String driver = "com.mysql.cj.jdbc.Driver";
private static String url = "jdbc:mysql://localhost:3306/phoneDB?severTimeZone=UTC";
private static String id = "root";
private static String pw = "1234";
private static String p_phone_number;
public static Connection conn = null;
public static Statement stmt = null;
static Phone_DBManager[] userList = new Phone_DBManager[5];
public Phone_DBManager[] blockedList = null;
static int callCount = 0;
static Phone_Manager manager = new Phone_Manager();
private int history_no;
private int user_id;
private String phone_number;
private LocalDateTime call_date;
boolean insert_flag = true;
boolean delete_flag = true;
// private BlockedPerson[] blockedList=null;
Phone_DBManager[] getBlockedList() {
return blockedList;
}
public Phone_DBManager(String phone_number, LocalDateTime call_date) {
this.phone_number = phone_number;
this.call_date = call_date;
}
public Phone_DBManager(String number) {
this.phone_number = number;
}
public int getHistory_no() {
return history_no;
}
public void setHistory_no(int history_no) {
this.history_no = history_no;
}
public String getPhone_number() {
return phone_number;
}
public void setPhone_number(String phone_number) {
this.phone_number = phone_number;
}
public LocalDateTime getCall_date() {
return call_date;
}
public void setCall_date(LocalDateTime call_date) {
this.call_date = call_date;
}
public static String getPhonenumber() {
return p_phone_number;
}
public static void initDBConnect() { // db 연동
try {
Class.forName(driver); // driver을 메모리에 로드한다. (driver: 클래스이다.)
conn = DriverManager.getConnection(url, id, pw); // getConnection: 커넥션 객체를 만들어줌
stmt = conn.createStatement(); // 연결객체를 통해서 명령객체가 만들어져서 stmt에 넣는다.
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public Phone_DBManager() {
}
public static boolean selectNumber(String number) { // 작성된 번호가 Phone_Block에 있다면 true를 리턴하는 메서드
String sql = "select * from Phone_Block where p_phone_number= ?";
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, number);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
return true;
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
// public static void main(String[] args) {
//
// initDBConnect();
//
// Scanner input=new Scanner(System.in);
//
// System.out.println("1\t2\t3");
// System.out.println();
// System.out.println("4\t5\t6");
// System.out.println();
// System.out.println("7\t8\t9");
// System.out.println();
// System.out.println("*\t0\t#");
//
// System.out.print("번호: ");
// String number=input.nextLine();
//
// call(number);
//
// showCallHistory();
// }
//
public static void call(String number) {
Phone_DBManager[] oneUser = selectOneCallHistory(number); // 폰번호로 조회한 유저정보를 객체배열에 넣는다.
LocalDateTime nowDateTime = LocalDateTime.now();
if (!selectNumber(number)) {
System.out.println("연결 성공");
inputCallUser(new Phone_DBManager(oneUser[0].getPhone_number(), nowDateTime));
} else {
System.out.println("해당 전화번호는 없는 전화번호입니다.");
}
}
public static void inputCallUser(Phone_DBManager user) { // 통화기록 테이블에 통화정보 넣기
String sql = "insert into Phone_CallHistory values(null, ?, ?)";
try {
// Phone_Manager manager = new Phone_Manager();
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, user.getPhone_number());
pstmt.setTimestamp(2, Timestamp.valueOf(user.getCall_date()));
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static Phone_DBManager[] selectOneCallHistory(String phone_number) { // 번호에 대한 유저정보를 가져오는 메서드
String sql = "select * from Phone_UserList where p_phone_number=?";
try {
// Phone_Manager manager = new Phone_Manager();
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, phone_number);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
String number = rs.getString("p_phone_number");
userList[callCount++] = new Phone_DBManager(number);
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
return userList;
}
public static void showCallHistory() {
String sql = "select c.p_history_no as id, u.p_user_name as name, c.p_phone_number as number, c.p_call_date as date "
+ "from Phone_CallHistory c inner join phone_userlist u where c.p_phone_number=u.p_phone_number order by id;";
try {
// Phone_Manager manager = new Phone_Manager();
ResultSet rs = stmt.executeQuery(sql);
System.out.println("no\t이름\t전화번호\t발신날짜");
while (rs.next()) { // rs.next(): rs 레코드 하나를 본인이 가지고 있다.
String id = rs.getString("id");
String name = rs.getString("name");
String number = rs.getString("number");
Timestamp callDate = rs.getTimestamp("date");
System.out.println(id + "\t" + name + "\t" + number + "\t" + callDate);
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void getAllUser() {
initDBConnect();
// 문자열 변수에 쿼리를 저장
String sql = "select * from phone_userlist";
try {
// 명령 객체의 쿼리실행 메소드를 이용하고, 매개변수는 위에서 문자열 변수에 저장한 쿼리이다.
// 그렇게 가져온 테이블 객체를 rs 변수로 이어준다.
ResultSet rs = stmt.executeQuery(sql);
// rs 변수에 테이블 객체가 있으면 true 반환
while (rs.next()) {
// 가져온 테이블 객체의 레코드 1개에서 get---으로 값을 하나씩 가져온다
// 매개변수는 해당 테이블의 필드(컬럼)이다.
String user_name = rs.getString("p_user_name");
String phone_number = rs.getString("p_phone_number");
System.out.println("이름: " + user_name + " 전화번호: " + phone_number);
}
// 다 사용하면 닫아준다.
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 현재 테이블에 유저 정보를 insert 하는 메소드이다.
public void inputUser(String phone, String user, String block) {
String sql = "insert into phone_userlist values(?,?,?)";
try {
Phone_Manager manager = new Phone_Manager();
// 동적쿼리랑 비슷하다
PreparedStatement pstmt = this.conn.prepareStatement(sql);
pstmt.setString(1, phone);
pstmt.setString(2, user);
pstmt.setString(3, block);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 테이블에 있는 유저 정보를 삭제할 메소드이다.
public void deleteUser(String phone_number, String user_name) {
// where에서 이름과 전화번호를 조건으로 확실히 필터링 후에 삭제하는 쿼리이다.
String sql = "delete from phone_userlist where p_phone_number =? and p_user_name=?";
try {
// 동적쿼리랑 비슷하다. 우선 쿼리를 가져온다.
PreparedStatement pstmt = this.conn.prepareStatement(sql);
// 해당 쿼리 ?를 순서에 맞게 채워준다.
pstmt.setString(1, phone_number);
pstmt.setString(2, user_name);
pstmt.execute();
// ResultSet rs = pstmt.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
}
// db를 다 사용하면 연결객체와 명령객체를 닫아준다.
public void releaseDB() {
try {
this.conn.close();
this.stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 현재 테이블의 행 개수를 알려주는 메소드이다.
public int recordCount() {
String sql = "select count(*) as cnt from phone_userlist";
int recount = 0;
try {
ResultSet rs = stmt.executeQuery(sql);
if (rs.next()) {
recount = rs.getInt("cnt");
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
return recount;
}
public int duplicateCount(String number) {
String sql = "select count(*) as cnt from phone_userlist where p_phone_number= ?";
int recount = 0;
try {
PreparedStatement pstmt = this.conn.prepareStatement(sql);
pstmt.setString(1, number);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
recount = rs.getInt("cnt");
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
return recount;
}
public void insert_user_list() {
Scanner sc = new Scanner(System.in);
while (insert_flag) {
System.out.println("이름과 전화번호를 추가해주세요");
System.out.print("이름: ");
String user_name = sc.nextLine();
String user_phone;
if (user_name.length() > 0 && user_name.length() < 6) {
System.out.print("전화번호: ");
user_phone = sc.nextLine();
if (user_phone.length() > 0 && user_phone.length() < 12) {
} else {
System.out.println("전화번호를 잘못입력하였습니다. 다시 입력하세요.");
continue;
}
} else {
System.out.println("이름을 잘못입력하였습니다. 다시 입력하세요.");
continue;
}
int count = duplicateCount(user_phone);
if (count == 0) {
try {
this.inputUser(user_phone, user_name, "N");
System.out.println("계속 추가하시겠습니까?? Y|N");
String yn = sc.nextLine();
if (yn.toLowerCase().equals("n") || !yn.toLowerCase().equals("y")) {
System.out.println("주소록 저장을 종료합니다.");
insert_flag = false;
break;
}
} catch (Exception e) {
e.getMessage();
}
}
}
}
public void delete_user_list() {
Scanner sc = new Scanner(System.in);
while (delete_flag) {
System.out.println("삭제할 이름과 전화번호를 추가해주세요");
System.out.println("이름과 전화번호를 추가해주세요");
System.out.print("이름: ");
String user_name = sc.nextLine();
String user_phone;
if (user_name.length() > 0 && user_name.length() < 6) {
System.out.print("전화번호: ");
user_phone = sc.nextLine();
if (user_phone.length() > 0 && user_phone.length() < 12) {
} else {
System.out.println("전화번호를 잘못입력하였습니다. 다시 입력하세요.");
continue;
}
} else {
System.out.println("이름을 잘못입력하였습니다. 다시 입력하세요.");
continue;
}
this.deleteUser(user_phone, user_name);
System.out.println("계속 삭제하시겠습니까?? Y|N");
String yn = sc.nextLine();
if (yn.toLowerCase().equals("n") || !yn.toLowerCase().equals("y") || this.recordCount() == 0) {
System.out.println("주소록 삭제를 종료합니다");
delete_flag = false;
break;
}
}
}
public int block_recordCount() {
String sql = "select count(*) as cnt from Phone_Block";
int recount = 0;
try {
ResultSet rs = stmt.executeQuery(sql);
if (rs.next()) {
recount = rs.getInt("cnt");
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
return recount;
}
public void allFetch() {
int recount = this.block_recordCount();
blockedList = new Phone_DBManager[recount];
int numberCount = 0;
String sql = "select * from Phone_Block";
try {
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
String phonenumber = rs.getString("p_phone_number");
blockedList[numberCount++] = new Phone_DBManager(phonenumber);
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void inputNumber(String number) {
String sql = "insert into phone_block values (?)";
try {
PreparedStatement pstmt = this.conn.prepareStatement(sql);
pstmt.setString(1, number);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
String sql2 = "update phone_userlist set p_block_yn = 'Y' where p_phone_number = ?";
try {
PreparedStatement pstmt = this.conn.prepareStatement(sql2);
pstmt.setString(1, number);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void outputNumber(String number) {
String sql = "delete from phone_block where p_phone_number = ?";
try {
PreparedStatement pstmt = this.conn.prepareStatement(sql);
pstmt.setString(1, number);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
String sql2 = "update phone_userlist set p_block_yn = 'N' where p_phone_number =?";
try {
PreparedStatement pstmt = this.conn.prepareStatement(sql2);
pstmt.setString(1, number);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 테이블에 있는 유저 정보를 삭제할 메소드이다.
}
package phone_app;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDateTime;
public class Phone_Call {
private int history_no;
private int user_id;
private String phone_number;
private LocalDateTime call_date;
public void Phone_Call_History(String phone_number, LocalDateTime call_date) {
this.phone_number=phone_number;
this.call_date=call_date;
}
public void Phone_Call_History(String number) {
this.phone_number=number;
}
public int getHistory_no() {
return history_no;
}
public void setHistory_no(int history_no) {
this.history_no = history_no;
}
public String getPhone_number() {
return phone_number;
}
public void setPhone_number(String phone_number) {
this.phone_number = phone_number;
}
public LocalDateTime getCall_date() {
return call_date;
}
public void setCall_date(LocalDateTime call_date) {
this.call_date = call_date;
}
public Phone_Call() {
// TODO Auto-generated constructor stub
}
public static void Phone_call(String number) {
Phone_DBManager manager = new Phone_DBManager();
Phone_DBManager[] oneUser=manager.selectOneCallHistory(number); // 폰번호로 조회한 유저정보를 객체배열에 넣는다.
LocalDateTime nowDateTime = LocalDateTime.now();
if(manager.selectNumber(number)) {
System.out.println("연결 성공");
manager.inputCallUser(new Phone_DBManager(oneUser[0].getPhone_number(), nowDateTime));
} else {
System.out.println("해당 전화번호는 없는 전화번호입니다.");
}
}
}
반응형