== 소감 == Book 클래스와 ManageBook 클래스로 나눠서 각자 맡은바 임무를 잘 해 주도록 일을 분담했다. 스터디 시간에 Null 포인터에 자꾸 노드를 삽입했기 때문에 노드가 추가 되지 않았다. 그 전에도 그런 실수를 했는데 똑같은 실수를 반복하다니... 우선 스터디 시간에 버벅대서 마무리 짓지 못한거 미안하게 생각합니다. 자신이 꼭 스스로 프로그램을 짜시고, 그런 후에 제 코드와 비교해 보시기 바랍니다. 저보다 여러분이 잘한 점, 혹은 제가 잘한 점이 무엇인지 생각해 보시기 바랍니다. 어떤게 더 확장성과 재사용성에 유리한지 곰곰히 생각해보세요. == 코드 == ==== book.h ==== {{{~cpp #ifndef BOOK_H_ #define BOOK_H_ class Book { private: char name[20]; char writer[20]; char ISBN[20]; bool isBorrow; public: Book * next; Book(); char * get_name(); char * get_writer(); char * get_ISBN(); bool get_state(); void set_state(bool state); void input(); void operator=(Book & a); }; #endif }}} ==== book.cpp ==== {{{~cpp #include "book.h" #include #include using namespace std; Book::Book() { name[0] = writer[0] = ISBN[0] = NULL; isBorrow = false; next = NULL; } void Book::input() { cout << "책 명 : "; cin >> name; cout << "작가 : "; cin >> writer; cout << "ISBN : "; cin >> ISBN; } char * Book::get_ISBN() { return ISBN; } char * Book::get_name() { return name; } char * Book::get_writer() { return writer; } bool Book::get_state() { return isBorrow; } void Book::set_state(bool state) { isBorrow = state; } void Book::operator =(Book & a) { strcpy(name, a.name); strcpy(writer, a.writer); strcpy(ISBN, a.ISBN); next = a.next; } }}} ==== manageBook.h ==== {{{~cpp #ifndef MANAGEBOOK_H_ #define MANAGEBOOK_H_ #include "book.h" class ManageBook { private: Book * book_list; public: ManageBook(); void regist(); void insert_list(Book & b); void borrow(); void restore(); void search(Book & b, bool kind_order); void show_list(); }; #endif }}} ==== manageBook.cpp ==== {{{~cpp #include "manageBook.h" #include #include using namespace std; ManageBook::ManageBook() { book_list = NULL; } void ManageBook::regist() { Book * b = new Book[1]; cout << "등록할 도서정보를 입력하세요. \n"; (*b).input(); insert_list(*b); } void ManageBook::insert_list(Book & b) { if (!book_list) { book_list = &b; return; } Book * temp = book_list; while (temp->next != NULL) temp = temp->next; temp->next = &b; } void ManageBook::borrow() { cout << "찾을 도서정보를 입력하세요. \n"; Book b; b.input(); search(b, false); } void ManageBook::search(Book & b, bool kind_order) { Book * temp = book_list; while (temp != NULL) { if (strcmp((*temp).get_ISBN(), b.get_ISBN()) == 0 && strcmp((*temp).get_name(), b.get_name()) == 0) { if ((*temp).get_state() == kind_order) { (*temp).set_state(!kind_order); cout << "성공\n"; } else cout << "실패\n"; return; } temp = temp->next; } cout << "없는 도서입니다.\n"; } void ManageBook::restore() { cout << "반납할 도서정보를 입력하세요. \n"; Book b; b.input(); search(b, true); } void ManageBook::show_list() { Book * temp = book_list; cout.width(10); cout << "책 이름"; cout.width(10); cout << "저자"; cout.width(10); cout << "ISBN\n"; while (temp != NULL) { cout.width(10); cout << (*temp).get_name(); cout.width(10); cout << (*temp).get_writer(); cout.width(10); cout << (*temp).get_ISBN() << endl; temp = temp->next; } } }}} ==== useProgram.cpp ==== {{{~cpp #include "manageBook.h" #include using namespace std; int main() { ManageBook test; int command; while (1) { cout << "** 도서관리 프로그램 **\n"; cout << "1. 책 등록\n"; cout << "2. 책 대여\n"; cout << "3. 책 반납\n"; cout << "4. 책 목록\n"; cout << "5. 종료\n"; cin >> command; switch (command) { case 1: test.regist(); break; case 2: test.borrow(); break; case 3: test.restore(); break; case 4: test.show_list(); break; case 5: return 0; default: break; } } return 1; } }}} ---- [C++스터디_2005여름/도서관리프로그램] == 나한테 할 말 ==