<객체 생성 클래스>
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;
}
}
'22.05.24~22.11.16 > Project' 카테고리의 다른 글
6월 project 3 <오라클 DB 연동해서 사원 조회하기 : 스캐너> (0) | 2022.06.30 |
---|---|
6월 Team Project 1. <투표 결과 조회 시스템 만들기> 2편 (0) | 2022.06.30 |
6월 project 2 <eclipse에 oracle DB 불러와서 javafx로 사원 연락처 조회 프로그램 만들기> : 조회, 추가, 수정, 삭제 기능 구현 2편 (0) | 2022.06.28 |
6월 project 2 <eclipse에 oracle DB 불러와서 javafx로 사원 연락처 조회 프로그램 만들기> : 조회, 추가, 수정, 삭제 기능 구현 1편 (0) | 2022.06.27 |
6월 project 1 <생성자 선언, 메소드 호출, Scanner 사용해서 학생 점수표 만들기> (0) | 2022.06.03 |