c언어 연결리스트로 전화번호부 만드는 과제 수정 부분 도와주세요...
c언어 피드백 받은 부분 수정 도와주실 분 찾습니다.도와주세요...ㅠ
//c언어 링트드리스트를 이용한 전화번호부입니다
피드백 부분-
1.
성별에 여러글자 입력 시 에러처리 추가
2.주소록 구조체 중 addr은 배열 말고 포인터로 선언하고 malloc로 메모리 할당할 것.
입력 받을 주소의 길이를 모르니까 고정 길이여도 상관 없음.
경험삼아 해보는 것.
3.
1번 메뉴. 출력
주소를 1000개 등록 한 경우 1000 * 1000 번 만큼 for문 반복 됨
[시간 복잡도] [빅 O] [빅오] 이런 키워드로 검색해서 어떤 의미인지 찾아보세요
4.
2번 메뉴. 삭제
리스트의 장점이 추가/삭제가 용이하다는 것인데..
굳이 for문이 필요 할까요???
5.
4번 메뉴. 검색
검색 결과로 삭제, 수정 할 수 있도록 해주세요.
일괄 삭제, 부분 삭제 등등
6.
메뉴 선택에 대한 처리를 if, else if 이런 것 보다는 switch 구문 쓰는게 더 나을것 같아요.
메뉴 선택에 대한 처리를 각각의 함수로 빼서 구현하면 코드가 좀 더 깔끔할듯 싶어요
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void add(void);
struct people * seek(int);
void print(int);
void del(struct people *);
void modify(int);
void namesearch(void);
void agesearch(void);
void idsearch(void);
void gendersearch(void);
void phonesearch(void);
void addrsearch(void);
int kill(int );
struct people
{
int id;
int age;
char name[11];
char gender;
char phone[20];
char addr[100];
struct people *next;
};
struct people *head = NULL;
struct people *tail = NULL;
int count = 0;
int delete = 0;
int main(void)
{
int dele;
int select;
int pcount;
system("clear");
while(1)
{
while(1)
{
printf("\n\n");
printf("┌-----------------------------┐\n");
printf(" [0]주소록 삽입 \n\n");
printf(" [1]주소록 출력 \n\n");
printf(" [2]주소록 삭제 \n\n");
printf(" [3]내용 추가,수정 \n\n");
printf(" [4]주소록 검색 \n\n");
printf(" [5]서비스 종료 \n\n");
printf("└-----------------------------┘\n");
printf(" 메뉴 선택 : ");
fflush(stdin);
scanf("%d", &select);
if(select!=0 && select!=1 && select!=2 && select!=3 && select!=4 && select!=5 )
{ system("clear");
printf("\n\n\n\n");
printf("======================경 고=========================\n");
printf(" 0부터 5까지만 입력하세요 :\n\n\n\n");
printf("=======================================================\n");
fflush(stdin);
continue;
}
break;
}
if(select == 0)
{
add();
}
else if(select == 1)
{system("clear");
printf("------------------------------주소록정보-------------------------------------- \n");
printf(" 번호 ID 이름 나이 성별 전화번호 주소 \n");
for(pcount=1;pcount<=count;pcount++)
{
print(pcount);
}
printf("--------------------------------------------------------------------------------\n");
}
else if(select == 2)
{
if(count==0)
{ system("clear");
printf("삭제할 주소록정보가 없습니다\n");
continue;
}
printf("삭제할 주소록 번호 :");
scanf("%d",&dele);
if(dele>count){
system("clear");
printf("해당 주소록 정보는 없으므로 삭제 불가능 \n");
continue;
}
else if((dele<0) || (dele>1000000))
{
system("clear");
printf("해당 주소록 정보는 없으므로 삭제 불가능 \n");
fflush(stdin);
continue;
}
delete = dele;
del(seek(dele));
system("clear");
printf("============주소록 삭 제 완 료============\n");
}
else if(select == 3)
{ if(count == 0)
{ system("clear");
printf("추가 등록할 주소록 없습니다 입력후 추가하시오 \n");
continue ;
}
printf("\n");
printf("수정할 주소록의 번호를 입력하시오 : ");
scanf("%d",&dele);
if(dele>count){
system("clear");
printf("해당 주소록 정보는 없으므로 추가 불가능 \n");
fflush(stdin);
continue;
}
else if((dele<0) || (dele>1000000))
{
system("clear");
printf("해당 주소록 정보는 없으므로 추가 불가능\n");
fflush(stdin);
continue;
}
fflush(stdin);
modify(dele);
system("clear");
printf("===========추가 및 수정 완 료============\n");
}
else if(select == 4)
{
if(count == 0){
system("clear");
printf("\n\n\n");
printf("입력된 값이 아무것도 없습니다 \n\n\n\n\n");
continue;
}
fflush(stdin);
while(1)
{
printf("\n\n\n");
printf("이름검색은 (1)번 :\n\n");
printf("나이검색은 (2)번 :\n\n");
printf("ID 검색은 (3)번 :\n\n");
printf("성별검색은 (4)번 :\n\n");
printf("전화번호검색은 (5)번 :\n\n");
printf("주소검색은 (6)번 :\n\n");
printf("select : ");
scanf("%d",&select);
if(select!=1 && select!=2 && select!=3 && select!=4 && select!=5 && select!=6)
{ system("clear");
printf("1~6번에서만 입력하세요\n");
fflush(stdin);
continue;
}
break;
}
if(select == 1)
{
namesearch();
}
if(select == 2)
{
agesearch();
}
if(select == 3)
{
idsearch();
}
if(select == 4)
{
gendersearch();
}
if(select == 5)
{
phonesearch();
}
if(select == 6)
{
addrsearch();
}
}
else if(select == 5)
{ system("clear");
printf("=======================================================================\n\n\n\n\n\n");
printf(" 이 용 해 주 셔 서 감 사 합 니 다 \n\n\n\n\n");
printf(" \n\n\n\n ");
printf("=======================================================================\n");
return 0;
}
}
return 0;
}
void add(void)
{
struct people * temp;
temp = (struct people *)malloc (sizeof(struct people));
printf("\n");
printf("이름 : ");
scanf("%10s",temp->name);
fflush(stdin);
printf("\n");
while(1)
{
printf("ID(1 to 9999) :");
scanf("%d",&temp->id);
if((temp->id <=0) || ( temp->id > 9999) ){
printf("올바른 숫자를 입력하시오\n ");
fflush(stdin);
continue;
}
if((kill(temp->id))){
printf("중복된 ID가 있습니다 다시 입력하시오\n ");
fflush(stdin);
continue;
}
break;
}
printf("\n");
fflush(stdin);
while(1)
{
printf("성별(여자 = f, 남자 = m) : ");
scanf("%c", &temp->gender);
if(temp->gender!='f' && temp->gender!='m')
{
printf("여자 = f 남자 = m만 입력하시오\n");
fflush(stdin);
continue;
}
break;
}
fflush(stdin);
printf("\n");
while(1)
{
printf("나이 :");
scanf("%d", &temp->age);
if((temp->age)<=0 || (temp->age>150) )
{
printf("잘못된 나이를 입력했습니다\n");
fflush(stdin);
continue;
}
break;
}
fflush(stdin);
printf("\n");
while(1)
{
printf("전화번호 :");
scanf("%s", temp->phone);
break;
}
fflush(stdin);
printf("\n");
while(1)
{
printf("주소 :");
scanf("%s", temp->addr);
break;
}
fflush(stdin);
system("clear");
printf(" 생 성 완 료 ! \n");
printf("==============================================\n\n");
temp->next = NULL;
if(tail!=NULL)
tail->next = temp;
if(tail == NULL)
head = temp;
tail = temp;
count++;
return;
}
struct people * seek(int number)
{
int n;
struct people *temp = head;
if(number>count)
return NULL;
for(n=1;n<number;n++)
{
temp = temp->next;
}
return temp;
}
void print(int number)
{
int n;
struct people *temp = head;
if(number>count)
return ;
for(n=1;n<number;n++)
{
temp = temp->next;
}
printf("│%13d %10d %9s %8d %9c %13s %9s │ \n",n++,temp->id,temp->name,temp->age,temp->gender,temp->phone, temp->addr);
}
void del(struct people *node)
{
struct people *prev;
if(count == delete)
{
for(prev=head;prev!=tail;prev=prev->next)
{
if(prev->next == node)
break;
if(prev == node)
break;
}
if(node == head)
head = node->next;
else
tail = prev;
prev->next = node->next;
}
else
{
for(prev=head;prev!=tail;prev=prev->next)
{
if(prev->next == node)
break;
if(prev == node)
break;
}
if(node == head)
head = node->next;
else
prev->next = node->next;
}
count--;
free(node);
}
void modify(int number)
{
int n,dele;
struct people *temp = head;
if(number>count){
printf("그런 번호는 없습니다 \n");
return ;
}
for(n=1;n<number;n++)
{
temp = temp->next;
}
printf("==============%d번 사용자 정보 추가================\n",number);
printf("============== ID 는 추가와 수정이 불가능 =============\n");
printf("\n");
printf("수정할 이름 :");
scanf("%10s",temp->name);
fflush(stdin);
printf("\n");
while(1)
{
printf("수정할 사용자 성별(여자 = f 남자 = m):");
scanf("%c",&temp->gender);
if(temp->gender!='f' && temp->gender!='m')
{
printf("남자 = f 여자 = m만 입력하시오\n");
fflush(stdin);
continue;
}
break;
}
fflush(stdin);
printf("\n");
while(1)
{
printf("수정할 사용자 나이 :");
scanf("%d",&temp->age);
if((temp->age<=0) || (temp->age>150) )
{
printf("잘못된 나이를 입력했습니다\n");
fflush(stdin);
continue;
}
break;
}
fflush(stdin);
printf("\n");
printf("수정할 사용자 전화번호 :");
scanf("%10s",temp->phone);
fflush(stdin);
printf("\n");
fflush(stdin);
printf("\n");
printf("수정할 사용자 주소 :");
scanf("%10s",temp->addr);
fflush(stdin);
printf("\n");
printf(" 수 정 완 료 ! \n");
return ;
}
void namesearch(void)
{
struct people *temp = head;
char names[11];
printf("찾을 사람의 이름을 입력하시오 :");
scanf("%10s",names);
fflush(stdin);
system("clear");
printf("================================== 검 색 결 과 ===================================\n\n\n");
while(1)
{
if(strstr(temp->name,names))
{
printf("이름 :%s ID :%d 성별 :%c 나이 :%d 전화번호 :%s 주소 :%s \n",temp->name,temp->id,temp->gender,temp->age ,temp->phone,temp->addr);
temp = temp->next;
if(temp == NULL)
{
temp = head;
break;
}
}
else if(!strstr(temp->name,names))
temp = temp->next;
if(temp == NULL)
{
break;
}
}
printf("\n\n\n\n");
printf("==============================================================================================\n\n\n");
return ;
}
void agesearch(void)
{
int age;
struct people *temp = head;
while(1)
{
printf("찾고자 하는 나이를 입력하시오 :");
scanf("%d",&age);
if((age<=0) || (age>150))
{ printf("=====================================\n\n");
printf(" 잘못된 나이를 입력했습니다\n\n\n\n\n");
printf("=========================================\n\n\n\n\n");
fflush(stdin);
continue;
}
break;
}
system("clear");
printf("=================================== 검 색 결 과 =======================================\n\n\n\n");
while(1)
{
if(age == temp->age)
{
printf("이름 :%s ID :%d 성별 :%c 나이 :%d 전화번호 :%s 주소 :%s \n",temp->name,temp->id,temp->gender,temp->age ,temp->phone,temp->addr);
temp = temp->next;
if(temp == NULL)
{
temp = head;
break;
}
}
if(age != temp->age)
{
if(temp->next == NULL )
{
break;
}
temp = temp->next;
}
}
printf("\n\n\n");
printf("==============================================================================================\n\n\n");
return ;
}
void idsearch(void)
{
int id;
struct people *temp = head;
while(1)
{
printf("찾고자 하는 ID 를 입력하시오 :");
scanf("%d",&id);
if((id<=0) || (id>9999)){
printf("올바른 숫자를 입력하시오\n");
fflush(stdin);
continue;
}
break;
}
system("clear");
printf("================================= 검 색 결 과 =================================\n\n\n");
while(1)
{
if(id == temp->id)
{
printf("이름 :%s ID :%d 성별 :%c 나이 :%d 전화번호 :%s 주소 :%s \n",temp->name,temp->id,temp->gender,temp->age ,temp->phone,temp->addr);
temp = temp->next;
if(temp == NULL)
{
temp = head;
break;
}
}
if(id != temp->id)
{
temp = temp->next;
if(temp==NULL)
{
temp = head;
break;
}
}
}
printf("\n\n");
printf("======================================================================================\n\n\n");
return ;
}
void gendersearch(void)
{
char gender;
struct people *temp = head;
fflush(stdin);
while(1)
{
printf("찾고자 하는 성별을 입력하시오 :");
scanf("%c", &gender);
if(gender !='f' && gender !='m')
{
printf("남자 = f 여자 = m 만 입력하시오\n");
fflush(stdin);
continue;
}
break;
}
fflush(stdin);
system("clear");
printf("==================================== 검 색 결 과 ======================================\n\n\n");
while(1)
{
fflush(stdin);
if(gender == temp->gender)
{
printf("이름 :%s ID :%d 성별 :%c 나이 :%d 전화번호 :%s 주소 :%s \n",temp->name,temp->id,temp->gender,temp->age ,temp->phone,temp->addr);
temp = temp->next;
if(temp == NULL)
{
temp = head;
break;
}
}
if(gender !=temp->gender)
{
temp = temp->next;
if(temp ==NULL)
{
temp = head;
break;
}
}
}
printf("\n\n\n");
printf("========================================================================================================\n\n\n");
return ;
}
void phonesearch(void)
{
struct people *temp = head;
char phone[20];
printf("찾을 사람의 번호를 입력하시오 :");
scanf("%20s",phone);
fflush(stdin);
system("clear");
printf("================================== 검 색 결 과 ===================================\n\n\n");
while(1)
{
if(strstr(temp->phone,phone))
{
printf("이름 :%s ID :%d 성별 :%c 나이 :%d 전화번호 :%s 주소 :%s \n",temp->name,temp->id,temp->gender,temp->age ,temp->phone,temp->addr);
temp = temp->next;
if(temp == NULL)
{
temp = head;
break;
}
}
else if(!strstr(temp->phone,phone))
temp = temp->next;
if(temp == NULL)
{
break;
}
}
printf("\n\n\n\n");
printf("==============================================================================================\n\n\n");
return ;
}
void addrsearch(void)
{
struct people *temp = head;
char addr[20];
printf("찾을 사람의 주소를 입력하시오 :");
scanf("%20s",addr);
fflush(stdin);
system("clear");
printf("================================== 검 색 결 과 ===================================\n\n\n");
while(1)
{
if(strstr(temp->addr,addr))
{
printf("이름 :%s ID :%d 성별 :%c 나이 :%d 전화번호 :%s 주소 :%s \n",temp->name,temp->id,temp->gender,temp->age ,temp->phone,temp->addr);
temp = temp->next;
if(temp == NULL)
{
temp = head;
break;
}
}
else if(!strstr(temp->addr,addr))
temp = temp->next;
if(temp == NULL)
{
break;
}
}
printf("\n\n\n\n");
printf("==============================================================================================\n\n\n");
return ;
}
int kill(int number)
{
struct people *temp = head;
while(1)
{
if(count == 0)
break;
if(temp->id == number)
return 1;
if(temp->next == NULL)
break;
temp = temp->next;
}
return 0 ;
}
아직 댓글이 없습니다. 첫번째 댓글 작성자가 되어주세요 :)