DEVELOPER NOMAD

JAVA 를 이용한 도서관 관리 프로그램 ( java library management program ) 본문

JAVA(자바)/JAVA(자바) 프로젝트

JAVA 를 이용한 도서관 관리 프로그램 ( java library management program )

DEVELOPER NOMAD 2019. 1. 4. 15:05

안녕하세요 ~! 도서관 관리 프로그램을 구현 해보았는데요. 사용자 VO 와 도서관 VO 클래스 를 나누어 제작해 보았습니다.


부족하지만 도움이 되면 좋을것 같습니다.

 

먼저 사용자 쪽의 VO 클래스 입니다. 사용자의 정보를 구성하고 이정보를 주고 받을 수 있는 클래스 입니다.


public class UserVO {

private String id;

private String pwd;

private String name;

private String birth;

private String phone;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getPwd() {

return pwd;

}

public void setPwd(String pwd) {

this.pwd = pwd;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getBirth() {

return birth;

}

public void setBirth(String birth) {

this.birth = birth;

}

public String getPhone() {

return phone;

}

public void setPhone(String phone) {

this.phone = phone;

}

}



그리고 사용자 쪽의 인터페이스 메소드 모음입니다.


회원가입, 로그인, 로그아웃, 회원검색 , 회원리스트 출력, 회원정보 수정, 회원정보 삭제 로 구성 되어 있습니다.


public interface User {


public void join(); // 회원가입한다.

public void logIn(); // 로그인한다.

public void logOut(); // 로그아웃한다.

public void userSecrch(); // 회원을 검색한다.

public void printUserList();     // 회원리스트를 출력한다.

public void userUpdate(); // 회원정보를 수정한다.

public void userDelete(); // 회원탈퇴, 삭제한다.

}



사용자 쪽의 인터페이스 메소드 구현 부분 입니다.!

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;

public class UserImpl implements User {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private List<UserVO> list = new LinkedList<UserVO>();
private UserVO uservo;
public UserImpl() {
UserVO vo = new UserVO();
vo.setId("admin");
vo.setPwd("admin");
vo.setName("관리자");
vo.setBirth("2000-10-10");
vo.setPhone("010-1234-5678");
list.add(vo);
}
@Override
public void join() {
System.out.println("\n회원 가입...");
try {
UserVO vo = new UserVO();

System.out.print("아이디 ? ");
vo.setId(br.readLine());

if (readUser(vo.getId()) != null) {
System.out.println("등록된 아이디 입니다.\n");
return;
}

System.out.print("패스워드 ? ");
vo.setPwd(br.readLine());

System.out.print("이름 ? ");
vo.setName(br.readLine());

System.out.print("생년월일 ? ");
vo.setBirth(br.readLine());
System.out.print("폰번호 ? ");
vo.setPhone(br.readLine());

list.add(vo);
System.out.println("회원 가입을 축하합니다. 로그인 하세요\n");

} catch (IOException e) {
System.out.println(e.toString());
}
}

@Override
public void logIn() {
System.out.println("\n회원 로그인...");
String id, pwd;
try {
System.out.print("아이디 ? ");
id=br.readLine();
System.out.print("패스워드 ? ");
pwd=br.readLine();
UserVO vo = readUser(id);
if(vo!=null) {
if(vo.getPwd().equals(pwd)) {
uservo = vo;
return;
}
}
System.out.println("아이디 또는 패스워드가 일치하지 않습니다.\n");
} catch (IOException e) {
System.out.println(e.toString());
}
}

@Override
public void logOut() {
uservo = null;
System.out.println("로그아웃 되었습니다.\n");
}

@Override
public void userSecrch() {
System.out.println("\n이름 검색...");
try {
System.out.println("찾을 이름을 입력하세요. ");
String s1= br.readLine();
UserVO vo=null;
for(UserVO data : list) {
if(data.getName().equals(s1)) {
vo=data;
break;
}
}
System.out.print(vo.getName() + "\t\t");
System.out.print(vo.getBirth() + "\t\t");
System.out.print(vo.getId() + "\t\t");
System.out.print(vo.getPhone() + "\n");
System.out.println("처음메뉴로 돌아갑니다.");

} catch (Exception e) {
}
}

@Override
public void printUserList() {
System.out.println("\n회원가입 명단");
System.out.println("전체 인원수 : " + list.size());
for (UserVO vo : list) {
System.out.print(vo.getName() + "\t");
System.out.print(vo.getBirth() + "\t");
System.out.print(vo.getId() + "\t");
System.out.print(vo.getPwd() + "\t");
System.out.print(vo.getPhone() + "\n");
}
System.out.println();
}

@Override
public void userUpdate() {
if (uservo == null) {
System.out.println("\n로그인이 필요 합니다.");
return;
}

System.out.println("\n회원 정보 수정...");

try {
UserVO vo = readUser(uservo.getId());

System.out.print("패스워드를 다시 입력 하세요 ? ");
String pwd = br.readLine();

if (!vo.getPwd().equals(pwd)) {
System.out.println("패스워드가 일치하지 않습니다.\n");
return;
}

System.out.print("수정할 패스워드 ? ");
vo.setPwd(br.readLine());

System.out.print("수정할 폰번호? ");
vo.setPhone(br.readLine());

System.out.println("회원 정보를 수정했습니다.\n");

} catch (Exception e) {
System.out.println(e.toString());
}

}

@Override
public void userDelete() {
UserVO vo1=readUser(uservo.getId());
UserVO vo2=readUser("admin");
try {
if(uservo.getId()!="admin") {
System.out.println("\n회원 탈퇴");
System.out.print("패스워드를 다시 입력 하세요 ? ");
String pwd = br.readLine();
if(! vo1.getPwd().equals(pwd)) {
System.out.println("패스워드가 일치하지 않습니다.\n");
return;
}
} else if (uservo.getId()=="admin") {
System.out.println("\n회원 삭제");
System.out.println("삭제할 아이디? ");
vo1=readUser(br.readLine());
if (vo1==null) {
System.out.println("아이디가 존재하지 않습니다.");
return;
}
System.out.print(vo1.getId()+"\t");
System.out.print(vo1.getName()+"\t");
System.out.print(vo1.getPhone()+"\t\n");
System.out.println("삭제할 아이디가 맞나요? [Y/N] ");
String s1 = br.readLine();
if (s1.equals("Y") || s1.equals("y") ) {
System.out.print("관리자 패스워드를 입력 하세요 ? ");
String pwd = br.readLine();
if(! vo2.getPwd().equals(pwd)) {
System.out.println("패스워드가 일치하지 않습니다.\n");
return;
}
} else {
System.out.println("삭제를 취소합니다.");
return;
}
}
list.remove(vo1);
if(uservo.getId()!="admin") {
System.out.println("회원탈퇴가 처리 되었습니다.\n");
} else {
System.out.println("회원삭제가 처리 되었습니다.\n");
}
} catch (Exception e) {
System.out.println(e.toString());
}
uservo = null;
}
private UserVO readUser(String id) {
UserVO vo=null;
for(UserVO data : list) {
if(data.getId().equals(id)) {
vo=data;
break;
}
}
return vo;
}

public UserVO loginMember() {
return uservo;
}
}

책 관련 VO 클래스 입니다.  장르 , 이름 , 재고 ,  대여 유무로  간단하게 구성하였습니다.
 
public class BookVO {
private String genre;
private String name;
private int stock;
private boolean rental;
public boolean isRental() {
return rental;
}
public void setRental(boolean rental) {
this.rental = rental;
}
public String getGenre() {
return genre;
}
public void setGenre(String genre) {
this.genre = genre;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
}

Book 클래스  메소드 구조 입니다 !

아래와 같이 7가지 메소드로 구성 하였습니다. !

public interface Book {
public void borrow(); // 책을 빌린다.
public void back(); // 책을 반납한다.
public void bookSearch(); // 책을 검색한다.
public void printBookList(); // 책의 리스트를 출력한다.
public void bookUpdate(); // 책을 수정한다.
public void bookAdd(); // 서고에 책을 추가한다.
public void bookDelete(); // 등록된 책을 지운다.
}


Book 클래스 메소드 구현부 입니다 !

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;

public class BookImpl implements Book {
Scanner scan = new Scanner(System.in);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Map<String , BookVO> map = new HashMap<>(); 
DecimalFormat df = new DecimalFormat("000");
private Calendar now = Calendar.getInstance();
@Override
public void borrow() {
try {
String bname;
System.out.println("빌릴 책 이름을 입력하세요 : ");
bname = br.readLine();
Iterator<String> it = map.keySet().iterator();
while (it.hasNext()) {
String num = it.next();
BookVO vo = map.get(num);
if (vo.getName().startsWith(bname)) {
if(vo.isRental()) {
System.out.println("이미 대여중입니다.");
break;
}
vo.setStock(vo.getStock()-1);
System.out.print(num + "\t");
System.out.print(vo.getName() + "\t");
System.out.print(vo.getGenre() + "\t");
System.out.print(vo.getStock() + "\n");
System.out.println("대여완료");
String a = String.format("%1$tF %1$tA", now);
System.out.print("대여시간 : "+a);
System.out.print("반납시간 : "+(a+7));
System.out.println();
vo.setRental(true);
}
}
} catch (Exception e) {

}
}

@Override
public void back() {
// 반납 할때 재고를를 존재로 확인
System.out.println("반납할 책 이름입력");
String s = scan.next();
Iterator<String> it = map.keySet().iterator();

// 키값 가져오기

while (it.hasNext()) {
String key = it.next();
BookVO value = map.get(key);
if (s.equals(value.getName())) {
if (!value.isRental()) {
System.out.println("대여중이 아닙니다");
} else if (value.isRental()) {
System.out.println("정상적으로 반납 되었습니다");
value.setStock(value.getStock()+1);
value.setRental(false);
}
}
}

// if (!isExist2)
// System.out.println("도서 존재 X");
}

@Override
public void bookSearch() {
Iterator<String> it = map.keySet().iterator();
int setnum=0;
int count=0;
try {
System.out.println("검색할 책 이름 : ");
String s1 = br.readLine();
while (it.hasNext()) {
String s2=df.format(++setnum);
String key = it.next();
BookVO bookvo = map.get(key);
if (bookvo.getName().indexOf(s1)>-1) {
System.out.print(key+"\t");
System.out.print(bookvo.getGenre()+"\t");
System.out.print(bookvo.getName()+"\t");
System.out.print(bookvo.getStock()+"\n");
count++;
}
}
if (count==0) {
System.out.println("검색된 책이 없습니다.");
return;
}
System.out.println();
System.out.println("총 "+count+"건의 책이 검색되었습니다.");
System.out.println();
} catch (IOException e) {
}
}

@Override
public void printBookList() {
Iterator<String> it=map.keySet().iterator();
while (it.hasNext()) {
String key=it.next();
BookVO value=map.get(key);
System.out.print(key+"\t"+value.getGenre()+"\t"+value.getName()+"\t"+value.getStock()+"\n");
}
}

@Override
public void bookUpdate() {
System.out.println("\n책 정보 수정...");
try {
String name;
System.out.print("책 이름?");
name = br.readLine();
BookVO vo = map.get(name);
if(vo.getName()==null) {
System.out.println("존재하지 않는 이름입니다용");
return;
}
System.out.println("책 이름?");
vo.setName(br.readLine());
System.out.println("수정 완료...");
} catch (Exception e) {
System.out.println(e.toString());
}
System.out.println();
}

@Override
public void bookAdd() {
System.out.println("\n 책을 등록하겠습니다...");
try {
String code; //code값이 String값임 
BookVO vo=new BookVO();
System.out.print("코드는?");
code=br.readLine();
if(map.containsKey(code)) { //코드가 있으면 (키값이있으면) 빠져나가고 
System.out.println("등록된 책 입니다.\n");
return;
}
System.out.print("책 이름은?");
vo.setName(br.readLine());
System.out.print("책 장르는? ");
vo.setGenre(br.readLine());
vo.setStock(vo.getStock()+1);

map.put(code, vo); //map은 put이 데이터 추가 / arraylist는 add데이터 추가 
System.out.println("책이 등록되었습니다\n");
} catch (IOException e) {
System.out.println(e.toString());
}
}

@Override
public void bookDelete() {
System.out.println("삭제할 책의 이름 입력");
String s = scan.next();
Iterator<String> it = map.keySet().iterator();


while (it.hasNext()) {
String key = it.next();
BookVO value = map.get(key);

if (s.equals(value.getName())) {
map.remove(key);
System.out.println(s+"책 삭제 완료");
value.setStock(value.getStock()-1);
}
}
}

}

아래는 메인 함수 구현부 입니다 !

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
UserImpl user = new UserImpl();
BookImpl book = new BookImpl();
int ch;
while(true) {
if(user.loginMember() == null ) { //로그인이 되지 않은 경우
do {
System.out.print("1.로그인 2.회원가입 3.종료 => ");
ch = sc.nextInt();
} while(ch<1||ch>3);
if(ch==3) break;
switch (ch) {
case 1:{
user.logIn(); 
break;
}
case 2:{
user.join(); 
break;
}
}
} else if(user.loginMember().getId() == "admin" ) { //로그인 한 경우
do {
System.out.print("1.도서 관리 2.회원관리 3.로그아웃 4.종료 ");
ch = sc.nextInt();
} while (ch<1||ch>4);
if(ch==4) break;
switch (ch) {
case 1: do {
System.out.print("1.도서등록 2.도서수정 3.도서삭제 4.도서검색 5.도서리스트 6.복귀  ");
ch = sc.nextInt();
} while(ch<1||ch>6);
if(ch==6) break;
switch (ch) {
case 1:book.bookAdd(); break; // 도서 등록 
case 2:book.bookUpdate(); break; // 도서 수정
case 3:book.bookDelete(); break; // 도서 삭제
case 4:book.bookSearch(); break; // 도서명검색
case 5:book.printBookList(); break; // 도서리스트
}break;
case 2: do {
System.out.print("1.회원 리스트 2.이름검색 3.회원삭제 4.복귀  ");
ch = sc.nextInt();
} while(ch<1||ch>4);
if(ch==4) break;
switch (ch) {
case 1: user.printUserList();break; // 회원리스트
case 2: user.userSecrch();break; // 아이디검색
case 3: user.userDelete();break; // 유저 삭제
}
break;
case 3:user.logOut(); break; //로그아웃
}
}
// 일반 사용자로 로그인한 경우
else{
do {
System.out.print("1.도서 대여 2.도서반납 3.도서검색 4.로그아웃 5.정보수정 6.탈퇴 7.종료");
ch = sc.nextInt();
} while (ch < 1 || ch > 7);
if (ch == 7)
break;
switch (ch) {
case 1:
book.borrow();
break; // 도서 대여
case 2:
book.back();
break; // 도서 검색
case 3:
book.bookSearch();
break; // 도서 검색
case 4:
user.logOut(); // 로그아웃
break;
case 5: 
user.userUpdate(); // 정보 수정
case 6: 
user.userDelete(); // 탈퇴
}

}
}
}
}


부족한 부분이 많지만 도움이 되셨으면 좋겠습니다. 읽어주셔서 감사합니다~! 오류 있으면 말씀해주세요!



Comments