You are looking for information, articles, knowledge about the topic nail salons open on sunday near me c 언어 도서 관리 프로그램 on Google, you do not find the information you need! Here are the best content compiled and compiled by the https://toplist.aseanseafoodexpo.com team, along with other related topics such as: c 언어 도서 관리 프로그램 c언어 도서관리 프로그램 파일입출력, C언어 도서관리 프로그램 삭제, c언어 도서관리 프로그램 구조체, c언어 도서관리 프로그램 추가, c++ 도서관리 프로그램, 도서 관리 프로그램 소스, C 언어 메뉴 관리 프로그램, c언어 도서 검색 프로그램
Table of Contents
[C언어] 도서 관리 프로그램 | 도서 대출, 반납, 등록, 검색 | 구조체, 파일입출력
- Article author: white-world.tistory.com
- Reviews from users: 15898
Ratings
- Top rated: 3.3
- Lowest rated: 1
- Summary of article content: Articles about [C언어] 도서 관리 프로그램 | 도서 대출, 반납, 등록, 검색 | 구조체, 파일입출력 [C언어] 도서 관리 프로그램 | 도서 대출, 반납, 등록, 검색 | 구조체, 파일입출력. by whitebear 2021. 6. 8. #define _CRT_SECURE_NO_WARNINGS #include
… … - Most searched keywords: Whether you are looking for [C언어] 도서 관리 프로그램 | 도서 대출, 반납, 등록, 검색 | 구조체, 파일입출력 [C언어] 도서 관리 프로그램 | 도서 대출, 반납, 등록, 검색 | 구조체, 파일입출력. by whitebear 2021. 6. 8. #define _CRT_SECURE_NO_WARNINGS #include
… #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #define BOOK_NAME_SIZE 50 #define BOOK_AUTH_SIZE 30 #define BOOK_PUBL_SIZE 30 void borrowbook(); // 도서 대출 함수 void returnbook.. - Table of Contents:
태그
관련글
댓글7
전체 방문자
티스토리툴바
![[C언어] 도서 관리 프로그램 | 도서 대출, 반납, 등록, 검색 | 구조체, 파일입출력](https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8w9RZ%2Fbtq6HkszHRG%2FL5MrkCkfELATv2wzdomlGk%2Fimg.jpg)
C 언어 도서 관리 프로젝트
- Article author: swimminglab.tistory.com
- Reviews from users: 47440
Ratings
- Top rated: 3.3
- Lowest rated: 1
- Summary of article content: Articles about C 언어 도서 관리 프로젝트 C언어의 기초 개념들이 들어 있는 프로젝트, 도서 관리 프로젝트이다. 최종적으로 이러한 것을 만들 것이다. 콜솔이라 다소 조잡해 보이지만, … …
- Most searched keywords: Whether you are looking for C 언어 도서 관리 프로젝트 C언어의 기초 개념들이 들어 있는 프로젝트, 도서 관리 프로젝트이다. 최종적으로 이러한 것을 만들 것이다. 콜솔이라 다소 조잡해 보이지만, … C언어의 기초 개념들이 들어 있는 프로젝트, 도서 관리 프로젝트이다. 최종적으로 이러한 것을 만들 것이다. 콜솔이라 다소 조잡해 보이지만, 중요한 것은 내용이다!! API는 다 까먹었다!!! (충!성!) 내가 직접..
- Table of Contents:
‘개발’ Related Articles
티스토리툴바
도서 관리 프로그램 :: 셀맨의 일상 블로그
- Article author: inhwascope.tistory.com
- Reviews from users: 11050
Ratings
- Top rated: 4.7
- Lowest rated: 1
- Summary of article content: Articles about 도서 관리 프로그램 :: 셀맨의 일상 블로그 컴퓨터 & 프로그래밍 & 전자공학/C언어. 도서 관리 프로그램 … 소규모의 데이터베이스 프로그램 작성, 자기가 소유하고 있는 도서를 관리하는 … …
- Most searched keywords: Whether you are looking for 도서 관리 프로그램 :: 셀맨의 일상 블로그 컴퓨터 & 프로그래밍 & 전자공학/C언어. 도서 관리 프로그램 … 소규모의 데이터베이스 프로그램 작성, 자기가 소유하고 있는 도서를 관리하는 … 소규모의 데이터베이스 프로그램 작성, 자기가 소유하고 있는 도서를 관리하는 프로그램을 작성하여 보자. 다음과 같은 메뉴 화면을 가진다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25..셀맨의 일상 블로그
- Table of Contents:
씹어먹는 C 언어 – <15 - 4. 일로와봐, 문자열(string) - 도서 관리 프로젝트>
- Article author: modoocode.com
- Reviews from users: 43808
Ratings
- Top rated: 4.8
- Lowest rated: 1
- Summary of article content: Articles about
씹어먹는 C 언어 – <15 - 4. 일로와봐, 문자열(string) - 도서 관리 프로젝트>
도서 관리 프로그램을 만든다. 씹어먹는 C 언어. 안녕하세요 여러분. 지난번 강좌의 마지막 생각하기 문제를 기억하시나요 … … - Most searched keywords: Whether you are looking for
씹어먹는 C 언어 – <15 - 4. 일로와봐, 문자열(string) - 도서 관리 프로젝트>
도서 관리 프로그램을 만든다. 씹어먹는 C 언어. 안녕하세요 여러분. 지난번 강좌의 마지막 생각하기 문제를 기억하시나요 … - Table of Contents:
모두의 코드
모두의 코드
씹어먹는 C 언어 – 15 – 4 일로와봐 문자열(string) – 도서 관리 프로젝트

C언어 예제, 도서관리 프로그램-구조체 응용
- Article author: desire-with-passion.tistory.com
- Reviews from users: 41282
Ratings
- Top rated: 4.4
- Lowest rated: 1
- Summary of article content: Articles about C언어 예제, 도서관리 프로그램-구조체 응용 본문 제목. C언어 예제, 도서관리 프로그램-구조체 응용 … printf(” 1) 제목 \n 2) 저자\n 3) 출판사\n 4) 도서 번호 “);. scanf(“%d”, &j);. …
- Most searched keywords: Whether you are looking for C언어 예제, 도서관리 프로그램-구조체 응용 본문 제목. C언어 예제, 도서관리 프로그램-구조체 응용 … printf(” 1) 제목 \n 2) 저자\n 3) 출판사\n 4) 도서 번호 “);. scanf(“%d”, &j);. 목표는 이렇게 만드는 것이다. 코드는 아래와 같다. #include struct BOOK { char title[30]; char auth[30]; char publ[30]; int num; char borr; }; char book_search(char *book_info, char *search, int *..
- Table of Contents:
고정 헤더 영역
메뉴 레이어
검색 레이어
상세 컨텐츠
태그
추가 정보
페이징
티스토리툴바
modular programming (+ 도서관리프로그램 v2.1) : 네이버 블로그
- Article author: m.blog.naver.com
- Reviews from users: 44794
Ratings
- Top rated: 4.5
- Lowest rated: 1
- Summary of article content: Articles about modular programming (+ 도서관리프로그램 v2.1) : 네이버 블로그 C언어 문제를 풀어볼까낭 ~? (도서관리프로그램 v2.0) … 코드가 길어서 관리하기 불편했던 점을 두 개의 소스파일과 하나의 헤더파일로 나누면서 … …
- Most searched keywords: Whether you are looking for modular programming (+ 도서관리프로그램 v2.1) : 네이버 블로그 C언어 문제를 풀어볼까낭 ~? (도서관리프로그램 v2.0) … 코드가 길어서 관리하기 불편했던 점을 두 개의 소스파일과 하나의 헤더파일로 나누면서 …
- Table of Contents:
카테고리 이동
개발의 시작은 싸지방부터
이 블로그
C
카테고리 글
카테고리
이 블로그
C
카테고리 글

[ C언어 ] 프로젝트(삽질일기) : 도서 관리 프로그램 – (1) – 구조체 배열
- Article author: eteo.tistory.com
- Reviews from users: 18615
Ratings
- Top rated: 3.9
- Lowest rated: 1
- Summary of article content: Articles about [ C언어 ] 프로젝트(삽질일기) : 도서 관리 프로그램 – (1) – 구조체 배열 [ C언어 ] 프로젝트(삽질일기) : 도서 관리 프로그램 – (1) – 구조체 배열. eteo 2022. 4. 12. 11:01. C언어 도서관리 프로그램 구조체배열을 사용한 간단한 도서관리 … …
- Most searched keywords: Whether you are looking for [ C언어 ] 프로젝트(삽질일기) : 도서 관리 프로그램 – (1) – 구조체 배열 [ C언어 ] 프로젝트(삽질일기) : 도서 관리 프로그램 – (1) – 구조체 배열. eteo 2022. 4. 12. 11:01. C언어 도서관리 프로그램 구조체배열을 사용한 간단한 도서관리 … book.h #ifndef __BOOK_H__ #define __BOOK_H__ #define SIZE 20 typedef struct { char year; char month; char day; }_stDate; typedef struct { char title[30]; int price; char author[10]; int page; _stDa..
- Table of Contents:
태그
관련글
댓글0
공지사항
최근글
인기글
최근댓글
태그
전체 방문자
![[ C언어 ] 프로젝트(삽질일기) : 도서 관리 프로그램 - (1) - 구조체 배열](https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeG1QGr%2FbtrzbfbieuH%2FK2A6eHBZvtztnCjFIXk470%2Fimg.gif)
C언어 도서 대출 프로그램
- Article author: cho22.tistory.com
- Reviews from users: 47932
Ratings
- Top rated: 3.9
- Lowest rated: 1
- Summary of article content: Articles about C언어 도서 대출 프로그램 연결형 리스트를 이용한 도서 관리 프로그램을 만들어라. 라는 문제를 오랜만에 C로 풀어보았다. 오랜만에 보니 C를 했더니 bool 변수 선언이 안된다. …
- Most searched keywords: Whether you are looking for C언어 도서 대출 프로그램 연결형 리스트를 이용한 도서 관리 프로그램을 만들어라. 라는 문제를 오랜만에 C로 풀어보았다. 오랜만에 보니 C를 했더니 bool 변수 선언이 안된다. 연결형 리스트를 이용한 도서 관리 프로그램을 만들어라. 라는 문제를 오랜만에 C로 풀어보았다 오랜만에 보니 C를 했더니 bool 변수 선언이 안된다. 찾아보니 C에는 bool 변수가 없단다; 별도의 헤더를 추가해줘..
- Table of Contents:

See more articles in the same category here: Toplist.aseanseafoodexpo.com/blog.
[C언어] 도서 관리 프로그램 | 도서 대출, 반납, 등록, 검색 | 구조체, 파일입출력
#define _CRT_SECURE_NO_WARNINGS #include
#include #include #include #define BOOK_NAME_SIZE 50 #define BOOK_AUTH_SIZE 30 #define BOOK_PUBL_SIZE 30 void borrowbook(); // 도서 대출 함수 void returnbook(); // 도서 반납 함수 void registerbook(); // 도서 등록 함수 void printbook(); // 도서 목록 출력 함수 void searchmenu(); // 도서 검색 메뉴 함수 void searchbookbyname(); // 도서명으로 검색 void searchbookbyauth(); // 저자로 검색 void searchbookbypubl(); // 출판사로 검색 typedef struct _book { char name[BOOK_NAME_SIZE]; // 책 제목 char auth[BOOK_AUTH_SIZE]; // 책 저자 char publ[BOOK_PUBL_SIZE]; // 책 출판사 int isborrowed; // 대출 상태가 아니면 0, 대출된 상태이면 1 }Book; enum colorName { BLACK, D_BLUE, D_GREEN, D_SKYBLUE, D_RED, D_VIOLET, D_YELLOW, GRAY, D_GRAY, BLUE, GREEN, SKYBLUE, RED, VIOLET, YELLOW, WHITE, }; void drw(int bgColor, int textColor) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), bgColor * 16 + textColor); } FILE* fp; Book booklist[100]; int bookindex = 0; int i, j; int main(void) { int i = 0; char fpname[BOOK_NAME_SIZE]; char fpauth[BOOK_AUTH_SIZE]; char fppubl[BOOK_PUBL_SIZE]; char input[10] = { 0, }; system(“title 도서 종합 관리 프로그램”); drw(D_VIOLET, WHITE); fp = fopen(“booklist.txt”, “a+”); if (fp == NULL) { printf(“파일 열기에 실패했습니다. “); return 1; } while (!feof(fp)) { fscanf(fp, “%[^,], %[^,], %[^
]”, booklist[i].name, booklist[i].auth, booklist[i].publ); fgetc(fp); booklist[i].isborrowed = 0; bookindex++; i++; } while (1) { system(“cls”); printf(“[대출] [반납] [도서등록] [목록출력] [검색] [종료] : “); gets(input); if (!strcmp(input, “대출”)) borrowbook(); else if (!strcmp(input, “반납”)) returnbook(); else if (!strcmp(input, “도서등록”)) registerbook(); else if (!strcmp(input, “목록출력”)) printbook(); else if (!strcmp(input, “검색”)) searchmenu(); else if (!strcmp(input, “종료”)) { printf(”
도서 관리 프로그램을 종료합니다.
“); return 0; } else { printf(”
잘못된 입력입니다. 다시 입력해주세요.
“); printf(”
계속하려면 아무 키나 입력하세요…”); _getch(); continue; } } fclose(fp); return 0; } void borrowbook() { char bookname[BOOK_NAME_SIZE] = { 0, }; printf(”
대출할 도서의 이름을 입력해주세요 : “); gets(bookname); for (i = 0; i < bookindex; i++) { if (!strcmp(bookname, booklist[i].name)) { if (booklist[i].isborrowed == 0) { booklist[i].isborrowed = 1; printf("대출되었습니다. "); printf(" 계속하려면 아무 키나 입력하세요..."); _getch(); return; } else { printf("위 도서는 이미 대출되었습니다. "); printf(" 계속하려면 아무 키나 입력하세요..."); _getch(); return; } } } printf("위 이름을 가진 도서가 없습니다. "); printf(" 계속하려면 아무 키나 입력하세요..."); _getch(); } void returnbook() { char bookname[BOOK_NAME_SIZE] = { 0, }; printf(" 반납할 도서의 이름을 입력해주세요 : "); gets(bookname); for (i = 0; i < bookindex; i++) { if (!strcmp(bookname, booklist[i].name)) { if (booklist[i].isborrowed == 1) { booklist[i].isborrowed = 0; printf("반납되었습니다. "); printf(" 계속하려면 아무 키나 입력하세요..."); _getch(); return; } else { printf("위 도서는 대출 상태가 아닙니다. "); printf(" 계속하려면 아무 키나 입력하세요..."); _getch(); return; } } } printf("위 이름을 가진 도서가 없습니다. "); printf(" 계속하려면 아무 키나 입력하세요..."); _getch(); } void registerbook() { char yesorno[10] = { 0, }; char bookname[BOOK_NAME_SIZE] = { 0, }; char bookauth[BOOK_AUTH_SIZE] = { 0, }; char bookpubl[BOOK_PUBL_SIZE] = { 0, }; printf(" 등록할 도서의 이름을 입력하세요 : "); gets(bookname); printf("등록할 도서의 저자를 입력하세요 : "); gets(bookauth); printf("등록할 도서의 출판사를 입력하세요 : "); gets(bookpubl); printf("도서명 : %s 저 자 : %s 출판사 : %s 위 내용이 맞습니까? (예/아니요) : ", bookname, bookauth, bookpubl); gets(yesorno); if (strcmp(yesorno, "예")) { printf(" 도서 등록을 취소합니다. "); printf(" 계속하려면 아무 키나 입력하세요..."); _getch(); return; } strcpy(booklist[bookindex].name, bookname); strcpy(booklist[bookindex].auth, bookauth); strcpy(booklist[bookindex].publ, bookpubl); booklist[bookindex].isborrowed = 0; bookindex++; fprintf(fp, " %s,%s,%s", bookname, bookauth, bookpubl); printf(" 도서 등록이 완료되었습니다. "); printf(" 계속하려면 아무 키나 입력하세요..."); _getch(); } void printbook() { printf(" "); if (!bookindex) { printf("도서 목록이 비었음 "); printf(" 계속하려면 아무 키나 입력하세요..."); _getch(); return; } for (i = 0; i < bookindex; i++) { printf("======================= "); printf("도서명 : %s ", booklist[i].name); printf("저 자 : %s ", booklist[i].auth); printf("출판사 : %s ", booklist[i].publ); printf("대출상태 : %s ", (booklist[i].isborrowed == 1) ? "대출 중인 책" : "대출 가능한 책"); } printf("======================= "); printf(" 계속하려면 아무 키나 입력하세요..."); _getch(); } void searchmenu() { char input[20] = { 0, }; printf(" [도서명검색] [저자검색] [출판사검색] : "); gets(input); if (!strcmp(input, "도서명검색")) searchbookbyname(); else if (!strcmp(input, "저자검색")) searchbookbyauth(); else if (!strcmp(input, "출판사검색")) searchbookbypubl(); else { printf(" 잘못된 입력입니다. "); printf(" 계속하려면 아무 키나 입력하세요..."); _getch(); } } void searchbookbyname() { int namelength; // 검색할 책 이름의 길이 int samecnt; // 책 이름 한 글자씩 비교, 같으면 1씩 증가 int searchcnt = 0; // 총 검색된 도서 개수 char bookname[BOOK_NAME_SIZE] = { 0, }; printf(" 도서명을 입력하세요 : "); gets(bookname); namelength = strlen(bookname); printf(" "); for (i = 0; i < bookindex; i++) { samecnt = 0; for (j = 0; j < namelength; j++) { if (bookname[j] == booklist[i].name[j]) samecnt++; else break; } if (samecnt == namelength) { printf("======================= "); printf("도서명 : %s ", booklist[i].name); printf("저 자 : %s ", booklist[i].auth); printf("출판사 : %s ", booklist[i].publ); printf("대출상태 : %s ", (booklist[i].isborrowed == 1) ? "대출 중인 책" : "대출 가능한 책"); searchcnt++; } } if (searchcnt) printf("======================= "); else printf("검색한 도서를 찾지 못했습니다. "); printf(" 계속하려면 아무 키나 입력하세요..."); _getch(); } void searchbookbyauth() { int searchcnt = 0; char bookauth[BOOK_AUTH_SIZE] = { 0, }; printf(" 저자의 이름을 입력하세요 : "); gets(bookauth); printf(" "); for (i = 0; i < bookindex; i++) { if (!strcmp(booklist[i].auth, bookauth)) { printf("======================= "); printf("도서명 : %s ", booklist[i].name); printf("저 자 : %s ", booklist[i].auth); printf("출판사 : %s ", booklist[i].publ); printf("대출상태 : %s ", (booklist[i].isborrowed == 1) ? "대출 중인 책" : "대출 가능한 책"); searchcnt++; } } if (searchcnt) printf("======================= "); else printf("검색한 저자의 도서를 찾지 못했습니다. "); printf(" 계속하려면 아무 키나 입력하세요..."); _getch(); } void searchbookbypubl() { int searchcnt = 0; char bookpubl[BOOK_PUBL_SIZE] = { 0, }; printf(" 출판사 이름을 입력하세요 : "); gets(bookpubl); printf(" "); for (i = 0; i < bookindex; i++) { if (!strcmp(booklist[i].publ, bookpubl)) { printf("======================= "); printf("도서명 : %s ", booklist[i].name); printf("저 자 : %s ", booklist[i].auth); printf("출판사 : %s ", booklist[i].publ); printf("대출상태 : %s ", (booklist[i].isborrowed == 1) ? "대출 중인 책" : "대출 가능한 책"); searchcnt++; } } if (searchcnt) printf("======================= "); else printf("검색한 출판사의 도서를 찾지 못했습니다. "); printf(" 계속하려면 아무 키나 입력하세요..."); _getch(); } 테스트 해보시려면 booklist.txt를 소스코드와 같은 공간에 추가하여 이런 식으로 책제목,저자,출판사 쉼표로 구분하여 작성하면 됩니다.
C 언어 도서 관리 프로젝트
C언어의 기초 개념들이 들어 있는 프로젝트, 도서 관리 프로젝트이다. 최종적으로 이러한 것을 만들 것이다.
콜솔이라 다소 조잡해 보이지만, 중요한 것은 내용이다!! API는 다 까먹었다!!! (충!성!)
내가 직접 도서관을 만든다고 생각하면서 차근차근 해야 할 것들을 생각해 보자. 우선 도서관에 있는 책들을 전산에 쓸 수 있도록 문서화해야 한다. 이것이 1번, 책을 새로 추가하기이다. 책들의 정보를 하나하나 추가해 주면서 총 몇권이 있는지도 확인해 주어야 할 것이다.
다음, 도서관에는 책들이 많다. 그래서 검색을 할 수가 있어야 한다. 검색을 하는 옵션으로는
1. 책 이름으로 검색
2. 저자로 검색
3. 출팔사로 검색
등을 생각해 볼 수 있을 것이다.
검색을 했다면, 책을 빌리고 반납할 수 있는 기능이 있어야 할 것이다. 이것이 3, 4번 내용이다.
다음으로, 이건 파일 입출력의 개념을 익히기 위해서 추가된 항목들인데, 책들의 내용을 txt파일로 출력하고, 반대로 이미 출력된 txt파일에서 책 리스트들을 불러올 수 있는 기능들을 추가할 것이다. 이렇게 말이다.
실컷 책들이름, 저자, 출판사, 대여 가능 여부들을 작성하고 5번을 누르면 아래와 같이 txt파일로 작성이 되게 할 것이다.
그리고 이렇게 작성된 파일을 불러와서 다시 사용할 수 있게 하는 것이 목표이다.
6번으로 리스트를 불러오고 7번으로 출력을 한 상황이다. 우선 가장 기본이 되는 책의 구조를 잡아보자.
1 2 3 4 5 6 typedef struct BOOK { char book_name[ 30 ]; char auth_name[ 30 ]; char publ_name[ 30 ]; int borrowed; }BOOK; cs
이렇게 구조체로 구조(?!!)를 잡아주었다. 보통 struct BOOK ㅇㅇㅇ 이렇게 쓰기 싫어서 typedef를 붙여주는 경우가 가 많다. 그런 다음, 이 책들의 배열인 도서관을 선언할 것이다.
1 2 3 4 5 6 7 8 9 int user_choice; /* 유저가 선택한 메뉴 */ int num_total_book = 0 ; /* 현재 책의 수 */ BOOK * book_list; printf ( “도서관의 최대 보관 장서 수를 설정해주세요 : ” ); scanf_s( “%d” , & user_choice); book_list = (BOOK * ) malloc ( sizeof (BOOK) * user_choice); cs
이는 사용자가 초기에 최대 권수를 설정할 수 있도록 동적 프로그래밍을 사용하였다. 그럼 이제, 각 기능들에 해당하는 함수들을 선언할 것이다.
1 2 3 4 5 6 7 char search_str( char * dic, char * word); int register_book(BOOK * book_list, int * nth); int search_book(BOOK * book_list, int total_num_book); int borrow_book(BOOK * book_list); int return_book(BOOK * book_list); int print_book_list(BOOK * book_list, int total_num_book); int retrieve_book_info(BOOK * * book_list, int * total_num_book); cs
각 함수들은, 책을 새로 추가하기, 책을 검색하기, 책을 빌리기/반납하기, 책들의 내용을 출력, 책들의 내용을 불러오는 기능들을 하는 함수들이다. 하나씩 만들어 보자. 그리고 함수들을 만들면서 어떠한 값들을 input으로 받아야 할지 생각을 해야 한다. 기본적으로 BOOK들의 리스트를 받고, 반복을 얼마나 해야 할 지 알기 위해서 전체 책이 몇 권이 있는지를 받기로 하였다. 제일 쉬운 책 추가부터 해보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 int register_book(BOOK * book_list, int * nth) { printf ( “책의 이름 : ” ); scanf_s( “%s” , book_list[ * nth].book_name, sizeof (book_list[ * nth].book_name)); printf ( “책의 저자 : ” ); scanf_s( “%s” , book_list[ * nth].auth_name, sizeof (book_list[ * nth].auth_name)); printf ( “책의 출판사 : ” ); scanf_s( “%s” , book_list[ * nth].publ_name, sizeof (book_list[ * nth].publ_name)); book_list[ * nth].borrowed = 0 ; ( * nth) + + ; return 0 ; } Colored by Color Scripter cs
그냥 scanf로 모두 받은 다음, 전체 권수를 추가만 해 주면 될 것이다. 다음은, 책 검색.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 int search_book(BOOK * book_list, int total_num_book) { int user_input; /* 사용자의 입력을 받는다. */ int i; char user_search[ 30 ]; printf ( “어느 것으로 검색 할 것인가요?
” ); printf ( “1. 책 제목 검색
” ); printf ( “2. 지은이 검색
” ); printf ( “3. 출판사 검색
” ); scanf_s( “%d” , & user_input); printf ( “검색할 단어를 입력해주세요 : ” ); scanf_s( “%s” , user_search, sizeof (user_search)); printf ( “검색 결과
” ); if (user_input = = 1 ) { for (i = 0 ; i < total_num_book; i + + ) { if (search_str(book_list[i].book_name, user_search) > = 0 ) { printf ( “번호 : %d // 책 이름 : %s // 지은이 : %s // 출판사 : %s
” , i, book_list[i].book_name, book_list[i].auth_name, book_list[i].publ_name); } else printf ( “그런 책 없음.
” ); } } else if (user_input = = 2 ) { for (i = 0 ; i < total_num_book; i + + ) { if (search_str(book_list[i].auth_name, user_search) > = 0 ) { printf ( “번호 : %d // 책 이름 : %s // 지은이 : %s // 출판사 : %s
” , i, book_list[i].book_name, book_list[i].auth_name, book_list[i].publ_name); } else printf ( “그런 책 없음.
” ); } } else if (user_input = = 3 ) { for (i = 0 ; i < total_num_book; i + + ) { if (search_str(book_list[i].publ_name, user_search) > = 0 ) { printf ( “번호 : %d // 책 이름 : %s // 지은이 : %s // 출판사 : %s
” , i, book_list[i].book_name, book_list[i].auth_name, book_list[i].publ_name); } else printf ( “그런 책 없음.
” ); } } return 0 ; } Colored by Color Scripter cs
어떤 정보로 검색을 할 지 결정하고, search_str로 실질적인 검색을 한다. search_str은 그냥 문자열을 검색하는 함수이고, 간단하게 그 문자열이 있는지만 보는 함수이다. 아래와 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 char search_str( char * dic, char * word) { int loc = 0 ; int search_loc = 0 ; while ( * dic) { if ( * dic = = * word) { while ( * word) { if ( * dic ! = * word) { word – = search_loc; loc + = search_loc; search_loc = 0 ; break ; } dic + + ; word + + ; search_loc + + ; if ( * word = = 0 ) { return loc; } } } dic + + ; loc + + ; } return – 1 ; } Colored by Color Scripter cs
책을 빌리고 반납하는 것은 매우 쉽다. borrowed 변수가 0이면 대출 가능한 것, 1이면 이미 대출된 것이라 하였다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 int borrow_book(BOOK * book_list) { /* 사용자로 부터 책번호를 받을 변수*/ int book_num; printf ( “빌릴 책의 번호를 말해주세요
” ); printf ( “책 번호 : ” ); scanf_s( “%d” , & book_num); if (book_list[book_num].borrowed = = 1 ) { printf ( “이미 대출된 책입니다!
” ); } else { printf ( “책이 성공적으로 대출되었습니다.
” ); book_list[book_num].borrowed = 1 ; } return 0 ; } int return_book(BOOK * book_list) { /* 반납할 책의 번호 */ int num_book; printf ( “반납할 책의 번호를 써주세요
” ); printf ( “책 번호 : ” ); scanf_s( “%d” , & num_book); if (book_list[num_book].borrowed = = 0 ) { printf ( “이미 반납되어 있는 상태입니다
” ); } else { book_list[num_book].borrowed = 0 ; printf ( “성공적으로 반납되었습니다
” ); } return 0 ; } Colored by Color Scripter cs
이제 책의 리스트를 파일 입출력을 이용해 메모장에 기록하는 함수를 만들 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 int print_book_list(BOOK * book_list, int total_num_book) { FILE * fp; errno_t err = fopen_s( & fp, “book_list.txt” , “w” ); if (err = = 0 ) { printf ( “success!! ” ); } else { printf ( “error” ); return 0 ; } fprintf(fp, “%d
” , total_num_book); for ( int i = 0 ; i < total_num_book; i + + ) { fprintf(fp, "%s %s %s " , book_list[i].book_name, book_list[i].auth_name, book_list[i].publ_name); if (book_list[i].borrowed = = 0 ) fprintf(fp, "NO " ); else fprintf(fp, "YES " ); } fclose(fp); return 0 ; } Colored by Color Scripter cs 파일 입출력을 위해서 stdlib.h는 미리 include한 상태이다. 마지막으로 이미 만들어진 메모장 파일을 불러오는 기능을 만들었다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 int retrieve_book_info(BOOK * * book_list, int * total_num_book) { FILE * fp; errno_t err = fopen_s( & fp, "book_list.txt" , "r" ); int total_book; char borrow[ 10 ]; if (err = = 0 ) { printf ( "success!! " ); } else { printf ( "error" ); return 0 ; } fscanf_s(fp, "%d" , & total_book); * total_num_book = total_book; free ( * book_list); ( * book_list) = (BOOK * ) malloc ( sizeof (BOOK) * total_book); ; for ( int i = 0 ; i < total_book; i + + ) { fscanf_s(fp, "%s" , ( * book_list)[i].book_name, sizeof (( * book_list)[i].book_name)); fscanf_s(fp, "%s" , ( * book_list)[i].auth_name, sizeof (( * book_list)[i].auth_name)); fscanf_s(fp, "%s" , ( * book_list)[i].publ_name, sizeof (( * book_list)[i].publ_name)); fscanf_s(fp, "%s" , borrow, sizeof (borrow)); //printf("%s %s %s %s ", (*book_list)[i].book_name, (*book_list)[i].auth_name, (*book_list)[i].publ_name, borrow); //printf("%d ", strcmp(borrow, "NO")); if (strcmp(borrow, "NO" ) = = 0 ) ( * book_list)[i].borrowed = 0 ; else if (strcmp(borrow, "YES" ) = = 0 ) ( * book_list)[i].borrowed = 1 ; //printf("%d", (book_list[i])->borrowed); } return 0 ; } Colored by Color Scripter cs
여기에서 혼동이 올 수가 있는데 아래의 접근 방식이다.
(*book_list)[i].book_name
book_list는 BOOK들이 들어 있는 구조체 리스트이다. 그래서 아래와 같이 써 주면 book_list는 하나밖에 없는데 다음 book_list에 접근하려고 하기 때문에 작동이 되질 않는다. (참고로 이렇게 실수를 해도 어떠한 오류도 검출되지 않는다.) 아래의 풀이를 보면 이해가 될 것이다 .
(*book_list)[i].book_name == ( *( *book_list + i)).book_name
book_list[i]->book_name == ( *( *(book_list + i))).book_name
그럼, 전체 코드는 다음과 같아질 것이다. 아래 글자를 누르면 펼쳐진다.
더보기
접기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 #include < stdio.h > #include < stdlib.h > #include < string .h > typedef struct BOOK { char book_name[ 30 ]; char auth_name[ 30 ]; char publ_name[ 30 ]; int borrowed; }BOOK; char search_str( char * dic, char * word); int register_book(BOOK * book_list, int * nth); int search_book(BOOK * book_list, int total_num_book); int borrow_book(BOOK * book_list); int return_book(BOOK * book_list); int print_book_list(BOOK * book_list, int total_num_book); int retrieve_book_info(BOOK * * book_list, int * total_num_book); int main() { int user_choice; /* 유저가 선택한 메뉴 */ int num_total_book = 0 ; /* 현재 책의 수 */ BOOK * book_list; printf ( “도서관의 최대 보관 장서 수를 설정해주세요 : ” ); scanf_s( “%d” , & user_choice); book_list = (BOOK * ) malloc ( sizeof (BOOK) * user_choice); while ( 1 ) { printf ( “도서 관리 프로그램
” ); printf ( “메뉴를 선택하세요
” ); printf ( “1. 책을 새로 추가하기
” ); printf ( “2. 책을 검색하기
” ); printf ( “3. 책을 빌리기
” ); printf ( “4. 책을 반납하기
” ); printf ( “5. 책들의 내용을 book_list.txt 에 출력
” ); printf ( “6. 책들의 내용을 book_list.txt 에서 불러옴
” ); printf ( “7. 책들의 목록을 출력
” ); printf ( “8. 프로그램 종료
” ); printf ( “당신의 선택은 : ” ); scanf_s( “%d” , & user_choice); if (user_choice = = 1 ) { /* 책을 새로 추가하는 함수 호출 */ register_book(book_list, & num_total_book); } else if (user_choice = = 2 ) { /* 책을 검색하는 함수 호출 */ search_book(book_list, num_total_book); } else if (user_choice = = 3 ) { /* 책을 빌리는 함수 호출 */ borrow_book(book_list); } else if (user_choice = = 4 ) { /* 책을 반납하는 함수 호출 */ return_book(book_list); } else if (user_choice = = 5 ) { print_book_list(book_list, num_total_book); } else if (user_choice = = 6 ) { retrieve_book_info( & book_list, & num_total_book); } else if (user_choice = = 7 ) { for ( int i = 0 ; i < num_total_book; i + + ) { printf ( "%s // %s // %s // " , book_list[i].book_name, book_list[i].auth_name, book_list[i].publ_name); if (book_list[i].borrowed = = 0 ) printf ( "NO " ); else printf ( "YES " ); } } else { printf ( "/* 프로그램을 종료. */" ); break ; } } free (book_list); return 0 ; } char search_str( char * dic, char * word) { int loc = 0 ; int search_loc = 0 ; while ( * dic) { if ( * dic = = * word) { while ( * word) { if ( * dic ! = * word) { word - = search_loc; loc + = search_loc; search_loc = 0 ; break ; } dic + + ; word + + ; search_loc + + ; if ( * word = = 0 ) { return loc; } } } dic + + ; loc + + ; } return - 1 ; } int register_book(BOOK * book_list, int * nth) { printf ( "책의 이름 : " ); scanf_s( "%s" , book_list[ * nth].book_name, sizeof (book_list[ * nth].book_name)); printf ( "책의 저자 : " ); scanf_s( "%s" , book_list[ * nth].auth_name, sizeof (book_list[ * nth].auth_name)); printf ( "책의 출판사 : " ); scanf_s( "%s" , book_list[ * nth].publ_name, sizeof (book_list[ * nth].publ_name)); book_list[ * nth].borrowed = 0 ; ( * nth) + + ; return 0 ; } int search_book(BOOK * book_list, int total_num_book) { int user_input; /* 사용자의 입력을 받는다. */ int i; char user_search[ 30 ]; printf ( "어느 것으로 검색 할 것인가요? " ); printf ( "1. 책 제목 검색 " ); printf ( "2. 지은이 검색 " ); printf ( "3. 출판사 검색 " ); scanf_s( "%d" , & user_input); printf ( "검색할 단어를 입력해주세요 : " ); scanf_s( "%s" , user_search, sizeof (user_search)); printf ( "검색 결과 " ); if (user_input = = 1 ) { for (i = 0 ; i < total_num_book; i + + ) { if (search_str(book_list[i].book_name, user_search) > = 0 ) { printf ( “번호 : %d // 책 이름 : %s // 지은이 : %s // 출판사 : %s
” , i, book_list[i].book_name, book_list[i].auth_name, book_list[i].publ_name); } else printf ( “그런 책 없음.
” ); } } else if (user_input = = 2 ) { for (i = 0 ; i < total_num_book; i + + ) { if (search_str(book_list[i].auth_name, user_search) > = 0 ) { printf ( “번호 : %d // 책 이름 : %s // 지은이 : %s // 출판사 : %s
” , i, book_list[i].book_name, book_list[i].auth_name, book_list[i].publ_name); } else printf ( “그런 책 없음.
” ); } } else if (user_input = = 3 ) { for (i = 0 ; i < total_num_book; i + + ) { if (search_str(book_list[i].publ_name, user_search) > = 0 ) { printf ( “번호 : %d // 책 이름 : %s // 지은이 : %s // 출판사 : %s
” , i, book_list[i].book_name, book_list[i].auth_name, book_list[i].publ_name); } else printf ( “그런 책 없음.
” ); } } return 0 ; } int borrow_book(BOOK * book_list) { /* 사용자로 부터 책번호를 받을 변수*/ int book_num; printf ( “빌릴 책의 번호를 말해주세요
” ); printf ( “책 번호 : ” ); scanf_s( “%d” , & book_num); if (book_list[book_num].borrowed = = 1 ) { printf ( “이미 대출된 책입니다!
” ); } else { printf ( “책이 성공적으로 대출되었습니다.
” ); book_list[book_num].borrowed = 1 ; } return 0 ; } int return_book(BOOK * book_list) { /* 반납할 책의 번호 */ int num_book; printf ( “반납할 책의 번호를 써주세요
” ); printf ( “책 번호 : ” ); scanf_s( “%d” , & num_book); if (book_list[num_book].borrowed = = 0 ) { printf ( “이미 반납되어 있는 상태입니다
” ); } else { book_list[num_book].borrowed = 0 ; printf ( “성공적으로 반납되었습니다
” ); } return 0 ; } int print_book_list(BOOK * book_list, int total_num_book) { FILE * fp; errno_t err = fopen_s( & fp, “book_list.txt” , “w” ); if (err = = 0 ) { printf ( “success!! ” ); } else { printf ( “error” ); return 0 ; } fprintf(fp, “%d
” , total_num_book); for ( int i = 0 ; i < total_num_book; i + + ) { fprintf(fp, "%s %s %s " , book_list[i].book_name, book_list[i].auth_name, book_list[i].publ_name); if (book_list[i].borrowed = = 0 ) fprintf(fp, "NO " ); else fprintf(fp, "YES " ); } fclose(fp); return 0 ; } int retrieve_book_info(BOOK * * book_list, int * total_num_book) { FILE * fp; errno_t err = fopen_s( & fp, "book_list.txt" , "r" ); int total_book; char borrow[ 10 ]; if (err = = 0 ) { printf ( "success!! " ); } else { printf ( "error" ); return 0 ; } fscanf_s(fp, "%d" , & total_book); * total_num_book = total_book; free ( * book_list); ( * book_list) = (BOOK * ) malloc ( sizeof (BOOK) * total_book); ; for ( int i = 0 ; i < total_book; i + + ) { fscanf_s(fp, "%s" , ( * book_list)[i].book_name, sizeof (( * book_list)[i].book_name)); fscanf_s(fp, "%s" , ( * book_list)[i].auth_name, sizeof (( * book_list)[i].auth_name)); fscanf_s(fp, "%s" , ( * book_list)[i].publ_name, sizeof (( * book_list)[i].publ_name)); fscanf_s(fp, "%s" , borrow, sizeof (borrow)); //printf("%s %s %s %s ", (*book_list)[i].book_name, (*book_list)[i].auth_name, (*book_list)[i].publ_name, borrow); //printf("%d ", strcmp(borrow, "NO")); if (strcmp(borrow, "NO" ) = = 0 ) ( * book_list)[i].borrowed = 0 ; else if (strcmp(borrow, "YES" ) = = 0 ) ( * book_list)[i].borrowed = 1 ; //printf("%d", (book_list[i])->borrowed); } return 0 ; } Colored by Color Scripter cs
접기
아주 기초적인 프로그램이었다. 가끔 C를 까먹으면 다시 만들면서 복기할 생각이다.
셀맨의 일상 블로그
소규모의 데이터베이스 프로그램 작성, 자기가 소유하고 있는 도서를 관리하는 프로그램을 작성하여 보자. 다음과 같은 메뉴 화면을 가진다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 #include < stdio.h > #include < stdlib.h > #include < string .h > #define SIZE 100 typedef struct BOOK { char name[SIZE]; char author[SIZE]; char company[SIZE]; } book; int menu( void ); void add(FILE * fp); void find(FILE * fp); int main( void ) { int num = 0 ; FILE * fp = NULL ; if ((fp = fopen( “booklist.bin” , “a+” )) = = NULL ) { printf ( “파일오픈실패
” ); exit( 1 ); } while ( 1 ) { num = menu(); if (num = = 1 ) add(fp); else if (num = = 2 ) find(fp); else break ; } fclose(fp); return 0 ; } int menu( void ) { int i = 0 ; printf ( “메뉴
” ); printf ( “1. 추가
” ); printf ( “2. 탐색
” ); printf ( “3. 종료
” ); printf ( “번호를 입력하세요: ” ); scanf ( “%d” , & i); getchar(); return i; } void add(FILE * fp) { book a; printf ( “도서의 이름: ” ); gets(a.name); printf ( “저자: ” ); gets(a.author); printf ( “출판사명: ” ); gets(a.company); fseek(fp, 0 , SEEK_END); fwrite( & a, sizeof (book), 1 , fp); } void find(FILE * fp) { char arr[SIZE]; book find; printf ( “도서의 이름을 입력하세요: ” ); gets(arr); fseek(fp, 0 , SEEK_SET); while ( ! feof(fp)) { fread( & find, sizeof (book), 1 , fp); if (strcmp(find.name,arr) = = 0 ) { printf ( “저자: %s
” ,find.author); printf ( “출판사명: %s
” ,find.company); break ; } } } Colored by Color Scripter cs
So you have finished reading the c 언어 도서 관리 프로그램 topic article, if you find this article useful, please share it. Thank you very much. See more: c언어 도서관리 프로그램 파일입출력, C언어 도서관리 프로그램 삭제, c언어 도서관리 프로그램 구조체, c언어 도서관리 프로그램 추가, c++ 도서관리 프로그램, 도서 관리 프로그램 소스, C 언어 메뉴 관리 프로그램, c언어 도서 검색 프로그램