어제 끝나고 깃이라 싸우느라 피곤해서 까먹었다ㅋㅋㅋ
객체연습 (Board)
전체 3개의 클래스로 구성된다.
주요 기능
참고
//
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 끝
// 글쓰기 전체글 조회 글삭제 글수정
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;
}
//
// 메서드 이름 :
// 리턴 타입 :
// 매개변수 :
//
//
}
리스트와 조금 다른 형태
리스트는 인덱스가 있고 인덱스에 객체를 넣는 형태
맵은 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<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으로 해야한다
전에 했던거 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;
}
}
// 귀찮으니 메서드 정보는 생략한다
// 회원가입 회원조회 로그인 회원정보 변경
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;
}
다음주부터 대면수업으로 전환하려나
과연?