본문 바로가기
22.05.24~22.11.16/Project

6월 Team Project 1. <투표 결과 조회 시스템 만들기> 1편

by 10월의끝 2022. 6. 28.

<객체 생성 클래스> 

public class Candidate {
	double percentageOfTotalVoter;// 지지율
	double percentageOfMaleVoter;// 남성 지지율(성비)
	double percentageOfFemaleVoter;// 여성 지지율(성비)
	double percentageOfVoter20;// 20대 지지율
	double percentageOfVoter30;// 30대 지지율
	double percentageOfVoter40;// 40대 지지율
	double percentageOfVoter50;// 50대 지지율

	int totalParticpatePeople; // 총 투표자
	int totalVoter; // 한 후보자의 총 투표자
	int maleVoter;// 남성투표자
	int femaleVoter;// 여성투표자
	int Voter20;// 20대 투표자
	int Voter30;// 30대 투표자
	int Voter40;// 40대 투표자
	int Voter50;// 50대 투표자

	String candidateName;// 후보자 이름

	public Candidate(String candidateName, int totalParticpatePeople, int totalVoter) {

		this.candidateName = candidateName;
		this.totalParticpatePeople = totalParticpatePeople;
		this.totalVoter = totalVoter;
		this.maleVoter = (int) (this.totalVoter * Math.random());
		this.femaleVoter = this.totalVoter - this.maleVoter;
		
		// 한 후보자의 총 투표자를 세대별로 random하게 분산시켜 입력
		VoteCal vtcal = new VoteCal();
		int arraySize = 4;
		int[] generationVoter = new int[arraySize];
		generationVoter = vtcal.randomSeperateCal(arraySize, this.totalVoter);
		
		this.Voter20 = generationVoter[0];
		this.Voter30 = generationVoter[1];
		this.Voter40 = generationVoter[2];
		this.Voter50 = generationVoter[3];

		

		this.percentageOfTotalVoter = vtcal.calPercentageOfTotalVoter(totalParticpatePeople, totalVoter);
		this.percentageOfMaleVoter = vtcal.calPercentageOfManVoter(totalVoter, maleVoter);
		this.percentageOfFemaleVoter = vtcal.calPercentageOfFemaleVoter(totalVoter, femaleVoter);
		this.percentageOfVoter20 = vtcal.calPercentageOfVoter20(totalVoter, Voter20);
		this.percentageOfVoter30 = vtcal.calPercentageOfVoter30(totalVoter, Voter30);
		this.percentageOfVoter40 = vtcal.calPercentageOfVoter40(totalVoter, Voter40);
		this.percentageOfVoter50 = vtcal.calPercentageOfVoter50(totalVoter, Voter50);
	}

}

 

 

<투표율 계산하는 클래스>

public class VoteCal {
	VoteCal() {
	}

	// 총 투표율, Candidate별 투표율, Candidate별 gender부문 투표율, Candidate별 generation부문 투표율 등
	public double calPercentageOfTotalVoter(int totalParticpatePeople, int totalVoter) {
		return totalVoter * 100 / totalParticpatePeople;
	}

	public double calPercentageOfManVoter(int totalVoter, int menVoter) {
		return menVoter * 100 / totalVoter;
	}

	public double calPercentageOfFemaleVoter(int totalVoter, int femaleVoter) {
		return femaleVoter * 100 / totalVoter;
	}

	public double calPercentageOfVoter20(int totalVoter, int Voter20) {
		return Voter20 * 100 / totalVoter;
	}

	public double calPercentageOfVoter30(int totalVoter, int Voter30) {
		return Voter30 * 100 / totalVoter;
	}

	public double calPercentageOfVoter40(int totalVoter, int Voter40) {
		return Voter40 * 100 / totalVoter;
	}

	public double calPercentageOfVoter50(int totalVoter, int Voter50) {
		return Voter50 * 100 / totalVoter;
	}

	// 총 숫자를 원하는 size만큼 나누어서 랜덤하게 나누어주는 메소드
	public int[] randomSeperateCal(int arraySize, int totalNum) {

		int checkTotalVoter = (int) (totalNum * Math.random());
		int initiateNum = checkTotalVoter;
		int[] seperateNum = new int[arraySize];

		for (int i = 1; i < seperateNum.length; i++) {
			seperateNum[0] = initiateNum;

			if (i == seperateNum.length - 1) {
				seperateNum[seperateNum.length - 1] = totalNum - checkTotalVoter;
			} else {
				seperateNum[i] = (int) ((totalNum - checkTotalVoter) * Math.random());
				checkTotalVoter += seperateNum[i];
			}
		}
		return seperateNum;
	}

}

 

 

<각 클래스의 정보를 불러와서 출력 전 한번에 정리 한 클래스>

import java.util.HashMap;
import java.util.Scanner;

public class ElectionInform {

	Scanner sc1 = new Scanner(System.in);
	int[] totalVoter = new int[3];
	int menu = 0;
	int e;

	HashMap<Integer, Candidate> bindCandidate;
	
	String chosenWinner;

	public ElectionInform(HashMap<Integer, Candidate> bindCandidate) {
		this.bindCandidate = bindCandidate;
		this.chosenWinner = this.whoIsWinner(bindCandidate.get(1).totalVoter, bindCandidate.get(2).totalVoter, bindCandidate.get(3).totalVoter);
	}

	public ElectionInform() {

	}

	void cadidateInform() {
		System.out.println("※2022년 JAVA 대통령 선거※" + '\n' + "후보 소개를 시작하겠습니다." + '\n');
		System.out.println("<기호 1번> 김현규 " + '\n' + "▶ 출생연도: 1990년" + '\n' + "▶ 거주지: 서울 강남구" + '\n' + "▶ 최종학력: 자바 대학교"
				+ '\n' + "▶ 공약: 최저임금 2만원으로 올리겠습니다! 뽑아주십시오!" + '\n');
		System.out.println("<기호 2번> 장현수 " + '\n' + "▶ 출생연도: 1987년" + '\n' + "▶ 거주지: 경기도 성남" + '\n' + "▶ 최종학력: 이클립스 대학교"
				+ '\n' + "▶ 공약: 부정부패로 썩어빠진 현정권 박살내겠습니다!" + '\n');
		System.out.println("<기호 3번> 박예진 " + '\n' + "▶ 출생연도: 1991년" + '\n' + "▶ 거주지: 대전광역시" + '\n' + "▶ 최종학력: 오라클 대학교"
				+ '\n' + "▶ 공약: 주3일제 근무환경조성에 앞서겠습니다!");
		System.out.println();
	}

	void electionResultInform() {
		boolean start = true;

		while (start) {
			System.out.println("================================※선거 안내※================================");
			System.out.println("1. 유권자 수  | 2. 투표자 수   | 3. 총 투표율과 후보별 지지율   | 4. 당선 유력 후보   | 5. 종료");
			System.out.println("==========================================================================");
			System.out.print("안내 선택 >> ");

			menu = sc1.nextInt();

			switch (menu) {
			case 1:
				System.out.println(menu + "번. 유권자 수는 " + VotingProgram.getTotalcanvotepeople() + "명 입니다.");
				System.out.println();
				break;

			case 2:
				System.out.println(menu + "번. 투표자 수는 " + VotingProgram.getTotalparticpatepeople() + "명 입니다.");
				System.out.println();
				break;

			case 3:
				System.out.println(menu + "번." + '\n' + "총 투표율은  " + (VotingProgram.getTotalparticpatepeople() * 100)
						/ (VotingProgram.getTotalcanvotepeople() * 1.00) + "% 입니다.");

				System.out.println("기호 1번 김현규 후보의 총 득표수: " + bindCandidate.get(1).totalVoter + "표 | " + " 총 투표율: "
						+ bindCandidate.get(1).percentageOfTotalVoter + "%");

				System.out.println("기호 2번 장현수 후보의 총 득표수: " + bindCandidate.get(2).totalVoter + "표 | " + " 총 투표율: "
						+ bindCandidate.get(2).percentageOfTotalVoter + "%");

				System.out.println("기호 3번 박예진 후보의 총 득표수: " + bindCandidate.get(3).totalVoter + "표 | " + " 총 투표율: "
						+ bindCandidate.get(3).percentageOfTotalVoter + "%");
				System.out.println();

				System.out.println("후보별 지지율 입니다.");

				System.out.println("[기호 1번 김현규]" + '\n' + "▷성별 투표수와 지지율" + '\n' 
						+ "남성: " + bindCandidate.get(1).maleVoter + "표 | " + bindCandidate.get(1).percentageOfMaleVoter + "%" + '\n' 
						+ "여성: " + bindCandidate.get(1).femaleVoter + "표 | " + bindCandidate.get(1).percentageOfFemaleVoter + "%" +'\n' 
						+ "▷연령별 투표수와 지지율" + '\n' 
						+ "20대: " + bindCandidate.get(1).Voter20 + "표 | " + bindCandidate.get(1).percentageOfVoter20 + "%" + '\n' 
						+ "30대: " + bindCandidate.get(1).Voter30 + "표 | " + bindCandidate.get(1).percentageOfVoter30 + "%" + '\n' 
						+ "40대: " + bindCandidate.get(1).Voter40 + "표 | " + bindCandidate.get(1).percentageOfVoter40 + "%" + '\n' 
						+ "50대: " + bindCandidate.get(1).Voter50 + "표 | " + bindCandidate.get(1).percentageOfVoter50 + "%" + '\n');

				System.out.println("[기호 2번 장현수]" + '\n' + "▷성별 투표수와 지지율" + '\n' 
						+ "남성: " + bindCandidate.get(2).maleVoter + "표 | " + bindCandidate.get(2).percentageOfMaleVoter + "%" + '\n' 
						+ "여성: " + bindCandidate.get(2).femaleVoter + "표 | " + bindCandidate.get(2).percentageOfFemaleVoter + "%" + '\n' 
						+ "▷연령별 투표수와 지지율" + '\n' 
						+ "20대: " + bindCandidate.get(2).Voter20 + "표 | " + bindCandidate.get(2).percentageOfVoter20 + "%" + '\n' 
						+ "30대: " + bindCandidate.get(2).Voter30 + "표 | " + bindCandidate.get(2).percentageOfVoter30 + "%" + '\n' 
						+ "40대: " + bindCandidate.get(2).Voter40 + "표 | " + bindCandidate.get(2).percentageOfVoter40 + "%" + '\n' 
						+ "50대: " + bindCandidate.get(2).Voter50 + "표 | " + bindCandidate.get(2).percentageOfVoter50 + "%" + '\n');

				System.out.println("[기호 3번 박예진]" + '\n' + "▷성별 투표수와 지지율" + '\n'
						+ "남성: " + bindCandidate.get(3).maleVoter + "표 | " + bindCandidate.get(3).percentageOfMaleVoter + " %" + '\n' 
						+ "여성: " + bindCandidate.get(3).femaleVoter + "표 | " + bindCandidate.get(3).percentageOfFemaleVoter + " %" + '\n' 
						+ "▷연령별 투표수와 지지율" + '\n' 
						+ "20대: " + bindCandidate.get(3).Voter20 + "표 | " + bindCandidate.get(3).percentageOfVoter20 + "%" + '\n' 
						+ "30대: " + bindCandidate.get(3).Voter30 + "표 | " + bindCandidate.get(3).percentageOfVoter30 + "%" + '\n' 
						+ "40대: " + bindCandidate.get(3).Voter40 + "표 | " + bindCandidate.get(3).percentageOfVoter40 + "%" + '\n' 
						+ "50대: " + bindCandidate.get(3).Voter50 + "표 | " + bindCandidate.get(3).percentageOfVoter50 + "%" + '\n');;
				break;

			case 4:
				System.out.println(menu +  "번. 당선 유력 후보는 " + chosenWinner + "입니다.");
				System.out.println();			
				break;
				
			case 5:
				System.out.println("투표 결과를 종료합니다.");
				System.out.println("2022년 JAVA 대통령 당선을 축하합니다.");
				start = false;
			}
		}
	}
	
	public String whoIsWinner(int num1, int num2, int num3) {
	      int maxNum = num1;
	      String chosenWinner = bindCandidate.get(1).candidateName;
	      
	      if(num2 > num1 && num2 > num3) {
	         maxNum = num2;
	         chosenWinner = bindCandidate.get(2).candidateName;
	         
	      }else if(num3 > num1 && num3 > num2) {
	         maxNum = num3;
	         chosenWinner = bindCandidate.get(3).candidateName;
	      }
	      return chosenWinner;
	   }
}