도서관리프로그램
C프로그램을 통해서 도서관리프로그램을 만들고
도서추가, 도서삭제, 도서검색
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#include<fcntl.h>
#include<sys\stat.h>
#include<sys\types.h>
typedef struct _book //도서관리구조체
{
unsigned int BookNum; //책번호
char cName[30]; //책이름
char cWriter[20]; //저자
char cCompany[20]; //출판사
int iprice; //가격
char cWday[15]; //출판일
struct _book * next; //구조체 연결노드
}BOOK;
BOOK *Binsert(BOOK *Temp, BOOK *Head);
BOOK *Bdelete(char *cName, BOOK * next);
void Menu(void);
void search();
BOOK Temp;
BOOK * Head=NULL;
char cSNa[20];
int bnum=1;
int main()
{
Menu(); //메뉴 관리 인수
return 0;
}
BOOK *Binsert(BOOK *bTemp, BOOK *bHead)
{
BOOK *current =NULL;
BOOK *follow =NULL;
BOOK *newnode=NULL;
current=bHead;
follow=bHead;
if((newnode=(BOOK *)malloc(sizeof(BOOK)))==NULL||bTemp==NULL)
{
printf("memory allocation \n");
return bHead;
}
*newnode=*bTemp;
while(1)
{
if(current==NULL)
{
break;
}
if(0<strcmp(current->cName,bTemp->cName))
{
break;
}
follow=current;
current=current->next;
}
newnode->next=current;
if(current==bHead)
{
bHead=newnode;
}
else
{
follow->next=newnode;
}
return bHead;
}
void input(BOOK *item)
{
int outfd; // 파일 입출력
if(NULL==item)
{
return ;
}
outfd=open("sel.out",O_WRONLY|O_BINARY|O_APPEND);
printf("책이름(띄워쓰기금지):");
fflush(stdout);
scanf("%s",item->cName);
printf("저자(띄워쓰기금지):");
fflush(stdout);
scanf("%s",item->cWriter);
printf("출판사(띄워쓰기금지):");
fflush(stdout);
scanf("%s",item->cCompany);
printf("가격:(숫자만)");
fflush(stdout);
scanf("%d",&(item->iprice));
printf("출판일(띄워쓰기금지):");
fflush(stdout);
scanf("%s",item->cWday);
write(outfd,item,sizeof(BOOK));
close(outfd);
return ;
}
BOOK *Bdelete(char *nName, BOOK *bNext)
{
BOOK *current =NULL;
BOOK *follow =NULL;
current=bNext;
follow=bNext;
while(1)
{
if(current==NULL)
{
printf("일치하는 도서가 없습니다\n");
return bNext;
}
if(0==strcmp(current->cName,nName))
{
break;
}
follow=current;
current=current->next;
}
if(current==follow)
{
bNext=current->next;
}
else if(current->next==NULL)
{
follow->next=NULL;
}
else
{
follow->next=current->next;
}
free(current);
return bNext;
}
BOOK *BSelect(char *nName,BOOK *nSel)
{
BOOK *current =NULL;
BOOK *follow =NULL;
current=nSel;
follow=nSel;
while(1)
{
if(current==NULL)
{
printf("일치하는 도서가 없습니다\n");
return nSel;
}
if(0==strcmp(current->cName,nName))
{
break;
}
follow=current;
current=current->next;
}
current->next=NULL;
nSel=current;
return nSel;
}
void Bprintf()
{
BOOK current;
int outfd; // 파일 입출력
outfd=open("sel.out",O_RDONLY|O_BINARY);
printf("책이름\t\t 저자\t\t 출판사\t\t 가격\t\t 출판일\n");
printf("========================================================================\n");
printf("========================================================================\n");
while(read(outfd,¤t,sizeof(BOOK))>=sizeof(BOOK))
{
printf("%s",current.cName);
printf("%15s",current.cWriter);
printf("%15s",current.cCompany);
printf("%15d",current.iprice);
printf("%15s",current.cWday);
printf("\n");
}
close(outfd);
}
void Menu()
{
int istate=0; //구조체 선언
while(1)
{
system("cls");
printf("========================================================================\n");
printf("========================================================================\n");
printf("=☆☆☆☆☆☆☆☆☆☆☆☆☆☆도서관리프로그램 v1.0 ☆☆☆☆☆☆☆☆☆=\n");
printf("========================================================================\n");
printf("=☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆=\n");
printf("========================================================================\n");
printf("=☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 메인 메뉴 ☆☆☆☆☆☆☆☆☆☆☆☆☆☆=\n");
printf("========================================================================\n");
printf("=☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 1.도서추가 ☆☆☆☆☆☆☆☆☆☆☆☆☆☆=\n");
printf("========================================================================\n");
printf("=☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 2.검색 ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆=\n");
printf("========================================================================\n");
printf("=☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 3.삭제 ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆=\n");
printf("========================================================================\n");
printf("=☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 4.종 료 ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆=\n");
printf("========================================================================\n");
printf("========================================================================\n");
printf("========================================================================\n");
scanf("%d",&istate);
fflush(stdout);
switch(istate)
{
case 1:
input(&Temp);
fflush(stdout);
Head=Binsert(&Temp,Head);
break;
case 2:
search();
break;
case 3:
search();
break;
case 4:
printf("도서관리프로그램을 종료합니다\n");
return ;
default:
break;
}
}
}
void search()
{
int istate=0;
int icnt=0;
BOOK *current =NULL;
system("CLS");
while(1)
{
printf("\n");
printf("========================================================================\n");
printf("========================================================================\n");
printf("=☆☆☆☆☆☆☆☆☆☆☆☆☆☆도서관리프로그램 v1.0 ☆☆☆☆☆☆☆☆☆☆=\n");
printf("========================================================================\n");
printf("=☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆=\n");
printf("========================================================================\n");
printf("=☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 검색 메뉴 ☆☆☆☆☆☆☆☆☆☆☆☆☆☆=\n");
printf("========================================================================\n");
printf("=☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 1.전체검색 ☆☆☆☆☆☆☆☆☆☆☆☆☆☆=\n");
printf("========================================================================\n");
printf("=☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 2.도서명검색 ☆☆☆☆☆☆☆☆☆☆☆☆☆=\n");
printf("========================================================================\n");
printf("=☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 3.도서삭제 ☆☆☆☆☆☆☆☆☆☆☆☆☆☆=\n");
printf("========================================================================\n");
printf("=☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 4.메인메뉴로 ☆☆☆☆☆☆☆☆☆☆☆☆☆=\n");
printf("========================================================================\n");
printf("========================================================================\n");
printf("========================================================================\n");
scanf("%d",&istate);
switch(istate)
{
case 1:
Bprintf();
break;
case 2:
printf("도서명을 넣으세요\n");
scanf("%s",cSNa);
fflush(stdout);
Bprintf(BSelect(cSNa,Head));
break;
case 3:
printf("도서명을 넣으세요\n");
scanf("%s",cSNa);
fflush(stdout);
Head=Bdelete(cSNa,Head);
break;
case 4:
return ;
}
fflush(stdout);
}
}