프로그램 구현 시 중점 구현 알고리즘
프로세스의 순서가 정해져 있다는 가정하에
1. 시스템코드 클래스의 각 순서에 맞는 상수값을 지정하고
2. (While) 구문 실행 시 실행 단계를 증감시키고
3. Switch Case 구문을 통해서
현재 프로세스에 맞는 등록 기능을 실행 시킴
프로그램 출력 결과물
사용자 등록을 하시겠습니까? (Y/N)
Y
이름(을)를 입력하세요
안희수
입력받은 이름은(는) 안희수 입니다.
다시 입력 하시겠습니까? (Y/N)
N
나이(을)를 입력하세요
33
입력받은 값은 33 입니다.
다시 입력 하시겠습니까? (Y/N)
Y
나이(을)를 입력하세요
34
입력받은 값은 34 입니다.
다시 입력 하시겠습니까? (Y/N)
N
성별(을)를 입력하세요
남자
입력받은 성별은(는) 남자 입니다.
다시 입력 하시겠습니까? (Y/N)
N
전화번호(을)를 입력하세요
010-1234-5678
입력받은 전화번호은(는) 010-1234-5678 입니다.
다시 입력 하시겠습니까? (Y/N)
N
메일주소(을)를 입력하세요
anhesu4@gmail.com
입력받은 메일주소은(는) anhesu4@gmail.com 입니다.
다시 입력 하시겠습니까? (Y/N)
Y
메일주소(을)를 입력하세요
anhesu11@naver.com
입력받은 메일주소은(는) anhesu11@naver.com 입니다.
다시 입력 하시겠습니까? (Y/N)
N
Name:안희수
Gender:남자
Age:34
Phone:010-1234-5678
Email:anhesu11@naver.com
1. SystemCode
시스템 코드 정의 클래스
package study;
public class SystemCode {
public final static int Name = 0;
public final static int Age = 1;
public final static int Gender = 2;
public final static int PhoneNumber = 3;
public final static int EmailAddress = 4;
public final static int Exit = 5;
public enum AskProcess{
Name,Age,Gender,PhoneNumber,EmailAddress,Exit
}
}
2. UserAccount
사용자 계정 객체 클래스
package study;
public class UserAccount {
private UserInfo _user;
private class UserInfo {
String _name;
int _age;
String _gender;
String _phone;
String _Mail;
}
public void CreateUser() {
UserInfo info = new UserInfo();
_user = info;
}
public String getName() {
String name = _user._name;
return name;
}
public void SetName(String name) {
if(_user != null) {
_user._name = name;
}
}
public int getAge() {
int age = _user._age;
return age;
}
public void SetAge(int age) {
if(_user != null) {
_user._age = age;
}
}
public String getGender() {
String gender = _user._gender;
return gender;
}
public void SetGender(String gender) {
if(_user != null) {
_user._gender = gender;
}
}
public String getPhone() {
String phone_number = _user._phone;
return phone_number;
}
public void SetPhone(String phone_number) {
if(_user != null) {
_user._phone = phone_number;
}
}
public String getMail() {
String Email = _user._Mail;
return Email;
}
public void SetMail(String Email) {
if(_user != null) {
_user._Mail = Email;
}
}
}
3. InputData
입력 데이터 처리 클래스
package study;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class InputData {
public Object inputData;
public boolean _isBlank = false;
public boolean _isConfirm = false;
public static String Target = "";
public void getType(String str) {
// 데이터 형 파악
if(!_isBlank) {
// 전화번호 정규식
// 이메일 정규식
}
}
public boolean ConfirmValue(Integer step ,String Parameter, UserAccount account) throws IOException {
_isConfirm = true;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Target = get_Target(step);
System.out.println(String.format("%s를 입력하세요", Target));
String str = br.readLine();
if(tryPaseInt(str)) {
inputData = Integer.parseInt(str);
} else {
inputData =str;
}
if (_isBlank) {
System.out.println("입력값이 공백입니다.");
System.out.println(String.format("%s를 입력하세요", Target));
_isConfirm = false;
}
if(Parameter == "S") {
if(inputData instanceof String) {
System.out.println(String.format("입력받은 %s은(는) " + str + " 입니다.", Target));
System.out.println("다시 입력 하시겠습니까? (Y/N)");
String YesOrNo = br.readLine();
if(YesOrNo.equals("Y")) {
return false;
}
if(step ==SystemCode.Name ){
Target = get_Target(step);
account.SetName(str);
}
else if(step ==SystemCode.Gender ){
Target = get_Target(step);
account.SetGender(str);
}
else if(step ==SystemCode.Age ){
Target = get_Target(step);
account.SetAge(Integer.parseInt(str));
}
else if(step ==SystemCode.PhoneNumber ){
Target = get_Target(step);
account.SetPhone(str);
}
else if(step ==SystemCode.EmailAddress ){
Target = get_Target(step);
account.SetMail(str);
}
} else {
System.out.println("잘못된 형식의 입력값 입니다. " + str);
return false;
}
} else if (Parameter == "I") {
if(!(inputData instanceof String)) {
System.out.println("입력받은 값은 " + str + " 입니다.");
System.out.println("다시 입력 하시겠습니까? (Y/N)");
String YesOrNo = br.readLine();
if(YesOrNo.equals("Y")) {
return false;
}
if(step ==SystemCode.Name ){
Target = get_Target(step);
account.SetName(str);
}
else if(step ==SystemCode.Gender ){
Target = get_Target(step);
account.SetGender(str);
}
else if(step ==SystemCode.Age ){
Target = get_Target(step);
account.SetAge(Integer.parseInt(str));
}
else if(step ==SystemCode.PhoneNumber ){
Target = get_Target(step);
account.SetPhone(str);
}
else if(step ==SystemCode.EmailAddress ){
Target = get_Target(step);
account.SetMail(str);
}
} else {
System.out.println("잘못된 형식의 입력값 입니다. " + str);
return false;
}
}
return _isConfirm;
}
boolean tryPaseInt(String in) {
boolean result;
try {
Integer.parseInt(in);
result = true;
}catch (NumberFormatException e) {
result = false;
}
return result;
}
boolean Regular_Expression(String matches, Integer kind) {
boolean result = false;
if(kind == SystemCode.PhoneNumber) { // 전화번호
}
if(kind == SystemCode.EmailAddress) { // 이메일
}
return result;
}
boolean IsEmpty(String input) {
boolean _isEmpty;
if(input.isBlank() || input.isEmpty()) {
_isEmpty = true;
} else {
_isEmpty = false;
}
return _isEmpty;
}
private String get_Target(Integer step) {
String _Target = null;
switch (step) {
case SystemCode.Name:
_Target = "이름";
break;
case SystemCode.Gender:
_Target = "성별";
break;
case SystemCode.Age:
_Target = "나이";
break;
case SystemCode.PhoneNumber:
_Target = "전화번호";
break;
case SystemCode.EmailAddress:
_Target = "메일주소";
break;
}
return _Target;
}
}
4. Main_Program
메인 프로그램
package study;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import study.SystemCode.AskProcess;
public class Main_Program {
public static Integer step = 0;
public static String Target = "";
public static InputData input;
//public static Scanner sc;
public static void main(String[] args) throws IOException {
boolean RunProcess = true;
//Scanner sc = new Scanner(System.in);
String YesOrNo = "";
String str = "";
System.out.println("사용자 등록을 하시겠습니까? (Y/N)");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
str = br.readLine();
if(str.equals("Y")) {
UserAccount Account = new UserAccount();
Account.CreateUser();
input = new InputData();
step = 0;
ChangeTarget(step);
do {
ChangeTarget(step);
input = new InputData();
if(step == SystemCode.Age) {
if(input.ConfirmValue(step, "I", Account)) {
step ++;
}
RunProcess = true;
} else {
if(input.ConfirmValue(step, "S", Account)) {
step ++;
}
RunProcess = true;
}
if(step == SystemCode.Exit) {
RunProcess = false;
System.out.println("Name:" + Account.getName());
System.out.println("Gender:" + Account.getGender());
System.out.println("Age:" + Account.getAge());
System.out.println("Phone:" + Account.getPhone());
System.out.println("Email:" + Account.getMail());
}
} while(RunProcess);
}
}
private static void ChangeTarget(Integer step) {
switch (step) {
case SystemCode.Name:
Target = "이름";
break;
case SystemCode.Gender:
Target = "성별";
break;
case SystemCode.Age:
Target = "나이";
break;
case SystemCode.PhoneNumber:
Target = "전화번호";
break;
case SystemCode.EmailAddress:
Target = "이메일주소";
break;
}
}
}