728x90
반응형
book.h
#ifndef __BOOK_H__ #define __BOOK_H__ #define FILENAME "BOOK.DBF" #include <stdio.h> #include <stdlib.h> #include <string.h> //#define BNAME_LEN 30 #define BPUB_LEN 20 typedef struct book { char caName[BNAME_LEN]; char caPub[BPUB_LEN]; unsigned int uiPri; struct Book *Next; }Book; typedef enum mnum { INSERT, DEL, PRINT, ALLFREE, SAVE, END }MNum; typedef struct menumap { MNum eMenu; void (*fpRun)(); }MenuMap; void Book_Insert(); void Book_Print(); void Book_Free(); void Book_Delete(); void Book_Menu(); void Book_Save(); #endif //__BOOK_H__
book.c
#include "book.h" static Book * Head; void Book_Menu() { printf("********************************** \n"); printf("** %d INPUT BOOK INFO ** \n", INSERT); printf("** %d INPUT BOOK PRINT ** \n", DEL); printf("** %d INPUT BOOK DEL ** \n", PRINT); printf("** %d INPUT BOOK ALLDEL ** \n", ALLFREE) printf("** %d INPUT BOOK SAVE ** \n", SAVE); printf("** %d INPUT BOOK QUIT ** \n", END); printf("********************************** \n"); } void Book_Info(Book * temp) { printf("Book Name: [%s] \n", temp-> caName); printf("Publisher: [%s] \n", temp-> caPub); printf("Book Price: [%d] \n", temp-> uiPri); return; } void Book_Insert() { Book * temp = malloc(sizeof(Book)); Book * com; Book * pos; if(0==temp) { printf("No free memory \n"); return ; } printf("Book Name: \n"); fgets(temp->caName, BNAME_LEN, stdin); temp-> caName[strlen(temp-> caName)-1]=0; printf("Publication: \n"); fgets(temp->caPub, BPUB_LEN, stdin); temp-> caPub[strlen(temp-> caPub)-1]=0; printf("Book Price: \n"); scanf("%d", &(temp-> uiPri)); while(getchar() != '\n'); //searching... pos=Head; com=Head; //중간에 연결리스트 앞을 찾기위해 필요하다. while(pos!=0) { //비교문 필요 if(0<strcmp(pos-> caName, temp-> caName)) { break; } com=pos; pos=pos->Next; } if(Head==0) //연결 리스트가 존재하지 않을 경우 첫번째 ? { temp-> Next=Head; Head=temp; } else //중간, 끝 삽입. { if(Head==pos)//제일 앞이면 { temp-> Next=pos; Head=temp; } else { temp-> Next=pos; com-> Next=temp; } } } void Book_Delete() { Book * temp; Book * com; Book * pos; char caName[BNAME_LEN]; if(Head==0) //연결 리스트가 존재하지 않을 경우 첫번째 ? { printf("삭제할 목록이 없습니다. \n"); return; } printf("Book Name: \n"); fgets(caName, BNAME_LEN, stdin); caName[strlen(caName)-1]=0; //searching... pos=Head; com=Head; //중간에 연결리스트 앞을 찾기위해 필요하다. while(pos!=0) { //비교문 필요 if(0==strcmp(pos-> caName, caName)) { break; } com=pos; pos=pos->Next; } if(pos==0) { printf("the book is not found \n"); return; } if(Head==pos)//제일 앞이면 삭제. { Head=pos-> Next; } else //제일 뒤 삭제. { com-> Next=pos-> Next; } free(pos); printf("[%s]가 삭제되었습니다. \n", caName); return; } void Book_Print() { Book *temp = Head; printf("===================== \n"); printf(" Book List \n"); while(0!=temp) { printf("--------------------- \n"); Book_Info(temp); temp = temp -> Next; } printf("==================== \n"); return; } void Book_Free() { Book *temp; while(0!=Head) { temp=Head; Head=temp-> Next; free(temp); } return; }
main.c
#include "book.h" int main() { unsigned int uiMenu; MenuMap stMenu[END]={ {INSERT, Book_Insert}, {PRINT, Book_Print}, {DEL, Book_Delete}, {ALLFREE, Book_Free}, {SAVE, Book_Save} }; while(1) { Book_Menu(); printf("0~4 input number: "); fflush(stdout); scanf("%d", &uiMenu); while(getchar() != '\n'); if(END==uiMenu ) { break; } if(END<uiMenu) { printf("Select the number again \n"); continue; } stMenu[uiMenu].fpRun(); } Book_Free(); printf("Book Program terminated \n"); return 0; }
<출력결과>
0을 입력해서 책 정보를 입력합니다.
1을 입력해서 책의 정보를 가지고 옵니다.
2를 입력해서 책 정보가 사라진 것을 확인할 수 있습니다.
5를 눌러서 도서관리 프로그램을 종료합니다.
728x90
'코스웨어 > 16년 스마트컨트롤러' 카테고리의 다른 글
20160419_장진웅_업무일지_공장내Network_일대일통신4_양방향 채팅 (0) | 2016.04.20 |
---|---|
20160418_장진웅_업무일지_공장내Network_일대일통신3 (0) | 2016.04.18 |
버츄얼박스 com 개체를 만들수 없습니다 오류 (1) | 2016.04.17 |
20160415_장진웅_업무일지_공장내Network_일대일통신_입출력다중화(원시적인 채팅 프로그램) (1) | 2016.04.16 |
2016-04-07-조재찬_업무일지_구조체 및 함수 (0) | 2016.04.15 |
2016-04-06-조재찬_업무일지_포인터 및 함수 (0) | 2016.04.15 |
2016-04-14_조재찬_업무일지_네트워크:소켓 (0) | 2016.04.15 |
20160405-업무일지-허도경-로봇제어-시리얼제어 (0) | 2016.04.14 |