### 은행 계좌관리 프로그램

1. 클래스 구성
    - Account : 한 명의 고객의 계좌정보를 담아 관리할 목적으로 구현된 클래스
                멤버필드 : id(계좌번호), name(고객이름), balance(예금잔액)
                멤버메소드 : 판단에 의해 구현할 것
    - BankManager : 계좌정보를 이용하여 구현될 기능 담고있는 클래스
                    멤버필드: 판단에 의해 구현
                    멤버메소드: makeAccount() - 계좌개설 담당할 메서드
                                withdraw() - 출금처리 담당 메소드
                                deposit() - 입금처리를 담당할 메소드
                                check_id() - 계좌번호의 중복여부를 판단할 메소드
                                showAccount() - 전체고객의 계좌정보를 출력할 메소드
    - BankingSystem : 사용자와의인터페이스를 담당할 목적의 클래스
                      메버필드와 메소드는 판단에 의해 기술
2. 계좌번호는 사용자가 임의로 번호를 입력할 수 있도록 구현하되, 중복된 값이 있을 경우 에러 메시지 출력
3. 입금 및 출금 처리 시 계좌번호 먼저 묻고 해당 계좌의 존재유무에 의해 에러메시지 출력 또는 처리로직을 구현하도록 기술
4. 기타 조건은 주어진 입출력 형식에 맞게 구현
5. 둘 이상의 고객에 대한 정보를 담아서 관리 할 수 있도록 적당한 자료구조 활용, 또는 파일을 통한 입출력 가능
6. 모듈화(py 확장자 가진 파일 형태로 구현)하여 명령처리 가능하도록 구현
7. 기반 클래스 Account 는 제공하는 것을 사용하여도 좋고 본인 판단에 의해 새롭게 구현해도 됨

 

class Account: # 개인 계좌 관리
    def __init__(self):
        self.user = input("계좌번호 = ")
        self.name = input("고객이름 = ")
        self.balance = input("예금금액 = ")
        
    def disp(self):
        print("{0} : {1} : {2}".format(self.user, self.name, self.balance))
        
    def getid(self):
        return self.user
    
    def getBalance(self):
        return self.balance
    
        
class BankManager(Account):   # 여러 계좌 관리

    def one_user(self,user): # 한 고객의 정보 얻기 위해
        userlist = ""
        count = -1
        if self.check_user(user) == False: # 아이디 존재할 때
            try :
                f= open("account.txt","r")
            except FileNotFoundError as e: #
                pass
            else:
                for line in f:
                    count+=1
                    if user == line.split(",")[0]:
                        userlist= line
                        break
            finally:
                f.close()
        return count,userlist # 유저 정보 리턴
    
    def check_user(self,user): # - 계좌번호의 중복여부를 판단할 메소드
        check=True
        try :
            f= open("account.txt","r")
        except FileNotFoundError as e: #
            pass
        else:
            for line in f:
                if user == line.split(",")[0]: # 아이디 중복되면 break
                    check = False
                    break
        finally:
            f.close()
        return check
    
    def makeAccount(self):
        print("\n==== 계좌등록 ====")
        super().__init__()
        super().disp()
        result = self.check_user(super().getid())
        
        if result: # 참일때 txt파일에 저장
            try :
                f= open("account.txt","a")
            except FileNotFoundError as e: # 파일 존재하지 않을 때 새로 만들기
                f= open("account.txt","w") 
            finally:
                f.write(self.user+","+self.name+","+self.balance+"\n")
                f.close()
        else : # 거짓일 때 중복됬다고 알리기
            print("id가 중복됩니다. 다시 입력해주세요")
        print("===================")
        
        
    def showAccount(self): # - 전체고객의 계좌정보를 출력할 메소드
        userlist = []
        try :
            f= open("account.txt","r")
        except FileNotFoundError as e: #
            print("고객이 없습니다,")
        else:
            for line in f:
                userlist.append(line)
        finally:
            f.close()
        return userlist
        
    
class BankingSystem(BankManager):
    num = 0
    def __init__(self,num):
        self.num=int(num)
        
    def controler(self):
        if self.num == 1:
            super().makeAccount()
        elif self.num == 2:
            self.printdeposit()
        elif self.num == 3:
            self.printwithdraw()
        elif self.num == 4:
            self.printshow()
       
            
    def printwithdraw(self):
        print("==== 출금처리====") #- 출금처리 담당 메소드
        user = input("계좌번호 = ")
        count,userlist = self.one_user(user)
        print("===================")
        if userlist != "":
            user,username,userbalance = userlist.split(',')
            print("{0} : {1} : {2}".format(user,username,userbalance))
            print("===================\n")
        
            try:
                price = int(input("출금금액 = "))
                
            except ValueError as e:
                print("잘못입력하셨습니다")
            else :
                if (int(userbalance)-int(price)) < 0:
                    print("고객님 계좌의 잔액이 부족합니다.")
                else :
                    self.change_draw(user,username,int(userbalance)-price,count)
                    print("출금처리가 완료되었습니다.")
        else :
            print("일치하는 계좌번호가 존재하지 않습니다.")
        print("===================")
        
    def change_draw(self,user,username,userbalance,count):
        f = open("account.txt","r+")
        for i in range(0,count):
            f.readline()
        f.seek(f.tell(),0)
        f.writelines(user+","+username+","+str(userbalance)+"\n")
        f.close()
        
    def change_deposit(self,user,username,userbalance,count):
        f = open("account.txt","r+")
        for i in range(0,count):
            f.readline()
        f.seek(f.tell(),0)
        f.writelines(user+","+username+","+str(userbalance)+"\n")
        f.close()
        
    def printdeposit(self):
        print("==== 입금처리====") #- 입금처리 담당 메소드
        user = input("계좌번호 = ")
        count,userlist = self.one_user(user)
        print("===================")
        if userlist != "":
            user,username,userbalance = userlist.split(',')
            print("{0} : {1} : {2}".format(user,username,userbalance))
            price = 0
            print("===================\n")
            try:
                price = int(input("입금금액 = "))
            except ValueError as e:
                print("잘못입력하셨습니다")
            else :
                self.change_deposit(user,username,int(userbalance)+price,count)
                print("입금처리가 완료되었습니다.")
        else :
            print("일치하는 계좌번호가 존재하지 않습니다.")
        print("===================")
        
    def printshow(self):
        print("==== 전체고객====") #- 전체고객 조회 메소드
        userlist = super().showAccount()
        for i in range(0,len(userlist)):
            a,b,c = userlist[i].split(",")
            print("{0} : {1} : {2}".format(a, b, c),end="")
        print("===================")
      
    

if __name__ == "__main__":
    while True:
        print("==== Bank Menu ====")
        print("1. 계좌개설")
        print("2. 입금처리")
        print("3. 출금처리")
        print("4. 전체고객 잔액현황")
        print("5. 프로그램 종료")
        print("===================")
        try:
            num = int(input("선택 = "))
        except ValueError as e:
            print("잘못입력하셨습니다")
        
        else :
            if num == 5:
                break
            else :
                b = BankingSystem(num)
                b.controler()
        

'Python' 카테고리의 다른 글

급여관리.py  (0) 2019.07.25
숫자야구파일.py  (0) 2019.07.25
주소록 관리 프로그램.py  (0) 2019.07.24
슬라이스  (0) 2019.07.10
시퀀스 자료형  (0) 2019.07.10

+ Recent posts