1. 위와같은 간단한 프레임창 구현한 JFrame 상속 받는 Main 파일
mport java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
class Main extends JFrame {
JTextField id;
JTextField pw;
public Main() {
super("회원가입 및 로그인");
MemberRepository repo = new MemberRepository();
JPanel main = new JPanel();
JPanel sub1 = new JPanel();
sub1.setLayout(new BoxLayout(sub1, BoxLayout.Y_AXIS));
JPanel sub2 = new JPanel();
id = new JTextField(10);
pw = new JTextField(10);
JButton join = new JButton("회원가입");
JButton login = new JButton("로그인하기");
JLabel answer = new JLabel("");
sub2.add(answer);
join.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
repo.join(new Member(id.getText(), pw.getText()));
}
});
login.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
repo.read();
Member member = new Member(id.getText(), pw.getText());
answer.setText(repo.login(member));
}
});
setSize(500, 200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(main);
sub1.add(id);
sub1.add(pw);
main.add(sub1, "North");
sub2.add(join);
sub2.add(login);
main.add(sub2, "South");
}
}
public class Main2 {
public static void main(String[] args) {
new Main().setVisible(true);
MemberRepository repo = new MemberRepository();
}
}
2. 입력받은 정보를 저장하고 읽는 Member Repository 클래스
DataInputStream에서 저장된 정보를 읽으면서
임의로 지정한 Member타입의 해쉬맵에 아이디를 Key값으로 비밀번호를 Value값으로 넣어줌
비밀번호는 중복 가능하지만 아이디는 중복될 수 없기 때문에 key값이 중복되지 않는 HashMap의 특성을 사용하려 함
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
public class MemberRepository {
HashMap<String, String> map;
public void join(Member member) {
try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("memberdata.bin", true))) {
dos.writeUTF(member.getId());
dos.writeUTF(member.getPw());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public HashMap<String, String> read() {
map = new HashMap<>();
try (DataInputStream is = new DataInputStream(new FileInputStream("memberdata.bin"))) {
while (true) {
String id = is.readUTF();
String pw = is.readUTF();
map.put(id, pw);
}
} catch (EOFException e) {
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(map);
return map;
}
public String login(Member member) {
String answer;
if (map.containsKey(member.getId()) && map.get(member.getId()).equals(member.getPw())) {
answer = "환영합니다 ^^";
} else {
answer = "없는 회원입니다!";
}
return answer;
}
}
3. 아이디와 비밀번호라는 필드 값을 가지는 memeber 객체 (둘다 String으로 설정함)
public class Member {
private String id;
private String pw;
Member() {
}
@Override
public String toString() {
return "Member [id=" + id + ", pw=" + pw + "]";
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public Member(String id, String pw) {
super();
this.id = id;
this.pw = pw;
}
}
'JAVA' 카테고리의 다른 글
JFileChooser이용해서 파일 열기 , 파일 저장하기, 다른 이름으로 저장하기 ( ActionCommand로 수정해볼 예정) (0) | 2022.01.25 |
---|---|
JAVA IO 정리 (0) | 2022.01.25 |
ObjectOutputStream / ObjectInputStream (객체 스트림, 직렬화(인터페이스 serializable) (0) | 2022.01.25 |
DataOutputStream / DataInputStream ( 데이터 타입별 입출력) (0) | 2022.01.25 |
BufferedReader / BufferedWriter / PrintWriter (한 줄씩 보는 경우 사용) (0) | 2022.01.24 |