import java.util.LinkedList;
import java.util.Scanner;

class Lib {
	Lib(String name, boolean rental, int stock) {
		this.name = name;
		this.rental = rental;
		this.stock = stock;
	}

	Lib(String name, int stock) {
		this(name, true, stock);
	}

	Lib(String name) {
		this(name, true, 1);
	}

	String name; // 책이름
	boolean rental = true; // 대여여부 true면 대여 가능
	int stock; // 남은 책 재고

	void rent() {
		if (this.rental) {
			System.out.println(this.name + "대여 완료되었습니다.");
			this.rental = false;
		} else {
			System.out.println("이미 대여된 책입니다.");
		}
	}

	@Override
	public String toString() {
		return name + ", 남은 수량 : [" + stock + "]권";
	}

}

class Person {
	String name;
	int maxRent = 3;

	Person(String name) {
		this.name = name;
	}

	boolean rentBook() {
		if (maxRent == 0) {
			return true;
		}
		maxRent--;
		return false;
	}

	boolean returnBook() {
		maxRent++;
		if (maxRent > 3) {
			maxRent--;
			return true;
		}
		return false;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", maxRent=" + maxRent + "]";
	}
	

}

public class LibTest {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		LinkedList<Lib> ll = new LinkedList();
		LinkedList<Person> lc = new LinkedList();
		ll.add(new Lib("해리포터"));
		ll.add(new Lib("마법천자문", 4));
		ll.add(new Lib("무인도에서 살아남기", true, 3));
		ll.add(new Lib("무서운게 딱좋아", 5));
		lc.add(new Person("이름"));

		while (true) {
			System.out.println("=============== 중 앙 도 서 관 ===============");
			System.out.println("1. 대여   2. 반납   3. 책 목록   4. 회원 관리   5. 종료");
			System.out.print("\n원하시는 서비스 번호를 눌러주세요 : ");
			int num = sc.nextInt();
			if (num == 1) { // 책 대여
				System.out.print("회원만 이용 가능합니다. 이름을 입력해 주세요 : "); // 회원만 이용가능

				String inputName = sc.next();
				int customNum = 0;
				boolean flag = true; // 회원 등록 확인하는 flag
				for (int i = 0; i < lc.size(); i++) {
					if (lc.get(i).name.equals(inputName)) {
						customNum = i;
						flag = false; // 회원이 있으면 false
					}
				}
				if (flag) {
					System.out.println("등록되지 않은 회원입니다.");
					continue;
				}
				if(lc.get(customNum).rentBook()) {
					System.out.println("최대 3권까지 대여 가능합니다.");
					continue;
				}
				for (Lib l : ll) { // 책 목록 출력
					System.out.println(l);
				}
				System.out.print("\n원하시는 책의 번호를 입력하세요 : ");
				num = sc.nextInt();
				if (ll.get(num - 1).rental) { // true면 대여진행
					System.out.println("반납기한은 현재로부터 7일 뒤입니다.");
					ll.get(num - 1).stock--; // 대여 진행 후 재고--
					if (ll.get(num - 1).stock == 0) { // 남은 책 재고가 0이면
						System.out.println("마지막 남은 책 입니다. 재미있게 읽으세요!");
						ll.get(num - 1).rental = false; // 대여 불가로 만들기
					}
				} else {
					System.out.println("재고가 부족하여 대여할 수 없습니다. 다시 선택해 주세요!");
					continue;
				}
			} else if (num == 2) {	// 반납
				System.out.print("회원만 이용 가능합니다. 이름을 입력해 주세요 : "); // 회원만 이용가능
				int customNum = 0;
				String inputName = sc.next();
				boolean flag = true; // 회원 등록 확인하는 flag
				for (int i = 0; i < lc.size(); i++) {
					if (lc.get(i).name.equals(inputName)) {
						customNum = i;
						flag = false; // 회원이 있으면 false
					}
				}
				if (flag) {
					System.out.println("등록되지 않은 회원입니다.");
					continue;
				}
				if (lc.get(customNum).returnBook()){
					System.out.println("최대 3권까지 대여 할 수 있습니다.");
					continue;
				}
				for (Lib l : ll) { // 책 목록 출력
					System.out.println(l);
				}
				System.out.print("\n몇번째 책을 반납하시겠습니까 : ");
				num = sc.nextInt();
				System.out.println("반납완료");
				ll.get(num - 1).stock++; // 반납 진행 후 재고++
				if (ll.get(num - 1).stock == 1) { // ++ 된 책이 1권이면 원래는 0권이였으니
					System.out.println(ll.get(num - 1).name + " 은 이제 대여 가능합니다.");
					ll.get(num - 1).rental = true; // 대여 가능으로 만들기

				}
			} else if (num == 3) {
				for (Lib l : ll) { // 책 목록 출력
					System.out.println(l);
				}
			} else if (num == 4) {
				System.out.println("1. 회원 등록   2. 회원 탈퇴");
				System.out.print("원하시는 메뉴를 선택하세요. : ");
				num = sc.nextInt();
				System.out.print("이름을 입력하세요 : "); // 이름입력은 공통
				String inputName = sc.next();
				if (num == 1) {
					lc.add(new Person(inputName)); // 회원 등록
				} else if (num == 2) { // 회원 탈퇴
					boolean flag = true; // 회원 등록 확인하는 flag
					for (int i = 0; i < lc.size(); i++) {
						if (lc.get(i).name.equals(inputName)) {
							flag = false; // 회원이 있으면 false
							if (!(lc.get(i).maxRent == 3)) {	// 미반납책 확인
								System.err.println("반납을 아직 안한 책이 있습니다. 반납후 다시 이용해주시기 바랍니다.");
								break;
							}
							lc.remove(i);
							break;
						}
					}
					if (flag) {
						System.out.println("등록되지 않은 회원입니다.");
						continue;
					}
				} else {
					System.out.println("잘못입력하셨습니다.");
					continue;
				}
			} else if (num == 5) { // 탈출

				System.out.println("안녕히 가세요!");
				break;
			} else { // 잘못입력시
				System.out.println("잘못입력하셨습니다.");
			}

		}
	}

}

+ Recent posts