은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB...

45
은은 은은 은은 DB -3 은 - 32011771 은은은 32011405 은은은

description

은행 고객 관리 DB Account table 고객 ID( 외래키 ), 고개계좌 ( 기본키 ), 현재금액

Transcript of 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB...

Page 1: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

은행 고객 관리 DB-3 조 -

32011771 이영철32011405 강민재

Page 2: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

은행 고객 관리 DB테이블구조

-Customer table

고객 ID( 기본키 ), 고객이름 , 고객등급 ( 트리거 )

Page 3: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

은행 고객 관리 DB

Account table

고객 ID( 외래키 ), 고개계좌 ( 기본키 ),현재금액

Page 4: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

CusInfo table

고객 ID( 외래키 ), 고객계좌 ( 외래키 ),주민등록번호 , 주소 , 전화

은행 고객 관리 DB

Page 5: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

PROGRAM STRUCTURE

패 스 워 드 확 인보 안

make_acc()계 정 생 성

depos it()예 금

payment()출 금

trans fer()계 좌 이 체

balance()잔 액 확 인

view Info ()고 객 정 보 보 기

ESQL

DB은 행 고 객 관 리

Page 6: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

현재 테이블에 입력된 값

Page 7: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

실행화면 1프로그램시작화면… for(j=0;j<3;j++) {

printf(" 관리자 확인 , 패스워드 입력 : ");

for(i=0;i<4;i++) { pass[i]=getch(); printf("*"); } printf("\n"); if(strncmp(password1,pass,4)==0) break;

cnt+=1; if(cnt==3) exit(1);

}

Page 8: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

실행화면 2입금화면

Page 9: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

실행화면 3출금화면

Page 10: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

실행화면 4잔액확인

Page 11: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

실행화면 5계좌이체

Page 12: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

실행화면 6EXEC SQL DECLARE viewInfo CURSOR FOR

SELECT C.id, A.accountNum, C.name, CI.jumin, CI.address, CI.phone, A.money FROM Customer C,Account A,CusInfo CIWHERE A.accountNum = CI.accountNum AND C.id = A.idORDER BY C.name,C.id;

EXEC SQL OPEN viewInfo;

printf("================================== 고객 정보 ====================================\n");printf("ID 이름 계좌번호 주민등록번호 주소 전화번호 잔액 (\\)\n");printf("===============================================================================\n");

while(1) {EXEC SQL FETCH viewInfo INTO :id, :name, :accountNum, :jumin, :address, :phone, :money;

if(NO_MORE_TUPLES) {break;}printf("%2d %8s %-s %s %s %s %d\n",id, name, accountNum, jumin, address, phone, money);}EXEC SQL CLOSE viewInfo;

Page 13: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

실행화면 6고객정보보기 (CURSOR)

Page 14: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

뷰 (view) 생성

Page 15: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

트리거 (TRIGGER)

Page 16: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

트리거 (TRIGGER)- 계속

Page 17: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

트랜잭션 (TRANSACTION)1

if(money>input_money) { money-=input_money;

EXEC SQL UPDATE Account SET money = :money WHERE accountNum = :search_acc;

EXEC SQL COMMIT TRAN;

printf("\n** 출금 성공 **\n");

Page 18: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

트랜잭션 (TRANSACTION)1

printf("┌──────────────────┐\n");printf("│ 현재시각 : %s",asctime(ptr));printf("│ 현재 남은 잔액 : (\\) %-15ld│\n",money);printf("└──────────────────┘

\n");

}else {

printf("\n** 잔액 부족 . 출금 실패 **\n"); EXEC SQL ROLLBACK TRAN;

}

Page 19: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

트랜잭션 1 실행화면

현재 잔액보다 많은 금액을 출금액에입력하게 되면 트랜잭션에 의해 실행이취소된다 .

Page 20: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

트랜잭션 (TRANSACTION)2

if(mymoney>input_money) {mymoney-=input_money;money+=input_money;EXEC SQL COMMIT TRAN;EXEC SQL UPDATE Account SET money=:mymoney WHERE accountNum=:self_acc;EXEC SQL UPDATE Account SET money=:money WHERE accountNum=:search_acc;printf("\n** 계좌이체 성공 **\n");

Page 21: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

트랜잭션 (TRANSACTION)2

printf("┌─────────────────────┐\n");printf("│%-8s 님의 현재 잔액 : (\\) %-11ld│\n",myname,mymoney); printf("│%-8s 님의 현재 잔액 : (\\) %-11ld│\n",name,money);printf("└─────────────────────┘\n");}else {printf("** 잔액 부족 , 계좌이체 실패 .**\n"); EXEC SQL ROLLBACK TRAN; }

Page 22: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

트랜잭션 2 실행화면

이체할 계좌에 남아있는 금액보다 많은 금액을이체하려고 하기때문에 트랜잭션에 의해 실행이 취소된다 .

Page 23: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

테이블 생성 코드CREATE TABLE Customer (

id int NOT NULL,name char(10),grade char(2),UNIQUE (id),PRIMARY KEY (id)

);

Page 24: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

테이블 생성 코드CREATE TABLE Account (

id int,accountNum char(12) NOT NULL,money integer DEFAULT 0,UNIQUE(accountNum),PRIMARY KEY (accountNum),FOREIGN KEY (id) REFERENCES Customer(id)--ON DELETE SET NULL

);

Page 25: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

테이블 생성 코드CREATE TABLE CusInfo (

id int,accountNum char(12),jumin char(13),address varchar(30),phone char(11)UNIQUE(jumin),FOREIGN KEY (accountNum) REFERENCES Account(accountNum)--ON DELETE SET NULLFOREIGN KEY (id) REFERENCES Customer(id)

);

Page 26: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

뷰 생성 코드CREATE VIEW viewInfo (id, name, accountN

um, jumin, address, phone, money) ASSELECT C.id, C.name, A.accountNum, CI.jumin, CI.address, CI.phone, A.money FROM Customer C,Account A,CusInfo CIWHERE A.accountNum = CI.accountNum AND C.id = A.id

Page 27: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

트리거 생성 코드CREATE TRIGGER superior_customer ON Account

FOR UPDATEASDECLARE @id int

SELECT @id = idFROM AccountWHERE money >= 10000

beginUPDATE Customer SET grade = 's'WHERE id=@idend

Page 28: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

ESQL-C 코드#include <stdio.h> #include <string.h>#include <stdlib.h>#include <conio.h> #include <time.h>#define MAX 100

#define NO_SQL_ERROR (SQLCODE == 0)#define NO_MORE_TUPLES (SQLCODE == 100)

char password1[5]="1234";static int rem=0;

int menu(); // 메뉴출력함수 void make_acc(); // 계정생성함수 void deposit(); // 예금 함수 void payment(); // 출금 함수 void transfer(); // 타인의 계좌에 송금함수void balance(); // 잔액 확인 void viewInfo(); // 고객정보 보기

Page 29: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

ESQL-C 코드void main() {

int j,i;char pass[4];int cnt=0;

EXEC SQL BEGIN DECLARE SECTION;char dbname[6]="BANK3", user[3]="sa";EXEC SQL END DECLARE SECTION;

EXEC SQL CONNECT TO :dbname USER :user;

for(j=0;j<3;j++) {printf(" 관리자 확인 , 패스워드 입력 : ");for(i=0;i<4;i++) {pass[i]=getch();printf("*");}printf("\n");if(strncmp(password1,pass,4)==0)break;cnt+=1;if(cnt==3) exit(1);}

if(NO_SQL_ERROR)printf(" 은행 데이터베이스가 연결 되었습니다 .\n",dbname);else {printf(" 에러가 발생했습니다 ( 에러코드 : %ld)\n",SQLCODE);exit(1);}

Page 30: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

ESQL-C 코드while(1) {

int i=menu(); switch(i) { case 1: make_acc(); break; case 2: deposit(); break; case 3: payment();break;case 4:balance();break;case 5: transfer(); break; case 6:viewInfo();break;case 7: exit(0); }}EXEC SQL DISCONNECT CURRENT;

}

Page 31: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

ESQL-C 코드int menu() {

int a;printf("\n- 은행 고객관리 데이터베이스 -"); printf("\n 아래의 작업을 선택하시오 .\n"); printf("\n①. 계정생성 (Make Account)\n"); printf("②. 예금하기 (Make Deposit)\n"); printf("③. 출금하기 (Make Withdrawal)\n"); printf("④. 잔액확인 (Check Balance)\n"); printf("⑤. 송금하기 (Send Money)\n"); printf("⑥. 정보보기 (View All Members)\n");printf("⑦. 종료하기 (Exit)\n\n");printf(" 선택 (1-7) : "); scanf("%d",&a);fflush(stdin);return a;

}

Page 32: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

ESQL-C 코드oid make_acc() { char ch;

int i;FILE *Cnt;

EXEC SQL BEGIN DECLARE SECTION;char name[10], jumin[14], address[30], phone[11], accountNum[13];int money=0;int id=0;

EXEC SQL END DECLARE SECTION;

for(i=rem;i<MAX;i++) {

id = rem+1;

printf("[%d] 번째 고객의 실명을 입력 ( 입력취소시 ENTER 입력 ) : ",i+1); gets(name);

if(strlen(name)==0) {printf(" 데이터 입력을 취소함 .\n");break; // 이름에다 공백을 입력하면 빠져나감 .

}

Page 33: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

ESQL-C 코드printf("[%d] 번째 고객의 주민 등록 번호를 입력 : ",i+1);

gets(jumin);

printf("[%d] 번째 고객의 주소를 입력 : ",i+1); gets(address);

printf("[%d] 번째 고객의 전화 번호를 입력 : ",i+1); gets(phone);

printf("[%d] 번째 고객의 계좌번호를 입력 : ",i+1); gets(accountNum);

printf("[%d] 번째 고객의 처음 입금할 금액을 입력 ( 단위 :\\) : ",i+1); scanf("%d",&money); fflush(stdin);

rem++;

printf(" 위 사실과 동일 합니까 ?(y/n) : ");scanf("%c",&ch); fflush(stdin);

if(ch =='n' || ch == 'N') {rem--;break;

}

Page 34: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

ESQL-C 코드EXEC SQL INSERT INTO Customer(id,name) VALUES(:id,:name);

if(!NO_SQL_ERROR) {printf(" 고객 테이블 입력시 에러가 발생했습니다 .\n");exit(1);}

EXEC SQL INSERT INTO Account(id,accountNum,money) VALUES(:id,:accountNum,:money);if(!NO_SQL_ERROR) {printf(" 계좌 테이블 입력시 에러가 발생했습니다 .\n");exit(1);}

EXEC SQL INSERT INTO CusInfo(id,accountNum,jumin,address,phone) VALUES(:id,:accountNum,:jumin,:address,:phone);if(!NO_SQL_ERROR) {printf(" 고객 정보 테이블 입력시 에러가 발생했습니다 .\n");exit(1);}

printf("\n");

Cnt=fopen("Cnt","w"); // 정보를 입력받은 다음부터 저장 가능하도록fwrite(&rem,sizeof(int),1,Cnt); //count 변수를 파일로 저장한다 .fclose(Cnt);

}

}

Page 35: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

ESQL-C 코드void deposit() {

int i;for(i=0;i<1;i++) {

EXEC SQL BEGIN DECLARE SECTION;char search_acc[13];char name[10],jumin[14];int money,input_money;EXEC SQL END DECLARE SECTION;

struct tm *ptr;time_t lt=time(NULL);ptr=localtime(&lt);

printf("\n 계좌 번호 입력 : "); gets(search_acc);

EXEC SQL SELECT C.name, CI.jumin, A.moneyINTO :name, :jumin, :moneyFROM Customer C,Account A,CusInfo CIWHERE CI.accountNum = :search_acc AND A.accountNum = :search_acc AND C.id=CI.id;

if(NO_MORE_TUPLES) {printf("** 없는 계좌번호입니다 **\n");break;}

Page 36: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

ESQL-C 코드printf("\n");

printf("┌──────────────────┐\n");printf("│ 성명 : %-29s│\n",name);printf("│ 주민등록번호 : %-21s│\n",jumin);printf("│ 현재시각 : %s",asctime(ptr));printf("│ 현재 남은 잔액 : (\\) %-15ld│\n",money);printf("└──────────────────┘\n");printf("\n 입금할 금액 : ");scanf("%d",&input_money);

money+=input_money;

EXEC SQL UPDATE Account SET money = :money WHERE accountNum = :search_acc;

printf("\n** 입금 성공 **\n");printf("┌──────────────────┐\n");printf("│ 현재시각 : %s",asctime(ptr));printf("│ 현재 남은 잔액 : (\\) %-15ld│\n",money);printf("└──────────────────┘\n");}

}

Page 37: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

ESQL-C 코드void payment() {

int i;for(i=0;i<1;i++) {

EXEC SQL BEGIN DECLARE SECTION;char search_acc[13];char name[10],jumin[14];int money,input_money;EXEC SQL END DECLARE SECTION;

struct tm *ptr;time_t lt=time(NULL);ptr=localtime(&lt);

printf("\n 계좌 번호 입력 : "); gets(search_acc); fflush(stdin);

EXEC SQL SELECT C.name, CI.jumin, A.moneyINTO :name, :jumin, :moneyFROM Customer C,Account A,CusInfo CIWHERE CI.accountNum = :search_acc AND A.accountNum = :search_acc AND C.id=CI.id;

if(NO_MORE_TUPLES) {printf("** 없는 계좌번호입니다 **\n");break;}

Page 38: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

ESQL-C 코드printf("\n");

printf("\n");printf("┌──────────────────┐\n");printf("│ 성명 : %-29s│\n",name);printf("│ 주민등록번호 : %-21s│\n",jumin);printf("│ 현재시각 : %s",asctime(ptr));printf("│ 현재 남은 잔액 : (\\) %-15ld│\n",money);printf("└──────────────────┘\n");

printf("\n 출금할 금액 : "); scanf("%ld",&input_money);

if(money>input_money) { money-=input_money;

EXEC SQL UPDATE Account SET money = :money WHERE accountNum = :search_acc;

EXEC SQL COMMIT TRAN;

printf("\n** 출금 성공 **\n");printf("┌──────────────────┐\n");printf("│ 현재시각 : %s",asctime(ptr));printf("│ 현재 남은 잔액 : (\\) %-15ld│\n",money);printf("└──────────────────┘\n");

}else {printf("\n** 잔액 부족 . 출금 실패 **\n"); EXEC SQL ROLLBACK TRAN;}}

}

Page 39: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

ESQL-C 코드void transfer() {

int i;for(i=0;i<1;i++) {EXEC SQL BEGIN DECLARE SECTION;char search_acc[13],self_acc[13];char name[10],myname[10],jumin[14],myjumin[14];int money,mymoney,input_money;EXEC SQL END DECLARE SECTION;

struct tm *ptr;time_t lt=time(NULL);ptr=localtime(&lt);

printf(" 이체받을 계좌번호 입력 : "); gets(search_acc);

EXEC SQL SELECT C.name, CI.jumin, A.moneyINTO :name, :jumin, :moneyFROM Customer C,Account A,CusInfo CIWHERE CI.accountNum = :search_acc AND A.accountNum = :search_acc AND C.id=CI.id;

if(NO_MORE_TUPLES) {printf("** 없는 계좌번호입니다 **\n");break;}

Page 40: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

ESQL-C 코드printf("┌────────────────────┐\n");

printf("│ 이체받을 고객의 성명 : %-17s│\n",name); printf("│ 주민등록번호 : %-25s│\n",jumin);printf("│ 현재 시각 : %s",asctime(ptr));printf("│ 현재 남은 잔액 : (\\) %-19ld│\n",money);printf("└────────────────────┘");printf("\n 이체할 고객의 계좌번호를 입력 : "); gets(self_acc);

EXEC SQL SELECT C.name, CI.jumin, A.moneyINTO :myname, :myjumin, :mymoneyFROM Customer C,Account A,CusInfo CIWHERE CI.accountNum = :self_acc AND A.accountNum = :self_acc AND C.id=CI.id;

if(NO_MORE_TUPLES) {printf("** 없는 계좌번호입니다 **\n");break;}

Page 41: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

ESQL-C 코드printf("┌────────────────────┐\n");

printf("│ 이체할 고객의 성명 : %-18s │\n",myname); printf("│ 주민등록번호 : %-25s│\n",myjumin);printf("│ 현재 시각 : %s",asctime(ptr)); printf("│ 현재 남은 잔액 : (\\) %-19ld│\n",mymoney);printf("└────────────────────┘");printf("\n 이체할 금액 입력 (\\) : "); scanf("%d",&input_money);

if(mymoney>input_money) {mymoney-=input_money;money+=input_money;EXEC SQL COMMIT TRAN;EXEC SQL UPDATE Account SET money=:mymoney WHERE accountNum=:self_acc;EXEC SQL UPDATE Account SET money=:money WHERE accountNum=:search_acc;

printf("\n** 계좌이체 성공 **\n");printf("┌─────────────────────┐\n");printf("│%-8s 님의 현재 잔액 : (\\) %-11ld│\n",myname,mymoney); printf("│%-8s 님의 현재 잔액 : (\\) %-11ld│\n",name,money);printf("└─────────────────────┘\n");}else {printf("** 잔액 부족 , 계좌이체 실패 .**\n"); EXEC SQL ROLLBACK TRAN;} }

}

Page 42: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

ESQL-C 코드void balance() {

int i;for(i=0;i<1;i++) {

EXEC SQL BEGIN DECLARE SECTION;char search_acc[13];char name[10],jumin[14];int money=0;EXEC SQL END DECLARE SECTION;

struct tm *ptr;time_t lt=time(NULL);ptr=localtime(&lt);

printf("\n 잔액 확인 계좌번호 입력 : ");gets(search_acc);

EXEC SQL SELECT C.name, CI.jumin, A.moneyINTO :name, :jumin, :moneyFROM Customer C,Account A,CusInfo CIWHERE CI.accountNum = :search_acc AND A.accountNum = :search_acc AND C.id=CI.id;

Page 43: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

ESQL-C 코드if(NO_MORE_TUPLES) {printf("** 없는 계좌번호입니다 **\n");break;}

printf("\n");printf("┌──────────────────┐\n");printf("│ 성명 : %-29s│\n",name);printf("│ 주민등록번호 : %-21s│\n",jumin);printf("│ 현재시각 : %s",asctime(ptr));printf("│ 현재 남은 잔액 : (\\) %-15ld│\n",money);printf("└──────────────────┘\n");}

}

Page 44: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

ESQL-C 코드void viewInfo() {

EXEC SQL BEGIN DECLARE SECTION;char name[10],jumin[14],address[20],phone[11],accountNum[13];int money,id;

EXEC SQL END DECLARE SECTION;

EXEC SQL DECLARE viewInfo CURSOR FORSELECT C.id, A.accountNum, C.name, CI.jumin, CI.address, CI.phon

e, A.money FROM Customer C,Account A,CusInfo CIWHERE A.accountNum = CI.accountNum AND C.id = A.idORDER BY C.name,C.id;

EXEC SQL OPEN viewInfo;

Page 45: 은행 고객 관리 DB -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름, 고객등급 (

ESQL-C 코드printf("================================== 고객 정보 =====================

===============\n");printf("ID 이름 계좌번호 주민등록번호 주소 전화번호 잔액 (\\)\n");printf("===============================================================================\n");

while(1) {EXEC SQL FETCH viewInfo INTO :id, :name, :accountNum, :jumin, :address, :phone, :money;

if(NO_MORE_TUPLES) {break;}printf("%2d %8s %-s %s %s %s %d\n",id, name, accountNum, jumin, address, phone, money);}EXEC SQL CLOSE viewInfo;

}