2010년/프로젝트

도서관리프로그램

뽀얀햄스터 2010. 4. 14. 10:51

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,&current,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);
  
  
 }
 
}