Advertisement
Guest User

Untitled

a guest
Apr 26th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.60 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. //#include <stdio.h>
  4. //#include <stdlib.h>
  5. //#include <string.h>
  6.  
  7. #include "Wrap.C.h"
  8.  
  9. #define INSERT 1
  10. #define SEARCH 2
  11. #define REMOVE 3
  12. #define LIST 4
  13. #define EXIT 0
  14.  
  15. typedef struct _namecard {
  16. mzWRAPxCxSBCH name[20];
  17. mzWRAPxCxSBCH work[20];
  18. mzWRAPxCxSBCH rank[20];
  19. mzWRAPxCxSBCH phone[30];
  20. } namecard, *pnamecard;
  21.  
  22.  
  23. typedef struct _NODE {
  24. struct _NODE *next;
  25. namecard nc;
  26. } NODE;
  27.  
  28. NODE *head, *tail;
  29.  
  30. mzWRAPxCxVOID ShowMenu();
  31.  
  32. mzWRAPxCxINT ReadChoice();
  33.  
  34. mzWRAPxCxVOID listInit();
  35.  
  36. //addNode(기준노드, namecard 구조체)
  37. mzWRAPxCxVOID addNode(namecard nc);
  38.  
  39. mzWRAPxCxVOID clearAll(NODE *node);
  40.  
  41. mzWRAPxCxVOID InsertData(namecard nc);
  42.  
  43. mzWRAPxCxVOID SearchData(mzWRAPxCxSBCH *name);
  44.  
  45. mzWRAPxCxVOID RemoveData(mzWRAPxCxSBCH *name);
  46.  
  47. mzWRAPxCxVOID printAll();
  48.  
  49. mzWRAPxCxVOID ExitProg(NODE *list);
  50.  
  51. mzWRAPxCxVOID clrscr();
  52.  
  53. mzWRAPxCxVOID loadData();
  54.  
  55. mzWRAPxCxINT main(void) {
  56.  
  57. // NODE *list = MAKENODE; //head node 생성
  58. mzWRAPxCxINT cnt = 0;
  59. listInit();
  60. loadData();
  61.  
  62.  
  63. while (1) {
  64. mzWRAPxCxINT choice;
  65. namecard nc = {0,};
  66. mzWRAPxCxSBCH *name = mzWrapxCx(malloc)(sizeof(nc.name));
  67. cnt++;
  68. ShowMenu();
  69.  
  70. choice = ReadChoice();
  71.  
  72. switch (choice) {
  73. case INSERT:
  74. mzWrapxCx(fputs)("% 추가 %", mzWrapxCxIOxOutput);
  75. mzWrapxCx(fputs)("\n\n이름 : ", mzWrapxCxIOxOutput);
  76. mzWrapxCx(gets)(nc.name);
  77. mzWrapxCx(fputs)("회사 : ", mzWrapxCxIOxOutput);
  78. mzWrapxCx(gets)(nc.work);
  79. mzWrapxCx(fputs)("직급 : ", mzWrapxCxIOxOutput);
  80. mzWrapxCx(gets)(nc.rank);
  81. mzWrapxCx(fputs)("전화번호 : ", mzWrapxCxIOxOutput);
  82. mzWrapxCx(gets)(nc.phone);
  83. InsertData(nc);
  84.  
  85. // printAll(list);
  86. break;
  87.  
  88. case SEARCH:
  89. mzWrapxCx(printf)("search\n");
  90. mzWrapxCx(fputs)("\n\n검색할 이름 : ", mzWrapxCxIOxOutput);
  91. mzWrapxCx(gets)(name);
  92. SearchData(name);
  93. break;
  94.  
  95. case REMOVE:
  96. mzWrapxCx(fputs)("\n\n삭제할 이름 : ", mzWrapxCxIOxOutput);
  97. mzWrapxCx(gets)(name);
  98. RemoveData(name);
  99. break;
  100.  
  101. case LIST:
  102. mzWrapxCx(printf)("리스트 출력\n");
  103. printAll();
  104. break;
  105.  
  106. case EXIT:
  107. ExitProg(head);
  108. mzWrapxCx(printf)("프로그램을 종료 합니다.\n");
  109. return 0;
  110.  
  111. default:
  112. clrscr();
  113. mzWrapxCx(printf)("옳바른 숫자를 입력해주세요.\n");
  114. break;
  115. }
  116.  
  117. }
  118.  
  119. return 0;
  120. }
  121.  
  122. // 메뉴를 보여준다
  123. mzWRAPxCxVOID ShowMenu() {
  124. mzWrapxCx(printf)("\n");
  125. mzWrapxCx(printf)("\t#################\n");
  126. mzWrapxCx(printf)("\t# 선택하세요 #\n");
  127. mzWrapxCx(printf)("\t#################\n");
  128. mzWrapxCx(printf)("\t# 1. 정보입력 #\n");
  129. mzWrapxCx(printf)("\t# 2. 정보검색 #\n");
  130. mzWrapxCx(printf)("\t# 3. 정보삭제 #\n");
  131. mzWrapxCx(printf)("\t# 4. 정보출력 #\n");
  132. mzWrapxCx(printf)("\t# 0. 저장&종료 #\n");
  133. mzWrapxCx(printf)("\t#################\n");
  134.  
  135. }
  136.  
  137. //사용자의 선택을 받고
  138. mzWRAPxCxINT ReadChoice() {
  139. mzWRAPxCxSBCH sel;
  140. mzWrapxCx(printf)(">> ");
  141. mzWrapxCx(scanf)("%c", &sel);
  142. mzWrapxCxfflush(mzWrapxCxIOxInput);
  143. return sel - 48;
  144. }
  145.  
  146. mzWRAPxCxVOID listInit() {
  147. head = (NODE *) mzWrapxCx(calloc)(1, sizeof(NODE));
  148. tail = (NODE *) mzWrapxCx(calloc)(1, sizeof(NODE));
  149. head->next = tail;
  150. tail->next = tail;
  151. }
  152.  
  153. //addNode(기준노드, namecard 구조체)
  154. mzWRAPxCxVOID addNode(namecard nc) {
  155. NODE *newNode;
  156. newNode = (NODE *) mzWrapxCx(calloc)(1, sizeof(NODE));
  157.  
  158. newNode->next = head->next;
  159. newNode->nc = nc;
  160.  
  161. head->next = newNode;
  162. }
  163.  
  164. mzWRAPxCxVOID InsertData(namecard nc) {
  165. NODE *curr = head->next; //첫번째 노드를 보는 포인터
  166. while (curr != tail) {
  167. if (!mzWrapxCx(strcmp)(curr->nc.name, nc.name) && !mzWrapxCx(strcmp)(curr->nc.phone, nc.phone)) {
  168. mzWrapxCx(printf)("\n&&&&&&&&&&&&&&&&&&&&&&&&&\n");
  169. mzWrapxCx(printf)("& \"%s\" 이미 존재합니다.\t&\n", curr->nc.name);
  170. mzWrapxCx(printf)("&&&&&&&&&&&&&&&&&&&&&&&&&\n\n\n");
  171. return;
  172. }
  173. curr = curr->next;
  174. }
  175. addNode(nc);
  176. }
  177.  
  178. mzWRAPxCxVOID SearchData(mzWRAPxCxSBCH *name) {
  179.  
  180. NODE *curr = head->next; //첫번째 노드를 보는 포인터
  181. while (curr != tail) {
  182. if (!mzWrapxCx(strcmp)(curr->nc.name, name)) {
  183. mzWrapxCx(printf)("이름 : %s\n", curr->nc.name);
  184. mzWrapxCx(printf)("회사 : %s\n", curr->nc.work);
  185. mzWrapxCx(printf)("직급 : %s\n", curr->nc.rank);
  186. mzWrapxCx(printf)("전화번호 : %s\n\n", curr->nc.phone);
  187. // return *curr;
  188. }
  189. curr = curr->next;
  190. }
  191. }
  192.  
  193. mzWRAPxCxVOID RemoveData(mzWRAPxCxSBCH *name) {
  194.  
  195. NODE *curr = head->next; //첫번째 노드를 보는 포인터
  196. NODE *prev = head;
  197. NODE *del;
  198. while (curr != tail) {
  199. del = curr;
  200. if (!mzWrapxCx(strcmp)(curr->nc.name, name)) {
  201. prev->next = curr->next;
  202. }
  203. prev = curr;
  204. curr = curr->next;
  205. free(del);
  206. }
  207. }
  208.  
  209. mzWRAPxCxVOID printAll() {
  210. NODE *curr = head->next; //첫번째 노드를 보는 포인터
  211. mzWRAPxCxINT cnt = 0;
  212. while (curr != tail) {
  213. mzWrapxCx(printf)("---------------------------\n");
  214. mzWrapxCx(printf)("[%d]\n", ++cnt);
  215. mzWrapxCx(printf)("이름 = %s \n", curr->nc.name);
  216. mzWrapxCx(printf)("회사 = %s \n", curr->nc.work);
  217. mzWrapxCx(printf)("직급 = %s \n", curr->nc.rank);
  218. mzWrapxCx(printf)("전화번호 = %s \n", curr->nc.phone);
  219. mzWrapxCx(printf)("---------------------------\n");
  220. mzWrapxCx(printf)("\n");
  221. curr = curr->next;
  222. }
  223. }
  224.  
  225. mzWRAPxCxVOID clearAll(NODE *node) {
  226. NODE *curr = node->next;
  227. NODE *prev;
  228. while (curr != tail) {
  229. prev = curr;
  230. curr = curr->next;
  231. mzWrapxCx(printf)("%s 메모리 삭제\n", prev->nc.name);
  232. mzWrapxCx(free)(prev);
  233. }
  234. }
  235.  
  236. mzWRAPxCxVOID ExitProg(NODE *list) {
  237. mzWRAPxCxFILE *save = fopen("ncList.txt", "wt");
  238. NODE *curr = head->next;
  239. while (curr != tail) {
  240. mzWrapxCx(fprintf)(save, "%s\t%s\t%s\t%s\n", curr->nc.name, curr->nc.work, curr->nc.rank, curr->nc.phone);
  241. curr = curr->next;
  242. }
  243. mzWrapxCx(fclose)(save);
  244. clearAll(list);
  245. }
  246.  
  247. mzWRAPxCxVOID clrscr() {
  248. mzWrapxCx(system)("@cls||clear");
  249. }
  250.  
  251. mzWRAPxCxVOID clearInputBuffer() {
  252. // 입력 버퍼에서 문자를 계속 꺼내고 \n를 꺼내면 반복을 중단
  253. while (getchar() != '\n');
  254. }
  255.  
  256. mzWRAPxCxVOID loadData() {
  257. mzWRAPxCxFILE *load = mzWrapxCx(fopen)("ncList.txt", "rt");
  258. if (load != NULL) {
  259. while (feof(load) == 0) {
  260. namecard nc = {0,};
  261. mzWrapxCx(fscanf)(load, "%[^\t\n]\t%[^\t\n]\t%[^\t\n]\t%[^\t\n]\n", nc.name, nc.work, nc.rank, nc.phone);
  262. if (mzWrapxCx(strlen)(nc.name) != 0 && mzWrapxCx(strlen)(nc.phone) != 0) {
  263. InsertData(nc);
  264. }
  265. }
  266. mzWrapxCx(fclose)(load);
  267. }
  268.  
  269. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement