수업관련
a
김대니
2020. 5. 22. 13:51
package memberManager;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
import java.util.ArrayList;
import java.util.Scanner;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
/*
*
*
*/
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 여러곳에서 자주 사용되는 로직을 담는다.
DB db = new DB();
db.loadGlobal();
// 데이터 Access Object, 오직 이 객체가, 실제로 어디에 파일이 저장되고,
// 어떤 형태로(XML 또는 JSON) 저장되는지 알고 있다.
MemberDao articleDao = new MemberDao(db);
// 핵심로직을 담고 있다.
MemberService articleService = new MemberService(articleDao);
// 고객의 요청을 받아서 service의 적절한 기능 호출
MemberController controller = new MemberController(articleService);
controller.setScanner(scanner);
while (true) {
controller.shwHelp();
System.out.print(" > ");
String cmd = scanner.next().trim();
if (cmd.equals("join")) {
scanner.nextLine();
controller.doCommandJoin();
} else if (cmd.equals("help")) {
controller.shwHelp();
// } else if (cmd.equals("modify")) {
// scanner.nextLine();
// controller.doCommandModify();
} else if (cmd.equals("login")) {
scanner.nextLine();
// controller.doCommandLonIn();
// } else if (cmd.equals("logout")) {
// scanner.nextLine();
// controller.doCommandLogOut();
} else if (cmd.equals("exit")) {
System.out.println("프로그램을 종료합니다.");
break;
}
}
scanner.close();
}
}
class MemberController {
MemberService memberService;
Scanner scanner;
Member loggedInMember;
MemberController(MemberService memberService) {
this.memberService = memberService;
loggedInMember = null;
}
public void doCommandJoin() {
System.out.println("== 회원가입 ==");
String id;
String pw;
String pwCheck;
String nickName;
while (true) {
System.out.printf("사용하실 아이디를 입력해 주십시오.%n");
System.out.printf(" >");
id = scanner.next().trim();
if (id.length() == 0) {
System.out.println("아이디를 입력해 주십시요.");
continue;
}
if (id.length() < 3) {
System.out.println("아이디는 3자 이상이어야 합니다.");
continue;
}
if (memberService.isUsedId(id) == true ) {
System.out.println("이미 사용중인 아이디 입니다.");
continue;
}
break;
}
while (true) {
boolean pwValid = true;
while (true) {
System.out.printf("사용하실 비밀번호를 입력해 주십시오.%n");
System.out.printf(" >");
pw = scanner.next().trim();
if (pw.length() == 0) {
System.out.println("비밀번호를 입력해 주십시요.");
continue;
}
if (pw.length() < 4) {
System.out.println("비밀번호는 4자 이상이어야 합니다.");
continue;
}
break;
}
while (true) {
System.out.println("로그인 비밀번호 확인 : ");
System.out.printf(" >");
pwCheck = scanner.next().trim();
if (pwCheck.length() == 0) {
System.out.println("비밀번호 확인을 위해 비밀번호를 다시 입력해주십시오.");
continue;
}
if (pwCheck.equals(pw) == false) {
System.out.println("입력한 비밀번호가 일치하지 않습니다.");
pwValid = false;
break;
}
break;
}
if (pwValid) {
break;
}
}
System.out.printf("사용하실 닉네임을 입력해 주십시오.%n");
System.out.printf(" >");
nickName = scanner.next().trim();
System.out.printf("아이디 : %s 비밀번호 : %s 닉네임 : %s%n", id, pw, nickName);
System.out.println("이대로 진행하시겠습니까? y / n");
System.out.print("> ");
String yn = scanner.next().trim();
if (yn.equals("y")) {
memberService.join(id, pw, nickName);
System.out.printf("%s님의 회원가입을 환영합니다.%n%n", nickName);
}
}
public void doCommandLonIn() {
System.out.println("== 로그인 ==");
System.out.printf("아이디를 입력해 주십시오.%n");
System.out.printf(">");
String id = scanner.next().trim();
System.out.printf("비밀번호를 입력해 주십시오.%n");
System.out.printf(">");
String pw = scanner.next().trim();
memberService.login(id, pw);
}
// public void doCommandModify() {
// }
// public void doCommandLogOut() {
// }
public void shwHelp() {
System.out.println("== 회원 관리 프로그램 ==");
System.out.printf("join - 회원가입%n");
System.out.printf("login - 로그인%n");
System.out.printf("logout - 로그아웃%n");
System.out.printf("modify - 회원 정보 수정%n");
System.out.printf("exit - 프로그램 종료%n");
}
public void setScanner(Scanner scanner) {
this.scanner = scanner;
}
}
class MemberService {
MemberDao memberDao;
MemberService(MemberDao articleDao) {
this.memberDao = articleDao;
}
boolean checkId(String id) {
if (isUsedId(id)) {
return true;
}
return false;
}
boolean isUsedId(String id) { // true = 가입된 아이디, false = 가입되지 않은 아이디.
return memberDao.isUsedId(id);
}
public void login(String id, String pw) {
memberDao.login(id, pw);
}
public void join(String id, String pw, String nickName) {
memberDao.join(id, pw, nickName);
}
}
class MemberDao {
DB db;
Member[] members;
int lastMemberIndex;
int lastMemberOwnId;
MemberDao(DB db) {
this.db = db;
members = db.getMembersFromFiles();
for (int i = 0; i < members.length; i++) {
if (members[i] == null) {
lastMemberIndex = i - 1;
break;
}
}
lastMemberOwnId = db.getLastMemberOwnId();
}
boolean isUsedId(String id) {//멤버가 널일때 false = 사용된 아이디가 아니다.
Member member = db.getMemberById(id);
if (member == null) {
return false;
}
return true;
}
public void login(String id, String pw) {
Member loggingInMember = new Member();
Member m =
}
public void join(String id, String pw, String nickName) {
int ownId = lastMemberOwnId + 1;
String regDate = Util.getNowDateStr();
Member member = new Member(id, pw, nickName, regDate, ownId);
lastMemberIndex++;
members[lastMemberIndex] = member;
String memberFilePath = "member/" + member.ownId + ".txt";
db.writeMemberJsonFile(memberFilePath, member);
lastMemberOwnId++;
db.updateLastMemberOwnId(lastMemberOwnId);
}
}
class Member {
public String id;
public String pw;
public String nickName;
public int ownId;
public String regDate;
public Member() {
}
public Member(String id, String pw, String nickName, String regDate, int ownId) {
this.id = id;
this.pw = pw;
this.nickName = nickName;
this.regDate = regDate;
this.ownId = ownId;
}
@Override
public String toString() {
return String.format("Member [id=%s, pw=%s, nickName=%s, ownId=%s, regDate=%s]", id, pw, nickName, ownId,
regDate);
}
}
class DB {
Global global;
void init() {// 일치
loadGlobal();
}
Member getMemberById(String id) {
List<Member> members = getMembers();
for (Member member : members) {
if (member.id.equals(id)) {
return member;
}
}
return null;
}
List<Member> getMembers() {
List<Member> members = new ArrayList<>();
int lastId = getLastMemberOwnId();
for (int i = 1; i <= lastId; i++) {
String filePath = "member/" + i + ".txt";
Member member = readMemberFromJsonFile(filePath);
if (member != null) {
members.add(member);
}
}
return members;
}
public void loadGlobal() {// 일치
global = readGlobalFromJsonFile("global.txt");
}
Global readGlobalFromJsonFile(String filePath) {// 일치
ObjectMapper om = new ObjectMapper();
Global global = null;
try {
global = om.readValue(new File(filePath), Global.class);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
global = new Global();
writeGlobalJsonFile(filePath, global);
}
return global;
}
void writeGlobalJsonFile(String filePath, Global global) {// 일치
ObjectMapper om = new ObjectMapper();
try {
om.writeValue(new File(filePath), global);
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void updateLastMemberOwnId(int lastMemberOwnId) {// 일치
global.lastMemberOwnId = lastMemberOwnId;
writeGlobalJsonFile("global.txt", global);
}
void writeMemberJsonFile(String filePath, Member member) {// 일치
String folderPath = "member";// 멤버폴더 먼저 만들기
File Folder = new File(folderPath);
if (!Folder.exists()) {
Folder.mkdir();
}
ObjectMapper om = new ObjectMapper();
try {
om.writeValue(new File(filePath), member);
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public int getLastMemberOwnId() {// 일치
return global.lastMemberOwnId;
}
Member[] getMembersFromFiles() {// 일치
Member[] members = new Member[100];
int lastMemberOwnId = getLastMemberOwnId();
int membersIndex = 0;
for (int i = 1; i <= lastMemberOwnId; i++) {
String fileName = "member/" + i + ".txt";
Member member = readMemberFromJsonFile(fileName);
if (member != null) {
members[membersIndex] = member;
membersIndex++;
}
}
return members;
}
Member readMemberFromJsonFile(String filePath) {// 일치
ObjectMapper om = new ObjectMapper();
Member member = null;
try {
member = om.readValue(new File(filePath), Member.class);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
} catch (IOException e) {
e.printStackTrace();
}
return member;
}
}
class Util {
static String getNowDateStr() {
Calendar cal = Calendar.getInstance();
SimpleDateFormat Date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = Date.format(cal.getTime());
return dateStr;
}
}
class Global {
public int lastMemberOwnId;
Global() {
lastMemberOwnId = 0;
}
}