U E D R , A S I H C RSS

C++스터디_2005여름/도서관리프로그램/문보창

소감

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 <iostream>
#include <cstring>
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 <iostream>
#include <cstring>
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 <iostream>
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;
}

나한테 할 말

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.0865 sec