자바 17일차

선장원·2021년 10월 26일

자바

목록 보기
20/24

17일차(10/26)

Board

전에 만들 board 객체를 map으로 다시 만들자

메인

		//
		Scanner sc = new Scanner(System.in);

		Map<Integer, BoardDTO> bMap = new HashMap<>();

		BoardService bs = new BoardService();

		int choice = 0; // 선택용
		boolean run = true;
		int bnNumber = 1;

		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: { // 글 작성
				bMap = bs.boardWrite(bMap, bnNumber);
				bnNumber++;
				break;
			}
			case 2: { // 전체글조회
				bs.boardListView(bMap);
				break;
			}
			case 3: { // 상세
				bMap = bs.boardView(bMap);
				break;
			}
			case 4: { // 글삭제
				bMap = bs.boardDelete(bMap);
				break;
			}
			case 5: { // 글수정
				bMap = bs.boardUpdate(bMap);
				break;
			}
			case 6: { // 종료
				System.out.println("종료 합니다");
				run = false;
				break;
			}
			default: {
				System.out.println("다시 입력하세요");
			}

			}// switch 끝

		} // while 끝

Service

	// 글쓰기 전체글 조회 글삭제 글수정
	
//	Scanner sc = new Scanner(System.in);
	
	// 글쓰기
	// 메서드 이름 : boardWrite
	// 리턴 타입 : Map<Integer, BoardDTO>
	// 매개변수 : Map<Integer, BoardDTO>
	// 작성자 제목 내용 비밀번호 입력
	// 글번호 자동
	
	Map<Integer, BoardDTO> boardWrite (Map<Integer, BoardDTO> bMap, int bnNumber){
		Scanner sc = new Scanner(System.in);
//		int max = 0;
		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);
//		for (Integer n : bMap.keySet()) {
//			if (n>max) {
//				max=n; // 여기에 +1을 해서 글번호랑 키값으로 사용하면
//			}
//		}
		
		
		b.setBnNumber(bnNumber);
		// 사이즈로 하면 글 지우면 글번호 이상해지니 메인에서 관리하자
		bMap.put(bnNumber, b);
		
		return bMap;
	}
	
	// 전체글조회
	// 메서드 이름 : boardListView
	// 리턴 타입 : void
	// 매개변수 : Map<Integer, BoardDTO>
	// 그냥 글 다 나와
	//
	void boardListView (Map<Integer, BoardDTO> bMap) {
		for (Integer b : bMap.keySet()) {
			System.out.println(bMap.get(b));
		}
	}
	
	
	// 상제글 조회
	// 메서드 이름 : boardView
	// 리턴 타입 : Map<Integer, BoardDTO>
	// 매개변수 : Map<Integer, BoardDTO>
	// 원하는 글 조회
	// 글 번호를 받아서 찾아서 조회 + 조회수 1추가
	// 조회수 넣으려면 리턴해야하잔아	
	
	Map<Integer, BoardDTO> boardView (Map<Integer, BoardDTO> bMap) {
		Scanner sc = new Scanner(System.in);
		System.out.print("글 번호 : ");
		int bnNumber = sc.nextInt();
		// 키값으로 하는거니 -1 안해도 되잔아?
		bMap.get(bnNumber).setHits(bMap.get(bnNumber).getHits()+1);
		
		System.out.println(bMap.get(bnNumber));
		
		
		return bMap;
	}
	
	// 글 삭제
	// 메서드 이름 : boardDelete
	// 리턴 타입 : Map<Integer, BoardDTO>
	// 매개변수 : Map<Integer, BoardDTO>
	// 글 번호와 비밀 번호를 입력 받아서 일치하면 글삭제
	// 글을 지우면 글이 올라감 글 번호도 올리자 	
	
	Map<Integer, BoardDTO> boardDelete (Map<Integer, BoardDTO> bMap) {
		Scanner sc = new Scanner(System.in);
		System.out.println("글 번호 : ");
		int bnNumber = sc.nextInt();
		sc.nextLine(); // 스캐너용
		System.out.println("비밀번호 : ");
		String password = sc.nextLine();
		
		if (bMap.get(bnNumber).getPassword().equals(password)) {
			bMap.remove(bnNumber);
			// Map은 인덱스 이동이 없어서 편하구만
			// 아닌가 그럼 사이즈로 해두면 지우고 새로만들면 늘어나잔아
			// 글번호 관리를 메인에서 할까
		} else {
			System.out.println("정보가 일치하지 않습니다. ");
		}
		
		
		return bMap;
	}

	// 글 수정
	// 메서드 이름 : boardUpdate
	// 리턴 타입 : Map<Integer, BoardDTO>
	// 매개변수 : Map<Integer, BoardDTO>
	// 글 번호와 비밀 번호를 입력 받아서 맞으면 제목과 내용 수정
	//
	
	Map<Integer, BoardDTO> boardUpdate (Map<Integer, BoardDTO> bMap) {
		Scanner sc = new Scanner(System.in);
		System.out.println("글 번호 : ");
		int bnNumber = sc.nextInt();
		sc.nextLine(); // 스캐너용
		System.out.println("비밀번호 : ");
		String password = sc.nextLine();
		if (bMap.get(bnNumber).getPassword().equals(password)) {
			System.out.print("제목 : ");
			String title = sc.nextLine();
			System.out.print("내용 : ");
			String contents = sc.nextLine();
			bMap.get(bnNumber).setTitle(title);
			bMap.get(bnNumber).setConcents(contents);
			System.out.println(bMap.get(bnNumber));
			
		} else {
			System.out.println("정보가 일치하지 않습니다. ");
		}
		
		
		return bMap;
	}

도서관

고객 DTO
- 고객번호(clientNumber), 고객이름(clientName), 전화번호(clientPhone)
도서 DTO
- 도서번호(bookNumber), 도서명(bookName), 작가(bookAuthor), 대출여부(bookCheck), 대출회원(clientNumber)

주요기능
- 회원등록
- 도서등록
1. 모든도서는 1권씩있다
- 도서대출
1. 고객번호와 빌리고자 하는 도서번호를 입력받는다.
2. 빌리고자 하는 도서가 대출중이면 대출이 불가능하다.
- 전체 회원목록 출력
- 전체 도서목록 출력
- 도서반납
1. 이건 내가 만듬

특징

  • 고객, 도서 DTO를 따로

메인

		Scanner sc = new Scanner(System.in);

		Map<Integer, ClientDTO> cMap = new HashMap<>();
		Map<Integer, BookDTO> bMap = new HashMap<>();
		LibraryService ls = new LibraryService();

		int choice = 0;
		boolean run = true;

		while (run) {
			System.out.println("-----------------------------------------------------------------");
			System.out.println("1.회원등록 | 2.도서등록 | 3.도서대출 | 4.전체회원 | 5.전체도서 | 6.반납 | 7.종료");
			System.out.println("-----------------------------------------------------------------");
			System.out.print("선택 : ");
			choice = sc.nextInt();
			switch (choice) {
			case 1: {// 회원등록
				cMap = ls.clientJoin(cMap);
				break;
			}

			case 2: {// 도서등록
				bMap=ls.bookJoin(bMap);
				break;
			}
			case 3: {// 도서대출
				bMap = ls.bookLoan(bMap, cMap);
				break;
			}
			case 4: { // 전체회원목록
				ls.clientListView(cMap);
				break;
			}
			case 5: { // 전체 도서목록
				ls.bookListView(bMap);
				break;
			}
			case 6: { // 도서 반납
				bMap = ls.bookReturn(bMap);
				break;
			}
			case 7: {// 종료
				run=false;
				System.out.println("종료");
				break;
			}
			}//switch 끝
		} // while 끝

Service

	// 회원등록 도서등록 도서대출 전체회원목록 전체도서목록
	Scanner sc = new Scanner(System.in);
	// 회원등록
	// 메서드 이름 : clientJoin
	// 리턴 타입 : Map<Integer, ClientDTO>
	// 매개변수 : Map<Integer, ClientDTO>
	//
	//

	Map<Integer, ClientDTO> clientJoin(Map<Integer, ClientDTO> cMap) {
//		Scanner sc = new Scanner(System.in);
		System.out.print("이름 : ");
		String name = sc.nextLine();
		System.out.print("전화번호 : ");
		String phone = sc.nextLine();
		int clientNumber = cMap.size() + 1;// 1번부터

		ClientDTO c = new ClientDTO(clientNumber, name, phone);

		cMap.put(clientNumber, c);// 고객번호랑 키값이랑 같다

		return cMap;
	}

	// 도서등록
	// 메서드 이름 : bookJoin
	// 리턴 타입 : Map<Integer, BookDTO>
	// 매개변수 : Map<Integer, BookDTO>
	//
	//

	Map<Integer, BookDTO> bookJoin(Map<Integer, BookDTO> bMap) {
//		Scanner sc = new Scanner(System.in);
		int bookNumber = bMap.size() + 1; // 1씩 삭제는 없으니 그냥해
		System.out.print("도서명 : ");
		String name = sc.nextLine();
		System.out.print("작가 : ");
		String author = sc.nextLine();

		BookDTO b = new BookDTO(bookNumber, name, author, false, 0);
		// 0번 대출회원은 없어

		bMap.put(bookNumber, b); // 도서번호랑 키값이랑 같음
		return bMap;
	}

	// 도서대출
	// 메서드 이름 : bookLoan
	// 리턴 타입 : Map<Integer, BookDTO>
	// 매개변수 : Map<Integer, BookDTO>
	// 고객 번호를 받아서 도서 번호를 입력 받는다
	// 도서가 대출중이면 불가능하다
	// 심심하니 고객번호 체크를 만들어보자

	Map<Integer, BookDTO> bookLoan(Map<Integer, BookDTO> bMap, Map<Integer, ClientDTO> cMap) {

		boolean bookcheck = false;

		int clNum = clientCheck(cMap);// 고객체크
		if (clNum > 0) {
			int bookNumber = bookCheck(bMap);//

			if (bookNumber > 0) {
				bookcheck = true;
				BookDTO b = null;
				b = bMap.get(bookNumber);
				b.setBookCheck(bookcheck);
				b.setClientNumber(clNum);
			}
		}
		return bMap;
	}

	// 고객체크
	// 메서드 이름 : clientCheck
	// 리턴 타입 : int
	// 매개변수 : Map<Integer, ClientDTO>

	int clientCheck(Map<Integer, ClientDTO> cMap) {
//		Scanner sc = new Scanner(System.in);
		System.out.print("고객번호 입력 : ");
		int clientNumber = sc.nextInt();
		int clNum = 0;
		boolean check = false;
		for (Integer i : cMap.keySet()) {
			if (cMap.get(i).getClientNumber() == clientNumber) {
				clNum = i;
				check = true;
			}
		}
		if (check) {
			System.out.print(cMap.get(clNum).getClientName() + "님 대출시작");
		} else {
			System.out.println("고객번호를 잘못입력했습니다.");
		}

		return clNum;
	}

	// 도서체크
	// 메서드 이름 : bookCheck
	// 리턴 타입 : int
	// 매개변수 : Map<Integer, BookDTO>

	int bookCheck(Map<Integer, BookDTO> bMap) {
//		Scanner sc = new Scanner(System.in);
		System.out.print("도서번호 입력 : ");
		int bookNumber = sc.nextInt();
		int bkNum = 0;
		boolean bkCheck = false;
		boolean bkCheck2 = false;
		for (Integer i : bMap.keySet()) {
			if (bMap.get(i).getBookNumber() == bookNumber) { // 도서번호가 맞아
				if (!bMap.get(i).isBookCheck()) {// 대출가능
					bkNum = i;
					bkCheck = true;
				}
				bkCheck2 = true;
			}
		}
		if (bkCheck2) {
			if (bkCheck) {
				System.out.println(bMap.get(bookNumber).getBookName() + "님 대출시작");
			} else {
				System.out.println("이미 대출중입니다.");
			}
		} else {
			System.out.println("도서번호를 잘못입력했습니다.");
		}

		return bkNum;
	}

	// 전체 회원목록 출력
	// 메서드 이름 : clientListView
	// 리턴 타입 : void
	// 매개변수 : Map<Integer, clientDTO>

	void clientListView(Map<Integer, ClientDTO> cMap) {
		for (Integer i : cMap.keySet()) {
			System.out.println(cMap.get(i));
		}
	}

	// 전체 도서목록 출력
	// 메서드 이름 : bookListView
	// 리턴 타입 : void
	// 매개변수 : Map<Integer, BookDTO>

	void bookListView(Map<Integer, BookDTO> bMap) {
		for (Integer i : bMap.keySet()) {
			System.out.println(bMap.get(i));
		}
	}

	// 도서 반납
	// 메서드 이름 : bookReturn
	// 리턴 타입 : Map<Integer, BookDTO>
	// 매개변수 : Map<Integer, BookDTO>
	// 책 번호를 받아서 대출여부랑 대출고객을 초기화
	Map<Integer, BookDTO> bookReturn (Map<Integer, BookDTO> bMap){
		System.out.print("도서 번호 : ");
		int bkNum = sc.nextInt();
		
		bMap.get(bkNum).setBookCheck(false);
		bMap.get(bkNum).setClientNumber(0);
		
		return bMap;
	}

도서 DTO

	// 도서번호 도서명 작가 대출여부 대출회원
	private int bookNumber =0;
	private String bookName = "";
	private String bookAuthor ="";
	private boolean bookCheck = false;
	private int clientNumber = 0;
	
	BookDTO (){ // 기본
		
	}

	public BookDTO(int bookNumber, String bookName, String bookAuthor, boolean bookCheck, int clientNumber) {
		super();
		this.bookNumber = bookNumber;
		this.bookName = bookName;
		this.bookAuthor = bookAuthor;
		this.bookCheck = bookCheck;
		this.clientNumber = clientNumber;
	}
	
	public BookDTO(int bookNumber, int clientNumber) {
		super();
		this.bookNumber = bookNumber;
		this.clientNumber = clientNumber;
	}

	public int getBookNumber() {
		return bookNumber;
	}

	public void setBookNumber(int bookNumber) {
		this.bookNumber = bookNumber;
	}

	public String getBookName() {
		return bookName;
	}

	public void setBookName(String bookName) {
		this.bookName = bookName;
	}

	public String getBookAuthor() {
		return bookAuthor;
	}

	public void setBookAuthor(String bookAuthor) {
		this.bookAuthor = bookAuthor;
	}

	public boolean isBookCheck() {
		return bookCheck;
	}

	public void setBookCheck(boolean bookCheck) {
		this.bookCheck = bookCheck;
	}

	public int getClientNumber() {
		return clientNumber;
	}

	public void setClientNumber(int clientNumber) {
		this.clientNumber = clientNumber;
	}

	@Override
	public String toString() {
		return "BookDTO [bookNumber=" + bookNumber + ", bookName=" + bookName + ", bookAuthor=" + bookAuthor
				+ ", bookCheck=" + bookCheck + ", clientNumber=" + clientNumber + "]";
	}

고객 DTO

	// 고객번호 고객이름 전화번호
	private int clientNumber =0;
	private String clientName ="";
	private String clientPhone ="";
	
	ClientDTO (){ //기본
		
	}

	public ClientDTO(int clientNumber, String clientName, String clientPhone) {
		super();
		this.clientNumber = clientNumber;
		this.clientName = clientName;
		this.clientPhone = clientPhone;
	}

	public int getClientNumber() {
		return clientNumber;
	}

	public void setClientNumber(int clientNumber) {
		this.clientNumber = clientNumber;
	}

	public String getClientName() {
		return clientName;
	}

	public void setClientName(String clientName) {
		this.clientName = clientName;
	}

	public String getClientPhone() {
		return clientPhone;
	}

	public void setClientPhone(String clientPhone) {
		this.clientPhone = clientPhone;
	}

	@Override
	public String toString() {
		return "ClientDTO [clientNumber=" + clientNumber + ", clientName=" + clientName + ", clientPhone=" + clientPhone
				+ "]";
	}

오오 DTO 두개 쓰는 방법은 어렵네

프로젝트로 만들 것 정해야하는데
지금까지 배운거를 활용해서
만들만한?
만드는것도 내가 해야하나

편의점 / 게임? / 쇼핑몰?

재고관리?

편의점이나 해볼까
손님DTO
손님번호 손님이름 돈

물건DTO
물건번호 물건명 가격 재고

물건 등록
물건번호 자동
물건명 가격 재고 받아서 입력

재고 관리
그냥 다 출력

판매
while문으로 물건 여러 개 받아서 가격 더 해서 알려주고 손님돈에서 부족하면 잔액부족
그리고 재고에서 개수만큼 빼고

가방자리도 만들어서 자리부족하면 못사?

게임?

몬스터 DTO
몬스터 번호 hp 공격력 방어력 경험치 점수

캐릭터 DTO
캐릭터 번호 hp 랩 경험치 공격력 방어력 스킬 점수

몬스터등록

캐릭터 등록

몬스터 공격
캐릭터 불러오고
몬스터 불러오고

while 문으로?
몬스터랑 싸움 턴제임?

아 기획은 너무 어려워 내일 다시해야지

profile
코딩도전기

0개의 댓글