문제 )) 객체지향 개념을 살려서 스터디관리 프로그램 만들기
이미지대로 스터디원의 정보, 참여내역(벌금 차감), 벌금내역 조회, 스터디 관리내역 조회, 스터디 탈퇴 까지
객체지향 개념을 적용하여 프로그래밍하기가 목적이었다.
package study;
import java.util.Scanner;
public class MemberVo {
private String member_no;
private String name;
private String joinDT;
private String deposit;
public void insert(String member_no) {
Scanner sc = new Scanner(System.in);
this.setMember_no(member_no);
System.out.print("\n이름 : ");
this.setName(sc.nextLine());
System.out.print("보증금 : ");
this.setDeposit(sc.nextLine());
System.out.print("가입날짜 : ");
this.setJoinDT(sc.nextLine());
System.out.println();
}
public String getMember_no() {
return member_no;
}
public void setMember_no(String member_no) {
this.member_no = member_no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJoinDT() {
return joinDT;
}
public void setJoinDT(String joinDT) {
this.joinDT = joinDT;
}
public String getDeposit() {
return deposit;
}
public void setDeposit(String deposit) {
this.deposit = deposit;
}
}
1. 기본이 되는 회원정보를 담을 클래스를 설계해주고,
이를 상속받는 벌금 등등의 내역을 관리해줄 클래스를 만들어서 회원 과 스터디 관리부분을 분리하였다.
package study;
import java.util.Scanner;
public class StudyManager extends MemberVo implements FineList{
private String studyDT;
private String chapter;
private String report;
private String mid;
private String end;
private int deadValue = 2500;
private int balance = 0;
public void depositBalance(int count, StudyManager svo) {
int balance = 0;
balance = Integer.parseInt(svo.getDeposit());
balance -= svo.getDeadValue() * count;
svo.setBalance(balance);
}
@Override
public void insert(String member_no) {
Scanner sc = new Scanner(System.in);
int count = 0;
System.out.println("이름 : " + this.getName());
System.out.print("스터디날짜 : ");
this.setStudyDT(sc.nextLine());
System.out.print("챕터정리 : ");
this.setChapter(sc.nextLine());
System.out.print("과제 : ");
this.setReport(sc.nextLine());
System.out.print("중간점검참석 : ");
this.setMid(sc.nextLine());
System.out.print("1주일점검참석 : ");
this.setEnd(sc.nextLine());
System.out.println();
if(this.getChapter().equalsIgnoreCase("x")) {
count++;
}
if(this.getReport().equalsIgnoreCase("x")) {
count++;
}
if(this.getMid().equalsIgnoreCase("x")) {
count++;
}
if(this.getEnd().equalsIgnoreCase("x")) {
count++;
}
depositBalance(count, this);
}
public String getStudyDT() {
return studyDT;
}
public void setStudyDT(String studyDT) {
this.studyDT = studyDT;
}
public String getChapter() {
return chapter;
}
public void setChapter(String chapter) {
this.chapter = chapter;
}
public String getReport() {
return report;
}
public void setReport(String report) {
this.report = report;
}
public String getMid() {
return mid;
}
public void setMid(String mid) {
this.mid = mid;
}
public String getEnd() {
return end;
}
public void setEnd(String end) {
this.end = end;
}
public int getDeadValue() {
return deadValue;
}
public void setDeadValue(int deadValue) {
this.deadValue = deadValue;
}
public int getBalance() {
return balance;
}
public void setBalance(int balance) {
this.balance = balance;
}
}
2. 상속을 하며 정보를 입력한다는 의미가 같은 insert 메소드를 오버라이드해주었다.
인터페이스도 구현해서 써먹어볼라고 했는데 막상 코드짜고 테스트하다보니 필요가 없어졌다.
package study;
import java.util.ArrayList;
import java.util.Scanner;
public class Management {
public static void main(String[] args) {
Scanner sc1 = new Scanner(System.in);
Scanner sc = new Scanner(System.in);
boolean flag = true;
MemberVo mvo;
StudyManager svo;
ArrayList<Object> arr = new ArrayList<Object>();
ArrayList<Object> sarr = new ArrayList<Object>();
while(flag) {
printMenu();
switch(sc1.nextInt()) {
case 0 :
System.out.println();
System.out.println("*** 스터디 회원 목록 *** ");
System.out.println("===================================================");
System.out.println(" 스터디 회원 목록 ");
System.out.println("===================================================");
System.out.println("\t회원번호 \t회원이름 \t가입날짜 \t최초보증금");
System.out.println("---------------------------------------------------");
int count = 0;
int depo = 0;
for(int i = 0; i < arr.size(); i++) {
MemberVo vo = (MemberVo)arr.get(i);
count++;
depo += Integer.parseInt(vo.getDeposit());
// 전체출력
System.out.printf("\t%s \t%s \t%s \t%s\n",
vo.getMember_no(), vo.getName(), vo.getJoinDT(), vo.getDeposit());
System.out.println("------------------------------------------------------------------------------------------------------");
}
System.out.printf("\t 총 인원 %d \t 총 보증금 %d", count, depo);
System.out.println();
break;
case 1 :
System.out.println();
System.out.println("*** 스터디 가입 *** ");
System.out.print("회원번호 중복 확인 : ");
String member_no = sc.nextLine();
mvo = new MemberVo();
//첫 입력일때
if(arr.size() == 0) {
mvo.insert(member_no);
arr.add(mvo);
break;
}
for(int i = 0; i < arr.size(); i++) {
MemberVo vo = (MemberVo)arr.get(i);
// 중복확인
if(member_no.equals(vo.getMember_no())) {
System.out.print("회원번호 다시 입력 : ");
member_no = sc.nextLine();
i = 0;
continue;
}else if(i == arr.size()-1) {
mvo.insert(member_no);
arr.add(mvo);
break;
}
}
break;
case 2 :
System.out.println();
System.out.println("*** 정보 입력 *** ");
System.out.print("회원번호 입력 : ");
member_no = sc.nextLine();
svo = new StudyManager();
//입력된 정보가 없을때
if(arr.size() == 0) {
System.out.println("입력된 회원정보가 없습니다.");
System.out.println();
break;
}
for(int i = 0; i < arr.size(); i++) {
MemberVo vo = (MemberVo)arr.get(i);
// 정보입력
if(vo.getMember_no().equals(member_no)) {
svo.setMember_no(member_no);
svo.setName(vo.getName());
svo.setDeposit(vo.getDeposit());
svo.setJoinDT(vo.getJoinDT());
svo.insert(member_no);
sarr.add(svo);
break;
}else if(i == arr.size()-1){
System.out.println("존재하지 않는 회원 입니다.");
System.out.println();
}
}
break;
case 3 :
System.out.println();
System.out.println("*** 정보 수정 *** ");
System.out.print("회원번호 입력 : ");
member_no = sc.nextLine();
//입력된 정보가 없을때
if(sarr.size() == 0) {
System.out.println("수정할 회원정보가 없습니다.");
System.out.println();
break;
}
for(int i = 0; i < sarr.size(); i++) {
StudyManager vo = (StudyManager)sarr.get(i);
// 정보수정
if(member_no.equals(vo.getMember_no())) {
vo.insert(member_no);
// sarr.remove(i);
// sarr.add(i, vo);
break;
}else if(i == sarr.size()-1){
System.out.println("존재하지 않는 회원 입니다.");
System.out.println();
}
}
break;
case 4 :
System.out.println();
System.out.println("*** 스터디 탈퇴 *** ");
System.out.print("회원번호 입력 : ");
member_no = sc.nextLine();
//입력된 정보가 없을때
if(arr.size() == 0) {
System.out.println("입력된 회원정보가 없습니다.");
System.out.println();
break;
}
for(int i = 0; i < arr.size(); i++) {
MemberVo vo = (MemberVo)arr.get(i);
// 정보입력
if(vo.getMember_no().equals(member_no)) {
for(int j = 0; j < sarr.size(); j++) {
StudyManager smvo = (StudyManager)sarr.get(j);
if(smvo.getMember_no().equals(member_no)) {
smvo.setJoinDT("탈퇴");
}
}
arr.remove(i);
System.out.println("회원번호 " + member_no + " 님 탈퇴 완료되었습니다.");
System.out.println();
break;
}else {
System.out.print("회원번호 입력 : ");
i = 0;
member_no = sc.nextLine();
}
}
break;
case 5 :
System.out.println();
System.out.println("*** 벌금 현황 *** ");
System.out.println("===================================================");
System.out.println(" 벌금 내역 ");
System.out.println("===================================================");
System.out.println("\t회원번호 \t회원이름 \t\t스터디날짜 \t\t벌금");
System.out.println("---------------------------------------------------");
int cnt = 0;
int sum = 0;
for(int i = 0; i < sarr.size(); i++) {
StudyManager vo = (StudyManager)sarr.get(i);
int deposit = Integer.parseInt(vo.getDeposit());
int balance = vo.getBalance();
// 벌금 내역 출력
if(balance < deposit) {
int deadVal = deposit - balance;
cnt++;
sum += deadVal;
System.out.printf("\t%s \t %s \t %s \t %d\n", vo.getMember_no(), vo.getName(), vo.getStudyDT(), deadVal);
System.out.println("---------------------------------------------------");
}
}
System.out.printf("\t 총 인원 %d\t\t 총 벌금 %d", cnt, sum);
System.out.println();
break;
case 6 :
System.out.println();
System.out.println("*** 스터디 관리 *** ");
System.out.println("======================================================================================================");
System.out.println(" \t\t\t\t\t\t스터디 관리 ");
System.out.println("======================================================================================================");
System.out.println("\t회원번호\t회원이름\t보증금\t가입일\t\t스터디날짜\t챕터 정리\t과제\t중간점검\t1주일점검\t벌금\t잔액");
System.out.println("------------------------------------------------------------------------------------------------------");
int tDeposit = 0;
int tDeadVal = 0;
int tBalance = 0;
for(int i = 0; i < sarr.size(); i++) {
StudyManager vo = (StudyManager)sarr.get(i);
int deposit = Integer.parseInt(vo.getDeposit());
int balance = vo.getBalance();
int deadVal = deposit - balance;
String status = "";
tDeposit += deposit;
tDeadVal += deadVal;
tBalance += balance;
if("탈퇴".equals(vo.getJoinDT())) {
status = "탈퇴";
}else {
status = vo.getJoinDT();
}
// 전체출력
System.out.printf("\t%s \t%s \t%d \t%s \t%s \t%s \t%s \t%s \t%s \t%d \t%d\n",
vo.getMember_no(), vo.getName(), deposit, status, vo.getStudyDT(), vo.getChapter()
, vo.getReport(), vo.getMid(), vo.getEnd(), deadVal, balance);
System.out.println("------------------------------------------------------------------------------------------------------");
}
System.out.printf("\t\t 총 보증금 %d \t\t 총 벌금 %d \t\t 총 잔액 %d", tDeposit, tDeadVal, tBalance);
System.out.println();
break;
case 7 :
System.out.println("프로그램 종료!");
//flag = false;
return;
}
}
}
public static void printMenu() {
System.out.println();
System.out.println("메뉴를 입력하세요");
System.out.println("\t0. 스터디 회원 목록");
System.out.println("\t1. 스터디 가입");
System.out.println("\t2. 정보입력");
System.out.println("\t3. 정보수정");
System.out.println("\t4. 스터디 탈퇴");
System.out.println("\t5. 벌급현황");
System.out.println("\t6. 스터디 관리 내용");
System.out.println("\t7. 종료");
}
}
완성
'Programming > Java \ Spring' 카테고리의 다른 글
🔥자바스터디🔥 자바의 정석 CH9 java.lang패키지와 유용한 클래스 (1) | 2021.06.20 |
---|---|
🔥자바스터디🔥 자바의 정석 CH8 예외처리 (0) | 2021.06.20 |
🔥자바스터디🔥 자바의 정석 CH7 객체지향 프로그래밍(상속, 오버라이딩, 제어자, 다형성, 추상클래스, 인터페이스, 내부클래스) (0) | 2021.06.03 |
🔥자바스터디🔥 배열과 반복문을 이용한 BINGO 만들기 (0) | 2021.05.30 |
🔥자바스터디🔥 자바의 정석 CH6 객체지향 프로그래밍(클래스, 메소드, 오버로딩, 생성자) (0) | 2021.05.30 |