은행 고객 관리
This presentation is the property of its rightful owner.
Sponsored Links
1 / 45

은행 고객 관리 DB PowerPoint PPT Presentation


  • 189 Views
  • Uploaded on
  • Presentation posted in: General

은행 고객 관리 DB. -3 조 - 32011771 이영철 32011405 강민재. 은행 고객 관리 DB. 테이블구조 -Customer table 고객 ID( 기본키 ), 고객이름 , 고객등급 ( 트리거 ). 은행 고객 관리 DB. Account table 고객 ID( 외래키 ), 고개계좌 ( 기본키 ), 현재금액. 은행 고객 관리 DB. CusInfo table 고객 ID( 외래키 ), 고객계좌 ( 외래키 ), 주민등록번호 , 주소 , 전화. PROGRAM STRUCTURE.

Download Presentation

은행 고객 관리 DB

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Db

은행 고객 관리 DB

-3조-

32011771 이영철

32011405 강민재


Db

은행 고객 관리 DB

  • 테이블구조

    • -Customer table

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


Db

은행 고객 관리 DB

  • Account table

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


Db

은행 고객 관리 DB

  • CusInfo table

  • 고객ID(외래키),고객계좌(외래키),

  • 주민등록번호,주소,전화


Program structure

PROGRAM STRUCTURE


Db

현재 테이블에 입력된 값


Db

실행화면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);

  • }


Db

실행화면2

  • 입금화면


Db

실행화면3

  • 출금화면


Db

실행화면4

  • 잔액확인


Db

실행화면5

  • 계좌이체


Db

실행화면6

  • EXEC 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 CI

  • WHERE A.accountNum = CI.accountNum AND C.id = A.id

  • ORDER 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;


Db

실행화면6

  • 고객정보보기(CURSOR)


Db

뷰(view) 생성


Trigger

트리거(TRIGGER)


Trigger1

트리거(TRIGGER)-계속


Transaction 1

트랜잭션(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");


Transaction 11

트랜잭션(TRANSACTION)1

  • printf("┌──────────────────┐\n");

  • printf("│현재시각 : %s",asctime(ptr));

  • printf("│현재 남은 잔액 : (\\) %-15ld│\n",money);

  • printf("└──────────────────┘\n");

  • }

  • else {

  • printf("\n**잔액 부족. 출금 실패**\n");

  • EXEC SQL ROLLBACK TRAN;

  • }


Db

트랜잭션1 실행화면

  • 현재 잔액보다 많은 금액을 출금액에

  • 입력하게 되면 트랜잭션에 의해 실행이

  • 취소된다.


Transaction 2

트랜잭션(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");


Transaction 21

트랜잭션(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;}


Db

트랜잭션2 실행화면

  • 이체할 계좌에 남아있는 금액보다 많은 금액을

  • 이체하려고 하기때문에 트랜잭션에 의해 실행

  • 이 취소된다.


Db

테이블 생성 코드

  • CREATE TABLE Customer (

  • id int NOT NULL,

  • name char(10),

  • grade char(2),

  • UNIQUE (id),

  • PRIMARY KEY (id)

  • );


Db

테이블 생성 코드

  • 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

  • );


Db

테이블 생성 코드

  • 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 NULL

  • FOREIGN KEY (id) REFERENCES Customer(id)

  • );


Db

뷰 생성 코드

  • CREATE VIEW viewInfo (id, name, accountNum, jumin, address, phone, money) AS

  • SELECT C.id, C.name, A.accountNum, CI.jumin, CI.address, CI.phone, A.money

  • FROM Customer C,Account A,CusInfo CI

  • WHERE A.accountNum = CI.accountNum AND C.id = A.id


Db

트리거 생성 코드

  • CREATE TRIGGER superior_customer ON Account

  • FOR UPDATE

  • AS

  • DECLARE @id int

  • SELECT @id = id

  • FROM Account

  • WHERE money >= 10000

  • begin

  • UPDATE Customer

  • SET grade = 's'

  • WHERE [email protected]

  • end


Esql c

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();//고객정보 보기


Esql c1

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);

  • }


Esql c2

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;

  • }


Esql c3

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;

  • }


Esql c4

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;//이름에다 공백을 입력하면 빠져나감.

  • }


Esql c5

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;

  • }


Esql c6

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);

  • }

  • }


Esql c7

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.money

  • INTO :name, :jumin, :money

  • FROM Customer C,Account A,CusInfo CI

  • WHERE CI.accountNum = :search_acc AND A.accountNum = :search_acc AND C.id=CI.id;

  • if(NO_MORE_TUPLES) {

  • printf("**없는 계좌번호입니다**\n");

  • break;

  • }


Esql c8

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");

  • }

  • }


Esql c9

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.money

  • INTO :name, :jumin, :money

  • FROM Customer C,Account A,CusInfo CI

  • WHERE CI.accountNum = :search_acc AND A.accountNum = :search_acc AND C.id=CI.id;

  • if(NO_MORE_TUPLES) {

  • printf("**없는 계좌번호입니다**\n");

  • break;

  • }


Esql c10

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;

  • }

  • }

  • }


Esql c11

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.money

  • INTO :name, :jumin, :money

  • FROM Customer C,Account A,CusInfo CI

  • WHERE CI.accountNum = :search_acc AND A.accountNum = :search_acc AND C.id=CI.id;

  • if(NO_MORE_TUPLES) {

  • printf("**없는 계좌번호입니다**\n");

  • break;

  • }


Esql c12

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.money

  • INTO :myname, :myjumin, :mymoney

  • FROM Customer C,Account A,CusInfo CI

  • WHERE CI.accountNum = :self_acc AND A.accountNum = :self_acc AND C.id=CI.id;

  • if(NO_MORE_TUPLES) {

  • printf("**없는 계좌번호입니다**\n");

  • break;

  • }


Esql c13

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;

  • }

  • }

  • }


Esql c14

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.money

  • INTO :name, :jumin, :money

  • FROM Customer C,Account A,CusInfo CI

  • WHERE CI.accountNum = :search_acc AND A.accountNum = :search_acc AND C.id=CI.id;


Esql c15

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");

  • }

  • }


Esql c16

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 FOR

  • SELECT C.id, A.accountNum, C.name, CI.jumin, CI.address, CI.phone, A.money

  • FROM Customer C,Account A,CusInfo CI

  • WHERE A.accountNum = CI.accountNum AND C.id = A.id

  • ORDER BY C.name,C.id;

  • EXEC SQL OPEN viewInfo;


Esql c17

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;

  • }


  • Login