#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>
typedef struct tagLinkedList
{
char Name[30]; //이름
char Tel[30]; //전화
char Addr[100]; //주소
char Class[20]; //학번
struct tagLinkedList *next;
}tag, *Tag;
Tag head=NULL, tail, ptr, p, prev;
void Add_node(); //노드 추가, 생성
void Insert_node(); //노드 삽입
void Print_node(); //노드 출력
void Edit(); //노드 수정
void Delete_node(); //노드 삭제
void Search_Insert(); //삽입을 위한 검색
int j, i, k;
int b = 1; //노드를 추가하기 위해서 만든 변수
int cnt = 0; //노드가 몇갠지 세준다.
void main()
{
int a = 0;
int d = 0;
while (1) {
printf("현재 노드는 %d 개 입니다.\n", cnt);
puts("");
printf("1. 추가\n");
printf("2. 삽입 \n");
printf("3. 삭제\n");
printf("4. 출력\n");
printf("5. 수정\n");
puts("6. 종료");
puts("");
scanf("%d",&a);
if (a == 2) {
puts("1. 학번");
puts("2. 이름");
scanf("%d",&d);
switch (d)
{
case 1: Search_Insert(); break;
case 2: Search_Insert(); break;
default: puts("잘못눌렀습니다"); break;
}
}
switch (a) {
case 1: Add_node(); system("cls"); break;
case 2: Insert_node(); system("cls"); break;
case 3: Delete_node(); system("cls"); break;
case 4: system("cls"); Print_node(); break;
case 5: Edit(); break;
case 6: exit(1); break;
default: puts("잘못눌렀습니다."); break;
}
}
}
void Add_node()
{
Tag add_node = (Tag)malloc(sizeof(tag));
printf("이름 : ");
scanf("%s", add_node->Name);
printf("번호 : ");
scanf("%s", add_node->Tel);
printf("주소 : ");
scanf("%s", add_node->Addr);
printf("학번 : ");
scanf("%s", add_node->Class);
if (b == 1) {
head = add_node;
tail = head;
b += 2;
}
tail->next = add_node;
tail = add_node;
tail->next= NULL;
cnt += 1;
}
void Search_Insert()
{
if (head == NULL) {
puts("No List");
puts("");
Add_node();
}
p = head;
char name[20];
Print_node();
if (d != 1 && d != 2) {
system("cls");
puts("잘못 누르셨습니다.");
Sleep(1500);
system("cls");
return;
}
if (d == 2) {
puts("입력한 이름의 뒤에 삽입을 합니다. 이름을 검색하세요. : ");
scanf("%s",name);
for (i = 1; i < cnt; i++) {
if (strcmp(name, p->Name)==0) {
break;
Insert_node();
}
else if (strcmp(name, p->Name) != 0) {
p = p->next;
}
}
}
if (d == 1) {
puts("입력한 학번 뒤에 삽입을 합니다. 학번을 검색하세요. : ");
scanf("%s",name);
for (i = 1; i < cnt; i++) {
if (strcmp(name, p->Class) == 0) {
break;
Insert_node();
}
if (strcmp(name, p->Class) != 0) {
p = p->next;
}
}
}
}
void Insert_node() //정렬 후 삽입
{
if (head == NULL) {
puts("노드가 없습니다. ");
puts("");
Add_node();
}
char name[20];
Tag add_node = (Tag)malloc(sizeof(tag));
printf("이름 : ");
scanf("%s", add_node->Name);
printf("번호 : ");
scanf("%s", add_node->Tel);
printf("주소 : ");
scanf("%s", add_node->Addr);
printf("학번 : ");
scanf("%s", add_node->Class);
if (p->next == NULL) {
p->next = add_node;
tail = add_node;
add_node->next = NULL;
}
else if (p->next != NULL) {
add_node->next = p->next;
p->next = add_node;
}
cnt += 1;
}
void Print_node()
{
if (head == NULL)
puts("노드가 없습니다.");
ptr = head;
while (ptr != NULL) {
puts("");
printf("이름 : %s \n", ptr->Name);
printf("번호 : %s \n", ptr->Tel);
printf("주소 : %s \n", ptr->Addr);
printf("학번 : %s \n", ptr->Class);
puts("");
ptr = ptr->next;
}
}
void Delete_node()
{
p = head, prev = NULL;
int c=0;
puts("1. 이름");
puts("2. 번호");
puts("3. 주소");
puts("4. 학번");
printf("어떤 것으로 삭제할지 입력하세요 : ");
scanf("%d",&c);
if (c != 1 && c != 2 && c != 3 && c != 4) {
system("cls");
puts("잘못 누르셨습니다.");
Sleep(1500);
system("cls");
return;
}
char name[20];
char tel[20];
char addr[30];
char class_[20];
if (c == 1) {
printf("입력한 이름의 주소록을 삭제합니다. 이름을 입력하세요. : ");
scanf("%s", name);
while (p != NULL) {
if ((strcmp(name, p->Name)) == 0) {
if (p == head && p->next == NULL) {
b = 1;
free(p);
break;
}
else if (p == head && p->next != NULL) {
head = p->next;
free(p);
p = head;
break;
}
prev->next = p->next;
free(p);
break;
}
else if (p->next == NULL) {
puts("찾는 노드가 X");
}
prev = p;
p = p->next;
}
cnt -= 1;
}
if (c == 2) {
printf("입력한 번호의 주소록을 삭제합니다. 번호를 입력하세요. : ");
scanf("%s", tel);
while (p != NULL) {
if ((strcmp(tel, p->Tel)) == 0) {
if (p == head && p->next == NULL) {
b = 1;
free(p);
break;
}
else if (p == head && p->next != NULL) {
head = p->next;
free(p);
p = head;
break;
}
prev->next = p->next;
free(p);
break;
}
else if (p->next == NULL) {
puts("찾는 노드가 X");
}
prev = p;
p = p->next;
}
}
if (c == 3) {
printf("입력한 주소의 주소록을 삭제합니다. 주소를 입력하세요. : ");
scanf("%s", addr);
while (p != NULL) {
if ((strcmp(addr, p->Addr)) == 0) {
if (p == head && p->next == NULL) {
b = 1;
free(p);
break;
}
else if (p == head && p->next != NULL) {
head = p->next;
free(p);
p = head;
break;
}
prev->next = p->next;
free(p);
break;
}
else if (p->next == NULL) {
puts("찾는 노드가 X");
}
prev = p;
p = p->next;
}
}
if (c == 4) {
printf("입력한 학번의 주소록을 삭제합니다. 학번을 입력하세요. : ");
scanf("%s",class_);
while (p != NULL) {
if ((strcmp(class_, p->Class)) == 0) {
if (p == head && p->next == NULL) {
b = 1;
free(p);
break;
}
else if (p == head && p->next != NULL) {
head = p->next;
free(p);
p = head;
break;
}
prev->next = p->next;
free(p);
break;
}
else if (p->next == NULL) {
puts("찾는 노드가 X");
}
prev = p;
p = p->next;
}
}
}
void Edit()
{
if (head == NULL) {
puts("노드가 없습니다.");
}
int c=0;
char name[20];
char tel[20];
char addr[30];
char class_[20];
p = head;
system("cls");
puts("1. 이름");
puts("2. 번호");
puts("3. 주소");
puts("4. 학번");
printf("어떤 것으로 수정할지 입력하세요 : ");
scanf("%d", &c);
if (c != 1 && c != 2 && c != 3 && c != 4) {
system("cls");
return;
puts("잘못 누르셨습니다.");
Sleep(1500);
system("cls");
}
system("cls");
Print_node();
if (c == 1) {
puts("수정할 이름을 입력해주세요.");
puts("");
scanf("%s", name);
puts("")
;
if (strcmp(name, p->Name) == 0) {
printf("이름 : ");
scanf("%s", p->Name);
printf("번호 : ");
scanf("%s", p->Tel);
printf("주소 : ");
scanf("%s", p->Addr);
printf("학번 : ");
scanf("%s", p->Class);
puts("");
puts("수정 완료");
}
p = p->next;
}
if (c == 2) {
puts("수정할 번호를 입력해주세요.");
puts("");
scanf("%s",tel);
puts("");
while (p != NULL) {
if (strcmp(tel, p->Tel) == 0) {
printf("이름 : ");
scanf("%s", p->Name);
printf("번호 : ");
scanf("%s", p->Tel);
printf("주소 : ");
scanf("%s", p->Addr);
printf("학번 : ");
scanf("%s", p->Class);
puts("");
puts("수정 완료");
}
p = p->next;
}
}
if (c == 3) {
puts("수정할 주소를 입력해주세요.");
puts("");
scanf("%s", addr);
puts("");
while (p != NULL) {
if (strcmp(addr, p->Addr) == 0) {
printf("이름 : ");
scanf("%s", p->Name);
printf("번호 : ");
scanf("%s", p->Tel);
printf("주소 : ");
scanf("%s", p->Addr);
printf("학번 : ");
scanf("%s", p->Class);
puts("");
puts("수정 완료");
}
p = p->next;
}
}
if (c == 4) {
puts("수정할 학번을 입력해주세요.");
puts("");
scanf("%s", class_);
puts("");
while (p != NULL) {
if (strcmp(class_, p->Class) == 0) {
printf("이름 : ");
scanf("%s", p->Name);
printf("번호 : ");
scanf("%s", p->Tel);
printf("주소 : ");
scanf("%s", p->Addr);
printf("학번 : ");
scanf("%s", p->Class);
puts("");
puts("수정 완료");
}
p = p->next;
}
}
}