#include <stdio.h>
int add_book(char(*book_name)[30], char(*auth_name)[30], char(*publ_name)[30],
int* borrowed, int* num_total_book); // 책을 추가하는 함수
int search_book(char(*book_name)[30], char(*auth_name)[30],
char(*publ_name)[30], int num_total_book); // 책을 검색하는 함수 호출
int compare(char* str1, char* str2); // 문자열 비교 함수
int borrow_book(int* borrowed); // 책을 빌리는 함수
int return_book(int* borrowed); // 책을 반납하는 함수
int main() {
int user_choice; /* 유저가 선택한 메뉴 */
int num_total_book = 0; /* 현재 책의 수 */
char book_name[100][30], auth_name[100][30], publ_name[100][30]; //책, 저자, 출판사를 저장할 배열. 책의 최대 개수는 100 권
int borrowed[100]; // 빌렸는지 상태를 표시
while (1) {
printf("도서 관리 프로그램 \n");
printf("메뉴를 선택하세요 \n");
printf("1. 책을 새로 추가하기 \n");
printf("2. 책을 검색하기 \n");
printf("3. 책을 빌리기 \n");
printf("4. 책을 반납하기 \n");
printf("5. 프로그램 종료 \n");
printf("당신의 선택은 : ");
scanf("%d", &user_choice);
switch (user_choice) {
case 1: // 책을 새로 추가하는 함수 호출
add_book(book_name, auth_name, publ_name, borrowed, &num_total_book);
break;
case 2: // 책을 검색하는 함수 호출
search_book(book_name, auth_name, publ_name, num_total_book);
break;
case 3: // 책을 빌리는 함수 호출
borrow_book(borrowed);
break;
case 4: // 책을 반납하는 함수 호출
return_book(borrowed);
break;
case 5: // 프로그램을 종료한다.
break;
}
}
return 0;
}
int add_book(char(*book_name)[30], char(*auth_name)[30],
char(*publ_name)[30], int* borrowed, int* num_total_book) {
printf("추가할 책의 제목 : ");
scanf("%s", book_name[*num_total_book]);
printf("추가할 책의 저자 : ");
scanf("%s", auth_name[*num_total_book]);
printf("추가할 책의 출판사 : ");
scanf("%s", publ_name[*num_total_book]);
borrowed[*num_total_book] = 0; /* 빌려지지 않음*/
printf("추가 완료! \n");
(*num_total_book)++;
return 0;
}
int search_book(char(*book_name)[30], char(*auth_name)[30],
char(*publ_name)[30], int num_total_book) {
int user_input; /* 사용자의 입력을 받는다. */
int i;
char user_search[30];
printf("어느 것으로 검색 할 것인가요? \n");
printf("1. 책 제목 검색 \n");
printf("2. 지은이 검색 \n");
printf("3. 출판사 검색 \n");
scanf("%d", &user_input);
printf("검색할 단어를 입력해주세요 : ");
scanf("%s", user_search);
printf("검색 결과 \n");
if (user_input == 1) {
/*
i 가 0 부터 num_total_book 까지 가면서 각각의 책 제목을
사용자가 입력한 검색어와 비교하고 있다.
*/
for (i = 0; i < num_total_book; i++) {
if (compare(book_name[i], user_search)) {
printf("번호 : %d // 책 이름 : %s // 지은이 : %s // 출판사 : %s \n", i,
book_name[i], auth_name[i], publ_name[i]);
}
}
}
else if (user_input == 2) {
/*
i 가 0 부터 num_total_book 까지 가면서 각각의 지은이 이름을
사용자가 입력한 검색어와 비교하고 있다.
*/
for (i = 0; i < num_total_book; i++) {
if (compare(auth_name[i], user_search)) {
printf("번호 : %d // 책 이름 : %s // 지은이 : %s // 출판사 : %s \n", i,
book_name[i], auth_name[i], publ_name[i]);
}
}
}
else if (user_input == 3) {
/*
i 가 0 부터 num_total_book 까지 가면서 각각의 출판사를
사용자가 입력한 검색어와 비교하고 있다.
*/
for (i = 0; i < num_total_book; i++) {
if (compare(publ_name[i], user_search)) {
printf("번호 : %d // 책 이름 : %s // 지은이 : %s // 출판사 : %s \n", i,
book_name[i], auth_name[i], publ_name[i]);
}
}
}
return 0;
}
int compare(char* str1, char* str2) {
while (*str1) {
if (*str1 != *str2) {
return 0;
}
str1++;
str2++;
}
if (*str2 == '\0') return 1;
return 0;
}
int borrow_book(int* borrowed) {
int book_num; // 사용자로 부터 책번호를 받을 변수
printf("빌릴 책의 번호를 말해주세요 \n");
printf("책 번호 : ");
scanf("%d", &book_num);
if (borrowed[book_num] == 1) {
printf("이미 대출된 책입니다! \n");
}
else {
printf("책이 성공적으로 대출되었습니다. \n");
borrowed[book_num] = 1;
}
return 0;
}
int return_book(int* borrowed) {
int num_book; // 반납할 책의 번호
printf("반납할 책의 번호를 써주세요 \n");
printf("책 번호 : ");
scanf("%d", &num_book);
if (borrowed[num_book] == 0) {
printf("이미 반납되어 있는 상태입니다\n");
}
else {
borrowed[num_book] = 0;
printf("성공적으로 반납되었습니다\n");
}
return 0;
}
(난이도 : 下)
#include <stdio.h>
int add_book(char(*book_name)[30], char(*author_name)[30], char(*publisher_name)[30],
int* borrowed_book, int* total_book);
int search_book(char(*book_name)[30], char(*author_name)[30], char(*publisher_name)[30],
int total_book);
int compare(char* str1, char* str2);
int borrow_book(int* borrowed_book);
int return_book(int* borrowed_book);
int main(void) {
int user_choice;
int total_book = 0;
char book_name[100][30], author_name[100][30], publisher_name[100][30];
int borrowed_book[100];
while (1) {
printf("도서 관리 프로그램 \n");
printf("1. 책 추가하기 \n");
printf("2. 책 검색하기 \n");
printf("3. 책 빌리기 \n");
printf("4. 책 반납하기 \n");
printf("5. 종료하기 \n");
printf("\n");
printf("당신의 선택 : ");
scanf("%d", &user_choice);
printf("\n");
switch (user_choice) {
case 1:
add_book(book_name, author_name, publisher_name, borrowed_book, &total_book);
break;
case 2:
search_book(book_name, author_name, publisher_name, total_book);
break;
case 3:
borrow_book(borrowed_book);
break;
case 4:
return_book(borrowed_book);
break;
case 5:
return 0;
}
}
}
int add_book(char(*book_name)[30], char(*author_name)[30], char(*publisher_name)[30],
int* borrowed_book, int* total_book) {
printf("추가할 책의 제목 : ");
scanf("%s", book_name[*total_book]);
printf("추가할 책의 저자 : ");
scanf("%s", author_name[*total_book]);
printf("추가할 책의 출판사 : ");
scanf("%s", publisher_name[*total_book]);
borrowed_book[*total_book] = 0;
(* total_book)++;
printf("\n");
return 0;
}
int search_book(char(*book_name)[30], char(*author_name)[30], char(*publisher_name)[30],
int total_book) {
int user_input;
int i;
char search_book[30];
printf("1. 책 이름 검색 \n");
printf("2. 책 저자 검색 \n");
printf("3. 책 풀판사 검색 \n");
printf("\n");
printf("당신의 선택 : ");
scanf("%d", &user_input);
printf("검색할 내용 입력 : ");
scanf("%s", search_book);
printf("\n");
switch (user_input) {
case 1:
for (i = 0; i < total_book; i++) {
if (compare(book_name[i], search_book)) {
printf("책 번호 : %d // 책 이름 : %s // 책 저자 : %s // 책 출판사 : %s \n", i, book_name[i], author_name[i], publisher_name[i]);
}
}
break;
case 2:
for (i = 0; i < total_book; i++) {
if (compare(author_name[i], search_book)) {
printf("책 번호 : %d // 책 이름 : %s // 책 저자 : %s // 책 출판사 : %s \n", i, book_name[i], author_name[i], publisher_name[i]);
}
}
break;
case 3:
for (i = 0; i < total_book; i++) {
if (compare(publisher_name[i], search_book)) {
printf("책 번호 : %d // 책 이름 : %s // 책 저자 : %s // 책 출판사 : %s \n", i, book_name[i], author_name[i], publisher_name[i]);
}
}
break;
}
printf("\n");
return 0;
}
int compare(char* str1, char* str2) {
while (*str1) {
if (*str1 != *str2) {
return 0;
}
str1++;
str2++;
}
if (*str2 == '\0') return 1;
return 0;
}
int borrow_book(int* borrowed_book) {
int user_input;
printf("빌릴 책 번호 입력 : ");
scanf("%d", &user_input);
if (borrowed_book[user_input] == 1)
printf("이미 대여된 책 입니다 \n");
else
{
printf("책을 정상적으로 대여 했습니다 \n");
borrowed_book[user_input] = 1;
}
printf("\n");
return 0;
}
int return_book(int* borrowed_book) {
int user_input;
printf("반납할 책 번호 입력 : ");
scanf("%d", &user_input);
if (borrowed_book[user_input] == 0)
printf("이미 반납한 책 입니다 \n");
else
{
printf("책을 정상적으로 반납 했습니다 \n");
borrowed_book[user_input] = 0;
}
printf("\n");
return 0;
}
(난이도 : 中下)
if~else if 문에서 switch문으로 바꿔서 간결하게 바꿨다.
int search_book(char(*book_name)[30], char(*author_name)[30], char(*publisher_name)[30],
int total_book) {
int user_input;
int i;
char search_book[30];
printf("1. 책 이름 검색 \n");
printf("2. 책 저자 검색 \n");
printf("3. 책 풀판사 검색 \n");
printf("\n");
printf("당신의 선택 : ");
scanf("%d", &user_input);
printf("검색할 내용 입력 : ");
scanf("%s", search_book);
printf("\n");
switch (user_input) {
case 1:
for (i = 0; i < total_book; i++) {
if (compare(book_name[i], search_book)) {
printf("책 번호 : %d // 책 이름 : %s // 책 저자 : %s // 책 출판사 : %s \n", i, book_name[i], author_name[i], publisher_name[i]);
}
}
break;
case 2:
for (i = 0; i < total_book; i++) {
if (compare(author_name[i], search_book)) {
printf("책 번호 : %d // 책 이름 : %s // 책 저자 : %s // 책 출판사 : %s \n", i, book_name[i], author_name[i], publisher_name[i]);
}
}
break;
case 3:
for (i = 0; i < total_book; i++) {
if (compare(publisher_name[i], search_book)) {
printf("책 번호 : %d // 책 이름 : %s // 책 저자 : %s // 책 출판사 : %s \n", i, book_name[i], author_name[i], publisher_name[i]);
}
}
break;
}
printf("\n");
return 0;
}
(난이도 : 下)
switch (user_input) {
case 1:
for (i = 0; i < total_book; i++) {
if (compare(book_name[i], search_book)) {
if (borrowed_book[i] == 0)
printf("책 번호 : %d // 책 이름 : %s // 책 저자 : %s // 책 출판사 : %s \n", i, book_name[i], author_name[i], publisher_name[i]);
else
printf("대출됨");
}
}
break;
case 2:
for (i = 0; i < total_book; i++) {
if (compare(author_name[i], search_book)) {
if (borrowed_book[i] == 0)
printf("책 번호 : %d // 책 이름 : %s // 책 저자 : %s // 책 출판사 : %s \n", i, book_name[i], author_name[i], publisher_name[i]);
else
printf("대출됨");
}
}
break;
case 3:
for (i = 0; i < total_book; i++) {
if (compare(publisher_name[i], search_book)) {
if (borrowed_book[i] == 0)
printf("책 번호 : %d // 책 이름 : %s // 책 저자 : %s // 책 출판사 : %s \n", i, book_name[i], author_name[i], publisher_name[i]);
else
printf("대출됨");
}
break;
}
(난이도 : 中)
예를 들어 책 제목이 "learnCfast", "learningC", "whatisC?" 일 때, learn 를 검색하면 "learnCfast" 와 "learningC" 가 나온다. 왜냐하면 이들은 모두 "learn 라는 문자열을 포함하고 있기 때문이다.
int compare(char* str1, char* str2) {
int i=0, j=0, length = 0;
while (str2[length])
length++;
while (str1[i]) {
if (str1[i] != str2[j]) {
i++;
}
else {
i++;
j++;
}
}
if (j == length) {
return 1;
}
return 0;
}
3번 함수에서 compare 함수만 개량했다.
아래에 모든 함수 올림.
#include <stdio.h>
int add_book(char(*book_name)[30], char(*author_name)[30], char(*publisher_name)[30],
int* borrowed_book, int* total_book);
int search_book(char(*book_name)[30], char(*author_name)[30], char(*publisher_name)[30],
int* borrowed_book, int total_book);
int compare(char* str1, char* str2);
int borrow_book(int* borrowed_book);
int return_book(int* borrowed_book);
int main(void) {
int user_choice;
int total_book = 0;
char book_name[100][30], author_name[100][30], publisher_name[100][30];
int borrowed_book[100];
while (1) {
printf("도서 관리 프로그램 \n");
printf("1. 책 추가하기 \n");
printf("2. 책 검색하기 \n");
printf("3. 책 빌리기 \n");
printf("4. 책 반납하기 \n");
printf("5. 종료하기 \n");
printf("\n");
printf("당신의 선택 : ");
scanf("%d", &user_choice);
printf("\n");
switch (user_choice) {
case 1:
add_book(book_name, author_name, publisher_name, borrowed_book, &total_book);
break;
case 2:
search_book(book_name, author_name, publisher_name, borrowed_book, total_book);
break;
case 3:
borrow_book(borrowed_book);
break;
case 4:
return_book(borrowed_book);
break;
case 5:
return 0;
}
}
}
int add_book(char(*book_name)[30], char(*author_name)[30], char(*publisher_name)[30],
int* borrowed_book, int* total_book) {
printf("추가할 책의 제목 : ");
scanf("%s", book_name[*total_book]);
printf("추가할 책의 저자 : ");
scanf("%s", author_name[*total_book]);
printf("추가할 책의 출판사 : ");
scanf("%s", publisher_name[*total_book]);
borrowed_book[*total_book] = 0;
(* total_book)++;
printf("\n");
return 0;
}
int search_book(char(*book_name)[30], char(*author_name)[30], char(*publisher_name)[30],
int* borrowed_book, int total_book) {
int user_input;
int i;
char search[30];
printf("1. 책 이름 검색 \n");
printf("2. 책 저자 검색 \n");
printf("3. 책 풀판사 검색 \n");
printf("\n");
printf("당신의 선택 : ");
scanf("%d", &user_input);
printf("검색할 내용 입력 : ");
scanf("%s", search);
printf("\n");
switch (user_input) {
case 1:
for (i = 0; i < total_book; i++) {
if (compare(book_name[i], search)) {
if (borrowed_book[i] == 0)
printf("책 번호 : %d // 책 이름 : %s // 책 저자 : %s // 책 출판사 : %s \n", i, book_name[i], author_name[i], publisher_name[i]);
else
printf("대출됨");
}
}
break;
case 2:
for (i = 0; i < total_book; i++) {
if (compare(author_name[i], search)) {
if (borrowed_book[i] == 0)
printf("책 번호 : %d // 책 이름 : %s // 책 저자 : %s // 책 출판사 : %s \n", i, book_name[i], author_name[i], publisher_name[i]);
else
printf("대출됨");
}
}
break;
case 3:
for (i = 0; i < total_book; i++) {
if (compare(publisher_name[i], search)) {
if (borrowed_book[i] == 0)
printf("책 번호 : %d // 책 이름 : %s // 책 저자 : %s // 책 출판사 : %s \n", i, book_name[i], author_name[i], publisher_name[i]);
else
printf("대출됨");
}
break;
}
printf("\n");
return 0;
}
}
int compare(char* str1, char* str2) {
int i=0, j=0, length = 0;
while (str2[length])
length++;
while (str1[i]) {
if (str1[i] != str2[j]) {
i++;
}
else {
i++;
j++;
}
}
if (j == length) {
return 1;
}
return 0;
}
int borrow_book(int* borrowed_book) {
int user_input;
printf("빌릴 책 번호 입력 : ");
scanf("%d", &user_input);
if (borrowed_book[user_input] == 1)
printf("이미 대여된 책 입니다 \n");
else
{
printf("책을 정상적으로 대여 했습니다 \n");
borrowed_book[user_input] = 1;
}
printf("\n");
return 0;
}
int return_book(int* borrowed_book) {
int user_input;
printf("반납할 책 번호 입력 : ");
scanf("%d", &user_input);
if (borrowed_book[user_input] == 0)
printf("이미 반납한 책 입니다 \n");
else
{
printf("책을 정상적으로 반납 했습니다 \n");
borrowed_book[user_input] = 0;
}
printf("\n");
return 0;
}