[Visual Studio/C#]도서관리 프로그램 - 도서 대여/반납 로직
2021. 3. 4. 15:48ㆍToy Project/도서관리 프로그램
728x90
반응형

- 이전글 - 2020/12/17 - [프로젝트/C#]도서관리 프로그램 - 초안 2020/12/18 - [프로젝트/C#]도서관리 프로그램 - 로그인, 도서검색 2020/12/19 - [프로젝트/C#]도서관리 프로그램 - 도서 삭제, 수정 2021/02/12 - [프로젝트/C#]도서관리 프로그램 - 관리자 권한 생성 |
1. RentBook라는 새로운 DB 테이블을 생성하였습니다.

2. [도서대여] 버튼을 선택했을 때, 이 DB에 데이터를 추가하도록 하겠습니다.
private void btnRent_Click(object sender, EventArgs e)
{
if (selectedQuantity >0)
{
if (int.Parse(dbc.count("rentBook", "where bookNumber = '" + selectedBookNumber + "' and returnDate = '' and memId = '" + LoginForm.memId + "'"))==0)
{
sql = "insert into RentBook values (\'" + DateTime.Now.ToString("yyyyMMddHHmmss") + "\', '"
+ LoginForm.memId + "\', '" + selectedBookNumber + "\', '" + DateTime.Now.ToString("yyyy-MM-dd") + "\','"
+ DateTime.Now.AddDays(10).ToString("yyyy-MM-dd") + "\','')";
dbc.Connection();
dbc.Command(sql);
MessageBox.Show(selectedBookName + " 도서를 대여합니다.");
sql = "update BookList set quantity = " + (selectedQuantity - 1) + " from BookList " + whereStr;
dbc.Connection();
dbc.Command(sql);
sql = "select * from BookList";
dbc.Connection();
dbc.Adaptor(sql);
}
else
{
MessageBox.Show("이미 대여한 도서입니다.");
}
}
else
{
MessageBox.Show("대여가 불가능합니다.");
}
}
이 때, 중복되는 대여는 대여가 불가능하도록 count() 함수를 사용하여 처리해줍니다.
만약 중복되는 데이터가 해당 회원의 대여 목록에 존재할 경우, count는 1이 될 것입니다.
이때는 else문에 MessageBox를 타게 됩니다.
그렇지 않은 경우 해당 값은 bookList에 insert 되는데 이 때 도서의 수량이 -1 됩니다.

3. [대여목록]을 선택한 경우, 해당 회원의 대여 목록이 보이게하고 [반납목록]을 선택한 경우, 그동안 회원이 빌려온 도서의 목록을 보이게 합니다.
private void dgvLoad()
{
string sql = "";
string where0 = "where MemId like '" + LoginForm.memId + "' and returnDate = ''";
string where1 = "where MemId like '" + LoginForm.memId + "' and not returnDate = ''";
//sql = "select * from RentBook";
if (BookListForm.btnClick == 0)
{
sql = "SELECT RentBook.RentNumber, bookList.bookName, bookList.writeName, bookList.copyName, RentBook.RentDate, RentBook.ReturnExpectDate " +
"FROM bookList JOIN RentBook ON rentbook.bookNumber = bookList.bookNumber " + where0;
}
else if (BookListForm.btnClick == 1)
{
sql = "SELECT RentBook.RentNumber, bookList.bookName, bookList.writeName, bookList.copyName, RentBook.RentDate, RentBook.ReturnExpectDate " +
"FROM bookList JOIN RentBook ON rentbook.bookNumber = bookList.bookNumber " + where1;
}
}
도서대여목록과 반납목록은 RentBook 테이블의 ReturnDate로 통제합니다.
만약 회원이 아직 도서를 반납하지 않은 경우, ReturnDate는 빈 값을 갖게 되고
반납을 한 경우 ReturnDate에는 반납한 일자가 찍힙니다.

4. 대여목록에서 [도서반납] 버튼 선택 시 반납이 되도록 하겠습니다.
private void btnReturn_Click(object sender, EventArgs e)
{
string sql = "update rentbook set returndate = '" + DateTime.Now.ToString("yyyy-MM-dd")
+ "' from rentbook where RentNumber = '" + selectedRentNumber + "'";
dbc.Connection();
dbc.Command(sql);
int quantity = int.Parse(dbc.DataLoad("bookList", "where bookNumber = '" + selectedBookNumber + "'", "quantity")) +1;
sql = "update BookList set quantity = " + quantity + " from BookList where bookNumber = '" + selectedBookNumber + "'";
dbc.Connection();
dbc.Command(sql);
MessageBox.Show(selectedBookNumber + "도서를 반납합니다.");
dgvLoad();
}
이 때, 도서의 수량은 다시 +1 됩니다.

5. where문에 통제를 줘서 root 사용자가 로그인했을 경우, [대여목록]과 [반납목록]을 선택 시 모든 회원의 자료가 보이도록 설정합니다.

*** 앞으로 구현할 것들 *** 1. 회원별로 도서 반납 시 '영수증' 뿌려주기 2. 도서등록, 회원가입 시 제약사항 걸어주기 3. 회원별 패스워드 변경 기능 |
728x90
반응형
'Toy Project > 도서관리 프로그램' 카테고리의 다른 글
[Visual Studio/C#]도서관리 프로그램 - 최종 (0) | 2021.03.11 |
---|---|
[Visual Studio/C#]도서관리 프로그램 - 회원가입, 도서등록 정규화 (0) | 2021.03.05 |
[Visual Studio/C#]도서관리 프로그램 - 관리자 권한 생성 (0) | 2021.02.12 |
[Visual Studio/C#]도서관리 프로그램 - 도서 삭제, 수정 (0) | 2020.12.19 |
[Visual Studio/C#]도서관리 프로그램 - 로그인, 도서검색 (0) | 2020.12.18 |