1. 문제
11. 책의 년도, 책이름, 저자 이름을 담은 Book 클래스를 만들고, vector<Book> v;로 생성한 벡터를 이용하여 책을 입고하고, 저자와 년도로 검색하는 프로그램을 작성하라.
2. 결과
3. 코드
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Book {
int year;
string name;
string writer;
public:
void setInfo(int ye, string na, string wr) {
year = ye;
name = na;
writer = wr;
}
int getYear() { return year; }
string getWriter() { return writer; }
void search() { cout << year << "년도, " << name << ", " << writer << endl; }
};
int main() {
vector<Book> v;
Book b;
int year; string name, writer;
cout << "입고할 책을 입력하세요. 년도에 -1를 입력하면 입고를 종료합니다." << endl;
while (1) {
cout << "년도>>"; cin >> year;
if (year == -1) break;
//fflush(stdin);
while (getchar() != '\n');
cout << "책이름>>"; getline(cin, name);
cout << "저자>>"; getline(cin, writer);
b.setInfo(year, name, writer);
v.push_back(b);
}
int num = v.size();
cout << "총 입고된 책은 " << num << "권입니다." << endl;
cout << "검색하고자 하는 저자 이름을 입력하세요>>";
//fflush(stdin);
while (getchar() != '\n');
getline(cin, writer);
for (int i = 0; i< num; i++)
if (v[i].getWriter() == writer) v[i].search();
cout << "검색하고자 하는 년도를 입력하세요>>";
cin >> year;
for (int i = 0; i< num; i++)
if (v[i].getYear() == year) v[i].search();
}
4. 설명
fflush(stdin)으로 버퍼를 비워주는 것이 visual studio 2017에서 먹히지 않아서 달리 버퍼를 지워주는 while( getchar() != '\n' ); 을 삽입해 주었습니다.
아마 2015년 버전 이후부터 보안상으로 막아 논 것 같습니다.
'명품 C++ programming' 카테고리의 다른 글
명품 C++ programming 실습문제 10장 13번 (0) | 2019.05.13 |
---|---|
명품 C++ programming 실습문제 10장 12번 (0) | 2019.05.13 |
명품 C++ programming 실습문제 10장 10번 (0) | 2019.05.12 |
명품 C++ programming 실습문제 10장 9번 (0) | 2019.05.12 |
명품 C++ programming 실습문제 10장 8번 (0) | 2019.05.12 |