- 오늘 배운 프로그램 코드 한번 더 쳐보면서 학습
- 2번부터 프로그램들은 주말에 학습할 것.
- 2(6)은 HashMap 컬렉션 자료구조에서 다시 한번보기
1. 배열 관련 은행 프로그램 구현
public class BankArray {
public static final int STATE_LOGOUT = 0;
public static final int STATE_USER_LOGIN = 1;
public static final int STATE_ADMIN_LOGIN = 2;
public static final int STATE_EXIT = -1;
public static String id[] = new String[100];
public static String pw[] = new String[100];
public static double account[] = new double[100];
public static int totalUserCount = 0;
public static int loginUserIndex = -1;
public static int loginUserStatus = BankArray.STATE_LOGOUT;
public static String adminId = "admin";
public static String adminPw = "1234";
public static java.util.Scanner scanner = new java.util.Scanner(System.in);
public static String inputId = null;
public static String inputPw = null;
public static double InputAccount = 0;
public static void main(String[] args) {
BankArray.id[0] = "user1";
BankArray.pw[0] = "user1";
BankArray.account[0] = 1000;
BankArray.id[1] = "user2";
BankArray.pw[1] = "user2";
BankArray.account[1] = 2000;
BankArray.id[2] = "user3";
BankArray.pw[2] = "user3";
BankArray.account[2] = 3000;
BankArray.totalUserCount = 3;
while(BankArray.loginUserStatus != BankArray.STATE_EXIT) {
System.out.println("아이디와 pw를 입력해주세요." + " 종료하고 싶다면 EXIT를 입력해주세요.");
System.out.print("id입력> ");
BankArray.inputId = scanner.nextLine();
System.out.print("pw입력> ");
BankArray.inputPw = scanner.nextLine();
boolean isFindUser = false;
for(int i=0; i<BankArray.totalUserCount; i++) {
if(BankArray.id[i].equals(BankArray.inputId)) {
if(BankArray.pw[i].equals(BankArray.inputPw)) {
System.out.println(id[i] + "님 어서오세요.");
BankArray.loginUserIndex = i;
BankArray.loginUserStatus = BankArray.STATE_USER_LOGIN;
} else {
System.out.println("잘못된 id나 패스워드가 입력되었습니다.");
}
isFindUser = false;
break;
}
}
if(!isFindUser) {
if(BankArray.adminId.equals(BankArray.inputId) && BankArray.adminPw.equals(BankArray.inputPw)) {
System.out.println("관리자님 어서오세요.");
BankArray.loginUserStatus = BankArray.STATE_ADMIN_LOGIN;
} else {
System.out.println("없는 아이디입니다. 다시 입력해주세요.");
}
}
if(BankArray.inputId.equals("EXIT")) {
BankArray.loginUserStatus = BankArray.STATE_EXIT;
System.out.println("프로그램을 종료합니다. 이용해주셔서 감사합니다.");
}
switch(BankArray.loginUserStatus) {
case BankArray.STATE_ADMIN_LOGIN:
System.out.println("관리자 관련 작업메뉴");
boolean isAdmMenu = true;
while(isAdmMenu) {
System.out.println("1. 계정추가 | 2. 계정삭제 | 3. id변경 | 4. 모든 사용자 출력 | 5. 종료");
switch(scanner.nextLine()) {
case "1":
System.out.print("추가할 아이디 입력> ");
inputId = scanner.nextLine();
System.out.print("추가할 암호 입력> ");
inputPw = scanner.nextLine();
id[BankArray.totalUserCount] = inputId;
pw[BankArray.totalUserCount] = inputPw;
account[BankArray.totalUserCount] = 100;
System.out.println(id[BankArray.totalUserCount] + "계정 생성");
BankArray.totalUserCount++;
break;
case "2":
System.out.print("삭제할 아이디 입력> ");
inputId = scanner.nextLine();
int findIndex = BankArray.totalUserCount;
for(int i=0; i<BankArray.totalUserCount; i++) {
if(id[i].equals(inputId)) {
findIndex = i;
}
}
for(int i=findIndex; i<BankArray.totalUserCount; i++) {
id[i] = id[i + 1];
pw[i] = pw[i + 1];
account[i] = account[i + 1];
}
BankArray.totalUserCount--;
break;
case "3":
System.out.print("변경할 아이디 입력> ");
inputId = scanner.nextLine();
for(int i=0; i<BankArray.totalUserCount; i++) {
if(id[i].equals(inputId)) {
System.out.print("변경할 아이디> ");
id[i]=scanner.nextLine();
System.out.print("변경할 암호> ");
pw[i] = scanner.nextLine();
System.out.print("변경할 account> ");
account[i] = Double.parseDouble(scanner.nextLine());
}
}
break;
case "4":
System.out.println("출력 시작");
for(int i=0; i<BankArray.totalUserCount; i++) {
System.out.print(i + "번째 아이디> " + id[i]);
System.out.print(" pw> " + pw[i]);
System.out.println(" account> " + account[i]);
}
System.out.println("모두 출력");
break;
case "5":
System.out.println("관리자 메뉴 종료");
BankArray.loginUserStatus = BankArray.STATE_LOGOUT;
isAdmMenu = false;
break;
}
}
break;
case BankArray.STATE_USER_LOGIN:
System.out.println("사용자 관련 작업메뉴");
boolean isUseMenu = true;
while(isUseMenu) {
System.out.println("1. 입금 | 2. 출금 | 3. 잔액 조회 | 4. 종료 입력");
switch(scanner.nextLine()) {
case "1":
System.out.println("입금액 입력> ");
InputAccount = Double.parseDouble(scanner.nextLine());
account[BankArray.loginUserIndex] += InputAccount;
System.out.println(id[BankArray.loginUserIndex] + "님 잔액:" + account[BankArray.loginUserIndex]);
break;
case "2":
System.out.println("출금액 입력> ");
InputAccount = Double.parseDouble(scanner.nextLine());
account[BankArray.loginUserIndex] -= InputAccount;
System.out.println(id[BankArray.loginUserIndex] + "님 잔액:" + account[BankArray.loginUserIndex]);
break;
case "3":
System.out.println("잔액 조회>>");
System.out.println(id[BankArray.loginUserIndex] + "님 잔액:" + account[BankArray.loginUserIndex]);
break;
case "4":
System.out.println("사용자 메뉴 종료");
BankArray.loginUserStatus = BankArray.STATE_LOGOUT;
isUseMenu = false;
break;
}
}
break;
case BankArray.STATE_LOGOUT:
System.out.println("로그아웃하였습니다.");
break;
case BankArray.STATE_EXIT:
System.out.println("프로그램을 종료합니다.");
break;
default:
System.out.println("알 수 없는 문제가 발생한 상태입니다.");
}
}
System.out.println("프로그램 종료");
}
2. 프로그램 구현
- 자바로 간단한 프로그램 구현하였음.
- 챗gpt 예제를 참고하여 학습.
- 반복적으로 쳐보기
(1) 로또 프로그램 구현
import java.util.Arrays;
import java.util.Random;
public static void main(String[] args) {
int[] lottoNumbers = generateLottoNumbers();
System.out.print("로또 번호: ");
for(int number : lottoNumbers) {
System.out.print(number + " ");
}
}
public static int[] generateLottoNumbers() {
int[] numbers = new int[45];
for(int i=0; i<45; i++) {
numbers[i] = i + 1;
}
shuffleArray(numbers);
int[] lottoNumbers = Arrays.copyOfRange(numbers, 0, 6);
Arrays.sort(lottoNumbers);
return lottoNumbers;
}
public static void shuffleArray(int[] array) {
int index, temp;
Random random = new Random();
for(int i=0; i<array.length; i++) {
index = random.nextInt(i+1);
temp = array[index];
array[index] = array[i];
array[i] = temp;
}
}
}
(2) 사용자로부터 이름을 출력받는 프로그램
import java.util.Scanner;
public class Practice {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("이름을 입력해주세요> ");
String name = scanner.nextLine();
System.out.println("안녕하세요, " + name + "님! 환영합니다.");
}
}
(3) 사용자로부터 두 수를 입력받고 합을 구하는 프로그램
import java.util.Scanner;
public class Practice {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("첫번째 숫자를 입력하세요> ");
int num1 = Integer.parseInt(scanner.nextLine());
System.out.print("두번째 숫자를 입력하세요> ");
int num2 = Integer.parseInt(scanner.nextLine());
int sum = num1 + num2;
System.out.println("두 수의 합은 " + sum + "입니다.");
}
}
(4) 간단한 결제 프로그램 구현
import java.util.Scanner;
public class Practice {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("상품 가격을 입력해주세요> ");
double productPrice = Double.parseDouble(scanner.nextLine());
System.out.print("지불한 금액을 입력해주세요> ");
double paymentPrice = Double.parseDouble(scanner.nextLine());
double change = paymentPrice - productPrice;
if(change >= 0) {
System.out.println("거스름돈: " + change + "원 입니다.");
} else {
System.out.println("지불 금액이 부족합니다. " + (-change) + "원을 더 지불해주세요");
}
}
}
(5) 난이도(上) 로그인 창 구현
- 반복해서 쳐보되 난이도가 높다는 것을 인지할 것.
import java.awt.GridLayout;
import java.awt.event.*;
import javax.swing.*;
public class Practice {
public static void main(String[] args) {
JFrame frame = new JFrame("로그인");
frame.setSize(300,150);
frame.setLayout(new GridLayout(3,2));
JLabel usernameLabel = new JLabel("사용자 이름:");
JTextField usernameField = new JTextField();
JLabel passwordLabel = new JLabel("비밀번호:");
JPasswordField passwordField = new JPasswordField();
JButton loginButton = new Button("로그인");
loginButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String username = usernameField.getText();
char[] passwordChars = passwordField.getPassword();
String password = new String(passwordChars);
if(username.equals("admin") && password.equals("password")) {
JOptionPane.showMessageDialog(frame,"로그인 성공");
} else {
JOptionPane.showMessageDialog(frame, "로그인 실패. 다시 시도해보세요");
}
password.setText("");
}
});
frame.add(usernameLabel);
frame.add(usernameField);
frame.add(passwordLabel);
frame.add(passwordField);
frame.add(new JLabel());
frame.add(loginButton);
frame.setVisible(true);
}
}
(6) 출석부 프로그램 구현
- HashMap을 활용하여 풀이
1) HashMap
- 컬렉션 프레임워크에서 제공되는 데이터 구조
- 키와 값을 쌍으로 데이터를 저장함.
(1) 키
(2) 값(Value)
2) HashMap 사용법
- 데이터 추가 및 검색
- put(key, value) 메소드를 사용하여 데이터 추가.
- get(key) 메소드를 사용하여 키에 대한 값 검색
- 데이터 삭제
- remove(key) 메소드를 사용하여 특정 키와 데이터 삭제
- 순회
- HashMap의 모든 키-값 쌍을 순회하려면 keySet() 메소드의 키의 집합을 얻고 반복문 사용하여 키에 대한 값 찾기
- 크기 확인
- size() 메소드를 사용하여 HashMap 크기 확인
- Null 허용
- HashMap은 하나의 null키와 여러 개의 null값 처리 지원
- 동기화
- 멀티스레드 환경에 사용할때 동기화 처리 필요
- ConcurrentHashMap 등 동기화된 맵 사용 가능
- 성능
import java.util.Scanner;
import java.util.HashMap;
public class Practice {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
HashMap<String,Boolean> attendanceRecord = new HashMap<>();
while(true) {
System.out.println(1. 출석 기록);
System.out.println(2. 출석 확인);
System.out.println(3. 프로그램 종료);
System.out.print("선택> ");
int choice = Integer.parseInt(scanner.nextLine());
switch(choice) {
case 1:
System.out.print("학생 이름을 입력해주세요> ");
String studentName = scanner.nextLine();
attendanceRecord.put(studentName, true);
System.out.println(studentName + "님이 출석되었습니다");
break;
case 2:
System.out.print("학생 이름을 입력해주세요> ");
String studentName = scanner.nextLine();
Boolean isPresent = attendanceRecorde.get(studentName);
if(isPresent != null && isPresent) {
System.out.println(studentName + "님이 출석되었습니다.");
} else {
System.out.println(studentName + "님이 결석되었습니다.");
}
break;
case 3:
System.out.println("프로그램을 종료합니다");
break;
default:
System.out.println("잘못된 접근입니다.");
break;
}
}
}
(7) 간단한 게시판 구현
import java.util.Scanner;
public class Practice {
public static final int MAX_POSTS = 100;
public String[] posts = new String[MAX_POSTS];
public int PostCount = 0;
public Scanner scanner = new Scanner(System.in);
public void run() {
while(true) {
System.out.println("1. 글쓰기");
System.out.println("2. 글 목록 보기");
System.out.println("3. 프로그램 종료");
System.out.print("선택> ");
int choice = Integer.parseInt(scanner.nextLine());
switch(choice) {
case 1:
writePosts();
break;
case 2:
listPosts();
break;
case 3:
scanner.close();
System.out.println("프로그램을 종료합니다.");
break;
default:
System.out.println("올바른 메뉴를 선택해주세요");
}
}
}
public void writePosts() {
if(PostCount < MAX_POSTS) {
System.out.print("글을 입력해주세요> ");
String content = scanner.nextLine();
posts[PostCount] = content;
PostCount++;
System.out.println("글이 작성되었습니다.");
System.out.println();
} else {
System.out.println("더 이상 글을 작성할 수 없습니다");
}
}
public void listPosts() {
if(PostCount == 0) {
System.out.println("게시물이 없습니다.");
return;
}
System.out.println("----------글 목록----------");
for(int i=0; i<PostCount; i++) {
System.out.println((i + 1) + ". " + posts[i]);
}
System.out.println("--------------------------");
}
public static void main(String[] args) {
Practice board = new Practice();
board.run();
}
}
(8) 369 해답지 추가 설명
for(int i=0; i<1000; i++) {
int oriNum = 2916;
String str = "";
int num = oriNum;
while(num!=0) {
if(num%10%3 == 0 && num%10 !=0) {
str = str + "짝";
}
num = num/10;
}
if(str.equals("")) {
System.out.println(oriNum);
} else {
System.out.println(str + "("+oriNum+")");
}
}