휴먼교육센터 개발자과정 36,37일차

조하영·2022년 9월 22일
0

코드 분석하는 법
1. 클래스별 전역변수와 메서드 분석
2. 시작메서드부터 직접 실행하면서 흐름을 이해

미니 프로젝트
주제: 쇼핑몰 관리 프로그램

클래스

1.메인 클래스
2.메뉴 클래스
3.상품관리 클래스
4.회원관리 클래스
5.상품 클래스
6.회원 클래스
7.장바구니 물건 클래스

주요기능

  1. 상품 관리
    1.1상품등록: 상품의 이름, 아이디, 수량, 단가를 입력받아 상품 목록에 저장하는 기능

    1.2상품수정: 수정할 상품의 이름을 입력받고 상품 목록에 같은 이름이 있으면 수량과 가격을 입력받아 수정,
    같은 이름이 없으면 이름이 없다고 안내 한 후 상위 메뉴로 돌아가는 기능.

    1.3전체보기: 상품 목록에 있는 모든 상품의 정보를 보여주는 기능.

    1.4상품삭제: 삭제할 상품의 이름을 입력받고 상품 목록에 같은 이름이 있으면 상품을 삭제,
    같은 이름이 없으면 이름이 없다고 안내 한 후 상위 메뉴로 돌아가는 기능.

    1.5상품검색: 검색할 상품의 이름을 입력받고 상품 목록에 같은 이름이 있거나 단어가 포함된 이름이 있으면
    상품의 정보를 보여주고 같은 이름이 없으면 이름이 없다고 안내 한 후 상위 메뉴로 돌아가는 기능.

    1.6이전메뉴: 상위 메뉴로 돌아가는 기능.

  2. 쇼핑몰
    2.1회원가입: 회원의 이름, 아이디 , 비밀번호를 입력 받아 회원 목록에 저장하는 기능
    아이디 중복 검사기능: 회원 목록에 있는 아이디일 경우 이미 사용중인 ID라고 안내후 상위메뉴로 돌아감.
    비밀번호 확인 기능: 비밀번호와 비밀번호 확인을 두어 두개의 입력값이 같을 경우만 회원 목록에 저장하고
    두 입력값이 다르면 비밀번호를 확인하세요라고 안내후 상위메뉴로 돌아감.

    2.2로그인: 회원의 아이디와 비밀번호를 입력 받은 후 회원 목록에서 같은 아이디와 비밀번호가 있다면 로그인을 해주는 기능
    만일 회원 목록에 회원이 아무도 없다면 회원이 없습니다. 회원가입부터 해주세요 안내 후 상위메뉴로 돌아감.

    로그인 후 보이는 기능

    2.2.1회원 관리
    2.2.1.1 내정보 : 로그인 되어있는 회원의 이름, 아이디, 비밀번호를 보여주는 기능.

    2.2.1.2 회원수정 : 새로운 이름과 새로운 비밀번호를 입력받아 로그인 되어있는 회원의 정보를 수정.

    비밀번호 확인 기능: 새로운 비밀번호를 입력받고 비밀번호 확인을 입력받아
    두 입력값이 같을 경우 수정하고 다르면 비밀번호 확인 출력후 상위메뉴

    2.2.1.3 회원탈퇴 : 정말로 탈퇴할지 한번더 묻고 y를 입력하면 회원 목록에서 삭제 후 상위메뉴로 돌아감.
    y이외의 문자 입력하면 상위 메뉴로 돌아감.

    2.2.2쇼핑하기: 상품목록에 있는 모든 상품의 리스트를 보여주고 구매할 상품의 번호와 구매할 수량을 입력 받아 장바구니 리스트에 저장하는 기능.

    상품과 구매수량 연동기능: 구매가 발생될때 구매한 수량만큼 상품의 재고가 줄어들고
    재고가 구매할 수량보다 적다면 수량이 부족하다고 안내

    구매수량과 단가를 곱하여 가격을 저장하는 기능: 구매할때 상품의 가격과 내가 구매한 수량을 곱하여 장바구니에 가격을 저장

    2.2.3장바구니 보기: 장바구니 리스트에 있는 상품의 이름, 수량, 가격을 보여주는 기능

    2.2.4이전메뉴: 상위메뉴로 돌아가는 기능

    2.3이전메뉴: 상위메뉴로 돌아가는 기능

  3. 프로그램 종료
    모든 프로그램을 종료하는 기능

메인클래스

package Market;

public class Main {

    public static void main(String[] args) {
        System.out.println("프로그램 시작");
        new Menu();
        System.out.println("프로그램 종료");
    }

}

메뉴클래스

package Market;

import java.util.Scanner;

public class Menu {
    Scanner in = new Scanner(System.in);
    GoodsManager a = new GoodsManager();
    MemberManager b = new MemberManager(a);

    Menu() {
        //숫자를 입력받아야 되는데 실수로 문자를 입력하여 생기는 오류를
        //방지하기 위해 모든 숫자 입력은 문자로 입력받아
        //equals를 사용하였습니다.
        for (;;) {
            menu();
            String selMenu = in.nextLine();
            if (selMenu.equals("1")) {//상품관리
                a.runGoods();
            } else if (selMenu.equals("2")) {//쇼핑몰
                b.menu();
            } else if (selMenu.equals("3")) {//프로그램종료
                break;
            } else {
                System.out.println("잘못된 입력입니다.");
            }
        }
    }

    private void menu() {
        System.out.println("-----------");
        System.out.println("1. 상품관리");
        System.out.println("2. 쇼핑몰");
        System.out.println("3. 프로그램종료");
        System.out.println("-----------");
    }
}

상품등록 클래스

package Market;

import java.util.ArrayList;
import java.util.Scanner;

public class GoodsManager {

    ArrayList<Goods> gList = new ArrayList<>();
    Scanner in = new Scanner(System.in);

    public void runGoods() {
        for (;;) {
            menu();
            String selMenu = in.nextLine();
            if (selMenu.equals("1")) {// 상품등록
                addGoods();
            } else if (selMenu.equals("2")) {// 상품수정
                modGoods();
            } else if (selMenu.equals("3")) {// 상품전체보기
                listGoods();
            } else if (selMenu.equals("4")) {// 상품삭제
                delGoods();
            } else if (selMenu.equals("5")) {// 상품조회
                searchGoods();
            } else if (selMenu.equals("6")) {// 이전메뉴
                break;
            } else {
                System.out.println("잘못된 입력입니다.");
            }
        }
    }

    private void searchGoods() {//상품조회
        System.out.println("검색할 이름을 입력하세요");
        String b = in.nextLine();
        boolean flag = false;
        for (int i = 0; i < gList.size(); i++) {
            if (gList.get(i).name.equals(b)) {//검색할 이름과 일치할때
                System.out.println(b + "와 같은 이름");
                gList.get(i).prt();
                flag = true;
                System.out.println("--------------");
            } else if (gList.get(i).name.indexOf(b) != -1) {//검색할 이름이 포함될때
                System.out.println(b + "를 포함하는 이름");
                gList.get(i).prt();
                flag = true;
                System.out.println("--------------");
            }
        }
        if (flag == false) {// 검색한 이름이 없을때
            System.out.println("이름이 없습니다.");
        }
    }

    private void delGoods() {//상품삭제
        System.out.println("삭제할 이름을 입력하세요");
        String b = in.nextLine();
        boolean flag = true;
        for (int i = 0; i < gList.size(); i++) {
            if (gList.get(i).name.equals(b)) {//상품 리스트에 이름이 있을때
                gList.remove(i);
                System.out.println(b + "삭제 완료");
                flag = false;
            }
        }
        if (flag) {// 상품리스트에 상품이 없을때
            System.out.println("이름이 없습니다.");
        }
    }

    private void modGoods() {//상품수정
        System.out.println("수정할 이름을 입력하세요");
        String b = in.nextLine();
        boolean flag = true;
        for (int i = 0; i < gList.size(); i++) {
            if (gList.get(i).name.equals(b)) {//상품 리스트에 이름이 있을때 
                //수량과 가격만 수정가능
                System.out.println("수량을 입력하세요");
                int newInt = in.nextInt();
                in.nextLine();
                gList.get(i).cnt = newInt;

                System.out.println("가격을 입력하세요");
                newInt = in.nextInt();
                in.nextLine();
                gList.get(i).price = newInt;
                flag = false;
            }
        }
        if (flag) {// 상품리스트에 상품이 없을때
            System.out.println("이름이 없습니다.");
        }
    }

    private void addGoods() {//상품등록
        Goods newGoods = new Goods();
        System.out.println("이름 입력");
        String name = in.nextLine();
        System.out.println("아이디 입력");
        String id = in.nextLine();
        System.out.println("수량 입력");
        int cnt = in.nextInt();
        in.nextLine();
        System.out.println("단가 입력");
        int price = in.nextInt();
        in.nextLine();
        newGoods.setting(name, id, cnt, price);

        gList.add(newGoods);//상품의 주소값을 상품리스트에 저장
    }

    public void listGoods() {//상품리스트에 있는 상품을 보여주는 메서드
        for (int i = 0; i < gList.size(); i++) {
            System.out.println(i + "번 정보-------");
            gList.get(i).prt();
            System.out.println("------------");
        }
    }

    private void menu() {
        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("6. 이전메뉴");
        System.out.println("-----------");
    }

}

상품클래스

package Market;

public class Goods {

    String name = null;//상품의 이름
    String id = null;//상품의 아이디
    int cnt = 0;//상품의 수량
    int price = 0;//상품의 가격

    //상품의 이름, 아이디, 수량, 가격을 입력받아 저장하는 메서드
    public void setting(String name, String id, int cnt, int price) {
        this.name = name;
        this.id = id;
        this.cnt = cnt;
        this.price = price;
    }

    public void reCnt(int cnt) {//회원이 구매하는 수량을 받아 상품의 재고를 빼주는 메서드
        this.cnt -= cnt;
    }

    public void prt() {//상품의 정보를 보여주는 메서드
        System.out.println("이름: " + this.name);
        System.out.println("아이디: " + this.id);
        System.out.println("수량: " + this.cnt);
        System.out.println("가격: " + this.price);
    }
}

회원관리 클래스

package Market;

import java.util.ArrayList;
import java.util.Scanner;

public class MemberManager {

    ArrayList<Member> mem = new ArrayList<>();
    Scanner in = new Scanner(System.in);
    int memberIdx;
    GoodsManager b = null;

    public MemberManager(GoodsManager a) {
        b = a;
    }

    public void menu() {
        for (;;) {
            System.out.println("------------");
            System.out.println("1. 회원 가입");
            System.out.println("2. 로그인");
            System.out.println("3. 이전메뉴");
            System.out.println("------------");
            String selMenu = in.nextLine();
            if (selMenu.equals("1")) { //회원가입
                memberJoin();
            } else if (selMenu.equals("2")) { //로그인
                if (mem.size() != 0) { //회원리스트에 회원이 있을때
                    chkMember();
                } else { //회원리스트에 회원이 한명도 없을때
                    System.out.println("회원이 없습니다. 회원가입부터 해주세요.");
                }

            } else if (selMenu.equals("3")) {//이전메뉴
                break;
            } else {
                System.out.println("잘못된 입력입니다.");
            }
        }
    }

    private void chkMember() {//로그인 메서드
        System.out.println("ID를 입력하세요");
        String memberId = in.nextLine();
        System.out.println("비밀번호를 입력하세요");
        String memberPwd = in.nextLine();
        int flag = 0;
        for (int i = 0; i < mem.size(); i++) {//회원리스트에서 아이디와 비번을 찾아 모두 같으면 로그인
            if (mem.get(i).memberId.equals(memberId) && mem.get(i).memberPwd.equals(memberPwd)) {
                System.out.println(memberId + "님 환영합니다.");
                memberIdx = i;//아이디와 비번이 같은 회원의 인덱스 값을 전역 변수에 저장해서 다른 메서드에서 사용
                joinMenu();
                flag = 1;
            } 
        }
        if(flag == 0) {
            System.out.println("회원정보를 확인하세요");
        }
    }

    private void joinMenu() {
        for (;;) {
            System.out.println("------------");
            System.out.println("1. 회원 관리");
            System.out.println("2. 쇼핑하기");
            System.out.println("3. 장바구니보기");
            System.out.println("4. 이전메뉴");
            System.out.println("------------");
            String selMenu = in.nextLine();
            if (selMenu.equals("1")) {
                System.out.println("------------");
                System.out.println("1. 내정보");
                System.out.println("2. 회원 수정");
                System.out.println("3. 회원 탈퇴");
                System.out.println("------------");
                String selMenu2 = in.nextLine();
                if (selMenu2.equals("1")) { //내 정보
                    mem.get(memberIdx).memberPrt();
                } else if (selMenu2.equals("2")) { //회원수정, 아이디는 유일하므로 수정 안됨.
                    System.out.println("------------");
                    System.out.println("새로운 이름을 입력하세요");
                    String memberName = in.nextLine();
                    System.out.println("새로운 비밀번호를 입력하세요");
                    String memberPwd = in.nextLine();
                    System.out.println("비밀번호 확인");
                    String memberChkPwd = in.nextLine();

                    if (memberPwd.equals(memberChkPwd)) {//비번과 비번확인이 같으면 수정
                        mem.get(memberIdx).memberName = memberName;
                        mem.get(memberIdx).memberPwd = memberPwd;
                    } else {
                        System.out.println("비밀번호를 확인하세요.");
                    }
                } else if (selMenu2.equals("3")) {
                    System.out.println("정말로 탈퇴하시겠습니까?(Y/N)");
                    String b = in.nextLine();
                    b.toLowerCase();//입력받은 문자를 소문자로 바꿈
                    if (b.equals("y")) {
                        mem.remove(memberIdx);
                        System.out.println("탈퇴완료");
                        break;
                    } else {
                        System.out.println("메뉴로 돌아갑니다.");
                    }
                } else {
                    System.out.println("잘못된 입력입니다.");
                }
            } else if (selMenu.equals("2")) {//쇼핑하기
                mem.get(memberIdx).shopping(b);

            } else if (selMenu.equals("3")) {//장바구니 보기
                System.out.println("장바구니 정보-------");
                mem.get(memberIdx).viewBasket();
                System.out.println("----------------");

            } else if (selMenu.equals("4")) {//이전메뉴
                break;
            } else {
                System.out.println("잘못된 입력입니다.");
            }
        }
    }

    private void memberJoin() {//회원가입
        Member save = new Member();
        System.out.println("이름을 입력하세요");
        String memberName = in.nextLine();
        System.out.println("ID를 입력하세요");
        String memberId = in.nextLine();
        System.out.println("비밀번호를 입력하세요");
        String memberPwd = in.nextLine();
        System.out.println("비밀번호 확인");
        String memberChkPwd = in.nextLine();
        int flag = 0;
        if (mem.size() != 0) {//회원리스트에 회원이 있을때
            for (int i = 0; i < mem.size(); i++) {//회원 ID 중복체크
                if (mem.get(i).memberId.equals(memberId)) {
                    System.out.println("이미 사용중인 ID입니다.");
                    flag = 1;
                }
            }
            if (flag == 0) {//중복된 아이디가 아닐때 가입
                if(memberPwd.equals(memberChkPwd)) {//비번과 비번확인이 같을때 저장
                    save.inputMember(memberName, memberId, memberPwd);
                    mem.add(save);
                    System.out.println("회원가입 되었습니다.");
                }else {//비번과 비번확인이 다를때
                    System.out.println("비밀번호를 확인하세요.");
                }

            } 

        } else {// 회원 리스트에 회원이 없을때
            if (memberPwd.equals(memberChkPwd)) {//비번과 비번확인이 같을때 저장
                save.inputMember(memberName, memberId, memberPwd);
                mem.add(save);
                System.out.println("회원가입 되었습니다.");
            } else {//비번과 비번확인이 다를때
                System.out.println("비밀번호를 확인하세요.");
            }
        }
    }
}

회원 클래스

package Market;

import java.util.ArrayList;
import java.util.Scanner;

public class Member {
    String memberName = null;//회원이름
    String memberId = null;//회원아이디
    String memberPwd = null;//회원비번

    //회원의 이름, 아이디, 비번을 매개변수로 받아 저장하는 메서드
    public void inputMember(String memberName, String memberId, String memberPwd) {
        this.memberName = memberName;
        this.memberId = memberId;
        this.memberPwd = memberPwd;
    }

    public void memberPrt() {//회원의 정보를 출력하는 메서드
        System.out.println("이름: " + memberName);
        System.out.println("ID: " + memberId);
        System.out.println("Pwd: " + memberPwd);
    }

    ArrayList<GoodsBasket> basket = new ArrayList<>();

    public void viewBasket() { //장바구니에 있는 상품을 출력하는 메서드
        for (int i = 0; i < basket.size(); i++) {
            System.out.println("------------");
            basket.get(i).basketPrt();
        }
    }

    Scanner in = new Scanner(System.in);

    public void shopping(GoodsManager c) {
        c.listGoods();//상품리스트에 있는 상품 목록을 보여줌
        System.out.println("구매할 물건의 번호를 입력하세요");
        System.out.println("이전메뉴로 가려면 100을 입력하세요");
        String a = in.nextLine();
        int b = Integer.parseInt(a);
        if (b < c.gList.size()) {//구매할 상품의 번호의 범위 안에 있을때
            Goods g = c.gList.get(b);
            System.out.println("구매할 수량을 입력하세요");
            String a1 = in.nextLine();
            int b1 = Integer.parseInt(a1);
            if (g.cnt - b1 < 0) {//상품의 재고가 사려는 수량보다 적을 경우
                System.out.println("수량이 부족합니다.");
            } else {//모든 조건에 만족될때 구매 가능
                GoodsBasket gb = new GoodsBasket();
                gb.name = g.name;
                g.reCnt(b1);//상품의 재고 수량을 구매수량만큼 빼기
                gb.plusCnt(b1);//구매 수량만큼 장바구니 물건 객체에 저장
                gb.sumPrice(g.price);//구매수량에 상품의 가격을 곱하여 장바구니 상품 가격에 저장
                basket.add(gb);// 장바구니 상품의 주소값을  장바구니 리스트에 저장
                System.out.println(g.name + " " + b1 + "개 구매 완료");
            }
        } else if (b == 100) {//상품을 구매하지 않고 상위메뉴로 가고 싶을때 
            System.out.println("이전메뉴로 갑니다.");
        } else {//구매할 물건의 번호를 넘어가는 숫자를 입력할때
            System.out.println("잘못된 입력입니다.");
        }
    }
}

장바구니 클래스

package Market;

public class GoodsBasket {

    String name = null; //장바구니 상품의 이름
    int cnt = 0;// 장바구니 상품의 수량
    int goodsPrice = 0;// 장바구니 상품의 가격

    //회원이 구매하는 수량을 장바구니 상품 수량에 저장
    public void plusCnt(int cnt) {
        this.cnt += cnt;
    }

    //회원이 구매하는 수량과 상품의 가격을 곱하여 장바구니 상품 가격에 저장
    public void sumPrice(int goodsPrice) {
        this.goodsPrice = cnt * goodsPrice;
    }

    public void basketPrt() {//장바구니의 상품 정보를 보여주는 메서드
        System.out.println("물건:" + name);
        System.out.println("수량:" + cnt);
        System.out.println("가격:" + goodsPrice);
    }
}
profile
공부하는 개발자

0개의 댓글