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("잘못입력하셨습니다.");
}
}
}
}