회원 관리 프로그램 작성하기
- 프로그램을 실행하면 /tmp/users.dat 파일에서 회원정보를 불러온다.
- 해당 파일이 없으면 읽어오지 않는다.
- 프로그램 종료 시 메모리에 있는 회원정보를 /tmp/users.dat에 저장한다.
- 프로그램을 강제 종료 시 입력된 회원정보는 저장되지 않을 수 있다.
기능
1. 회원 등록
2. 회원목록 보기
3. 회원정보 수정
4. 회원정보 삭제
5. 종료
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;
}
@Override
public String toString() {
return "User{" +
"email='" + email + '\'' +
", name='" + name + '\'' +
", birthYear=" + birthYear +
'}';
}
}
UserDao
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 e){
e.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 e){
e.printStackTrace();
}
return list;
}
}
UserUI
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 e){
e.printStackTrace();
}
return menuId;
}
public String inputEmail(){
System.out.println("수정할 회원의 email을 입력하세요");
String email = "";
try {
email = br.readLine();
}catch (Exception e){
e.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 e){
e.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 e){
e.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();
}
}
}
UserMain
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 UserServiceInMomory(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
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
package com.example.IO;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
//메모리상에 User정보를 관리하는 클래스
public class UserServiceInMomory implements UserService{
private List<User> users;
public UserServiceInMomory(){
this.users = new ArrayList<>();
}
public UserServiceInMomory(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;
}
}
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 exists(String email) {
if (findIndex(email) >= 0){
return true;
}else {
return false;
}
}
@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();
}
}
'JAVA' 카테고리의 다른 글
Record 클래스 (0) | 2023.09.20 |
---|---|
채팅 프로그램 만들어보기 (0) | 2023.09.07 |
네트워크 프로그래밍 - 2 (0) | 2023.09.07 |
네트워크 프로그래밍 - 1 (0) | 2023.09.05 |
쓰레드(Thread) 개념, 실행방법 (0) | 2023.09.05 |
댓글