Socket & Thread를 이용한 은행 입출금 프로그램







Server 프로그램

ServerBank 폴더 / serverbank 패키지

1. ServerBank 클래스(Main)


package serverbank;

import java.net.*;
import java.util.*;

public class ServerBank {

   
    public static void main(String[] args) {

        ServerSocket serverSocket = null;
 
        ArrayList<ClientInfo> client = null;
       
        client = new ArrayList<ClientInfo>();
        client.add(new ClientInfo(11, "조주희", 5000));
        client.add(new ClientInfo(22, "박선혜", 3000));
        client.add(new ClientInfo(33, "황혜정", 2000));
        client.add(new ClientInfo(44, "장민혜", 4000));
      
        try{
           
            serverSocket = new ServerSocket(9000);
           
            while(true) {
               
                Socket socket = serverSocket.accept();
                Thread thread = new ServerThread(socket, client);
                thread.start();
            }
           
        }
        catch(Exception e) {
           
            System.out.println(e.getMessage());
           
        }
    }

}





2. ClientInfo 클래스


package serverbank;

public class ClientInfo extends ServerBank{
   
    int account;
    String sname;
    int balance;

    ClientInfo(int account, String sname, int balance){
        this.account = account;
        this.sname = sname;
        this.balance = balance;
       
    }

}



3. ServerThread 클래스
package serverbank;

import java.net.*;
import java.util.*;
import java.io.*;

public class ServerThread extends Thread {
   
    static List<PrintWriter> list = new ArrayList<PrintWriter>();
   
    Socket socket;
    int account;
    String sname;
    int balance;
    int depomoney;
    int amount;
    String menu = "< 거래 메뉴 >    1. 예  금     2. 출  금     3. 예금 현황     4. 종  료        ▶ 메뉴번호를 입력해주세요 ";
    int menunum;
    boolean flag = true;
    String err = "잔액이 부족합니다.                                                             ";
   
    PrintWriter writer;
    ArrayList<ClientInfo> client;
  
    ServerThread(Socket socket, ArrayList<ClientInfo> client) {

        this.socket = socket;
        this.client = client;

        try {
            writer = new PrintWriter(socket.getOutputStream());
            list.add(writer);
           
        }
        catch(Exception e) {
            System.out.println(e.getMessage());
        }
    }
   
    public void run(){
       
        while(flag) {
           
            try {
               
                BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
               
                //계좌번호를 읽음
                account = Integer.parseInt(reader.readLine());
               
                //계좌번호, 이름, 잔액을 보내기 위해 검색
                Iterator it = client.iterator();
               
                while(it.hasNext()) {
                   
                    try {
                       
                        //ClientInfo 클래스에 한 고객을 객체로 만듬
                        ClientInfo out = (ClientInfo) it.next();
                       
                        //계좌번호를 비교함
                        if(out.account == account) {
                           
                            //계좌번호, 이름, 잔액을 보냄
                            writer.println("* 계좌번호 : " + out.account + " * 이름 : " + out.sname + " * 잔액 : " + out.balance);
                            writer.flush();
                           
                            flag = true;
                            while(flag) {
                               
                                //메뉴를 보냄
                                writer.println(menu);
                                writer.flush();
                               
                                //메뉴번호를 받음
                                menunum = Integer.parseInt(reader.readLine());
                               
                                //메뉴를 선택했을 때 내용
                                switch(menunum) {
                                   
                                    //입금 메뉴
                                    case 1:
                                       
                                        //입금액을 읽어옴
                                        depomoney = Integer.parseInt(reader.readLine());
                                       
                                        //잔액에 입금액을 더해줌
                                        out.balance += depomoney;
                                       
                                        writer.println("현재 잔액은 "+ out.balance+"원 입니다.");
                                        writer.flush();
                                       
                                        break;
                                       
                                    //출금 메뉴
                                    case 2:
                                       
                                        //출금액을 읽어옴
                                        amount = Integer.parseInt(reader.readLine());
                                       
                                        //출금액이 잔액보다 클 경우
                                        if(out.balance < amount) {
                                       
                                            //에러 메시지를 보냄
                                            writer.println(err+menu);
                                            writer.flush();
                                           
                                        }
                                           
                                        //그렇지 않을 경우 잔액에 출금액을 빼줌   
                                        else {
                                           
                                            out.balance -= amount;
                                            writer.println("현재 잔액은 "+ out.balance+"원 입니다.");
                                            writer.flush();
                                        }
                                       
                                        break;
                                       
                                    //예금현황 메뉴
                                    case 3:
                                       
                                        writer.println(out.account);
                                        writer.flush();
                                       
                                        writer.println(out.sname);
                                        writer.flush();
                                       
                                        writer.println(out.balance);
                                        writer.flush();
                               
                                        break;
                                       
                                    //1,2,3입력 받지 않은 경우 종료   
                                    default:
                                       
                                        flag = false;                             
                                }   
                               
                            }
                        }   
                    }
                    catch(Exception e) {
                        System.out.println(e.getMessage());
                    }
                }
            }
            catch(Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }



Client 프로그램

ClientBank 폴더 / clientbank 패키지

1. ClientBank 크래스 ( Main)


package clientbank;

import java.net.*;

public class ClientBank {
   
    public static void main(String[] args) {
       
        try {
           
            Socket socket = new Socket("127.0.0.1", 9000);
            Thread thread = new ClientThread(socket);
            thread.start();
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

}



2. ClientThread 클래스

package clientbank;

import java.net.*;
import java.io.*;

public class ClientThread extends Thread{  

    Socket socket;
    int account;
    String sname;
    int balance;
    int depomoney;
    int amount;
    String menu = null;
    int menunum;
    boolean flag = true;   
   
    ClientThread(Socket socket) {
        this.socket = socket;
    }
   
    public void run() {
       
       while(flag) {

           try{
           
                BufferedReader reader = new BufferedReader (new InputStreamReader(socket.getInputStream()));
                BufferedReader in = new BufferedReader (new InputStreamReader(System.in));
                PrintWriter writer = new PrintWriter(socket.getOutputStream());
           
                System.out.println("계좌번호를 입력해주세요");
               
                //계좌번호를 입력받음
                account = Integer.parseInt(in.readLine());
               
                //계좌번호를 보냄
                writer.println(account);
                writer.flush();
               
                // 계좌번호, 이름, 잔액을 읽음
                Object client = reader.readLine();
                System.out.println(client);   
                   
                flag = true;
                while(flag) {
                   
                    //메뉴를 읽음
                    menu = reader.readLine();
                    System.out.println(menu);
                   
                    //메뉴번호를 입력받음
                    menunum = Integer.parseInt(in.readLine());
                   
                    //메뉴번호를 보냄
                    writer.println(menunum);
                    writer.flush();
                   
                    //선택할 수 있는 메뉴 내용
                    switch(menunum) {
                       
                        //입금메뉴
                        case 1:
                           
                            //입금액을 입력받음
                            System.out.println("* 입금액 :");
                            depomoney = Integer.parseInt(in.readLine());
                           
                            //입금액을 보냄
                            writer.println(depomoney);
                            writer.flush();
                           
                            System.out.println(reader.readLine());
                            System.out.println("    ");
                           
                            break;
                           
                        //출금메뉴
                        case 2:
                           
                            //출금액을 입력받음
                            System.out.println("* 출금액 :");
                            amount = Integer.parseInt(in.readLine());
                           
                            //출금액을 보냄
                            writer.println(amount);
                            writer.flush();
                           
                            System.out.println(reader.readLine());
                            System.out.println("    ");
                           
                            break;
                           
                        //예금현황 메뉴
                        case 3:
                           
                            //계좌번호를 읽음
                            account = Integer.parseInt(reader.readLine());
                           
                            //이름을 읽음
                            sname = reader.readLine();
                           
                            //잔액을 읽음
                            balance = Integer.parseInt(reader.readLine());
                           
                            //예금현황 형식
                            System.out.println("-----------*예금 현황*------------");
                            System.out.println(" 계좌번호        이름         잔액 ");
                            System.out.println("    " + account + "         " + sname + "         " + balance);
                            System.out.println("---------------------------------");
                           
                            break;
                           
                        default:
                           
                            flag = false;
                    }
                   
                }              
           }
           catch(Exception e) {
           System.out.println(e.getMessage());
           } 
       }
    }
}

by 씩씩한아이 | 2009/02/11 18:13 | JAVA | 트랙백 | 덧글(0)

트랙백 주소 : http://jjh4777150.egloos.com/tb/2286426
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶