[CODE type="c"]
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #define FILE_NAME "d:\\student.dat" FILE * fpStd; typedef struct node NODE;
struct node {
NODE * flink;
NODE * blink;
char id[12];
char name[30];
}; typedef struct anchor ANCHOR;
struct anchor {
NODE * flink;
NODE * blink;
}; ANCHOR anc; NODE * makeNode(char * id, char * name);
NODE * makeEmptyNode();
void printData(void);
char showMenu(); void enqAft(NODE * newNode, NODE * oldNode);
void enqBef(NODE * newNode, NODE * oldNode);
NODE * findNode(char * id);
void delNode(NODE * node);
int getListSize(void);
void writeFile(void);
void readFile();
void clearList(void); int main(void) { // 1. anchor가 자신의 주소를 가르키게 함
anc.flink = (NODE *) &anc;
anc.blink = (NODE *) &anc; char choice;
char input[80];
NODE * newNode;
NODE * tempNode;
char id[12];
char name[30]; choice = showMenu(); while (choice != '0') { if (choice == '1') {
printf("학생의 정보를 입력하세요 (아이디 이름) : ");
gets(input); // aaa 홍길동
sscanf(input, "%s %s", id, name);
newNode = makeNode(id, name); tempNode = findNode(id);
if (tempNode == NULL) {
enqBef(newNode, (NODE *)&anc);
} else {
printf("%s 아이디는 존재합니다. \n", id);
} } else if (choice == '2') { printf("찾으려는 학생의 아이디를 입력하세요 : ");
gets(input); // aaa 홍길동
sscanf(input, "%s", id); newNode = findNode(id); if (newNode == NULL) {
printf("%s 아이디는 존재하지 않습니다. \n", id);
} else {
printf("학생의 정보를 입력하세요 (이름) : ");
gets(input); // aaa 홍길동
sscanf(input, "%s", newNode->name);
}
} else if (choice == '3') {
printf("찾으려는 학생의 아이디를 입력하세요 : ");
gets(input); // aaa 홍길동
sscanf(input, "%s", id); newNode = findNode(id); if (newNode == NULL) {
printf("%s 아이디는 존재하지 않습니다. \n", id);
} else {
delNode(newNode);
} } else if (choice == '4') { printf("찾으려는 학생의 아이디를 입력하세요 : ");
gets(input); // aaa 홍길동
sscanf(input, "%s", id); newNode = findNode(id); if (newNode == NULL) {
printf("%s 아이디는 존재하지 않습니다. \n", id);
} else {
printf("찾을 학생 %s의 정보 : %s, %s\n", id, newNode->id, newNode->name);
}
} else if (choice == '5') { printData(); } else if (choice == '6') { printf("총 학생의 수 : %d명 입니다.\n", getListSize()); } else if (choice == '7') { writeFile(); } else if (choice == '8') { readFile(); } else if (choice == '9') { clearList(); } else {
}
printf("\n<계속 진행하려면 엔터를 치세요 >\n");
gets(input);
system("cls");
choice = showMenu();
} return 0;
} NODE * makeNode(char *id, char *name) {
NODE * newNode = (NODE *) malloc(sizeof(NODE));
strcpy(newNode->id, id);
strcpy(newNode->name, name);
return newNode;
} NODE * makeEmptyNode() {
NODE * newNode = (NODE *) malloc(sizeof(NODE));
return newNode;
} void enqAft(NODE * newNode, NODE * oldNode) {
newNode->flink = oldNode->flink;
newNode->blink = oldNode; oldNode->flink->blink = newNode;
oldNode->flink = newNode;
} void enqBef(NODE * newNode, NODE * oldNode) {
newNode->flink = oldNode;
newNode->blink = oldNode->blink; oldNode->blink->flink = newNode;
oldNode->blink = newNode;
} NODE * findNode(char * id) {
NODE * curNode = anc.flink;
NODE * findNode = NULL; while(curNode != (NODE *) &anc) {
if (strcmp(curNode->id, id) == 0) {
findNode = curNode;
}
curNode = curNode->flink;
} return findNode;
} void delNode(NODE * node) { node->blink->flink = node->flink;
node->flink->blink = node->blink; free(node); } int getListSize() {
NODE * curNode = anc.flink;
int count = 0; while(curNode != (NODE *) &anc) {
count++;
curNode = curNode->flink;
} return count;
}
void printData(void) {
NODE * curNode = anc.flink; while(curNode != (NODE *) &anc) {
printf("학생의 아이디 : %s, 이름 : %s.\n", curNode->id, curNode->name);
curNode = curNode->flink;
}
} void clearList() {
NODE * curNode = anc.flink;
NODE * tempNode = NULL; while(curNode != (NODE *) &anc) {
tempNode = curNode->flink;
delNode(curNode);
curNode = tempNode;
} }
void readFile() {
fpStd = fopen(FILE_NAME, "r"); if (fpStd == NULL) {
printf("파일 열기에 실패함.\n");
} else { clearList(); NODE * newNode = makeEmptyNode();
while (fread(newNode, sizeof(NODE), 1, fpStd) > 0) {
enqBef(newNode, (NODE *) &anc);
newNode = makeEmptyNode();
} fclose(fpStd);
}
} void writeFile() {
fpStd = fopen(FILE_NAME, "w"); if (fpStd == NULL) {
printf("파일 열기에 실패함.\n");
} else { NODE * curNode = anc.flink; while(curNode != (NODE *) &anc) {
fwrite(curNode, sizeof(NODE), 1, fpStd);
curNode = curNode->flink;
} fclose(fpStd);
}
} char showMenu() {
char choice, dummy; printf("************************************\n");
printf("* 1. 학생 추가 \n");
printf("* 2. 학생 수정 \n");
printf("* 3. 학생 삭제 \n");
printf("* 4. 학생 찾기 \n");
printf("* --------------------------------- \n");
printf("* 5. 학생 목록 \n");
printf("* 6. 학생 수 출력 \n");
printf("* --------------------------------- \n");
printf("* 7. 파일 저장 \n");
printf("* 8. 파일 읽기 \n");
printf("* --------------------------------- \n");
printf("* 9. 모두 지우기 \n");
printf("* --------------------------------- \n");
printf("* 0. 종료 \n");
printf("************************************\n");
printf(">> "); scanf("%c%c", &choice, &dummy); return choice;
}
[/HTML][/CODE]
요즘에 보내기 페이스북에 보내기 미투데이에 보내기
댓글을 달아 주세요