### 은행 계좌관리 프로그램
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()