간이 유저 가입 프로그램 구현

안희수·2021년 4월 6일
0

프로그램 구현 시 중점 구현 알고리즘
프로세스의 순서가 정해져 있다는 가정하에

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;			
		}
	}
}
profile
9년차 소프트웨어 개발자 (2024년 재 개편 예정입니다)

0개의 댓글

관련 채용 정보