728x90

☕ 회원 관리 프로그램 만들기
1. 회원 등록
2. 회원 목록 보기
3. 종료
- 프로그램을 실행하면 /tmp/users.dat 파일에서 회원정보를 읽어온다
- 해당 파일이 없을 경우 읽어오지 않는다
- 프로그램 종료시, 메모리에 있는 회원정보를 /tmp/users.dat에 저장한다
- 프로그램을 강제 종료하면 입력된 회원 정보는 저장이 안될 수도 있다.
☕ 회원 등록 구현
- 회원의 email을 입력하세요: urstory@gmail.com
- 회원의 이름을 입력하세요: 홍길동
- 회원의 생년을 입력하세요: 1980
- 등록되었습니다.
☕ 회원 등록 구현 예제 파일
UserMain.java
package com.example.io;
import java.util.List;
public class UserMain {
public static void main(String[] args) {
UserUI userUI = new UserUI();
UserDao userDao = new UserDao("/tmp/users.dat");
List<User> users = userDao.getUsers();
while(true){
int menuId = userUI.menu();
if(menuId == 5) {
System.out.println("종료합니다");
userDao.saveUser(users);
break;
} else if (menuId == 1) {
User user = userUI.regMenu();
users.add(user);
System.out.println("등록되었습니다");
} else if(menuId == 2){
userUI.printUserList(users);
}
}
}
}
UserUI
package com.example.io;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.List;
public class UserUI {
private BufferedReader br;
public UserUI(){
br= new BufferedReader(new InputStreamReader(System.in));
}
public int menu(){
System.out.println("1. 회원 등록");
System.out.println("2. 회원 목록 보기");
System.out.println("5. 종료");
int menuId = -1;
try {
String line = br.readLine();
menuId = Integer.parseInt(line); // 문자열을 정수로 변환
}catch (Exception ex){
ex.printStackTrace();
}
return menuId;
}
public User regMenu(){
try{
System.out.println("email을 입력하세요");
String email = br.readLine();
System.out.println("이름을 입력하세요");
String name = br.readLine();
System.out.println("생년을 입력하세요");
String strBirthYear = br.readLine();
int birthYear = Integer.parseInt(strBirthYear);
User user = new User(email, name, birthYear);
return user;
}catch (Exception ex){
ex.printStackTrace();
return null;
}
}
public void printUserList(List<User> users){
System.out.println("email 이름 생년");
System.out.println("==============================");
for(int i=0; i<users.size(); i++){
User user = users.get(i);
System.out.println(user.getEmail());
System.out.println(" ");
System.out.println(user.getName());
System.out.println(" ");
System.out.println(user.getbirthYear());
System.out.println(" ");
}
}
}
User
package com.example.io;
import java.io.Serializable;
public class User implements Serializable {
private String email;
private String name;
private int birthYear;
public User(String email, String name, int birthYear){
this. email = email;
this.name = name;
this.birthYear = birthYear;
}
public String getEmail(){
return email;
}
public String getName(){
return name;
}
public int getbirthYear(){
return birthYear;
}
}
UserDao
package com.example.io;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
* 파일에서 List<User>정보를 저장하거나 읽어오는 기능
*/
public class UserDao {
private String filename;
public UserDao(String filename){
this.filename = filename;
}
public void saveUser(List<User> list){
try(ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(filename))){
out.writeObject(list);
}catch(Exception ex){
ex.printStackTrace();
}
}
public List<User> getUsers(){
File file = new File(filename);
if(!file.exists()){
return new ArrayList<>();
}
List<User> list = null;
try(ObjectInputStream in = new ObjectInputStream(new FileInputStream(filename))){
list = (List<User>)in.readObject();
}catch (Exception ex){
ex.printStackTrace();
}
return list;
}
}
☕ 회원 등록 최종 구현(등록/목록/정보수정/삭제)
User.java
package com.example.io;
import java.io.Serializable;
public class User implements Serializable {
private String email;
private String name;
private int birthYear;
public User(String email, String name, int birthYear){
this. email = email;
this.name = name;
this.birthYear = birthYear;
}
public String getEmail(){
return email;
}
public String getName(){
return name;
}
public int getbirthYear(){
return birthYear;
}
}
UserDao.java
package com.example.io;
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 파일에서 List<User>정보를 저장하거나 읽어오는 기능
*/
public class UserDao {
private String filename;
public UserDao(String filename){
this.filename = filename;
}
public void saveUser(Iterator<User> iter){
List<User> users = new ArrayList<>();
while(iter.hasNext()){
User user = iter.next();
users.add(user);
}
try(ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(filename))){
out.writeObject(users);
}catch(Exception ex){
ex.printStackTrace();
}
}
public List<User> getUsers(){
File file = new File(filename);
if(!file.exists()){
return new ArrayList<>();
}
List<User> list = null;
try(ObjectInputStream in = new ObjectInputStream(new FileInputStream(filename))){
list = (List<User>)in.readObject();
}catch (Exception ex){
ex.printStackTrace();
}
return list;
}
}
UserMain.java
package com.example.io;
import java.util.List;
public class UserMain {
public static void main(String[] args) {
UserUI userUI = new UserUI();
UserDao userDao = new UserDao("/tmp/users.dat");
UserService userService = new UserServiceInMemory(userDao.getUsers());
while(true){
int menuId = userUI.menu();
if(menuId == 5) {
System.out.println("종료합니다");
userDao.saveUser(userService.getUsers());
break;
} else if (menuId == 1) {
User user = userUI.regUser();
userService.addUser(user);
System.out.println("등록되었습니다");
} else if(menuId == 2){
userUI.printUserList(userService.getUsers());
} else if (menuId == 3) {
String email = userUI.inputEmail();
boolean isFindEmail = userService.exists(email);
if(isFindEmail) {
User updateUser = userUI.inputUser(email);
userService.updateUser(updateUser);
System.out.println("수정되었습니다");
}else{ // 찾지 못했다.
System.out.println("수정할 회원 정보가 없습니다");
}
} else if (menuId == 4) {
String email = userUI.inputEmail();
boolean isFindEmail = userService.exists(email);
if(isFindEmail){
userService.deleteUser(email);
System.out.println("삭제하였습니다.");
}else{
System.out.println("삭제 할 회원 정보가 없습니다.");
}
}
}
}
}
UserService.java
package com.example.io;
import java.util.Iterator;
import java.util.List;
public interface UserService {
// 회원정보를 등록하다
public void addUser(User user);
// 회원정보를 수정하다. user.getEmail()에 해당하는 회원정보를 수정하다
public boolean updateUser(User user);
// 회원정보를 삭제하다
public boolean deleteUser(String email);
// 모든 회원정보를 반환하다
public Iterator<User> getUsers();
// email에 해당하는 회원정보가 있을 경우 0보다 큰 값을 반환
public boolean exists(String email);
}
UserServiceInMemory.java
package com.example.io;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
// 메모리상에 User 정보를 관리하는 클래스
public class UserServiceInMemory implements UserService {
private List<User> users;
public UserServiceInMemory() {
this.users = new ArrayList<>();
}
public UserServiceInMemory(List<User> users) {
this.users = users;
}
@Override
public void addUser(User user) {
users.add(user);
}
@Override
public boolean updateUser(User user) {
boolean deleteFlag = deleteUser(user.getEmail());
if(deleteFlag) {
users.add(user);
return true;
}else{
return false;
}
}
@Override
public boolean exists(String email) {
if(findIndex(email) >= 0)
return true;
else
return false;
}
private int findIndex(String email){
int findIndex = -1;
for (int i = 0; i < users.size(); i++) {
if (users.get(i).getEmail().equals(email)) {
findIndex = i;
break;
}
}
return findIndex;
}
@Override
public boolean deleteUser(String email) {
int findIndex = findIndex(email);
if (findIndex > -1) {
users.remove(findIndex);
return true;
}else {
return false;
}
}
// 필드 users 정보를 그대로 리턴할 것이냐?
// users 정보를 복사한 후 리턴할 것이냐?
@Override
public Iterator<User> getUsers() {
return users.iterator();
}
}
UserUI.java
package com.example.io;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.List;
public class UserUI {
private BufferedReader br;
public UserUI(){
br= new BufferedReader(new InputStreamReader(System.in));
}
public int menu(){
System.out.println("1. 회원 등록");
System.out.println("2. 회원 목록 보기");
System.out.println("3. 회원 정보 수정하기");
System.out.println("4. 회원 정보 삭제하기");
System.out.println("5. 종료");
int menuId = -1;
try {
String line = br.readLine();
menuId = Integer.parseInt(line); // 문자열을 정수로 변환
}catch (Exception ex){
ex.printStackTrace();
}
return menuId;
}
public String inputEmail(){
System.out.println("수정할 회원의 email을 입력해주세요");
String email = "";
try {
email = br.readLine();
}catch (Exception ex){
ex.printStackTrace();
}
return email;
}
public User inputUser(String email){
try{
System.out.println(email + "회원 정보를 수정합니다.");
System.out.println("이름을 입력하세요");
String name = br.readLine();
System.out.println("생년을 입력하세요");
String strBirthYear = br.readLine();
int birthYear = Integer.parseInt(strBirthYear);
User user = new User(email, name, birthYear);
return user;
}catch (Exception ex){
ex.printStackTrace();
return null;
}
}
public User regUser(){
try{
System.out.println("email을 입력하세요");
String email = br.readLine();
System.out.println("이름을 입력하세요");
String name = br.readLine();
System.out.println("생년을 입력하세요");
String strBirthYear = br.readLine();
int birthYear = Integer.parseInt(strBirthYear);
User user = new User(email, name, birthYear);
return user;
}catch (Exception ex){
ex.printStackTrace();
return null;
}
}
public void printUserList(Iterator<User> iter){
System.out.println("email 이름 생년");
System.out.println("==============================");
while(iter.hasNext()){
User user = iter.next();
System.out.println(user.getEmail());
System.out.println(" ");
System.out.println(user.getName());
System.out.println(" ");
System.out.println(user.getbirthYear());
System.out.println(" ");
}
}
}
728x90
'개발&etc > JAVA' 카테고리의 다른 글
[Java] 이것이 자바다 - #변수 (0) | 2023.04.10 |
---|---|
[Java] 이것이 자바다 - #자바 시작하기 (0) | 2023.04.10 |
[JAVA] Java IO 2편 (0) | 2023.04.07 |
[JAVA] Java IO 1편 (0) | 2023.04.07 |
[JAVA] 익명클래스와 처음 만나는 람다 (0) | 2023.04.06 |