명함관련 프로그램 평가좀 부탁드립니다...
두힘
질문 제목 : 소스평가좀 부탁드립니다.질문 요약 :명함관련프로그램 작성해봤습니다.. 아직 많이부족합니다..평가좀부탁드립니다#include stdio.h#include stdlib.h#include string.h#include malloc.h
#define name_size 20#definecomp_size 30#define tel_size 40
typedef struct _card{ char name[name_size]; char comp[comp_size]; char tel[tel_size]; struct _card *next;}card;
void init_list(void);void input_information(void);void print_all_namecard(void);void search(char *string);void delete(char *string);void save_namecard(void);int view_menu(void);char *search_option(void);char *delete_option(void);
card *head,*tail;int *searchoption;void main(){ char *buf; int status; init_list();
while( (status = view_menu()) != 6) { switch(status) { case 1: input_information(); break; case 2: print_all_namecard(); break; case 3: buf = search_option(); search(buf); break; case 4: buf = delete_option(); delete(buf); break; case 5: save_namecard(); break; } } puts(\nprogram end.....\n);}
void init_list(void){ head = (card *)malloc(sizeof(card)); tail = (card *)malloc(sizeof(card)); head -next = tail; tail -next = tail;}
void input_information(void){ int status = 1; card *value; value = (card *)malloc(sizeof(card)); puts(\n--- input namecard menu ---); while(status) { printf(input name - ); gets(value -name); if( strlen(value -name) = name_size ) { puts(\ninput name error!!\nplease retry input\n); continue; }
printf(input companyname - ); gets(value -comp); if( strlen(value -comp) = comp_size ) { puts(\ninput name error!!\nplease retry input\n); continue; }
printf(input telephone number - ); gets(value -tel); if( strlen(value -tel) = tel_size ) { puts(\ninput name error!!\nplease retry input\n); continue; } puts(\ninput information complete!!\n); status = 0; } value -next = head -next; head -next = value;}
int view_menu(void){ char input[50]; while(1) { printf(\n--- please select menu ---\n); printf(1. input information\n); printf(2. view all-namecard\n); printf(3. search namecard\n); printf(4. delete namecard\n); printf(5. save namecard from .txt file\n); printf(6. program exit\n\n); printf(please input select menu - ); gets(input); if(atoi(input) == 0) { printf(\nselect menu error!!\nplease retry select menu\n); continue; } else return atoi(input); }}
void print_all_namecard(void){ card *namecard; namecard = head -next;
printf(\n----name------------companyname------------telephonenumber----\n); while(namecard != tail) { printf( %-10s %-23s%-20s\n,namecard -name,namecard-comp,namecard-tel); namecard = namecard -next; }}
char *search_option(void){ char input[50]; char *search; static int buf; search = (char *)malloc(sizeof(search)); while(1) { printf(\n--- please select search menu ---\n); printf(1. name\n); printf(2. company name\n); printf(3. telephine numer\n); printf(please input select search menu - ); gets(input);
if( atoi(input) == 0 || atoi(input) 3) { printf(\nselect search menu error!!\nplease retry select menu\n\n); continue; } else break; } buf = atoi(input); searchoption = &buf;
switch( atoi(input) ) { case 1: printf(please input search name - ); gets(search); break; case 2: printf(please input search company name - ); gets(search); break; case 3: printf(please input search telephone number - ); gets(search); break; } return search;}
void search(char *string){ char yn[10]; card *list; list = head -next; while(list != tail) { if(*searchoption == 1 && strcmp(string,list-name) == 0) break; else if(*searchoption == 2 && strcmp(string,list-comp) == 0) break; else if(*searchoption == 3 && strcmp(string,list-tel) == 0) break; list = list -next; } if(list != tail) { printf(\nsearch successful!!!\n); printf(view namecard information (yes or no) ?? - ); gets(yn); if( strcmp(yn,yes) == 0 || strcmp(yn,yes) == 0) { printf(namecard information ↓↓↓); printf(\n----name------------companyname------------telephonenumber----\n); printf( %-10s %-23s%-20s\n,list -name,list-comp,list-tel); printf(--------------------------------------------------------------\n); } } else printf(\nsearch failure...\n);}
char *delete_option(void){ char input[50]; char *search; static int buf; search = (char *)malloc(sizeof(search)); while(1) { printf(\n--- please select delete menu ---\n); printf(1. name\n); printf(2. company name\n); printf(3. telephine numer\n); printf(please input select delete menu - ); gets(input);
if( atoi(input) == 0 || atoi(input) 3) { printf(\nselect search menu error!!\nplease retry select menu\n\n); continue; } else break; } buf = atoi(input); searchoption = &buf;
switch( atoi(input) ) { case 1: printf(please input delete name - ); gets(sngets(search); break; case 2: printf(please input delete company name - ); gets(search); break; case 3: printf(please input delete telephone number - ); gets(search); break; } return search;}
void delete(char *string){ card *list; card *front; front = head; list = front -next; while(list != tail) { if(*searchoption == 1 && strcmp(string,list-name) == 0) break; else if(*searchoption == 2 && strcmp(string,list-comp) == 0) break; else if(*searchoption == 3 && strcmp(string,list-tel) == 0) break; front = front -next; list = front -next; } if(list != tail) { front -next = list -next; free(list); puts(\ndelete namecard complete!!\n); } else printf(\nsearch failure...\n);
}
void save_namecard(void){ file *fp = fopen(namecard.txt,wt); card *list; list = head -next; fprintf(fp,\n----name------------companyname------------telephonenumber----\n); while(list != tail) { fprintf(fp, %-10s %-23s%-20s\n,list -name,list-comp,list-tel); list = list -next; } printf(save namecard from .txt file complete!!!\n); printf(.txt file address : c:\\documents and settings\\administrator\\바탕 화면\\c언어연습\\namenamecard\n);}
아직많이 부족하고모자란상태이지만 한번짜봤습니다..보시고 평가좀해주시고 부족한점있으면 충고좀부탁드립니다
-
에녹 2024-11-07
감사합니다 !^^ 참고하도록하겠습니다
-
AngelsTears 2024-11-07
프로그램 실행면에서 생각하지 못한 부분이 조금 있습니다. (사용자 측면)
1. Input name을 입력하는데 숫자로 이름을 가진 사람은 없으니 숫자 입력 시 다시 입력하라는 문구가 필요할 것 같습니다. 핸드폰 번호도 마찬가지 한글이나 영어를 가진 숫자는 없기 때문 (-)는 입력 받아야 함.
2. 3번 검색 이 후, Suearch Successful!! 문구 출력 후에 View NameCard 문구로 넘어가면 yes로 할 지 no로 할지를 물어보는데, -
볼1매그녀 2024-11-07
감사합니다^^
-
아빠몬 2024-11-07
그나마 비슷한게 fgets네요. 2번은 함수가 제대로 처리가 안되더라도 아무 지장없다! 라는 부분 이외의 모든 부분에서 예외처리를 해주셔야합니다. 심지어 중요한 파일이라면 단순히 읽고 쓰는데도 예외처리를 해주셔야해요. 예를하나만 꼽자면 linux system programming란 책에나온 예외처리 부분인데요..
read함수는 fd에서 len바이트만큼 buf로 읽어들이는 함수입니다.. 정말 별거 아닌 함순데 예외 처리만 몇줄인지 참.. 저정도 까진 안하 -
소1유물 2024-11-07
문자열을입력받는 다른표준함수는 scanf와gets밖에몰라서그러데 말씀하신 다른함수중에 하나만 알려주시면 감사하겠습니다...ㅠ 2번째는 fopen이랑 동적할당받은 부분들을 말씀하시는건가요?
-
모드니 2024-11-07
gets의경우 취약점때문에 다른표준 함수를 사용하시는걸 권장합니다.
두번째는 요세 추세가 방어적 프로그래밍이라 함수호출 이후 원하는결과가 아니라면 그에 맞는 처리를 해줘야합니다. 예를 들면 fopen 이후 fp가 NULL값인지 확인후 처리를 하는거죠. -
치에미 2024-11-07
말씀해주신 2가지 어떤식으로 개선해야할가요.. 말씀좀해주세요
-
말근 2024-11-07
그냥 쭉 내려봤을때 아쉬운점 두가지. 1.gets의 사용. 2.에러처리가 없네요..
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2700426 | 인터넷 창 띄우는 질문이요 (1) | 정훈 | 2025-07-04 |
2700400 | 원넓이를 계산이요 ㅜㅜ | 천칭자리 | 2025-07-04 |
2700368 | if에 관해서 질문이요... | Orange | 2025-07-04 |
2700339 | 이거 결과값이 왜이런건지.. (4) | 그댸와나 | 2025-07-04 |
2700313 | 파일 읽어서 저장하는데 빈파일일 경우 문재가 발생하네요.. (2) | 크나 | 2025-07-03 |
2700287 | 구조체 동적할당 연습을 하는데 오류가 뜹니다...(해결) (3) | 아련나래 | 2025-07-03 |
2700264 | 문자와 숫자 동시에 입력??? | 글고운 | 2025-07-03 |
2700236 | txt파일로만 쓰고 읽게 하려면 어떻게 해야 하나요..?? (8) | 미국녀 | 2025-07-03 |
2700211 | 전위 연산자 (2) | 어른처럼 | 2025-07-02 |
2700183 | C에서 파일이름을 받고, 그 파일의 사이즈를 출력해줘야하는데 내용이 출력이 안되네요 ;ㅅ; | 피스케스 | 2025-07-02 |
2700150 | 꼭좀 도와주세요ㅠㅠㅠ | 호습다 | 2025-07-02 |
2700095 | 연산문제...질문... | 오빤테앵겨 | 2025-07-01 |
2700070 | while문 , 3의배수 출력하는 프로그램좀 짜주세욤. | 횃불 | 2025-07-01 |
2700041 | 초보인데요 ㅎ 배열안에 배열을 집어넣을수 있나요?? | 헛장사 | 2025-07-01 |
2700012 | 배열// (1) | 전갈자리 | 2025-07-01 |
2699895 | 무한루프에 빠집니다.!! 해결좀부탁드려요 (10) | 선아 | 2025-06-30 |
2699842 | 질문을 너무 많이 하네여.....죄송.... (2) | 해님꽃 | 2025-06-29 |
2699816 | 오류 질문입니다.. (1) | 해비치 | 2025-06-29 |
2699763 | 질문입니다 ! 꼭 좀 도와주세요ㅠㅠ (2) | 미라 | 2025-06-28 |
2699555 | c언어 다항식을 입력을 했는데 왜 출력이 안될까요? | 피스케스 | 2025-06-27 |