저수준 입출력을 사용한 도서 관리 프로그램 v1.0 (2010년 12월 29일 수요일)
사용언어 : C
운영체제 : 리눅스(Ubuntu)
개발도구 : vi 편집기
운영체제 : 리눅스(Ubuntu)
개발도구 : vi 편집기
#include <stdio.h>
#include <fcntl.h> // oflag 사용을 위함
#include <sys/stat.h> // pmode 사용을 위함
//#include <stdlib.h>
//#include <string.h>
//#include <curses.h>
//#include <unistd.h>
//#include <sys/types.h>
typedef struct tag_booktype
{
char book[30];
char author[15];
char publiser[15];
char price[15];
char year[15];
} booktype;
void list(int iInfo);
void insert(void);
int main()
{
int iFd;
char iSelect;
int iCnt=0;
system("clear");
do { // 메인 화면
if((iFd=open("BOOK.DBF",O_RDWR)) >= 0)
{ // 파일이 있을 경우만 실행 (보유 현황 표시)
iCnt=0;
while(read(iFd, &iSelect, 1) != 0)
{
if(iSelect == '\n')
{
iCnt++;
}
}
}
close(iFd);
printf("┏━━━━━━━━━┓\n");
printf("┃책 보유 현황 : %03d┃\n", iCnt);
printf("┗━━━━━━━━━┛\n\n");
printf("┏━ 메뉴선택화면 ━┓\n");
printf("┃ 1.insert ┃\n");
printf("┃ 2. list ┃\n");
printf("┃ 3. quit ┃\n");
printf("┗━━━━━━━━━┛\n");
printf(" select : ");
scanf("%c", &iSelect);
__fpurge(stdin);
switch(iSelect)
{ // 메뉴 선택 설정
case '1':
insert(); // insert함수호출
break;
case '2':
list(iCnt); // list함수호출
break;
case '3': // 종료!!
break;
default: // 선택 오류시 출력!
printf(" select Error. You select continue.\n");
break;
}
} while('3' != iSelect); // 메뉴 조건 설정!
printf(" Books supervision end program.\n"); // 종료 메시지!!
return 0;
}
void insert(void)
{ // 파일에 정보 추가 설정!
booktype fIn;
int iCnt=0;
int infd;
char cQuit;
if((infd=open("BOOK.DBF",O_RDWR|O_APPEND)) < 0)
{ // 만약 BOOK 파일이 없을 경우 새로 만듬!!
infd=creat("BOOK.DBF", S_IREAD|S_IWRITE);
close(infd);
open("BOOK.DBF", O_RDWR);
}
do { // 책 정보 입력!!
printf("============ [%03d] =============\n", ++iCnt);
printf("책 이 름 : ");
scanf("%[^\n]", &fIn.book); // 공백도 입력 가능!
__fpurge(stdin);
fIn.book[strlen(fIn.book)+1]=0;
fIn.book[strlen(fIn.book)]='|';
write(infd, fIn.book, strlen(fIn.book));
printf("저 자 : ");
scanf("%[^\n]", &fIn.author);
__fpurge(stdin);
fIn.author[strlen(fIn.author)+1]=0;
fIn.author[strlen(fIn.author)]='|';
write(infd, fIn.author, strlen(fIn.author));
printf("출 판 사 : ");
scanf("%[^\n]", &fIn.publiser);
__fpurge(stdin);
fIn.publiser[strlen(fIn.publiser)+1]=0;
fIn.publiser[strlen(fIn.publiser)]='|';
write(infd, fIn.publiser, strlen(fIn.publiser));
printf("가 격 : ");
scanf("%[^\n]", &fIn.price);
__fpurge(stdin);
fIn.price[strlen(fIn.price)+1]=0;
fIn.price[strlen(fIn.price)]='|';
write(infd, fIn.price, strlen(fIn.price));
printf("출판연도(00/00/00) : ");
scanf("%[^\n]", &fIn.year);
__fpurge(stdin);
fIn.year[strlen(fIn.year)+1]=0;
fIn.year[strlen(fIn.year)]='\n';
write(infd, fIn.year, strlen(fIn.year));
printf("아무키나 누르면 계속 끝내려면 'Q' 입력 : ");
scanf("%c", &cQuit);
__fpurge(stdin); // 입력버퍼에 남아있는 찌꺼지 초기화!
} while(('q' != cQuit)&&('Q' != cQuit));
close(infd);
system("clear");
return;
}
void list(int iInfo)
{ // 파일 안의 정보 출력!
booktype fList;
int iCnt=0;
int iPage=0;
int iFD;
int iFind;
int iFCnt;
int iEnd;
int iTemp;
char cQuit;
char buffer;
char cHelp;
system("clear");
if((iFD=open("BOOK.DBF",O_RDWR)) < 0)
{ // 파일이 없을 경우 아래 메시지 출력!!
printf(" ====================\n");
printf(" No found File....\n");
printf(" ====================\n");
return;
}
printf("=========== LIST INFOMATION ============\n");
do { // 책 정보 출력!!
printf("========== [%03d] NUMBER LIST ===========\n", ++iPage);
for(iCnt=0; buffer != '|'; iCnt++)
{ // 특수문자를 만날때까지 1바이트씩 읽어 버퍼에 저장!
read(iFD, &buffer, 1);
fList.book[iCnt]=buffer;
}
fList.book[iCnt-1]=0; // 마지막 특수문자 삭제를 위함!
for(iCnt=0,buffer=0; buffer != '|'; iCnt++)
{
read(iFD, &buffer, 1);
fList.author[iCnt]=buffer;
}
fList.author[iCnt-1]=0;
for(iCnt=0,buffer=0; buffer != '|'; iCnt++)
{
read(iFD, &buffer, 1);
fList.publiser[iCnt]=buffer;
}
fList.publiser[iCnt-1]=0;
for(iCnt=0,buffer=0; buffer != '|'; iCnt++)
{
read(iFD, &buffer, 1);
fList.price[iCnt]=buffer;
}
fList.price[iCnt-1]=0;
for(iCnt=0,buffer=0; buffer != '\n'; iCnt++)
{ // 책 한권 정보의 마지막!
iEnd=read(iFD, &buffer, 1);
fList.year[iCnt]=buffer;
}
fList.year[iCnt-1]=0;
// 책 정보 출력
printf("책 이 름 : ");
printf("%s", fList.book);
printf("\n저 자 : ");
printf("%s", fList.author);
printf("\n출 판 사 : ");
printf("%s", fList.publiser);
printf("\n가 격 : ");
printf("%s", fList.price);
printf("\n출판연도 : ");
printf("%s", fList.year);
if(read(iFD, &buffer, 1) == 0)
{ // 파일의 끝부분이면 출력 종료!
printf("\n마지막 책의 정보 입니다. 종료하겠습니다.");
getchar(); // 종료하기전 대기!
__fpurge(stdin);
break;
}
lseek(iFD, -1, SEEK_CUR); // 파일의 끝부분을 찾기위한 설정!
printf("\n계속:Enter 도움말'H' 끝내기'Q' : ");
scanf("%c", &cQuit);
__fpurge(stdin);
iTemp=iPage;
if(('H' == cQuit)||('h' == cQuit))
{ // 도움말 메뉴 부분!
do {
printf("========================================\n");
printf("============== Help Menu ==============\n");
printf("========================================\n");
printf("=== 현재 책 보유량 : 총 %03d권! ===\n", iInfo);
printf("========================================\n");
printf("=== Q : Help Menu EXIT ===\n");
printf("=== F : Find list line ===\n");
printf("========================================\n");
printf(">>원하는 항목을 선택하세요 : ");
cHelp=getchar();
__fpurge(stdin);
if((cHelp == 'f')||(cHelp == 'F'))
{ // 도움말 메뉴에서 'F' 선택시 원하는 책 라인으로 이동!
printf("========================================\n");
printf("찾고 싶은 위치를 입력해 주세요(숫자) : ");
scanf("%d", &iPage);
__fpurge(stdin);
if((0 < iPage) && (iInfo >= iPage))
{ // 1 ~ 총 보유량까지만 입력 가능!
lseek(iFD, 0, SEEK_SET); // 파일위치를 제일 처음으로 이동!
for(iFCnt=0; iFCnt<iPage-1; )
{ // 한권의 책정보를 찾기 위함!
read(iFD, &buffer, 1);
if(buffer == '\n')
{ // 한권의 책정보를 찾으면 파일카운터 1씩 올림!
iFCnt++;
}
}
iPage-=1;
cHelp='q';
printf("========================================\n\n");
}
else
{ // 만약 찾는 위치가 1이하거나 보유량을 넘을 경우 실행!
system("clear");
printf("============= Error Report =============\n");
printf("========================================\n");
printf("= 선택한 범위에는 책의 정보가 없습니다.=\n");
printf("========================================\n\n");
iPage=iTemp; // 입력 오류시 다음 책 페이지 정보!
}
}
} while(('q' != cHelp)&&('Q' != cHelp));
}
} while(('q' != cQuit)&&('Q' != cQuit));
close(iFD);
printf("========================================\n");
printf("========= END LIST INFOMATION ==========\n");
return;
}
#include <fcntl.h> // oflag 사용을 위함
#include <sys/stat.h> // pmode 사용을 위함
//#include <stdlib.h>
//#include <string.h>
//#include <curses.h>
//#include <unistd.h>
//#include <sys/types.h>
typedef struct tag_booktype
{
char book[30];
char author[15];
char publiser[15];
char price[15];
char year[15];
} booktype;
void list(int iInfo);
void insert(void);
int main()
{
int iFd;
char iSelect;
int iCnt=0;
system("clear");
do { // 메인 화면
if((iFd=open("BOOK.DBF",O_RDWR)) >= 0)
{ // 파일이 있을 경우만 실행 (보유 현황 표시)
iCnt=0;
while(read(iFd, &iSelect, 1) != 0)
{
if(iSelect == '\n')
{
iCnt++;
}
}
}
close(iFd);
printf("┏━━━━━━━━━┓\n");
printf("┃책 보유 현황 : %03d┃\n", iCnt);
printf("┗━━━━━━━━━┛\n\n");
printf("┏━ 메뉴선택화면 ━┓\n");
printf("┃ 1.insert ┃\n");
printf("┃ 2. list ┃\n");
printf("┃ 3. quit ┃\n");
printf("┗━━━━━━━━━┛\n");
printf(" select : ");
scanf("%c", &iSelect);
__fpurge(stdin);
switch(iSelect)
{ // 메뉴 선택 설정
case '1':
insert(); // insert함수호출
break;
case '2':
list(iCnt); // list함수호출
break;
case '3': // 종료!!
break;
default: // 선택 오류시 출력!
printf(" select Error. You select continue.\n");
break;
}
} while('3' != iSelect); // 메뉴 조건 설정!
printf(" Books supervision end program.\n"); // 종료 메시지!!
return 0;
}
void insert(void)
{ // 파일에 정보 추가 설정!
booktype fIn;
int iCnt=0;
int infd;
char cQuit;
if((infd=open("BOOK.DBF",O_RDWR|O_APPEND)) < 0)
{ // 만약 BOOK 파일이 없을 경우 새로 만듬!!
infd=creat("BOOK.DBF", S_IREAD|S_IWRITE);
close(infd);
open("BOOK.DBF", O_RDWR);
}
do { // 책 정보 입력!!
printf("============ [%03d] =============\n", ++iCnt);
printf("책 이 름 : ");
scanf("%[^\n]", &fIn.book); // 공백도 입력 가능!
__fpurge(stdin);
fIn.book[strlen(fIn.book)+1]=0;
fIn.book[strlen(fIn.book)]='|';
write(infd, fIn.book, strlen(fIn.book));
printf("저 자 : ");
scanf("%[^\n]", &fIn.author);
__fpurge(stdin);
fIn.author[strlen(fIn.author)+1]=0;
fIn.author[strlen(fIn.author)]='|';
write(infd, fIn.author, strlen(fIn.author));
printf("출 판 사 : ");
scanf("%[^\n]", &fIn.publiser);
__fpurge(stdin);
fIn.publiser[strlen(fIn.publiser)+1]=0;
fIn.publiser[strlen(fIn.publiser)]='|';
write(infd, fIn.publiser, strlen(fIn.publiser));
printf("가 격 : ");
scanf("%[^\n]", &fIn.price);
__fpurge(stdin);
fIn.price[strlen(fIn.price)+1]=0;
fIn.price[strlen(fIn.price)]='|';
write(infd, fIn.price, strlen(fIn.price));
printf("출판연도(00/00/00) : ");
scanf("%[^\n]", &fIn.year);
__fpurge(stdin);
fIn.year[strlen(fIn.year)+1]=0;
fIn.year[strlen(fIn.year)]='\n';
write(infd, fIn.year, strlen(fIn.year));
printf("아무키나 누르면 계속 끝내려면 'Q' 입력 : ");
scanf("%c", &cQuit);
__fpurge(stdin); // 입력버퍼에 남아있는 찌꺼지 초기화!
} while(('q' != cQuit)&&('Q' != cQuit));
close(infd);
system("clear");
return;
}
void list(int iInfo)
{ // 파일 안의 정보 출력!
booktype fList;
int iCnt=0;
int iPage=0;
int iFD;
int iFind;
int iFCnt;
int iEnd;
int iTemp;
char cQuit;
char buffer;
char cHelp;
system("clear");
if((iFD=open("BOOK.DBF",O_RDWR)) < 0)
{ // 파일이 없을 경우 아래 메시지 출력!!
printf(" ====================\n");
printf(" No found File....\n");
printf(" ====================\n");
return;
}
printf("=========== LIST INFOMATION ============\n");
do { // 책 정보 출력!!
printf("========== [%03d] NUMBER LIST ===========\n", ++iPage);
for(iCnt=0; buffer != '|'; iCnt++)
{ // 특수문자를 만날때까지 1바이트씩 읽어 버퍼에 저장!
read(iFD, &buffer, 1);
fList.book[iCnt]=buffer;
}
fList.book[iCnt-1]=0; // 마지막 특수문자 삭제를 위함!
for(iCnt=0,buffer=0; buffer != '|'; iCnt++)
{
read(iFD, &buffer, 1);
fList.author[iCnt]=buffer;
}
fList.author[iCnt-1]=0;
for(iCnt=0,buffer=0; buffer != '|'; iCnt++)
{
read(iFD, &buffer, 1);
fList.publiser[iCnt]=buffer;
}
fList.publiser[iCnt-1]=0;
for(iCnt=0,buffer=0; buffer != '|'; iCnt++)
{
read(iFD, &buffer, 1);
fList.price[iCnt]=buffer;
}
fList.price[iCnt-1]=0;
for(iCnt=0,buffer=0; buffer != '\n'; iCnt++)
{ // 책 한권 정보의 마지막!
iEnd=read(iFD, &buffer, 1);
fList.year[iCnt]=buffer;
}
fList.year[iCnt-1]=0;
// 책 정보 출력
printf("책 이 름 : ");
printf("%s", fList.book);
printf("\n저 자 : ");
printf("%s", fList.author);
printf("\n출 판 사 : ");
printf("%s", fList.publiser);
printf("\n가 격 : ");
printf("%s", fList.price);
printf("\n출판연도 : ");
printf("%s", fList.year);
if(read(iFD, &buffer, 1) == 0)
{ // 파일의 끝부분이면 출력 종료!
printf("\n마지막 책의 정보 입니다. 종료하겠습니다.");
getchar(); // 종료하기전 대기!
__fpurge(stdin);
break;
}
lseek(iFD, -1, SEEK_CUR); // 파일의 끝부분을 찾기위한 설정!
printf("\n계속:Enter 도움말'H' 끝내기'Q' : ");
scanf("%c", &cQuit);
__fpurge(stdin);
iTemp=iPage;
if(('H' == cQuit)||('h' == cQuit))
{ // 도움말 메뉴 부분!
do {
printf("========================================\n");
printf("============== Help Menu ==============\n");
printf("========================================\n");
printf("=== 현재 책 보유량 : 총 %03d권! ===\n", iInfo);
printf("========================================\n");
printf("=== Q : Help Menu EXIT ===\n");
printf("=== F : Find list line ===\n");
printf("========================================\n");
printf(">>원하는 항목을 선택하세요 : ");
cHelp=getchar();
__fpurge(stdin);
if((cHelp == 'f')||(cHelp == 'F'))
{ // 도움말 메뉴에서 'F' 선택시 원하는 책 라인으로 이동!
printf("========================================\n");
printf("찾고 싶은 위치를 입력해 주세요(숫자) : ");
scanf("%d", &iPage);
__fpurge(stdin);
if((0 < iPage) && (iInfo >= iPage))
{ // 1 ~ 총 보유량까지만 입력 가능!
lseek(iFD, 0, SEEK_SET); // 파일위치를 제일 처음으로 이동!
for(iFCnt=0; iFCnt<iPage-1; )
{ // 한권의 책정보를 찾기 위함!
read(iFD, &buffer, 1);
if(buffer == '\n')
{ // 한권의 책정보를 찾으면 파일카운터 1씩 올림!
iFCnt++;
}
}
iPage-=1;
cHelp='q';
printf("========================================\n\n");
}
else
{ // 만약 찾는 위치가 1이하거나 보유량을 넘을 경우 실행!
system("clear");
printf("============= Error Report =============\n");
printf("========================================\n");
printf("= 선택한 범위에는 책의 정보가 없습니다.=\n");
printf("========================================\n\n");
iPage=iTemp; // 입력 오류시 다음 책 페이지 정보!
}
}
} while(('q' != cHelp)&&('Q' != cHelp));
}
} while(('q' != cQuit)&&('Q' != cQuit));
close(iFD);
printf("========================================\n");
printf("========= END LIST INFOMATION ==========\n");
return;
}
'C언어 > 프로젝트' 카테고리의 다른 글
리눅스 pcap 활용한 패킷 아날라이져 (0) | 2011.03.09 |
---|