1. Member
package shoppingBasket;
public class Member {
String id;
String pw;
Member() { } // Member 기본 인스턴스 생성 할 수 있으니 기본 생성자 만들어놓기 -> 매개변수있는 생성자 있으면 컴파일러가 기본 생성자를 자동적으로 만들어주지 않는다.
Member(String id, String pw) {
this.id = id;
this.pw = pw;
}
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;
}
}
2. ShopApp
package shoppingBasket;
public class ShoppingApp {
public static void main(String[] args) {
Shopping sp = new ShoppingImpl();
sp.init();
}
}
3. Shopping - Interface
package shoppingBasket;
public interface Shopping {
// 1. 실행
void init();
// 2. 회원가입
void join();
// 2-1. 회원가입 할 때 기존에 아이디 있는지 확인
Member findById();
// 3. 로그인
void login();
// 4. 장보기 메뉴
void showMenu();
// 5. 장보기
void shop();
// 6. 장바구니
void showCart();
// 7. 프로그램 종료
void quit();
}
4. ShoppingImpl
package shoppingBasket;
import java.util.*;
import java.util.regex.Pattern;
public class ShoppingImpl implements Shopping {
private static Scanner sc = new Scanner(System.in);
private static final List<Member> list = new ArrayList<>(); // 회원정보 저장소 / static 변수 : 모든 인스턴스에 공통적으로 사용
private static final Set cart = new HashSet(); // 장바구니
private String emailId = ""; // 입력한 id에 @gmail.com을 붙여서 저장한 변수
@Override
public void init() {
while (true) {
System.out.println("*****장보기 프로그램*****");
System.out.println("원하는 번호를 입력해주세요.");
System.out.print("1. 회원가입\n" + "2. 로그인\n" + "3. 종료\n");
System.out.println(">>");
String input = sc.next();
if ("".equals(input)) continue;
if (input.equals("1")) join();
else if (input.equals("2")) login();
else if (input.equals("3")) quit();
else System.out.println("잘못 입력하셨습니다.");
}
}
@Override
public void join() {
// Member member = new Member(); // 아이디, 비밀번호 저장할 멤버 인스턴스 생성
boolean run = true;
String id = "";
while (run) {
System.out.println("*******************");
System.out.println("아이디 (맨앞만 숫자 불가능/ 대소문자,숫자 모두 가능/ 최소 4자에서 12자까지 특수문자 불가)");
System.out.println(">>");
id = sc.next();
String regExp = "[a-zA-Z]{1}[a-zA-Z0-9]{3,11}"; // 맨앞만 숫자 불가능/ 대소문자,숫자 모두 가능/ 최소 4자에서 12자까지 특수문자 불가)
// 1. ID가 정규식 조건에 부합하는지
boolean isMatch = Pattern.matches(regExp, id);
emailId = id + "@gmail.com";
if (!isMatch) { // ID가 정규식 조건에 부합하지 않으면 부합하면 해당 블럭{}만 수행하고 if문을 빠져나간다.
System.out.println("ID 로 사용할 수 없습니다.");
} else { // ID가 정규식 조건에 부합하면 -> 2. 중복 아이디가 없는지
if (findById() == null) { // 중복 아이디가 없다.
break; // while문을 빠져나가서 저장
} else {
System.out.println("이미 중복된 ID가 있습니다.");
System.out.println("다시 한 번 입력해주세요\n");
}
}
} // while
System.out.println(id + "는 ID로 사용할 수 있습니다.");
// member.setId(emailId); //
System.out.println("비밀번호\n >>");
String pw = sc.next();
// member.setPw(pw); // pw 저장
Member member = new Member(emailId, pw);
list.add(member); // 회원정보 저장소에 저장
run = false;
System.out.println(id + "님의 회원가입이 완료되었습니다.\n");
}
@Override
public void login() {
boolean run1 = true;
boolean run2 = true;
while (run1) { // 아이디 while문
System.out.println("아이디를 입력하세요");
System.out.println(">>");
String id = sc.next();
emailId = id + "@gmail.com";
if (findById() == null) {
System.out.println("아이디가 없습니다.");
} else { // 일치하는 아이디가 있을 때
run1 = false;
while (run2) { // 비밀번호 while문
System.out.println("비밀번호를 입력하세요");
System.out.println(">>");
String pw = sc.next();
// nextLine()는 Enter값을 기준으로 메소드를 종료시킨다. next()는 문자열만 리턴하고 종료 -> Enter값이 남아있음.
sc.nextLine(); // 엔터값이 남아있어서 이걸로 흡수
if (findById().getPw().equals(pw)) {
System.out.println("로그인 되었습니다.");
showMenu();
run2 = false;
} else {
System.out.println("비밀번호를 잘못 입력하였습니다.");
System.out.println("다시 입력해주세요\n");
}
}
}
}
}
@Override
public void showMenu() {
boolean run = true;
while (run) {
System.out.println();
System.out.println("**********************");
System.out.println("원하는 번호를 입력하세요.");
System.out.println("1. 장보기");
System.out.println("2. 장바구니 보기");
System.out.println("3. 메인화면으로 돌아가기");
System.out.println(">>");
String input = sc.nextLine();
switch (input) {
case "1":
shop();
break;
case "2":
showCart();
break;
case "3":
run = false;
break;
default:
System.out.println("잘못 입력하였습니다.");
System.out.println("다시 입력하세요.");
}
}
}
@Override
public void shop() {
boolean run = true;
while (run) {
System.out.println("******** 장보기 - 물품을 입력하세요 *********");
System.out.println("구분자(,)사용하여 입력하세요 - ex) 사과,배,과자");
System.out.println("if) 추가 물품이 없을 경우, exit 입력");
System.out.println(">>");
String product = sc.nextLine().trim();
if (product.equalsIgnoreCase("exit")) break;
else {
String[] p1 = product.split(","); // 구분자로 나눠서 String 배열에 각각 저장
for (String s : p1) {
String p2 = s.trim();
cart.add(p2); // 장보기에서 똑같은 과일을 입력했을시 중복으로 넣어버리기 -> 인터페이스 set(중복x)을 구현한 HashSet 클래스 쓰기
}
}
}
}
@Override
public void showCart() {
int index = 1; // 장바구니 물품 번호(AutoIncrease)
System.out.println();
System.out.println("*************");
System.out.println("장바구니 목록");
Iterator it = cart.iterator(); // Iterator : 컬렉션에 저장된 요소를 접근하는데 사용
while (it.hasNext()) {
System.out.print(index++ + "." + it.next() + " ");
}
}
@Override
public void quit() {
System.exit(0);
System.out.println("프로그램이 종료되었습니다");
}
@Override
public Member findById() {
for (Member m : list) {
if (m.getId().equals(emailId))
return m;
}
return null; // 메소드가 특정조건에서 값을 반환할 수 없을 때 null 반환보다는 추후에 Optional을 이용해 보자 https://eglowc.tistory.com/42(clean code)
}
}
'JavaStudy(open) > 코딩' 카테고리의 다른 글
java를 이용한 미니 프로젝트 (0) | 2021.07.18 |
---|---|
지네릭스 기능 이용하여 프로그램 만들기 (0) | 2021.07.04 |
Chapter 10 날짜와 시간 & 형식화 이용하여 도서관 책 빌리기 프로그램 만들기 (0) | 2021.06.27 |
게시판 만들어보기(맴버 아이디 별로 게시글 작성하기, 삭제시 userName과 password 확인 후 삭제, memberId로 게시글을 조회 했을시 없는 사용자일때 예외로 던지고 예외처리 ) (0) | 2021.06.17 |
일부러 예외를 발생시켜 catch문 동작 시켜보기 (여러 RuntimeException 해보기) (0) | 2021.06.17 |