헬린코린이

solo project 본문

Project/Solo Project

solo project

HCD 2022. 12. 4. 22:11

많이 부족하지만 열심히 해보았다.

package class01;

import java.util.Scanner;


public class Test01 {
	public static void main(String[] args) {
		Member[] mdatas  =new Member[3];
		int mIndex=0;
		Board[] bdatas = new Board[3];
		int bIndex=0;

		int NUM=101; //★ PK는 특수한 경우를 제외하고서는, 
		//중복을 혀용하지 않기에(유일하기에) 프로그램에서 자동으로 부여하는 것이 일반적이다.
		// ex)특수한 경우 : ID
		Scanner sc = new Scanner(System.in);

		while(true) {
			System.out.println("----------");
			System.out.println("1. 회원가입");
			System.out.println("2. 로그인");
			System.out.println("3. 프로그램 종료");
			System.out.println("----------");
			System.out.print("입력) ");
			int act=sc.nextInt();
			if(act==1) {
				//				//1. id입력받음
				//				//단, ID가 중복되지않아야한다.
				//				// PW,NAME 중복되어도  ㄱㅊ
				//				System.out.print("아아디를 입력해주세요 : ");
				//				String num = sc.next();
				//				System.out.print("비민번호를 입력해주세요: ");
				//				String num1 = sc.next();
				//				System.out.print("이름을 입력해주세요");
				//				String name = sc.next();
				//				mdatas[mIndex]= new Member(num, num1, name);
				//				if(mdatas[mIndex].equals(mdatas[mIndex-1]))
				//					System.out.println("");
				//				//2. 회원생성-> 배열 추가
				if(mIndex==mdatas.length) { //mdatas에 계속 추가하다가 mIndex가 mdatas.length즉 3개와 같아지면 실행
					System.out.println("  더이상 회원가입 불가능"); 
					continue;
				}
				String id;
				while(true) {
					System.out.print("ID 입력) ");
					id = sc.next();

					boolean flag = true; //플래그 변수
					for(int i=0; i<mIndex; i++ ) {//확인과정중에 ID 중복이 발견된다면,
						if(mdatas[i].equals(id))
							flag=false;
					}
					if(flag) {//중복되지 않으면
						break;
					}
					System.out.println("ID 중복으로 회원가입 불가능\n다시 회원가입 부탁드립니다.");
				}
				System.out.print("PW 입력) ");
				String pw = sc.next();
				// 일반벅으로 비밀번호 등은 더블체크 ☆
				System.out.print("NAME 입력) ");
				String name = sc.next();
				System.out.println(name+"회원가입완료!"); //다 통과 되면 회원가입 완료

				mdatas[mIndex]=new Member(id, pw, name); //완료하면 id값과 pw값과 name값을 mIndex값에 맞게 저장.
				mIndex++;//+1
			}else if(act==2) {
				if(mIndex==0) {
					System.out.println("정보가 없습니다. 회원가입 부탁드립니다.");
					continue; //정보가 없으면 처음으로 돌아간다.
				}
				//				System.out.println("ID) ");
				//				String idi = sc.next();
				//				System.out.println("PW) ");
				//				String pwi = sc.next();
				//				
				//				for(int i=0; i< mdatas.length; i++) {
				//					if(mdatas[i].getId().equals(idi)) {
				//						if(mdatas[i].getpw().equals(pwi)) {
				//							System.out.println("통과!");
				//							break;
				//						}
				//						System.out.println("비밀번호가 틀립니다.");
				//						break;
				//					}
				//				}
				System.out.print("ID 입력) ");
				String id = sc.next();
				System.out.print("PW 입력) ");
				String pw = sc.next();
				//이퀄스는 매개변수를 하나로 받기 때문에 2개의 값을 하나로 바꿔준다.
				Member member = new Member(id, pw); //데이터를 2개이상 전달하고 싶은데, 메서드의 인자가 1개라서 제작한 객체
				// 인스턴스화 시켜 2개의 매개변수를 가지고 있는 생성자를 클래스에 생성시키고
				//  여기서 이퀄스로 원래 기본 저장되어있는 값과 새로 인스턴스화되서 원래 기본값하고 비교를 한다.
				//  flag변수 사용하고
				// 클래스 오버라이딩 메서드에 member인스턴스와 비교할 수 있는 이퀄스를 else if로 새로 작성한다.
				// 여기 메서드는 간단하게 여기에 추가할 거면 클래스에 더 추가하자.

				int i=0; //아래 모든 곳에서 사용 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

				boolean flag = true; //스위치 온 오프 체크용 //아이디 비밀번호 확인용
				for(i=0; i<mIndex; i++) { //3이니까 3번 반복하지
					if(mdatas[i].equals(member)) { //이퀄스 오버라이딩해서 확인 아이디와 비밀번호 확인 맞다면 i는 0만 추가되고 아래에서 i를 공통으로 사용 가능
						// 여기서 부터 확인
						// 로그인 완료 후 게시글 마이페이지 선택
						
						//한번만 나오게 하려면 여기서 작성해야함
						System.out.println("-------------");
						System.out.println("1. 마이페이지");
						System.out.println("2. 게시글 관리");
						System.out.println("3. 이전페이지");
						System.out.println("-------------");
						System.out.print("입력) ");
						int loafter = sc.nextInt();

						if(loafter==1) {//마이페이지 비밀번호 변경
							System.out.println("-------------");
							System.out.println("1. 비밀번호 변경");
							System.out.println("2. 회원 탈퇴");
							System.out.println("3. 초기화면으로");
							System.out.println("-------------");
							int mypage = sc.nextInt();
							if(mypage==1) {
								System.out.println("바꾸실 비밀번호를 적어주세요");
								System.out.print("입력) ");
								String setpw = sc.next();

								mdatas[i].setPw(setpw);	//셋터 메서드 호출해서 pw변경
								System.out.println("변경되었습니다.");
							}else if(mypage==2) {
								System.out.println("탈퇴하시면 30일동안 가입 불가능합니다.  [Y/N]"); //재차확인
								String withdrawal = sc.next();
								if(withdrawal.equals("Y") || withdrawal.equals("y")) {// 비밀번호 한번 더 입력하면 그러면 회원 탈퇴 성공적
									System.out.print("비밀번호를 입력해주세요) ");
									String withdrawal_ = sc.next();
									if(mdatas[i].getpw().equals(withdrawal_)) {
										mdatas[i]=null; //삭제~
										System.out.println("회원 탈퇴 되었습니다.");
										mIndex--;//위에서 1이 추가된 상태로 돌아다니니까 회원 탈퇴했으면 mIndex값을 0으로 바꿈.
									}
								}
							}else if(mypage==3) {
								//초기화면으로 돌아감 아무것도 작성되어 있지 않아서.
							}
						}else if(loafter==2) { //게시글 관리
							while(true) {
								System.out.println("-------------");
								System.out.println("1. 게시글 작성");
								System.out.println("2. 게시글 출력");
								System.out.println("3. 게시글 변경");
								System.out.println("4. 게시글 삭제");
								System.out.println("5. 로그아웃");
								System.out.println("-------------");
								System.out.print("입력) ");
								int blletin = sc.nextInt();

								if(blletin==1) {  //게시글 작성
									//mdatas[0]=new Member("kim", "1234", "김효경");
									//mdatas[1]=new Member("hong", "1234", "홍길동");
									// 현재 회원은 2명이 존재하는 상황


									//로그인 성공에서 바로 시작해야하는데 뎁스가 깊어질까봐 꺼내서 작성
									//System.out.println(mdatas[1]);
									//현재 hong이 로그인한 상태라고 가정,

									System.out.println("작성할 글 제목 입력) ");
									String title = sc.next();

									System.out.println("작성할 글 내용 입력) ");
									String content = sc.next();

									//String writer = mdatas[i].getname(); //겟터 메서드 호출해서 회원가입 할때 입력했던 name 값을writer변수에 저장하고 


									bdatas[bIndex]=new Board(NUM,title,content,mdatas[i].getname()); //로그인한 사람이 누군지 어떻게 알아보지?
									// 글과 내용을 입력하면 Board에 NUM,제목,내용, name값을 저장한다. 보드에
									NUM++;
									bIndex++;


								}else if(blletin==2) {
									for(int e=0; e<bIndex; e++) {
										System.out.println(bdatas[e]); //toString오버라이딩해서 출력하게 만듦
									}
									System.out.println();
									bIndex--;
								}else if(blletin==3) {
									System.out.println("1. 글 제목 변경");
									String titleset = sc.next();
									System.out.println("2. 글 내용 변경");
									String contentset = sc.next();


									bdatas[i].setTitle(titleset); //제목 변경
									bdatas[i].setContent(contentset); //내용 변경

								}else if(blletin==4) {
									System.out.println("게시글을 삭제하시겠습니까?  [Y/N]"); //재차확인
									String withdrawal = sc.next();
									if(withdrawal.equals("Y") || withdrawal.equals("y")) {// 비밀번호 한번 더 입력하면 그러면 게시글 삭제.
										System.out.print("비밀번호를 입력해주세요) ");
										String withdrawal_ = sc.next();
										if(mdatas[i].getpw().equals(withdrawal_)) {
											bdatas[i]=null; //삭제~
											System.out.println("게시글이 삭제 되었습니다.");
										}
									}

								}
								else if(blletin==5) { //게시글관리 종료
									break;
								}
							}
						}
						if(act==3) {
							//초기화면
						}
						//flag=false; //아이디와 비밀번호가 맞지 않다면 플래그변수를 false로 변경
						//break;
					}

				}//for문 끝.


				if(flag) {//로그인 실패 하면 처음으로 돌아가는 것이 아닌 로그인했던 상태로 돌아감
					
					//System.out.println("로그인 실패");
					continue;
				}
			}else {
				System.out.println("   프로그램 종료");
				break;
			}		


		}
	}
}
class Member{
	private String id; //PK
	private String pw; //패스워드
	private String name; //이름
	@Override
	public String toString() {
		return this.id+"님은 "+this.name+"입니다. ["+this.pw+"]"; //비밀번호 찾는 toStirng정의
	}
	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;
	}
	Member(String id, String pw){
		this(id, pw, "로그인용 객체");
	}
	Member(String id, String pw, String name){
		this.id=id;
		this.pw=pw;
		this.name=name;
	}
	@Override
	public boolean equals(Object obj) { //메인에서 처리하지 않고 클래스에서 처리하는게 이퀄스에 목적
		if(obj instanceof String) {
			String id = (String)obj;
			if(this.id.equals(id)) {
				return true;
			}
			return false;
		}
		else if(obj instanceof Member) { //아이디 비밀번호 가지고 와서 비교
			Member member = (Member)obj;
			if(this.id.equals(member.id)) {
				if(this.pw.equals(member.pw)) {
					System.out.println("로그인 성공");
					return true;
				}
				System.out.println("비밀번호가 다릅니다.");
				return false;
			}
			System.out.println("1111");
			return false;
		}
		return false;
	}
}
class Board{
	private int num; //Pk
	private String title; //제목
	private String content; //내용
	private String writer; //member의 id //작성자

	public int getnum() {
		return num;
	}
	public void setNum(int num) {
		this.num=num;
	}
	public String gettitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title=title;
	}
	public String getcontent() {
		return content;
	}
	public void setContent(String content) {
		this.content=content;
	}
	public String getwriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer=writer;
	}
	@Override
	public String toString() {
		return this.num+" 번호\n제목 "+this.title+"\n내용 "+this.content+"\n작성자 "+this.writer; //게시글 오버라이딩
	}
	Board(int NUM,  String title, String content, String writer){
		this.num=NUM;
		this.title=title;
		this.content=content;
		this.writer=writer;
	}
}
Comments