명함관련 프로그램 평가좀 부탁드립니다...
두힘
질문 제목 : 소스평가좀 부탁드립니다.질문 요약 :명함관련프로그램 작성해봤습니다.. 아직 많이부족합니다..평가좀부탁드립니다#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.에러처리가 없네요..
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2690486 | 문자열과 문자형이요 ~ | 다스리 | 2025-04-05 |
2690344 | 일본어 주석 깨짐 문제 (3) | 연하얀 | 2025-04-04 |
2690314 | 암호문 만들기 -비제네르- | 이퓨리한나 | 2025-04-03 |
2690292 | 왕초보자의 질문!!!!!! 도와주세요 (1) | 하랑 | 2025-04-03 |
2690269 | 정올 문제 인데.. 흠 | 반월 | 2025-04-03 |
2690237 | sizeof에서 short형을 썻는데 왜 4byte가 나올까요? (1) | 바나나 | 2025-04-03 |
2690183 | 문자열과 포인트 비교 (2) | 미즈 | 2025-04-02 |
2690154 | a -48 ? | 희미한눈물 | 2025-04-02 |
2690094 | 테트리스 질문요. | 지후 | 2025-04-01 |
2690066 | 문자열비교!! (1) | 매디 | 2025-04-01 |
2689888 | 좀도와주세요;; ㅠㅠ | 사람 | 2025-03-30 |
2689856 | 메뉴 그리는 거 질문 | 나라빛 | 2025-03-30 |
2689831 | c언어 프로그램 추천 | 하연 | 2025-03-30 |
2689801 | c언어 time.h에서 작동이 중지되었습니다. | 하람 | 2025-03-30 |
2689772 | 2차원 배열의 배열명에 대해서.. | 옆집꼬마야 | 2025-03-29 |
2689740 | 게임 TCP소켓 질문 (2) | 불꾼 | 2025-03-29 |
2689711 | 반복문 모래시계 | 한뎃집 | 2025-03-29 |
2689685 | 경우의 수에 따른 결과 처리 질문드립니다. (2) | 다흰 | 2025-03-29 |
2689655 | .exe에 아이콘 넣는 법좀 알려주세요 | 연하얀 | 2025-03-28 |
2689631 | #define 전처리문에 대해서 (2) | 사랑은아픔 | 2025-03-28 |