본문 바로가기

Java

0427 실습 해설

20230426_java_실습.zip
0.23MB

 

 

 

 

package object_array_guide.account;

 

public class Account {

 

String ano; // 계좌번호

String owner; // 계좌주

int balance; // 잔고

String password; // 비밀번호

 

// 기본생성자

public Account() {}

 

// 전체값을 넘겨받는 생성자

public Account(String ano, String owner, int balance, String password) {

this.ano = ano;

this.owner = owner;

this.balance = balance;

this.password = password;

}

 

 

public String toString() {

return "Account[ ano : "+this.ano+" owner : " + this.owner + " balance : " + this.balance +" ]";

}

}

 

 

 

 


 

package object_array_guide.account;

 

import java.util.Scanner;

 

public class BankApplication {

 

Account[] account = new Account[100];

int count = 0;

Scanner sc = new Scanner(System.in);

 

BankApplication(){

run();

}

 

void run() {

// 1. 계좌생성

// 2. 계좌조회

// 3. 예금

// 4. 출금

// 5. 종료

boolean isRun = true;

 

 

while(isRun) {

System.out.println("========================================");

System.out.println("1.계좌생성 2.계좌조회 3.예금 4.출금 5.종료");

System.out.println("========================================");

System.out.println("이용하실 메뉴 번호를 입력해주세요 > ");

int selectNo = sc.nextInt();

if(selectNo == 1) {

// 계좌생성

createAccount();

}else if(selectNo ==2) {

// 계좌조회

selectAccount();

}else if(selectNo ==3) {

// 예금

deposit();

}else if(selectNo ==4) {

// 출금

withdraw();

}else if(selectNo ==5) {

// 종료

isRun = false;

sc.close();

}

}

System.out.println("프로그램 종료");

}

 

 

//계좌생성

void createAccount() {

//내코드

// System.out.print("계좌주: ");

// String owner = sc.next();

// System.out.print("계좌번호: ");

// String ano = sc.next();

// System.out.print("초기입금액: ");

// int balance = sc.nextInt();

// System.out.print("비밀번호: ");

// String password = sc.next();

// account[count] = new Account(owner,ano,balance,password);

// System.out.println("계좌생성이 완료되었습니다.");

// count++;

 

System.out.println("----------------");

System.out.println("1. 계좌생성");

System.out.println("----------------");

Account newAccount = new Account();

System.out.println("계좌주 : ");

newAccount.owner = sc.next();

System.out.println("계좌번호 : ");

newAccount.ano = sc.next();

System.out.println("초기입금액 : ");

newAccount.balance = sc.nextInt();

System.out.println("비밀번호 : ");

newAccount.password = sc.next();

//null값이 아닌 배열의 첫번째에 새로운 계좌 정보 저장.

for(int i = 0; i<account.length;i++) {

if(account[i]== null) {

account[i] = newAccount;

System.out.println("계좌생성이 완료되었습니다.");

break;

}

}

}

// 계좌조회

void selectAccount() {

//내코드

// System.out.println("----------------");

// System.out.println("계좌목록");

// System.out.println("----------------");

// System.out.print("계좌번호 : ");

// String ano = sc.next();

// System.out.print("비밀번호 : ");

// String password = sc.next();

// Account ac=findAccount(ano,password);

// System.out.println(ac);

 

System.out.println("----------------");

System.out.println("2. 계좌조회");

System.out.println("----------------");

System.out.println("계좌번호 > ");

String ano = sc.next();

System.out.println("비밀번호 > ");

String password = sc.next();

Account registAccount = findAccount(ano,password);

if(registAccount == null) {

System.out.println("일치하는 계좌 정보가 없습니다. ");

}else {

System.out.println(registAccount.toString());

}

}

 

// 예금

void deposit() {

//내 코딩

// System.out.println("----------------");

// System.out.println("예금");

// System.out.println("----------------");

// System.out.print("계좌번호 : ");

// String ano = sc.next();

// System.out.print("비밀번호 : ");

// String password = sc.next();

// System.out.print("예금액 : ");

// int input =sc.nextInt();

// Account ac = findAccount(ano,password);

// ac.balance +=input;

// System.out.println(ac.owner+"님의 계좌입금이 완료되었습니다.");

 

System.out.println("----------------");

System.out.println("3. 예금");

System.out.println("----------------");

System.out.println("계좌번호 > ");

String ano = sc.next();

System.out.println("비밀번호 > ");

String password = sc.next();

Account registAccount = findAccount(ano, password);

if(registAccount == null) {

System.out.println("계좌정보가 존재하지 않습니다.");

return;

}

//계좌 정보가 존재

System.out.println("예금액 : ");

int money = sc.nextInt();

registAccount.balance += money;

System.out.printf(

"%s님의 계좌에 %,d원이 입금되었습니다.%n",

registAccount.owner,

money

);

 

}

//출금

void withdraw() {

// 내 코드

// System.out.println("----------------");

// System.out.println("출금");

// System.out.println("----------------");

// System.out.print("계좌번호 : ");

// String ano = sc.next();

// System.out.print("비밀번호 : ");

// String password = sc.next();

// System.out.print("출금 : ");

// int output =sc.nextInt();

// Account ac = findAccount(ano,password);

// ac.balance -=output;

// System.out.println(ac.owner+"님의 계좌출금이 완료되었습니다.");

 

System.out.println("----------------");

System.out.println("4. 출금");

System.out.println("----------------");

System.out.println("계좌번호 : ");

String ano = sc.next();

System.out.println("비밀번호 : ");

String password = sc.next();

Account regist = findAccount(ano, password);

if(regist !=null ) {

System.out.println("출금액 : ");

int money = sc.nextInt();

int result = regist.balance - money;

if(result <0) {

System.out.println("잔고가 부족합니다.");

return;

}

//잔액 존재 - 출금할 수 있는 금액

regist.balance = result;

System.out.printf(

"%s님의 계좌에 %,d원이 출금되었습니다.%n",

regist.owner,

money

);

//출금 완료

return;

}

System.out.println("일치하는 계좌 정보가 없습니다.");

}

 

// 계좌번호와 비밀번호가 일치하는 Account 객체를 찾아서 반환

Account findAccount(String ano, String password) {

//내코드

// Account ac=null;

// for(int i=0; i <account.length;i++) {

// if(account[i]!=null) {

// if(account[i].ano.equals(ano) && account[i].password.equals(password)) {

// ac = account[i];

// }

// }

// }

// return ac;

 

for(int i = 0; i<account.length;i++) {

if(account[i] != null

&&

account[i].ano.equals(ano)

&&

account[i].ano.equals(password)) {

return account[i];

}

}

return null; //맞는 계정 못찾으면 null값 반환

}

 

public static void main(String[] args) {

new BankApplication();

}

}



package object_array_guide.book;

 

public class Book {

 

// 도서관리 번호

int num;

// 도서 제목

String title;

// 도서 저자

String author;

 

 

public Book() {}

 

public Book(int num, String title, String author) {

this.num = num;

this.title = title;

this.author = author;

}

 

public String toString() {

return "Book{ [num : "+this.num+"] [title : " +this.title +"] [author : " + this.author + "]}";

}

 

}


package object_array_guide.book;

 

import java.util.Scanner;

 

public class BookManagement {

 

 

// 문자열 입력 (nextline사용시 스캐너를 따로 생성해줘야한다)

Scanner scanLine = new Scanner(System.in);

// 선택번호 입력

Scanner scanSelectNum = new Scanner(System.in);

 

// 도서목록

Book[] books = new Book[100];

// 프로그램 실행 flag

boolean isRun = true;

// 메인 메뉴 선택 번호

int selectNo = 0;

// 도서관리 번호

int count=1;

 

public BookManagement(){

run();

}

 

public void run() {

while(isRun) {

System.out.println("================================================");

System.out.println("1.도서등록 | 2. 도서목록 | 3.도서수정 | 4.도서삭제 | 5. 종료");

System.out.println("================================================");

selectNo = getSelectNum("번호를 선택하세요 > ");

 

switch(selectNo) {

case 1 :

registerBook();

break;

case 2 :

selectBook();

break;

case 3 :

updateBook();

break;

case 4 :

deleteBook();

break;

case 5 :

terminate();

break;

default :

System.out.println("등록된 메뉴가 아닙니다.");

 

}

}

}

 

// 프로그램 종료

public void terminate() {

System.out.println("프로그램 종료");

isRun = false;

}

 

// 도서 등록

public void registerBook() {

//내 코딩

// System.out.println("1. 도서등록");

// System.out.println("등록할 책의 제목을 입력하세요 >");

// String title = scanLine.next();

// System.out.println("등록할 책의 저자를 입력하세요 >");

// String author = scanLine.next();

// books[count] = new Book(count,title,author);

// System.out.println("등록완료");

// count++;

 

System.out.println("1. 도서등록");

// 제목, 저자

String title = getData("등록할 도서의 책제목을 입력해주세요 > ");

String author = getData("등록할 도서의 저자를 입력해주세요 > ");

for(int i=0; i<books.length; i++) {

if(books[i] == null) {

Book book = new Book(count++,title,author);

books[i] = book;

System.out.println("등록 완료!");

break;

}

}

}

 

// 도서 목록 출력

public void selectBook() {

System.out.println("2. 도서목록");

//내코딩

// for(int i=0;i<books.length;i++) {

// if(books[i]!=null) {

// System.out.println(books[i]);

// }

// }

for(Book book : books) {

if(book != null) System.out.println(book.toString());

}

}

 

// 도서 정보 수정

public void updateBook() {

System.out.println("3. 도서수정");

//내코딩

// System.out.println("수정할 책의 도서관리번호를 입력하세요 > ");

// int num = scanSelectNum.nextInt();

// Book target =findBook(num);

// System.out.println(target);

// boolean isRun2 = true;

// smallMenu :while(isRun2) {

// System.out.println("==================================");

// System.out.println("1. 제목수정 | 2. 저자 수정 | 3. 수정완료");

// System.out.println("==================================");

// System.out.println("번호입력 > ");

// int selectNum = scanSelectNum.nextInt();

// switch(selectNum) {

// case 1:

// System.out.println("제목입력 >");

// String name = scanLine.next();

// target.title=name;

// System.out.println("제목 수정 완료 >");

// break;

// case 2:

// System.out.println("저자입력 >");

// String person = scanLine.next();

// target.author=person;

// System.out.println("저자 수정 완료 >");

// break;

// case 3:

// break smallMenu;

// }

// }

int bookNum = getSelectNum("수정할 책의 관리번호를 입력해주세요.");

//book배열에서 도서관리번호가 일치하는 책 정보를 검색

Book book = findBook(bookNum);

if(book == null) {

System.out.println("입력하신 관리번호의 책이 존재하지 않습니다.");

return;

}

//도서관리 번호가 일치하는 책 정보 존재

//도서 정보 수정

System.out.println(book.toString());

boolean isUpdate = true;

while(isUpdate) {

System.out.println("==================================");

System.out.println("1. 제목수정 | 2. 저자수정 | 3. 수정완료");

System.out.println("==================================");

selectNo = getSelectNum("번호 입력 >");

switch(selectNo) {

case 1 :

System.out.println("제목 수정");

String title = getData("제목입력 >");

book.title = title;

System.out.println("제목 수정 완료");

break;

case 2 :

System.out.println("저자 수정");

String author = getData("저자입력 >");

book.author = author;

System.out.println("저자 수정 완료");

break;

case 3 :

System.out.println("수정 완료");

isUpdate = false;

break;

default : System.out.println("등록된 메뉴가 아닙니다.");

}//end switch

}// end update while

 

} // end updateBook

 

// 도서 목록에서 책 정보 삭제

public void deleteBook() {

System.out.println("4. 도서삭제");

//내코딩

// System.out.println("삭제할 책의 도서관리번호를 입력하세요 > ");

// int num = scanSelectNum.nextInt();

// Book target =findBook(num);

// int index = 0;

// for(int i=0; i<books.length;i++) {

// if(target == books[i]) {

// target=null;

// books[i]=null;

// System.out.println("선택하신 도서가 삭제되었습니다.");

// return;

// }

// }

int bookNum = getSelectNum("삭제할 도서의 관리번호를 입력해주세요");

//동일한 도서관리번호의 책을 검색

Book book = findBook(bookNum);

if(book == null ) {

System.out.println("입력하신 관리번호의 책이 존재하지 않습니다");

return;

}

//일치하는 도서관리 번호의 책 존재

//책장에서 책 삭제

for(int i = 0; i < books.length; i++) {

if(books[i]==book) { // 배열에서 주소값을 비교하는거니까 nullpointerexception 발생 안함.

books[i]=null;

System.out.println("삭제 완료");

break;

}

}

 

 

}

 

// 책 정보 출력

public void printBookInfo(Book b) {

System.out.println(b.toString());

}

 

// 도서관리번호로 책 정보 찾기

public Book findBook(int num) {

//내코딩

// Book bookInfo = null;

// for(int i=0;i<books.length;i++) {

// if(books[i]!=null) {

// if(books[i].num==num) {

// bookInfo = books[i];

// }

// }

// }

// return bookInfo;

for(Book book : books) {

if(book != null && book.num == num) {

return book;

}

}

return null;

}

 

// 사용자에게 메시지를 전달 받아 출력하고 문자열 값 받아 반환

String getData(String message) {

System.out.println(message);

return scanLine.nextLine();

}

 

// 번호 선택 받기

int getSelectNum(String message) {

System.out.println(message);

if(!scanSelectNum.hasNextInt()) {

System.out.println("숫자를 입력해주세요.");

scanSelectNum.next();

return 0;

}

return scanSelectNum.nextInt();

}

 

public static void main(String[] args) {

new BookManagement();

}

 

}



package object_array_guide.member;

 

public class JavaApplication {

 

public static void main(String[] args) {

 

new MemberManagement();

 

}

 

}


 

package object_array_guide.member;

 

public class Member {

 

// 회원관리번호

int mNum;

// 회원 이름

String mName;

// 회원 아이디

String mId;

// 회원 비밀번호

String mPw;

 

 

Member() {}

 

// 회원 로그인 및 정보 검색용 생성자

Member(String mId, String mPw) {

this.mId = mId;

this.mPw = mPw;

}

 

// 회원가입 용

Member(int mNum, String mName, String mId, String mPw) {

this(mId,mPw);

this.mNum = mNum;

this.mName = mName;

}

 

boolean equals(Member member) {

if(member == null) return false;

if(this.mId.equals(member.mId) && this.mPw.equals(member.mPw)) {

return true;

}

return false;

}

 

public String toString() {

return "Member{ [mNum : "+this.mNum+"] [mName : " +this.mName +"] [ mId : " + this.mId+"]}";

}

 

}


 

package object_array_guide.member;

 

import java.util.Scanner;

 

public class MemberManagement{

 

// int count=0;

// 사용자 입력

Scanner sc = new Scanner(System.in);

 

// 회원정보 저장

Member[] members = new Member[100];

 

// 관리자 계정

Member master = new Member(100,"master","root","root");

 

// 로그인한 회원

Member loginMember = null;

 

// 프로그램 flag (true : 진행 , false : 종료)

boolean isRun = true;

 

// 메뉴 번호 선택

int selectNo;

 

// 프로그램 실행용 생성자

MemberManagement() {

// 회원목록 배열 마지막 인덱스에 관리자 계정 저장

members[members.length-1] = master;

// 회원관리 메소드 호출

isRun();

}

 

/*

* 기능 관리

*/

 

// 프로그램 실행

void isRun() {

 

while(isRun) {

System.out.println("===========================================================");

System.out.println("1.회원가입|2.로그인|3.회원목록|4.회원정보수정|5.회원탈퇴|6.프로그램 종료");

System.out.println("===========================================================");

System.out.println("메뉴 선택 > ");

 

if(!sc.hasNextInt()) {

System.out.println("번호를 입력해주세요>");

sc.next();

continue;

}

 

selectNo = sc.nextInt();

switch(selectNo) {

case 1 :

System.out.println("== 회원가입 == ");

join();

break;

case 2 :

System.out.println("== 로그인 == ");

login();

break;

case 3 :

System.out.println("== 회원목록 == ");

select();

break;

case 4 :

System.out.println("== 회원정보수정 == ");

update();

break;

case 5 :

System.out.println("== 회원탈퇴 == ");

delete();

break;

case 6 :

System.out.println("== 종료 == ");

terminate();

break;

default :

System.out.println("선택할 수 없는 번호입니다.");

} // switch 종료

} // while 종료

} // run 종료

 

// 프로그램 종료

void terminate() {

isRun = false;

}

 

// 회원 가입

void join() {

// System.out.println("회원가입 > ");

// System.out.println("사용정보를 입력해주세요--------------");

// System.out.println("아이디를 입력해주세요 >");

// String id = sc.next();

// System.out.println("비밀번호를 입력해주세요 >");

// String pw1 = sc.next();

// System.out.println("비밀번호를 확인해주세요 >");

// String pw2 = sc.next();

// if(!pw1.equals(pw2)|| !memberIdCheck(id)) {

// System.out.println("이미 사용중이거나 비밀번호가 일치하지 않습니다.");

// return;

// }

// System.out.println("이름을 입력해주세요 >");

// String name = sc.next();

// Member member = new Member(count,name,id,pw1);

// members[count] = member;

// System.out.println("회원가입 완료");

// count++;

 

System.out.println("아이디를 입력해주세요 > ");

String id = sc.next();

System.out.println("비밀번호를 입력해주세요 > ");

String pw = sc.next();

System.out.println("비밀번호를 한번 더 입력해주세요 >");

String rePw = sc.next();

// 아이디 중복 체크, 비밀번호 일치 체크

if(!memberIdCheck(id)||!pw.equals(rePw)) {

// 사용할 수 없는 중복 아이디

System.out.println("이미 사용중인 아이디 이거나 비밀번호가 일치하지 않습니다.");

return;

}

System.out.println("이름을 입력해주세요 >");

String name = sc.next();

//회원정보등록 members

for(int i = 0; i < members.length;i++) {

if(members[i] == null) {

members[i] = new Member((i+1),name,id,pw); // 회원이 등록된 index +1 : 회원관리번호(이렇게 하면 중복안됨)

System.out.println("회원가입 완료");

break;

}

}

}

 

// 로그인

void login() {

 

// System.out.println("아이디를 입력해주세요 >");

// String id = sc.next();

// System.out.println("비밀번호를 입력해주세요 >");

// String pw1 = sc.next();

// if(findMember(new Member(id,pw1))==master) {

// System.out.println("관리자 계정입니다.");

// }else if(findMember(new Member(id,pw1))==null) {

// System.out.println("일치하는 멤버가 없습니다.");

// return;

// }

// loginMember = findMember(new Member(id,pw1));

// System.out.println("정상적으로 로그인되었습니다.");

// System.out.println(loginMember);

//

System.out.println("아이디를 입력해주세요 >");

String id = sc.next();

System.out.println("비밀번호를 입력해주세요 >");

String pw = sc.next();

/*// 굳이 이렇게 변수m 선언 할 필요 x

Member m = new Member(id,pw);

Member member = findMember(m);

*/

Member member = findMember(new Member(id,pw));

if(member==null) {

System.out.println("일치하는 사용자 정보가 존재하지 않습니다.");

return;

}

//id와 pw가 일치하는 인증된 사용자 존재

System.out.println("정상적으로 로그인되었습니다.");

//프로그램 종료 시 까지 유지되는 필드에 로그인 된 사용자 정보 저장

loginMember = member;

System.out.println(loginMember);

if(loginMember == master ) {

System.out.println("관리자 계정");

}

}

 

// 회원목록 - 로그인한 회원이 관리자 일때만 노출

void select() {

// System.out.println("회원목록 >");

// if(loginMember==null) {

// System.out.println("로그인하시기 바랍니다.");

// return;

// }

// if(loginMember.equals(master)){

// for(int i=0;i<members.length;i++) {

// if(members[i]!=null) {

// System.out.println(members[i]);

// }

// }

// }else {

// System.out.println("관리자만 확인가능한 메뉴입니다.");

// }

 

if(loginMember != master) { //주소값 비교하는거니까 이렇게 사용 가능.

System.out.println("관리자만 확인 가능한 메뉴입니다.");

return;

}

for(Member m : members) {

if(m != null)System.out.println(m.toString());

}

}

 

// 회원정보 수정 - 로그인한 회원 정보랑 일치 하거나 관리자 일때만 수정(이름정보만 수정)

void update() {

// System.out.println("내정보 수정 -----");

// System.out.println("비밀번호를 한번 더 입력해주세요>");

// String pw = sc.next();

// if(loginMember==null) {

// System.out.println("로그인하시기 바랍니다.");

// return;

// }

// if(loginMember.equals(master)){

// for(int i=0;i<members.length;i++) {

// if(members[i]!=null) {

// System.out.println(members[i]);

// }

// }

// System.out.println("수정할 회원 번호를 입력해주세요.");

// int num = sc.nextInt();

// System.out.println("수정할 회원의 이름을 입력해주세요 >");

// String name = sc.next();

// for(int i=0;i<members.length;i++) {

// if(members[i]!=null) {

// if(members[i].mNum==num) {

// members[i].mName=name;

// }

// }

// }

// System.err.println("수정완료");

// }else if(loginMember.mPw.equals(pw)){

// System.out.println("수정할 이름을 입력해주세요 >");

// String name = sc.next();

// loginMember.mName = name;

// System.out.println("내정보 수정완료");

// }else {

// System.out.println("계정 정보가 일치하지 않습니다.");

// }

 

//개인회원 - 자신의 이름정보 수정

//관리자 - 전체 회원의 이름 정보 수정

// 비로그인시 기능 수행 불가

if(loginMember == null) {

System.out.println("로그인 이후 사용가능한 메뉴입니다.");

return;

}

 

if(loginMember != master) {

//일반회원

System.out.println("== 내 정보 수정 ==");

System.out.println("비밀번호를 입력해 주세요.");

String pw = sc.next();

if(!loginMember.mPw.equals(pw)) {

System.out.println("비밀번호가 일치하지 않습니다.");

return;

}

System.out.println("수정할 이름을 입력해주세요 > ");

loginMember.mName = sc.next();

System.out.println("수정이 완료되었습니다.");

System.out.println(loginMember);

}else {

//관리자

System.out.println("== 관리자 회원 정보 수정 ==");

// 관리자 일 경우 등록된 회원 정보 출력

select();

System.out.println("수정할 회원 번호를 입력해주세요 > ");

int num = sc.nextInt();

for(int i = 0; i< members.length; i++) {

if(members[i]!=null && members[i].mNum == num) {

System.out.println("수정할 회원의 이름을 입력해주세요.");

String name = sc.next();

members[i].mName = name;

System.err.println("수정 완료");

return;

}

}//end for

System.out.println("일치하는 사용자를 찾을 수 없습니다.");

}//end if

}// end update

// 회원탈퇴 - 삭제 할려는 정보가 본인 정보일때만 삭제

void delete() {

System.out.println("회원탈퇴 >");

// if(loginMember==null) {

// System.out.println("로그인하시기 바랍니다.");

// return;

// }

// if(loginMember.equals(master)) {

// System.out.println("master 계정은 삭제할 수 없습니다.");

// }else {

// System.out.println("정말로 탈퇴 하시겠습니까? y/n");

// char delete = sc.next().charAt(0);

// if(delete=='y'|delete=='Y') {

// deleteMember();

// System.out.println("회원탈퇴 완료");

// }else {

// System.out.println("취소되었습니다.");

// }

// }

 

//관리자 계정은 삭제 불가

if(loginMember == master) {

System.out.println("관리자 계정은 삭제할 수 없습니다.");

return;

}

System.out.println("정말로 탈퇴 하시겠습니까? y/n");

 

//sc.next().charAt(0); : 스캐너 next에서 제일 앞에 문자만 잘라올때 사용

// 0 1 2

//[y][e][s]

char c = sc.next().charAt(0);

switch(c) {

case 'Y': case 'y' : case 'ㅛ':

// 회원정보 삭제

deleteMember();

break;

default : System.out.println("취소되었습니다.");

}

}

 

// 사용자 아이디 중복 체크 - 동일한 아이디 값으로 등록된 회원 정보 검색

// 이미 존재하는 아이디 일경우 : false, 사용가능한 아이디 일 경우 : true

boolean memberIdCheck(String mId) {

for(Member m : members) {

if(m != null && m.mId.equals(mId)) {

return false;

}

}

return true;

}

 

// 회원 아이디와 비밀번호로 회원 찾기

Member findMember(Member m) {

for(Member member : members) {

if(member != null && member.equals(m)) {

return member;

}

}

return null;

}

 

// 회원 정보 삭제

void deleteMember() {

for(int i=0; i<members.length; i++) {

if(members[i].equals(loginMember)) {

members[i] = null;

loginMember = null;

System.out.println("회원탈퇴 완료");

return;

}

}

}

}