본인은 1일차
회원관리 UserDTO 쪽 진행하였다.
회원가입 , 로그인 , id찾기 , pw찾기 , 비로그인으로 게시판 접속하기 , 관리자계정으로 게시판 접속하기까지 구현했다.
앞으로 게시판작성에 필요한 메소드 , 유틸리티( 숫자체크 , 닉네임제한 등 ) 제작해볼 생각이다.
2023 - 03 - 21 18시
Main에서 일단 관리자모드 , 비로그인 모드 , 일반 모드로 나누어서
관리자 - 공지 작성 , 글 목록 , 글 상세보기 , 글 수정 , 유저리스트 확인 , 유저삭제 구현했고
비로그인에서는 수정불가하고 글작성하고 글 목록과 상세보기 만 가능하게 구현했고
일반 모드는 글작성 , 글목록 , 글상세보기 , 아이디 패스워드 이름 바꾸기 , 닉네임(포인트50필요)바꾸기 기능을 만들었다.
BoardDTO
package project;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class BoardDTO {
private String title;
private String writer;
private static Long number = 100L;
private final static DateTimeFormatter DTF = DateTimeFormatter.ofPattern("yyyy/MM/dd hh:mm:ss");
private long cnt;
private String bno;
private String postDate;
private String body;
public String getBno() {
return bno;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public BoardDTO () {
this.bno = "B"+number++;
this.postDate = DTF.format(LocalDateTime.now());
this.cnt = 0;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public static Long getNumber() {
return number;
}
@Override
public String toString() {
return bno+"\t"+title+"\t"+writer+"\t"+cnt+"\t"+body+"\t"+postDate;
}
public Long getCnt() {
return cnt;
}
public void setCnt(long cnt) {
this.cnt = cnt;
}
}
BoardService
package project;
import java.util.*;
public class BoardService {
private static BoardService boardService = new BoardService();
private BoardService() {
}
Scanner sc = new Scanner(System.in);
public static BoardService getInstance() {
return boardService;
}
BoardRepository boardRepository = BoardRepository.getInstance();
UserDTO user = new UserDTO();
BoardDTO boardDTO = null;
Map<UserDTO, String> adminMap = new HashMap<>();
String admin = "admin";
String belogin = "belogin";
public void user(UserDTO userDTO) {
user = userDTO;
return;
}
public void set(UserDTO userDTO) {
BoardDTO boardDTO = new BoardDTO();
System.out.print("제목 작성");
boardDTO.setTitle(sc.nextLine());
System.out.print("내용 작성");
boardDTO.setBody(sc.nextLine());
if (user.getRole() == "belogin") {
boardDTO.setWriter("Trave" + (int) (Math.random() * 100));
} else {
boardDTO.setWriter(user.getNickName());
}
if (boardRepository.set(boardDTO.getBno(), boardDTO, userDTO)) {
System.out.println("작성완료");
} else {
System.out.println("Error");
}
if (!(userDTO.getRole() == "admin" || userDTO.getRole() == "belogin")) {
boardRepository.point5(user, user.getPoint());
System.out.println("포인트 5 누적");
}
}
public void findAll() {
Map<String, BoardDTO> adminMap = boardRepository.findAllAdmin();
Map<String, BoardDTO> bMap = boardRepository.findAll();
List<String> keySet = new ArrayList<>(adminMap.keySet());
Collections.sort(keySet);
List<String> keySet2 = new ArrayList<>(bMap.keySet());
Collections.sort(keySet2);
if (keySet.size() == 0) {
System.out.println("공지글이 없습니다");
} else {
System.out.println("==============================공지 글=======================================");
System.out.println("글 번호\t글 제목\t글 작성자\t조회수\t글 내용\t게시일자");
for (String key : keySet) {
System.out.println(adminMap.get(key).toString());
}
}
if (keySet2.size() == 0) {
System.out.println("글이 없습니다");
} else {
System.out.println("==============================글 목록=======================================");
System.out.println("글 번호\t글 제목\t글 작성자\t조회수\t글 내용\t게시일자");
for (String key : keySet2) {
System.out.println(bMap.get(key).toString());
}
}
}
public void open() {
System.out.println("1.공지글 2.일반글");
int menu = boardService.numberCheck();
System.out.print("조회할 글 번호 입력");
String openBno = sc.next();
if (menu == 1) {
boardDTO = boardRepository.adminopen(openBno);
if (boardDTO == null) {
System.out.println("조회오류");
return;
}
} else if (menu == 2) {
boardDTO = boardRepository.open(openBno);
if (boardDTO == null) {
System.out.println("조회오류");
return;
}
}
boardDTO.setCnt(boardDTO.getCnt() + 1);
System.out.println("글 번호\t글 제목\t글 작성자\t조회수\t글 내용\t게시일자");
System.out.println(boardDTO.toString());
}
public void adminUpdate() {
System.out.println("1.공지글 수정 2.일반글 수정 0.종료");
int menu = boardService.numberCheck();
if (menu == 1) {
System.out.print("수정할 글번호 입력");
String update = sc.next();
if (boardRepository.adminUpdate(update)) {
System.out.println("수정완료");
} else {
System.out.println("입력한 글번호가 없습니다");
}
return;
} else if (menu == 2) {
System.out.print("수정할 글번호 입력");
String update = sc.next();
if (boardRepository.update(update)) {
System.out.println("수정완료");
} else {
System.out.println("입력한 글번호가 없습니다");
}
return;
} else {
System.out.println("다시입력");
}
}
public int numberCheck() {
int result;
while(true) {
if(sc.hasNextInt()) {
result = sc.nextInt();
break;
}else {
System.out.println("숫자만 입력하세요");
sc.nextLine();
}
}return result;
}
}
BoardRepository
package project;
import java.util.*;
public class BoardRepository {
private static BoardRepository boardRepository = new BoardRepository();
private BoardRepository() {
}
public static BoardRepository getInstance() {
return boardRepository;
}
Scanner sc = new Scanner(System.in);
BoardService boardService = BoardService.getInstance();
UserDTO userDTO = new UserDTO();
Map<String, BoardDTO> bMap = new HashMap<>(); // 글이 모일 맵, key = bno value=boardDTO
List<BoardDTO> bList = new ArrayList<>();// 공지글을 제외한 모든글
Map<UserDTO, Long> pointMap = new HashMap<>(); // 유저마다 포인트 쌓일 맵 key = userDTO value = point
Map<String, BoardDTO> adminMap = new HashMap<>();// 공지글
public void point5(UserDTO userDTO, Long point) {
userDTO.setPoint(point + 5);
pointMap.put(userDTO, point);
}
public boolean set(String bno, BoardDTO boardDTO, UserDTO userDTO) {
if (userDTO.getId() == "admin" && userDTO.getRole() == "admin") {
boardDTO.setWriter(userDTO.getRole());
adminMap.put(bno, boardDTO);
return true;
} else {
bMap.put(bno, boardDTO);
return true;
}
}
public Map<String, BoardDTO> findAllAdmin() {
return adminMap;
}
public Map<String, BoardDTO> findAll() {
return bMap;
}
public BoardDTO adminopen(String openBno) {
for (String key : adminMap.keySet()) {
if (openBno.equals(adminMap.get(key).getBno())) {
return adminMap.get(key);
}
}
return null;
}
public BoardDTO open(String openBno) {
for (String key : bMap.keySet()) {
if (openBno.equals(bMap.get(key).getBno())) {
return bMap.get(key);
}
}
return null;
}
public boolean adminUpdate(String bno) {
for (String key : adminMap.keySet()) {
if (bno.equals(adminMap.get(key).getBno())) {
System.out.print("수정할 제목");
adminMap.get(key).setTitle(sc.next());
System.out.println("수정할 내용");
adminMap.get(key).setBody(sc.next());
return true;
}
}
return false;
}
public boolean update(String bno) {
for (String key : bMap.keySet()) {
if (bno.equals(bMap.get(key).getBno())) {
System.out.print("수정할 제목");
adminMap.get(key).setTitle(sc.next());
System.out.println("수정할 내용");
adminMap.get(key).setBody(sc.next());
return true;
}
}
return false;
}
}
UserDTO
package project;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class UserDTO {
private String id;
private String pw;
private String name;
private final static DateTimeFormatter DTF = DateTimeFormatter.ofPattern("yyyy/MM/dd hh:mm:ss");
private String bno;
private static Long number = 96L;
private String nickName;
private Long point = 0L;
private String newDate;
private String role;
@Override
public String toString() {
return bno+"\t"+id+"\t"+pw+"\t"+name+"\t"+nickName+"\t"+newDate;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public Long getPoint() {
return point;
}
public void setPoint(Long point) {
this.point = point;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public UserDTO() {
this.bno = "U"+number++;
this.newDate = DTF.format(LocalDateTime.now());
}
public String getBno() {
return bno;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNewDate() {
return newDate;
}
}
userService
package project;
import java.util.*;
public class UserService {
private static UserService userService = new UserService();
Scanner sc = new Scanner(System.in);
private UserService() {
} // 생성자제한
public static UserService getInstance() {
return userService;
}
UserRepository userRepository = UserRepository.getInstance();
BoardService boardService = BoardService.getInstance();
String loginId = null;
String loginPw = null;
String loginNickName = null;
UserDTO userDTO = new UserDTO();
public void save() { // 회원가입
UserDTO userDTO = new UserDTO();
System.out.print("회원가입할 ID");
userDTO.setId(sc.next());
System.out.print("회원가입할 Password");
userDTO.setPw(sc.next());
System.out.print("회원가입할 Name");
userDTO.setName(sc.next());
System.out.print("회원가입할 NickName");
userDTO.setNickName(sc.next());
if (userRepository.save(userDTO)) {
System.out.println("회원가입 성공");
System.out.println(userDTO.getName() + "님 회원가입을 축하합니다");
} else {
System.out.println("회원가입오류");
}
}
public UserDTO login() {
System.out.print("Login 할 ID 입력");
String loginID = sc.next();
System.out.print("Login 할 Password 입력");
String loginPassword = sc.next();
userDTO = userRepository.findByUserDTO(loginID, loginPassword);
if (userDTO == null) {
System.out.println("Access Denied");
return null;
} else {
loginId = loginID;
loginPw = loginPassword;
loginNickName = userDTO.getNickName();
System.out.println("login 성공");
return userDTO;
}
}
public void findId() {
System.out.print("찾으시는 ID에 해당하는 Name 입력");
String findName = sc.next();
userDTO = userRepository.findByUserId(findName);
if (userDTO == null) {
System.out.println("Access Denied");
} else {
System.out.println("찾으시는 계정의 ID는 " + userDTO.getId() + "입니다");
}
}
public void findByPassword() {
System.out.println("찾으시는 Password에 해당하는 ID와 이름 입력");
System.out.print("ID :");
String findId = sc.next();
System.out.print("Name :");
String findName = sc.next();
userDTO = userRepository.findByUserPassword(findId, findName);
if (userDTO == null) {
System.out.println("Access Denied");
} else {
System.out.print("Password 재설정할 Password 입력");
String updatePassword = sc.next();
if (userRepository.updatePassword(userDTO, updatePassword)) {
System.out.println(userDTO.getName() + "님의 Password 재설정 완료");
return;
} else {
System.out.println("System error");
}
}
}
public UserDTO belogin() {
userDTO.setRole("belogin");
userDTO.setId("belogin");
return userDTO;
}
public UserDTO adminUser() {
userDTO.setRole("admin");
userDTO.setId("admin");
return userDTO;
}
public boolean admin() {
System.out.print("관리자 계정 ID");
String adminId = sc.next();
System.out.print("관리자 계정 Password");
String adminPassword = sc.next();
if (userRepository.admin(adminId, adminPassword)) {
System.out.println("관리자 계정 로그인 완료");
return true;
} else {
System.out.println("Access Denied");
return false;
}
}
public void changeNickName() {
System.out.println("NickName 수정에는 50포인트가 필요합니다");
System.out.println("수정하시겠습니까?");
System.out.print("1.예 2.아니오");
int menu = boardService.numberCheck();
if(menu == 1) {
if(userDTO.getPoint() >= 50) {
userDTO.setPoint(userDTO.getPoint()-50);
System.out.print("NickName 입력");
userDTO.setNickName(sc.next());
System.out.println("NickName 수정완료");
return;
}else {
System.out.println("Point가 부족합니다");
return;
}
}else if(menu == 2) {
System.out.println("수정 종료");
return;
}else {
System.out.println("다시입력");
}
}
public void findAll() {
System.out.println("유저 목록");
Map<String,UserDTO> uMap = userRepository.findAll();
if(uMap.size() == 0) {
System.out.println("조회할 수 없습니다");
}else {
System.out.println("유저번호\tId\tPassword\tName\tNickName\t가입날짜");
for(String key : uMap.keySet()) {
System.out.println(uMap.get(key).toString());
}
}
}
public void delete() {
System.out.println("삭제할 유저번호 입력");
String deleteUser = sc.next();
if(userRepository.delete(deleteUser)) {
System.out.println("삭제 성공");
}else {
System.out.println("삭제 실패");
}
}
}
UserRepository
package project;
import java.util.*;
public class UserRepository {
private static UserRepository userRepository = new UserRepository();
String adminI = "abcd";
String adminP = "1234";
private UserRepository() {
}
public static UserRepository getInstance() {
return userRepository;
}
UserService userService = UserService.getInstance();
Map<String, UserDTO> uMap = new HashMap<>();
List<UserDTO> uList = new ArrayList<>();
public boolean save(UserDTO userDTO) {
uMap.put(userDTO.getBno(), userDTO);
return true;
}
public UserDTO findByUserDTO(String loginID, String loginPassword) {
for (String key : uMap.keySet()) {
if (uMap.get(key).getId().equals(loginID) && uMap.get(key).getPw().equals(loginPassword)) {
return uMap.get(key);
}
}
return null;
}
public UserDTO findByUserId(String name) {
for (String key : uMap.keySet()) {
if (uMap.get(key).getName().equals(name)) {
return uMap.get(key);
}
}
return null;
}
public UserDTO findByUserPassword(String findId, String findName) {
for (String key : uMap.keySet()) {
if (uMap.get(key).getId().equals(findId) && uMap.get(key).getName().equals(findName)) {
return uMap.get(key);
}
}
return null;
}
public boolean updatePassword(UserDTO userDTO, String updatePassword) {
userDTO.setPw(updatePassword);
return true;
}
public boolean admin(String adminId, String adminPassword) {
if (adminI.equals(adminId) && adminP.equals(adminPassword)) {
return true;
}
return false;
}
public Map<String, UserDTO> findAll() {
return uMap;
}
public boolean delete(String deleteUser) {
for (String key : uMap.keySet()) {
if (deleteUser.equals(uMap.get(key).getBno())) {
uMap.remove(key);
return true;
}
}
return false;
}
}
BoardMain
package project;
import java.util.Scanner;
public class BoardMain {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
UserService userService = UserService.getInstance();
BoardService boardService = BoardService.getInstance();
boolean loginOk = false;
String loginid = null;
String loginpw = null;
String loginNickName = null;
boolean admin = false;
UserDTO userDTO = null;
while (true) {
System.out.println("==============================게시판=======================================");
if (!loginOk) {
System.out.println("1.회원가입 2.Login 3.ID 찾기 4.Password 찾기 \n5.비회원으로 로그인하기 6.관리자 계정으로 접속 0.프로그램 종료");
System.out.println("logoff 상태");
} else {
if (admin) {
System.out.println("관리자 계정으로 접속중");
System.out.println("1.공지 작성 2.글 목록 3.글 상세보기 4.글 수정 5.유저리스트 6.유저삭제 0.로그아웃");
} else if (userDTO.getRole() == "belogin") {
System.out.println("비회원으로 접속중");
System.out.println("1.글 작성 2.글 목록 3.글 상세보기 0.로그아웃");
} else {
System.out.println("1.글 작성 2.글 목록 3.글 상세보기 4.Id,Password,Name 수정 5.NickName 수정 0.로그아웃");
System.out.println("현재 Login ID :" + loginid + "\n현재 Password :" + loginpw + "\n현재 NickName :"
+ loginNickName + "\n현재 Point = " + userDTO.getPoint());
}
}
System.out.print("Menu 선택>");
int menu = boardService.numberCheck();
if (menu == 1) {
if (loginOk || admin) { // 로그인시 or admin이면
boardService.user(userDTO); // user return
boardService.set(userDTO); // 글작성
} else {
userService.save(); // 회원가입
}
} else if (menu == 2) {
if (loginOk) {
boardService.findAll(); // 글목록
} else {
userDTO = userService.login(); // 로그인
if (userDTO != null) {
loginid = userDTO.getId();
loginpw = userDTO.getPw();
loginNickName = userDTO.getNickName();
loginOk = true;
}
}
} else if (menu == 3) {
if (loginOk || admin) {
boardService.open(); // 검색
} else {
userService.findId();// id찾기
}
} else if (menu == 4) {
if(loginid == "belogin") {
System.out.println("다시 입력");
continue;
}
if (admin) {
boardService.adminUpdate();
} else {
userService.findByPassword(); // pw찾기
}
} else if (menu == 5) {
if(loginid == "belogin") {
System.out.println("다시 입력");
continue;
}
if (admin) {
userService.findAll();
} else if (loginOk) {
userService.changeNickName(); // 닉네임수정
} else {
loginid = "belogin";
loginpw = "belogin";
loginNickName = "belogin";
userDTO = userService.belogin(); // 비로그인으로 로그인
System.out.println(userDTO.getRole());
loginOk = true;
}
} else if (menu == 6) {
if(loginid == "belogin") {
System.out.println("다시 입력");
continue;
}
if(admin) {
userService.delete();
}else {
if (userService.admin()) {
userDTO = userService.adminUser(); // admin 로그인
loginOk = true;
admin = true;
}
}
} else if (menu == 0) {
if (loginOk || admin) {
loginOk = false;
admin = false;
} else {
break;
}
} else {
System.out.println("다시입력");
}
}
System.out.println("프로그램 종료");
}
}
앞으로의 기능은 닉네임 중복체크 , (가능하다면) 인터페이스를 이용한 다른게시판을 연동하려고 한다.
그외에 다른 기능들은 고민중이다.
'Java Project > Java 3일 프로젝트' 카테고리의 다른 글
프로젝트 게시판 PPT 발표 내용기능들 기간 - 3/3일 (0) | 2023.03.24 |
---|---|
프로젝트 게시판 기능들 구현하기 기간 - 2/3일 (0) | 2023.03.22 |