#include <iostream>
#include <iomanip> //setw를 쓰기 위해 사용하는 헤더파일
#include <string>
using namespace std;
enum MENU {MENU_ADD_BOOK , MENU_PRINT_BOOK , MENU_MODIFY_BOOK ,MENU_SEARCH_BOOK, MENU_DELETE_BOOK, MENU_QUIT}; //,
//메뉴를 보여주고 고를 때 까지 반복한다.
MENU ShowMenu()
{
while(1)
{
//menu
cout <<"##############################\n";
cout <<" 도서관리 프로그램 \n";
cout <<"------------------------------\n";
cout <<" 메 뉴 \n";
cout <<"------------------------------\n";
cout <<" 1.입 력 \n";
cout <<" 2.출 력 \n";
cout <<" 3.수 정 \n";
cout <<" 4.검 색 \n";
cout <<" 5.삭 제 \n";
cout <<" 0.종 료 \n";
cout <<"##############################\n";
cout <<"메뉴선택 : ";
//작업 입력 받기.
char select;
cin >> select;
//선택된 값에 따라 처리
switch(select)
{
case '1' :
return MENU_ADD_BOOK;
case '2' :
return MENU_PRINT_BOOK;
case '3' :
return MENU_MODIFY_BOOK;
case '4' :
return MENU_SEARCH_BOOK;
case '5' :
return MENU_DELETE_BOOK;
case '0' :
return MENU_QUIT;
default:
// 그 외의 선택
cout << "\n올바른 값을 입력하세요.\n";
break;
}
}
// 이 문장은 절대 출력할 일 없다.
return MENU_QUIT;
}
int sNo;
struct Books //책의 구조체 설정.
{
string book_title;
string author;
string publish_date;
string publisher;
string price;
string amount;
};
//100권의 정보를 보관할 수 있는 배열의 정의
const int MAX_BOOKS = 100; //MAX_BOOKS 에 100을 대입
Books books[MAX_BOOKS]; //구조체형태의 인자를 100개를 가지는 배열 생성.
int NumberOfBooks = 0; //현재까지 입력된 책의 권 수.
//책 한권을 추가한다.
//반환값: 더 이상 입력할 수 없는 경우 false.
bool AddBooks() //bool을 쓴 이유가 조건이 성립하지 않으면 flase를 반환하기 위해서.
{
if(MAX_BOOKS == NumberOfBooks)
return false;
//소스코드를 간결히 하기 위해서
//사용할 변수를 레퍼런스로 가르킨다.
Books& bk = books[NumberOfBooks]; //구조체 Books를 bk라 레퍼런스선언하면서 배열을 집어넣음.
//해당 도서의 도서번호를 자동으로 입력한다.
sNo = NumberOfBooks + 1;
//해당 도서의 도서명 저자 츨판일 출판사 가격 수량을 입력하세요 : \n";
cout << "도서명:";
cin >> bk.book_title;
cout << "저 자:";
cin >> bk.author;
cout << "출 판 일 :";
cin>> bk.publish_date;
cout <<"출 판 사 :";
cin>> bk.publisher;
cout <<"책 가격 :";
cin >> bk.price;
cout <<"수량:";
cin >> bk.amount;
NumberOfBooks++;
return true;
}
//전체 도서리스트를 보여준다.
void ShowAll()
{
cout.precision(2); //실수출력시에 소수점이하 두자리만 출력한다.
cout << fixed;
cout << "\n <전체 도서목록 보기>";
cout << "\n 도서명 저자 츨판일 출판사 가격 수량\n";
for(int i = 0; i < NumberOfBooks; ++i)
{
//소스코드를 간결히 하기 위해 사용할 변수를 레퍼런스로 가르킨다.
const Books& bk = books[i]; //i가 하나씩 증가하면서 해당 배열의 자료를 출력.
//해당도서의 정보를 출력한다.
cout <<setw(7) <<bk.book_title;
cout << setw(7) <<bk.author <<setw(9) <<bk.publish_date;
cout << setw(9) <<bk.publisher <<setw(7) << bk.price<<setw(7);
cout << bk.amount <<"\n";
}
}
int main()
{
//프로그램을 종료할 떄까지 메뉴를 보여주고 작업을 처리한다.
while(1)
{
//메뉴를 보여준다.
MENU select; //열거체형 변수를 선언...
select = ShowMenu(); //변수에다가 Showmenu() 함수를 대입.
//선택된 값에 따라 처리
switch(select)
{
case MENU_ADD_BOOK: //책 데이터 추가
{
bool succeeded;
succeeded = AddBooks();
if(succeeded)
cout << "\n 책의 내용이 올바르게 입력되었습니다. \n";
else
cout << "\n 더 이상 입력을 할 수 없습니다. \n";
break;
}
case MENU_PRINT_BOOK:
{
ShowAll();
break;
}
case MENU_QUIT:
//종료
cout << "\n프로그램을 종료합니다.\n";
system("PAUSE");
return EXIT_SUCCESS;
return 0;
}
}
return 0;
//ShowMenu();
system("PAUSE");
return EXIT_SUCCESS;
}
|