공-부/Homework
[JAVA] 자바 예제 - 은행 계좌 프로그램 작성하기
사랑짱
2021. 6. 2. 10:33
문제 : 은행 계좌 프로그램
아래 내용을 참고하여 은행 계좌 프로그램을 작성하시오.
( 출력문은 고객이 생성한 계좌의 종류에 따라 다르게 출력되어야 한다. )
문제해석
계좌를 생성함에 있어서 공통되는 부분을 Account클래스에 작성하고
이를 상속받아 계좌의 형태(대출, 예금, 적금)에 따른 기능과 내용을 작성한다.
문제 해결 과정
1. 각 계좌의 공통된 기능/내용과 각 계좌별로 추가되는 기능/내용을 구분한다.
2. 각 계좌에서 공통되는 기능/내용을 Account클래스에 작성한다.
3. 각 계좌에만 있는 기능/내용을 각 클래스에 작성한다.
4. 계좌생성클래스(AccountTest)에서 선택된 계좌가 생성되도록 작성한다.
@ Account.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
import java.util.Date;
import java.util.Calendar;
import java.text.SimpleDateFormat;;
public abstract class Account {
private String name; //고객명
private int amount; //금 액
private int term; //기 간(개월수로입력)
public Account(String name, int amount, int term) {
this.name = name;
this.amount = amount;
this.term = term;
}
public abstract void creatAccount();
public static String creationDate() {
SimpleDateFormat dtFormat = new SimpleDateFormat("yyyy-MM-dd");
Date day = new Date();
String today = dtFormat.format(day);
return today;
}
public String dueDate(int term) {
this.term = term;
SimpleDateFormat dtFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, term);
return dtFormat.format(cal.getTime());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
public int getTerm() {
return term;
}
public void setTerm(int term) {
this.term = term;
}
}
|
cs |
@ LoanAccount.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import java.text.DecimalFormat;
public class LoanAccount extends Account {
private static final double rate = 4.5;
public static int ano = 10000001;
public LoanAccount(String name, int amount, int term) {
super(name, amount, term);
}
@Override
public void creatAccount() {
StringBuffer sb = new StringBuffer();
DecimalFormat df = new DecimalFormat("###,###");
sb.append(String.valueOf(ano++));
sb.insert(4, "-");
System.out.println("-------");
System.out.println("계좌 생성");
System.out.println("-------");
System.out.println("계좌번호 : " + sb.toString());
System.out.println("고 객 명 : " + getName());
System.out.println("대츨금액 : " + df.format(getAmount()) + "원");
System.out.println("이 율 : " + rate + "%");
System.out.println("이 자 액 : " + getAmount()*rate/100 + "원");
System.out.println("대 출 일 : " + creationDate());
System.out.println("기 간 : " + getTerm() + "개월");
System.out.println("만 기 일 : " + dueDate(getTerm()));
System.out.println("월상환액 : " + repayment() + "원");
}
public double repayment() {
double result = ((getAmount() * rate/100) + getAmount())/getTerm();
return Math.floor(result); //버림
}
}
|
cs |
@ DepositAccount.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import java.text.DecimalFormat;
public class DepositAccount extends Account {
private static final double rate = 2.5;
public static int ano = 20000001;
public DepositAccount(String name, int amount, int term) {
super(name, amount, term);
}
@Override
public void creatAccount() {
StringBuffer sb = new StringBuffer();
DecimalFormat df = new DecimalFormat("###,###");
sb.append(String.valueOf(ano++));
sb.insert(4, "-");
System.out.println("-------");
System.out.println("계좌 생성");
System.out.println("-------");
System.out.println("계좌번호 : " + sb.toString());
System.out.println("고 객 명 : " + getName());
System.out.println("예 금 액 : " + df.format(getAmount()) + "원");
System.out.println("이 율 : " + rate + "%");
System.out.println("이 자 액 : " + getAmount()*rate/100 + "원");
System.out.println("예 금 일 : " + creationDate());
System.out.println("기 간 : " + getTerm() + "개월");
System.out.println("만 기 일 : " + dueDate(getTerm()));
System.out.println("만기금액 : " + maturity() + "원");
}
public double maturity() {
double result = getAmount() +(getAmount()*rate/100);
return Math.floor(result);
}
}
|
cs |
@ SavingsAccount.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
import java.text.DecimalFormat;
public class SavingsAccount extends Account {
private static final double rate = 1.5;
public static int ano = 30000001;
public SavingsAccount(String name, int amount, int term) {
super(name, amount, term);
}
@Override
public void creatAccount() {
StringBuffer sb = new StringBuffer();
DecimalFormat df = new DecimalFormat("###,###");
sb.append(String.valueOf(ano++));
sb.insert(4, "-");
System.out.println("-------");
System.out.println("계좌 생성");
System.out.println("-------");
System.out.println("계좌번호 : " + sb.toString());
System.out.println("고 객 명 : " + getName());
System.out.println("만기금액 : " + df.format(getAmount()) + "원");
System.out.println("이 율 : " + rate + "%");
System.out.println("이 자 액 : " + getAmount()*rate/100 + "원");
System.out.println("예 금 일 : " + creationDate());
System.out.println("기 간 : " + getTerm() + "개월");
System.out.println("만 기 일 : " + dueDate(getTerm()));
System.out.println("월적금액 : " + monthlyAmount() + "원");
System.out.println("만기금액 : " + maturity() + "원");
}
public double maturity() {
double result = getAmount() +(getAmount()*rate/100);
return Math.floor(result);
}
public int monthlyAmount() {
int result = getAmount()/getTerm();
return result;
}
}
|
cs |
@ AccountTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import java.text.DecimalFormat;
import java.util.Scanner;
public class AccountTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(true) {
System.out.println("---------------------------------------------");
System.out.println(" 1.대출계좌생성 | 2.예금계좌생성 | 3.적금계좌 생성 | 4.종료");
System.out.println("---------------------------------------------");
System.out.print("선택> ");
int n = scanner.nextInt();
if(n == 4) break;
System.out.print("이름> ");
String name = scanner.next();
System.out.print("금액> ");
int amount = scanner.nextInt();
System.out.print("기간(개월단위)> ");
int term = scanner.nextInt();
if(n == 1) {
LoanAccount holder = new LoanAccount(name, amount, term);
holder.creatAccount();
}else if(n == 2) {
DepositAccount holder = new DepositAccount(name, amount, term);
holder.creatAccount();
}else if(n == 3) {
SavingsAccount holder = new SavingsAccount(name, amount, term);
holder.creatAccount();
}else {
System.out.println("지원하지 않는 기능입니다.");
}
}
}
}
|
cs |