풋살 예약 프로그램

9mond·2023년 7월 28일
1
post-thumbnail
post-custom-banner

프로젝트 설계

  • 프로그램을 실행하면 회원가입, 로그인, 프로그램 종료가 나오고 각각 1번에서 3번을 선택하도록 만들었습니다.

  • 1번 회원가입을 선택하면 아이디, 비밀번호를 입력하게 되고 가입이 완료되면 시작 화면으로 돌아갑니다.

  • 2번 로그인을 선택하면 아이디, 비밀번호를 입력 받게 되고 둘 중 하나라도 틀리면 문구가 나오며 다시 입력 받도록 나옵니다.
    로그인이 완료되면 날짜선택으로 바로 이동합니다.

  • 날짜는 연도를 먼저 선택하고 달을 선택하면 달력이 출력됩니다.
    그 후 일을 선택하면 시작 화면으로 되돌아갑니다.

  • 3번을 선택하면 프로그램이 종료됩니다.

사용한 문법

  • 각 클래스 마다 사용한 기능들 입니다.
  • 캘린더 클래스는 if문, switch문, for문을 주로 사용하였고

  • 회원정보 클래스는 생성자와 getter, setter를 사용하였습니다.

  • 멤버핸들러 클래스는 스캐너와 if문, for문을 주로 사용하였습니다.

  • 마지막으로 메인 클래스는 while문, switch문, 스캐너를 사용하였습니다.

코드

DayOfCalendar Class

  • isleapyear메서드는 윤년을 계산해줍니다.
  • getDate메서드는 1월부터 12월까지 해당하는 월이 며칠까지 있는지 리턴해줍니다.
  • getDayOfweek메서드는 해당 월의 첫번째 요일을 계산해줍니다.
  • calendarprint메서드는 위에서 계산한 메서드를 출력해주기 위한 메서드 입니다.
 public class DayOfCalendar {

	private static boolean isLeapYear(int year) {
		boolean leap = false;

		if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) {
			leap = true;
		}
		return leap;
	}

	private static int getDate(int year, int month) {
		int tmp = 0;
		if (isLeapYear(year)) {

			switch (month) {
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:
				tmp = 31;
				break;
			case 4:
			case 6:
			case 9:
			case 11:
				tmp = 30;
				break;
			case 2:
				tmp = 29;
				break;
			}
		} else {
			if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
				tmp = 31;
			} else if (month == 4 || month == 6 || month == 9 || month == 11) {
				tmp = 30;
			} else if (month == 2) {
				tmp = 28;
			}
		}
		return tmp;
	}

	private static int getDayOfWeek(int year, int month) {
		int dayOfWeek = 0;
		int sum = 0;

		for (int i = 1; i < year; i++) {
			for (int j = 1; j <= 12; j++) {
				sum += getDate(i, j);
			}
		}

		for (int k = 1; k < month; k++) {
			sum += getDate(year, k);
		}

		sum += 1;

		dayOfWeek = sum % 7;

		return dayOfWeek;
	}

	public static void calendarprint(int year, int month) {

		System.out.printf("\t\t%d년 %d월\n", year, month);
		System.out.printf("일\t월\t화\t수\t목\t금\t토\n");

		int start = DayOfCalendar.getDayOfWeek(year, month);

		int last = getDate(year, month);

		for (int i = 1; i <= start; i++) {
			System.out.print("\t");
		}

		for (int i = 1; i <= last; i++) {
			System.out.printf("%d\t", i);
			start++;
			if (start % 7 == 0) {
				System.out.println();
			}
		}

	}
}

MemberInfo Class

  • 한명의 회원정보를 저장하기 위한 클래스입니다.
public class MemberInfo {
	private String id, pw, name;

	public MemberInfo(String id, String pw, String name) {
		this.id = id;
		this.pw = pw;
		this.name = name;
	}

	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;
	}
}

MemberHandler Class

  • memberinsert메서드는 회원가입용 메서드입니다.
  • isuniqueid메서드는 아이디 중복여부를 리턴해줍니다.
  • memberlogin메서드는 로그인용 메서드 입니다.
  • choosedate메서드는 날짜 선택 메서드 입니다.
import java.util.*;

public class MemberHandler {

	private MemberInfo[] members;
	private int idx;

	public MemberHandler(int num) {
		members = new MemberInfo[num];
		idx = 0;
	}

	public void memberInsert() {
		String id, pw, name;
		Scanner scanner = new Scanner(System.in);

		System.out.print("아이디 : ");
		id = scanner.nextLine();
		if (!isUniqueID(id)) {
			System.out.println("이미 사용중인 아이디 입니다. \n");
			return;
		}
		System.out.print("암 호 : ");
		pw = scanner.nextLine();
		System.out.print("이 름 : ");
		name = scanner.nextLine();
		members[idx] = new MemberInfo(id, pw, name);
		idx++;
		System.out.println("\n");
		System.out.println("가입 완료! \t\n");

	}

	private boolean isUniqueID(String id) {
		if (idx == 0) {
			return true;
		}
		for (int i = 0; i < idx; i++) {
			if (members[i].getId().equals(id)) {
				return false;
			}
		}
		return true;
	}

	public void memberLogin() {
		Scanner scanner = new Scanner(System.in);
		System.out.print("아이디 : ");
		String id = scanner.nextLine();
		System.out.print("패스워드 : ");
		String pw = scanner.nextLine();
		String msg = "존재하지 않는 아이디 입니다.";

		for (int i = 0; i < idx; i++) {
			if (members[i].getId().equals(id)) {
				if (members[i].getPw().equals(pw)) {
					msg = "로그인 되었습니다.";
				} else {
					msg = "암호가 잘못되었습니다.";
				}
			}
		}

		System.out.println(msg);

		if (msg.equals("로그인 되었습니다.")) {
			chooseDate();
		} else {
			memberLogin();
		}
	}

	public void chooseDate() {

		Scanner scanner = new Scanner(System.in);

		System.out.print("연도 입력 : ");
		int year = scanner.nextInt();

		if (year < 1) {
			System.out.println("정확히 입력해주세요.");
			year = scanner.nextInt();
			if (year < 1) {
				System.out.println("정확히 입력해주세요.");
				year = scanner.nextInt();
			} else {
				System.out.print("월 입력 : ");
				int month = scanner.nextInt();

				DayOfCalendar.calendarprint(year, month);

				System.out.println("\n");
			}
		} else {
			System.out.print("월 입력 : ");
			int month = scanner.nextInt();

			DayOfCalendar.calendarprint(year, month);

			System.out.println("\n");

			System.out.println("예약할 날짜 선택 : ");
			int day = scanner.nextInt();
			System.out.println(day + "일로 예약 완료");

		}

	}

}

MemberManage Class

  • 마지막으로 메인 메서드입니다.
import java.util.*;

import project.DayOfCalendar;

public class MemberManage {

	public static void main(String[] args) {

		MemberHandler handler = new MemberHandler(100);

		while (true) {

			System.out.println("---- 풋살 예약 프로그램 ----");
			System.out.println("------- 메뉴 선택 -------");
			System.out.println("1. 회원가입");
			System.out.println("2. 로그인");
			System.out.println("3. 종료");

			try {
				Scanner scanner = new Scanner(System.in);
				int choice = scanner.nextInt();

				switch (choice) {

				case 1:
					System.out.println("------------------");
					handler.memberInsert();
					break;

				case 2:

					System.out.println("------------------");
					handler.memberLogin();
					break;

				case 3:
					System.out.println("------------------");
					System.out.println("프로그램 종료");
					return;
				}
			} catch (Exception e) {
				System.out.println("잘못 입력했습니다.");
			}
		}
	}
}
    1. 회원가입
      이렇게 가입완료가 되면
    1. 로그인 시도
      로그인 잘못 입력했을 시 존재하지 않는 아이디 입니다. 또는 암호가 잘못되었습니다.라고 나옵니다.
      로그인을 제대로 하면 년(year), 월(month)을 선택합니다.
      날짜를 다 선택하면
      달력이 나오고 일(day)을 선택합니다.
  • 다 끝나면 처음 화면으로 돌아갑니다.
    종료를 누르면 프로그램이 종료됩니다.

소감

  1. 제가 생각한 것처럼 프로그램으로 구현하는게 역시나 쉽지 않다는 걸 느꼈습니다.
    처음에는 '그냥 이렇게 이렇게 만들어서 하면 되지 않을까' 하고 생각했다가 설계를 해보고 코드 구현을 해보다보니 막막한 부분들이 생겼던것 같습니다.

  2. 제가 막혔던 부분을 구글에 검색해보면 거의 대부분 자동 완성으로 나왔고 그로인해 많은 도움을 받을 수 있었습니다. 정말 '구글이 없었으면 이 문제들을 어떻게 해결할 수 있었을까' 생각도 들었고, 구글링을 잘 하는 것도 능력이라고 느꼈습니다.

  3. JAVA SWING을 활용해서 좀 더 완성도 있는 결과물을 만들고 싶었지만, 아직 프로그램 짜는 것도 버거워서 활용하지 못한게 조금 아쉬웠습니다.

  4. ppt 만드는 게 꽤 시간과 정성이 많이 들어가는 거 같았습니다. 앞으로 프로젝트를 계속 해야하니까 잘 맞는 프로그램을 찾아봐야겠다고 생각했습니다.

보완점

  • 모순적이게도 예약프로그램인데 아이디, 비밀번호와 날짜를 저장해서 조회하지 못했다는게 아쉬웠습니다. 주제를 바꿀까 생각도 들었지만 그러기엔 시간과 주제들이 모호해질 것 같아서 바꾸지 않았습니다. 배열을 잘 활용해보면 될 거 같은데 지금은 감이 안 와서 조금 더 고민을 해봐야될 것 같습니다.
profile
개발자
post-custom-banner

0개의 댓글