자바 16일차

선장원·2021년 10월 26일

자바

목록 보기
19/24

16일차 (10/25)

어제 끝나고 깃이라 싸우느라 피곤해서 까먹었다ㅋㅋㅋ

게시판

객체연습 (Board)
전체 3개의 클래스로 구성된다.

  • BoardMain Class
  • BoardDTO Class
    1. 글번호(bnumber), 작성자(writer), 제목(title), 내용(contents), 비밀번호(password), 조회수(hits)
  • BoardService Class
    1. 글쓰기, 전체목록조회, 상세글조회, 글삭제, 글수정

주요 기능

  • while문을 이용하여 각 기능을 선택하도록 한다
  • 글쓰기 (boardWrite)
    1. 글쓰기할 때 작성자, 제목, 내용, 비밀번호를 입력받는다.
    2. 글번호는 자동으로 부여된다.
  • 전체 글조회 (boardListView)
    1. 등록된 전체 글목록을 출력함.
  • 상세 글조회 (boardView)
    1. 글번호를 입력 받고 해당글의 상세 내용을 출력함.
    2. 상세 글조회시 조회수는 하나 증가해야 함.
  • 글삭제 (boardDelete)
    1. 삭제를 하려면 글번호와 비밀번호를 입력받고 정보가 일치하면 해당 글을 삭제함.
  • 글 수정 (boardUpdate)
    1. 수정은 제목 내용만 가능함
    2. 글번호 비밀번호를 입력 받고 정보가 일치하면 수정하고자하는 내용을 입력 받음.

참고

  • boardList 객체는 BankMain클래스에서 만든 뒤 관리함.

메인

		// 
		Scanner sc = new Scanner(System.in);
		
		List<BoardDTO> bList = new ArrayList<>();
		
		BoardService bs = new BoardService();
		BoardDTO b = new BoardDTO();
		
		int choice = 0; // 선택용
		boolean run = true;
		
		while (run) {
			System.out.println("------------------------------------------------------");
			System.out.println("1.글작성 | 2.전체조회 | 3.상세조회 | 4.글삭제 | 5.글수정 | 6.종료");
			System.out.println("------------------------------------------------------");
			System.out.print("선택 : ");
			choice = sc.nextInt();			
			switch (choice) {
			case 1: { // 글 작성
				bList = bs.boardWrite(bList);
				break;
			}
			case 2: { // 전체글조회
				bs.boardListView(bList);
				break;
			}
			case 3: { // 상세
				bList = bs.boardView(bList);
				break;
			}
			case 4: { // 글삭제
				bList = bs.boardDelete(bList);
				break;
			}
			case 5: { // 글수정
				bList = bs.boardUpdate(bList);
				break;
			}
			case 6: { // 종료
				System.out.println("종료 합니다");
				run = false;
				break;
			}
			default: {
				System.out.println("다시 입력하세요");
			}
				
			}// switch 끝
						
		} // while 끝

Service

	// 글쓰기 전체글 조회 글삭제 글수정

	Scanner sc = new Scanner(System.in);

	// 글쓰기
	// 메서드 이름 : boardWrite
	// 리턴 타입 : List<BoardDTO>
	// 매개변수 : List<BoardDTO>
	// 작성자 제목 내용 비밀번호 입력
	// 글번호 자동

	List<BoardDTO> boardWrite(List<BoardDTO> bList) {
		System.out.print("작성자 : ");
		String writer = sc.nextLine();
		System.out.print("제목 : ");
		String title = sc.nextLine();
		System.out.print("내용 : ");
		String contents = sc.nextLine();
		System.out.print("비밀번호 : ");
		String password = sc.nextLine();
		BoardDTO b = new BoardDTO(writer, title, contents, password);
		b.setBnNumber(bList.size() + 1);

		bList.add(b);
		return bList;
	}

	// 전체글조회
	// 메서드 이름 : boardListView
	// 리턴 타입 : void
	// 매개변수 : List<BoardDTO>
	// 그냥 글 다 나와
	//

	void boardListView(List<BoardDTO> bList) {
		for (BoardDTO b : bList) {
			System.out.println(b);
		}
	}

	// 상제글 조회
	// 메서드 이름 : boardView
	// 리턴 타입 : List<BoardDTO>
	// 매개변수 : List<BoardDTO>
	// 원하는 글 조회
	// 글 번호를 받아서 찾아서 조회 + 조회수 1추가
	// 조회수 넣으려면 리턴해야하잔아

	List<BoardDTO> boardView(List<BoardDTO> bList) {
		System.out.print("글 번호 : ");
		int bnNumber = sc.nextInt();
		System.out.println(bList.get(bnNumber - 1));
		// 글번호랑 인덱스 번호랑 차이가 있으니 -1
		int bnN = bList.get(bnNumber-1).getHits();
		bList.get(bnNumber - 1).setHits(bnN + 1);
		return bList;
	}

	// 글 삭제
	// 메서드 이름 : boardDelete
	// 리턴 타입 : List<BoardDTO>
	// 매개변수 : List<BoardDTO>
	// 글 번호와 비밀 번호를 입력 받아서 일치하면 글삭제
	// 글을 지우면 글이 올라감 글 번호도 올리자 

	List<BoardDTO> boardDelete(List<BoardDTO> bList) {
		System.out.println("글 번호 : ");
		int bnNumber = sc.nextInt();
		sc.nextLine(); // 스캐너용
		System.out.println("비밀번호 : ");
		String password = sc.nextLine();

		if (bList.get(bnNumber - 1).getPassword().equals(password)) {
			bList.remove(bnNumber-1);
			System.out.println("삭제 완료");
			for (int i=0; i<bList.size();i++) { // 글을 지웠으니 하나씩 위로
				bList.get(i).setBnNumber(i+1);
			} // 글번호가 지울 때마다 바껴서 귀찮네
		} else {
			System.out.println("정보가 일치하지 않습니다. ");
		}

		return bList;
	}

	// 글 수정
	// 메서드 이름 : boardUpdate
	// 리턴 타입 : List<BoardDTO>
	// 매개변수 : List<BoardDTO>
	// 글 번호와 비밀 번호를 입력 받아서 맞으면 제목과 내용 수정
	//

	List<BoardDTO> boardUpdate(List<BoardDTO> bList) {
		System.out.println("글 번호 : ");
		int bnNumber = sc.nextInt();
		sc.nextLine(); // 스캐너용
		System.out.println("비밀번호 : ");
		String password = sc.nextLine();
		if (bList.get(bnNumber-1).getPassword().equals(password)) {
			System.out.print("제목 : ");
			String title = sc.nextLine();
			System.out.print("내용 : ");
			String contents = sc.nextLine();
			bList.get(bnNumber-1).setTitle(title);
			bList.get(bnNumber-1).setConcents(contents);

		} else {
			System.out.println("정보가 일치하지 않습니다. ");
		}

		return bList;
	}

	//
	// 메서드 이름 :
	// 리턴 타입 :
	// 매개변수 :
	//
	//

}

Map

리스트와 조금 다른 형태
리스트는 인덱스가 있고 인덱스에 객체를 넣는 형태

맵은 key, value 두가지로 구성
key가 리스트의 인덱스같은 기능

선언

Map<Integer, String> map1 = new HashMap<>();
Map<Integer, String> map1 = new HashMap<Integer, String>();

데이터 저장

map1.put(key값, value값);

키값이 순차적일 필요는 없는데 순차적인 것이 관리가 편함

데이터 출력

System.out.println(map1.get(1));
System.out.println(map1.get(11));

map1.put(11, “deta123t”);
System.out.println(map1.get(11));
이렇게 하면 덮어쓰기가 된다

반복문에 활용

keyset() : 키값으로 구성된 값

		// 반복문에 활용
		for (Integer n:map1.keySet()) {
			String s = map1.get(n);
			System.out.println(s);
			System.out.println(map1.get(n));
		}

for문은 키값이 순차적이지 않아서 힘드려나

데이터 삭제

map3.remove("키키2");
remove() 메서드를 사용하고 ()안에 키값을 적어준다!

객체를 map에 담기

map 선언

Map<Integer, TestDTO> testMap = new HashMap<>();

맵에 객체 담기

	testMap.put(1, test1);
	testMap.put(2, test2);
	testMap.put(3, test3);

key값이 2인 데이터 출력
System.out.println(testMap.get(2)); // test2 객체

반복에 활용

	for (Integer t : testMap.keySet()) {
		System.out.println(testMap.get(t));
	}

key값은 Integer이라서 testDTO가 아니라 Integer으로 해야한다

Member 객체만들기

전에 했던거 List말고 Map써서 해보기

메인

		// member을 만들어 보자!
		Scanner sc = new Scanner(System.in);
		
		Map<Integer, MemberDTO> mMap = new HashMap<>();
		
		MemberService ms = new MemberService();
		
		int choice = 0;// 선택
		boolean run = true;
		
		
		
		while (run) {
			System.out.println("--------------------------------------------------");
			System.out.println("1.회원가입 | 2.회원조회 | 3.로그인 | 4.이메일변경 | 5.종료");
			System.out.println("--------------------------------------------------");
			System.out.print("번호 > ");
			choice = sc.nextInt();

			switch (choice) {

			case 1: {// 회원가입
				mMap=ms.memberJoin(mMap);
				break;
			}

			case 2: {// 전체 회원조회
				ms.listView(mMap);
				break;

			}

			case 3: {// 로그인
				ms.memberLogin(mMap);
				break;
			}
			
			case 4: {//이메일 변경
				mMap = ms.memberUpdate(mMap);
				break;
			}
			
			case 5: {// 종료
				System.out.println("종료합니다");
				run=false;
				break;
			}
			
			default:
				System.out.println("다시입력하세요");
				break;
			}

		}

Service

	// 귀찮으니 메서드 정보는 생략한다
	// 회원가입 회원조회 로그인 회원정보 변경
	Scanner sc = new Scanner(System.in);
	
	// 회원가입
	Map<Integer,MemberDTO> memberJoin (Map<Integer,MemberDTO> mMap){
		System.out.print("아이디 : ");
		String id = sc.nextLine();
		System.out.print("비밀번호 : ");
		String pw = sc.nextLine();
		System.out.print("이름 : ");
		String name = sc.nextLine();
		System.out.print("이메일 : ");
		String email = sc.nextLine();
		MemberDTO m = new MemberDTO(id, pw, name, email);
		m.setMemberNumber(mMap.size()+1);
		mMap.put(mMap.size(), m); // 그럼 0부터 들어가겠지
		return mMap;
	}
	
	//전체조회
	void listView (Map<Integer,MemberDTO> mMap) {
		for (Integer i : mMap.keySet()) {
			System.out.println(mMap.get(i));
		}
	}
	
	
	// 로그인
	void memberLogin (Map<Integer,MemberDTO> mMap) {
		System.out.print("아이디 : ");
		String id = sc.nextLine();
		System.out.print("비밀번호 : ");
		String pw = sc.nextLine();
		int loginNum = -1;
		for (Integer i : mMap.keySet()) {
			if (mMap.get(i).getId().equals(id) && mMap.get(i).getPw().equals(pw)) {
				loginNum = i;
			}
		}
		if (loginNum>=0) {
			System.out.println(mMap.get(loginNum).getName()+"님 환영합니다");
		}else {
			System.out.println("아이디와 비밀번호가 틀렸습니다.");
		}
		
	}
	
	
	// 회원정보 업데이트
	Map<Integer,MemberDTO> memberUpdate (Map<Integer,MemberDTO> mMap){
		System.out.print("아이디 : ");
		String id = sc.nextLine();
		System.out.print("비밀번호 : ");
		String pw = sc.nextLine();
		int loginNum = -1;
		for (Integer i : mMap.keySet()) {
			if (mMap.get(i).getId().equals(id) && mMap.get(i).getPw().equals(pw)) {
				loginNum = i;
			}
		}
		if (loginNum>=0) {
			System.out.print("변경 이메일 : ");
			String email = sc.nextLine();
			mMap.get(loginNum).setEmail(email);			
		}else {
			System.out.println("아이디와 비밀번호가 틀렸습니다.");
		}
		return mMap;
	}

다음주부터 대면수업으로 전환하려나
과연?

profile
코딩도전기

0개의 댓글