Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- //#include <stdio.h>
- //#include <stdlib.h>
- //#include <string.h>
- #include "Wrap.C.h"
- #define INSERT 1
- #define SEARCH 2
- #define REMOVE 3
- #define LIST 4
- #define EXIT 0
- typedef struct _namecard {
- mzWRAPxCxSBCH name[20];
- mzWRAPxCxSBCH work[20];
- mzWRAPxCxSBCH rank[20];
- mzWRAPxCxSBCH phone[30];
- } namecard, *pnamecard;
- typedef struct _NODE {
- struct _NODE *next;
- namecard nc;
- } NODE;
- NODE *head, *tail;
- mzWRAPxCxVOID ShowMenu();
- mzWRAPxCxINT ReadChoice();
- mzWRAPxCxVOID listInit();
- //addNode(기준노드, namecard 구조체)
- mzWRAPxCxVOID addNode(namecard nc);
- mzWRAPxCxVOID clearAll(NODE *node);
- mzWRAPxCxVOID InsertData(namecard nc);
- mzWRAPxCxVOID SearchData(mzWRAPxCxSBCH *name);
- mzWRAPxCxVOID RemoveData(mzWRAPxCxSBCH *name);
- mzWRAPxCxVOID printAll();
- mzWRAPxCxVOID ExitProg(NODE *list);
- mzWRAPxCxVOID clrscr();
- mzWRAPxCxVOID loadData();
- mzWRAPxCxINT main(void) {
- // NODE *list = MAKENODE; //head node 생성
- mzWRAPxCxINT cnt = 0;
- listInit();
- loadData();
- while (1) {
- mzWRAPxCxINT choice;
- namecard nc = {0,};
- mzWRAPxCxSBCH *name = mzWrapxCx(malloc)(sizeof(nc.name));
- cnt++;
- ShowMenu();
- choice = ReadChoice();
- switch (choice) {
- case INSERT:
- mzWrapxCx(fputs)("% 추가 %", mzWrapxCxIOxOutput);
- mzWrapxCx(fputs)("\n\n이름 : ", mzWrapxCxIOxOutput);
- mzWrapxCx(gets)(nc.name);
- mzWrapxCx(fputs)("회사 : ", mzWrapxCxIOxOutput);
- mzWrapxCx(gets)(nc.work);
- mzWrapxCx(fputs)("직급 : ", mzWrapxCxIOxOutput);
- mzWrapxCx(gets)(nc.rank);
- mzWrapxCx(fputs)("전화번호 : ", mzWrapxCxIOxOutput);
- mzWrapxCx(gets)(nc.phone);
- InsertData(nc);
- // printAll(list);
- break;
- case SEARCH:
- mzWrapxCx(printf)("search\n");
- mzWrapxCx(fputs)("\n\n검색할 이름 : ", mzWrapxCxIOxOutput);
- mzWrapxCx(gets)(name);
- SearchData(name);
- break;
- case REMOVE:
- mzWrapxCx(fputs)("\n\n삭제할 이름 : ", mzWrapxCxIOxOutput);
- mzWrapxCx(gets)(name);
- RemoveData(name);
- break;
- case LIST:
- mzWrapxCx(printf)("리스트 출력\n");
- printAll();
- break;
- case EXIT:
- ExitProg(head);
- mzWrapxCx(printf)("프로그램을 종료 합니다.\n");
- return 0;
- default:
- clrscr();
- mzWrapxCx(printf)("옳바른 숫자를 입력해주세요.\n");
- break;
- }
- }
- return 0;
- }
- // 메뉴를 보여준다
- mzWRAPxCxVOID ShowMenu() {
- mzWrapxCx(printf)("\n");
- mzWrapxCx(printf)("\t#################\n");
- mzWrapxCx(printf)("\t# 선택하세요 #\n");
- mzWrapxCx(printf)("\t#################\n");
- mzWrapxCx(printf)("\t# 1. 정보입력 #\n");
- mzWrapxCx(printf)("\t# 2. 정보검색 #\n");
- mzWrapxCx(printf)("\t# 3. 정보삭제 #\n");
- mzWrapxCx(printf)("\t# 4. 정보출력 #\n");
- mzWrapxCx(printf)("\t# 0. 저장&종료 #\n");
- mzWrapxCx(printf)("\t#################\n");
- }
- //사용자의 선택을 받고
- mzWRAPxCxINT ReadChoice() {
- mzWRAPxCxSBCH sel;
- mzWrapxCx(printf)(">> ");
- mzWrapxCx(scanf)("%c", &sel);
- mzWrapxCxfflush(mzWrapxCxIOxInput);
- return sel - 48;
- }
- mzWRAPxCxVOID listInit() {
- head = (NODE *) mzWrapxCx(calloc)(1, sizeof(NODE));
- tail = (NODE *) mzWrapxCx(calloc)(1, sizeof(NODE));
- head->next = tail;
- tail->next = tail;
- }
- //addNode(기준노드, namecard 구조체)
- mzWRAPxCxVOID addNode(namecard nc) {
- NODE *newNode;
- newNode = (NODE *) mzWrapxCx(calloc)(1, sizeof(NODE));
- newNode->next = head->next;
- newNode->nc = nc;
- head->next = newNode;
- }
- mzWRAPxCxVOID InsertData(namecard nc) {
- NODE *curr = head->next; //첫번째 노드를 보는 포인터
- while (curr != tail) {
- if (!mzWrapxCx(strcmp)(curr->nc.name, nc.name) && !mzWrapxCx(strcmp)(curr->nc.phone, nc.phone)) {
- mzWrapxCx(printf)("\n&&&&&&&&&&&&&&&&&&&&&&&&&\n");
- mzWrapxCx(printf)("& \"%s\" 이미 존재합니다.\t&\n", curr->nc.name);
- mzWrapxCx(printf)("&&&&&&&&&&&&&&&&&&&&&&&&&\n\n\n");
- return;
- }
- curr = curr->next;
- }
- addNode(nc);
- }
- mzWRAPxCxVOID SearchData(mzWRAPxCxSBCH *name) {
- NODE *curr = head->next; //첫번째 노드를 보는 포인터
- while (curr != tail) {
- if (!mzWrapxCx(strcmp)(curr->nc.name, name)) {
- mzWrapxCx(printf)("이름 : %s\n", curr->nc.name);
- mzWrapxCx(printf)("회사 : %s\n", curr->nc.work);
- mzWrapxCx(printf)("직급 : %s\n", curr->nc.rank);
- mzWrapxCx(printf)("전화번호 : %s\n\n", curr->nc.phone);
- // return *curr;
- }
- curr = curr->next;
- }
- }
- mzWRAPxCxVOID RemoveData(mzWRAPxCxSBCH *name) {
- NODE *curr = head->next; //첫번째 노드를 보는 포인터
- NODE *prev = head;
- NODE *del;
- while (curr != tail) {
- del = curr;
- if (!mzWrapxCx(strcmp)(curr->nc.name, name)) {
- prev->next = curr->next;
- }
- prev = curr;
- curr = curr->next;
- free(del);
- }
- }
- mzWRAPxCxVOID printAll() {
- NODE *curr = head->next; //첫번째 노드를 보는 포인터
- mzWRAPxCxINT cnt = 0;
- while (curr != tail) {
- mzWrapxCx(printf)("---------------------------\n");
- mzWrapxCx(printf)("[%d]\n", ++cnt);
- mzWrapxCx(printf)("이름 = %s \n", curr->nc.name);
- mzWrapxCx(printf)("회사 = %s \n", curr->nc.work);
- mzWrapxCx(printf)("직급 = %s \n", curr->nc.rank);
- mzWrapxCx(printf)("전화번호 = %s \n", curr->nc.phone);
- mzWrapxCx(printf)("---------------------------\n");
- mzWrapxCx(printf)("\n");
- curr = curr->next;
- }
- }
- mzWRAPxCxVOID clearAll(NODE *node) {
- NODE *curr = node->next;
- NODE *prev;
- while (curr != tail) {
- prev = curr;
- curr = curr->next;
- mzWrapxCx(printf)("%s 메모리 삭제\n", prev->nc.name);
- mzWrapxCx(free)(prev);
- }
- }
- mzWRAPxCxVOID ExitProg(NODE *list) {
- mzWRAPxCxFILE *save = fopen("ncList.txt", "wt");
- NODE *curr = head->next;
- while (curr != tail) {
- mzWrapxCx(fprintf)(save, "%s\t%s\t%s\t%s\n", curr->nc.name, curr->nc.work, curr->nc.rank, curr->nc.phone);
- curr = curr->next;
- }
- mzWrapxCx(fclose)(save);
- clearAll(list);
- }
- mzWRAPxCxVOID clrscr() {
- mzWrapxCx(system)("@cls||clear");
- }
- mzWRAPxCxVOID clearInputBuffer() {
- // 입력 버퍼에서 문자를 계속 꺼내고 \n를 꺼내면 반복을 중단
- while (getchar() != '\n');
- }
- mzWRAPxCxVOID loadData() {
- mzWRAPxCxFILE *load = mzWrapxCx(fopen)("ncList.txt", "rt");
- if (load != NULL) {
- while (feof(load) == 0) {
- namecard nc = {0,};
- mzWrapxCx(fscanf)(load, "%[^\t\n]\t%[^\t\n]\t%[^\t\n]\t%[^\t\n]\n", nc.name, nc.work, nc.rank, nc.phone);
- if (mzWrapxCx(strlen)(nc.name) != 0 && mzWrapxCx(strlen)(nc.phone) != 0) {
- InsertData(nc);
- }
- }
- mzWrapxCx(fclose)(load);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement