명함관련 프로그램 평가좀 부탁드립니다...
두힘
질문 제목 : 소스평가좀 부탁드립니다.질문 요약 :명함관련프로그램 작성해봤습니다.. 아직 많이부족합니다..평가좀부탁드립니다#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.에러처리가 없네요..
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2674921 | c언어 간단한 정의와 변수질문용 | 연블랙 | 2024-11-13 |
2674890 | 포인터와 배열만 이용한 간단한 프로그램인데..이해가 안되요.; (4) | 늘솜 | 2024-11-13 |
2674859 | 한번만 봐주세요~!!(재수정!! 코드 넣어서) | 흰두루 | 2024-11-12 |
2674830 | 프로그램 보안에 관련한 질문입니다. | Sweet | 2024-11-12 |
2674799 | 소스 좀... (2) | 상1큼한렩 | 2024-11-12 |
2674773 | 질문이요^^.. | 찬내 | 2024-11-12 |
2674746 | 10진수를 2진수로 바꾸는프로그램 하다가 막히네요.. | 하림 | 2024-11-11 |
2674667 | IEE754 변환 (2) | 누림 | 2024-11-11 |
2674645 | 리눅스를 윈도우로 바꿔주세요 (1) | 해샘찬 | 2024-11-10 |
2674619 | 계단식 숫자 출력 완성했는데... (10) | 스위트초코 | 2024-11-10 |
2674589 | 외부 함수 쓰는방법...ㅠ | 세움 | 2024-11-10 |
2674564 | 설계좀 ㅎ ㅐ 주 세요 ㅠㅠ | 나로 | 2024-11-10 |
2674541 | 부호질문..! (5) | 새솔 | 2024-11-09 |
2674511 | Dev C++에 대하여 (7) | 연파랑 | 2024-11-09 |
2674401 | 문자열 질문 | 늘찬 | 2024-11-08 |
2674373 | system() 함수 관련 질문입니다. (5) | 장미빛볼살 | 2024-11-08 |
2674344 | 알고리즘과 자료구조 책에 관해 질문이요. (4) | 해가빛 | 2024-11-08 |
2674315 | 복합 리피털이 뭔가요? (2) | 달달항사탕 | 2024-11-07 |
2674260 | 함수에서 값을 반환한다는 것. (1) | 란새 | 2024-11-07 |
2674237 | 명함관련 프로그램 평가좀 부탁드립니다... (8) | 두힘 | 2024-11-07 |