Programming/Java \ Spring

🔥자바스터디🔥 객체지향 개념을 살려서 스터디관리 프로그램 만들기

 

문제 )) 객체지향 개념을 살려서 스터디관리 프로그램 만들기

 

 

이미지대로 스터디원의 정보, 참여내역(벌금 차감), 벌금내역 조회, 스터디 관리내역 조회, 스터디 탈퇴 까지

객체지향 개념을 적용하여 프로그래밍하기가 목적이었다.

 

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. 종료");
	}
}

 

 

완성