Mysql C API를 이용한 초간단 회원 관리
씨언어 수업하다가 생각이 나서 교육용으로 한번 맹글어 봤습니다. ㅋㅋ
[ 튜터리얼 ]
http//ilinuxbay.com/contentChannel/article.php?scol_serial=1761&aca_idx=3
걍. 소스만 보실 분은..
[ 소스 ]
/*________________________________________________________________________
* 작성자 윤영한 (shee@ilinuxbay.com)
* 작성일 2003. 08. 25. (월) 133642 KST
* 화일명 mysql_member.c
* 내 용 유저에 대한 정보를 MYSQL C API를 이용
* 해서 관리한다.
* 참 조 Teach Yourself C week 기본 골격을 이용
* 수업용 교재로 이용 활용 가능성 구현
* - 모듈화 및 중복성 배제
* - http//ilinuxbay.com/
*
* MYSQL
*
* CREATE TABLE `member` (
* `idx` int(11) NOT NULL auto_increment,
* `id` varchar(20) NOT NULL default '',
* `name` varchar(20) NOT NULL default '',
* `email` varchar(50) NOT NULL default '',
* PRIMARY KEY (`idx`)
* ) TYPE=MyISAM
*
* HOWTO COMPILE
* gcc -o mysql_member mysql_member.c -I/usr/local/mysql/include/mysql \
* -L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm
* ______________________________________________________________________*/
//라이브러리 선언
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<mysql.h>
#include<sys/time.h>
//상수정의
#define YES 1
#define NO 0
#define MYSQL_HOST "localhost"
#define MYSQL_USER "root"
#define MYSQL_PWD ""
#define MYSQL_DB "work"
//쿼리 정의
#define SELECT_QUERY "SELECT idx, id, name, email FROM `member`"
#define INSERT_QUERY "INSERT INTO `member` ( `idx` , `id` , `name` , `email` ) VALUES ( '', '%s', '%s', '%s' )"
#define DELETE_QUERY "DELETE FROM `member` WHERE idx='%s'"
#define UPDATE_QUERY "UPDATE `member` SET `id` = '%s',`name` = '%s',`email` = '%s' WHERE `idx` = '%s'"
#define SEARCH_QUERY "SELECT idx, id, name, email FROM `member` WHERE name LIKE '%s'"
//변수정의
struct user {
char idx[20];
char id[20];
char name[20];
char email[50];
}member;
MYSQL_RES *res;
MYSQL_ROW row;
MYSQL *conn, mysql;
char qbuf[160]; //최대 쿼리의 사이즈 만큼 할당한다.
//함수원형
void conn_mysql(void);
void user_list(void);
void user_input(void);
void user_modify(void);
void user_del(void);
void user_search(void);
int continue_fun(void);
int display_menu(void);
//MAIN 함수
int main(){
//지역변수선언
int cont = YES;
//데이터 베이스를 초기화 해서 connection을 얻어 온다.
conn_mysql();
//메뉴 출력
while( cont == YES){
switch( display_menu()){
case '1' user_list();
break;
case '2' user_input();
break;
case '3' user_modify();
break;
case '4' user_del();
break;
case '5' user_search();
break;
case '6' printf("\n프로그램 종료 !\n");
cont = NO;
break;
default printf("\n\n메뉴중 1~6 사이의 번호를 선택해 주세요.");
break;
}//__end switch
}//__end while
//데이터 베이스의 결과를 메모리에서 해지한다.
mysql_free_result(res);
//데이터 베이스 연결을 닫는다.
mysql_close(conn);
return(0);
}
//함수선언
// 데이터 베이스 초기화 conn_mysql()
void conn_mysql(void){
mysql_init(&mysql);
conn = mysql_real_connect(&mysql,MYSQL_HOST,MYSQL_USER,MYSQL_PWD,MYSQL_DB,0,0,0);
if(conn == NULL){
fprintf(stderr,"데이터 베이스 연결 실패 %s\n",mysql_error(&mysql));
exit(1);
}
}
//사용자 리스트를 출력 user_list()
void user_list(void){
puts("___________________________________________________________________");
puts("idx ID 이름 이메일");
puts("-------------------------------------------------------------------");
//MYSQL에 질의
if((res = mysql_query(conn,SELECT_QUERY)) != NULL){
fprintf(stderr,"질의 실패 %s\n",mysql_error(conn));
exit(1);
}
//질의를 한 결과를 출력한다.
res = mysql_store_result(conn);
while((row = mysql_fetch_row(res)) != NULL){
printf("%-6s %-10s %-20s %-50s \n",row[0],row[1],row[2],row[3]);
}
}
//사용자 정보 입력 user_input()
void user_input(void){
puts("___________________________________________________________________");
puts(" 사용자 입력");
puts("-------------------------------------------------------------------");
printf(" 사용자 ID ");
fgets(member.id,sizeof(member.id),stdin);
member.id[strlen(member.id)-1]='\0';
printf(" 사용자 이름 ");
fgets(member.name,sizeof(member.name),stdin);
member.name[strlen(member.name)-1]='\0';
printf(" 사용자 이메일 ");
fgets(member.email,sizeof(member.email),stdin);
member.email[strlen(member.email)-1]='\0';
//입력 받은 데이터를 이용 쿼리를 생성
sprintf(qbuf,INSERT_QUERY,member.id,member.name,member.email);
if(mysql_query(conn,qbuf)){
fprintf(stderr,"질의 실패 %s\n",mysql_error(conn));
exit(1);
}
}
//사용자 정보 수정 user_modify()
void user_modify(void){
puts("___________________________________________________________________");
puts(" 사용자 수정");
puts("-------------------------------------------------------------------");
printf("수정의 원하는 idx ");
fgets(member.idx,sizeof(member.idx),stdin);
member.id[strlen(member.idx)-1]='\0';
printf(" 사용자 ID ");
fgets(member.id,sizeof(member.id),stdin);
member.id[strlen(member.id)-1]='\0';
printf(" 사용자 이름 ");
fgets(member.name,sizeof(member.name),stdin);
member.name[strlen(member.name)-1]='\0';
printf(" 사용자 이메일 ");
fgets(member.email,sizeof(member.email),stdin);
member.email[strlen(member.email)-1]='\0';
//입력 받은 데이터를 이용 쿼리를 생성
sprintf(qbuf,UPDATE_QUERY,member.id,member.name,member.email,member.idx);
if(mysql_query(conn,qbuf)){
fprintf(stderr,"질의 실패 %s\n",mysql_error(conn));
exit(1);
}
}
//사용자 정보 삭제 user_del()
void user_del(void){
puts("___________________________________________________________________");
puts(" 사용자 삭제");
puts("-------------------------------------------------------------------");
printf("삭제를 원하는 idx ");
fgets(member.idx,sizeof(member.idx),stdin);
member.id[strlen(member.idx)-1]='\0';
//입력 받은 데이터를 이용 쿼리를 생성
sprintf(qbuf,DELETE_QUERY,member.idx);
if(mysql_query(conn,qbuf)){
fprintf(stderr,"질의 실패 %s\n",mysql_error(conn));
exit(1);
}
}
//사용자 정보 검색 user_search()
void user_search(void){
puts("___________________________________________________________________");
puts(" 사용자 검색");
puts("-------------------------------------------------------------------");
printf("이름으로 검색 name ");
fgets(member.name,sizeof(member.name),stdin);
member.name[strlen(member.name)-1]='\0';
strcat(member.name,"%");
//입력 받은 데이터를 이용 쿼리를 생성
sprintf(qbuf,SEARCH_QUERY,member.name);
if(mysql_query(conn,qbuf)){
fprintf(stderr,"질의 실패 %s\n",mysql_error(conn));
exit(1);
}
//질의를 한 결과를 출력한다.
res = mysql_store_result(conn);
puts("");
puts("___________________________________________________________________");
puts("idx ID 이름 이메일");
puts("-------------------------------------------------------------------");
while((row = mysql_fetch_row(res)) != NULL){
printf("%-6s %-10s %-20s %-50s \n",row[0],row[1],row[2],row[3]);
}
}
//프로그램 진행 체크 함수 menu_continue()
int continue_fun(void){
char ch, buf[20];
do{
printf("\n계속 하시겠습니까 ? (Y)es/(N)o ");
fgets(buf,sizeof(buf),stdin);
ch = *buf;
}while(strchr("NnYy",ch) == NULL);
if(ch == 'n' || ch == 'N'){
return(NO);
}else{
return(YES);
}
}
//메뉴 선택 함수 display_menu()
int display_menu(void){
char ch, buf[20];
puts("");
puts(" MENU ");
puts("_______________");
puts("");
puts("1. 사용자 리스트");
puts("2. 사용자 입력 ");
puts("3. 사용자 수정 ");
puts("4. 사용자 삭제 ");
puts("5. 사용자 검색 ");
puts("6. 종료 ");
printf("\n\n 메뉴 선택 ");
fgets(buf,20,stdin);
ch = *buf;
return(ch);
}
댓글 달기