이번 글에서는 로그인 코드를 만들어보겠습니다.

<메인 화면 코드>

package presentation;

import java.util.Scanner;
import valueObject.VPersonalInfo;

public class PMain {

	public PMain() {
	}
	
	public void show() {
		Scanner scanner = new Scanner(System.in);
		
		System.out.println("수강신청 시스템입니다.");
		System.out.println("수강신청을 하려면 로그인 하세요.");
		System.out.println("회원가입이 안되신 분들은 회원가입 하세요.");
		System.out.println("다음 메뉴를 선택 하세요.");
		
		boolean finished = false; 
		while (!finished) {
			System.out.println("1:로그인, 2:회원가입, 3:나가기");
			System.out.println("선택 : ");
		
			int menuSelection = scanner.nextInt();
			if(menuSelection == 1) // 로그인 선택시
          	 	{ PLogin pLogin = new PLogin();
				VPersonalInfo vPersonalInfo = pLogin.show(scanner);
				if (vPersonalInfo == null) // 로그인 실패시
                		{ System.out.println("ID 또는 비밀번호가 일치하지 않습니다.");}
                		else // 로그인 성공시
                       		{ System.out.println(VPersonalInfo.name +"님 반갑습니다.");
				finished = true;}
            		else if (menuSelection == 2) // 회원가입 선택시
         			{ PRegistration pRegistration = new PRegistration();
			  	 pRegistration.show(scanner);}
           		else if (menuSelection == 3) // 나가기 선택시
          			{ finished = true;}
            		else // 1,2,3이 아닌 다른 수를 선택할 시
        			{ System.out.println("잘못 입력 하셨습니다.");
	}}
		scanner.close();
}}

<로그인 화면 코드>

package presentation;

import java.util.Scanner;
import service.SLogin;
import valueObject.VLogin;
import valueObject.VPersonalInfo;

public class PLogin {
	
	public PLogin() {}
	
	public VPersonalInfo show(Scanner scanner) {
		
		boolean loggedIn = false;
		System.out.println("로그인을 해주세요.");
		
		VLogin vLogin = new VLogin();
		System.out.print("아이디를 입력해주세요.\r\n:");
		vLogin.id = scanner.next();
		System.out.print("비밀번호를 입력해주세요.\r\n:");
		vLogin.password = scanner.next();
		
		SLogin sLogin = new SLogin();
		VPersonalInfo vPersonalInfo = sLogin.validate(vLogin);
		
		return vPersonalInfo;
	}
}

<로그인 서비스 코드>

package service;
import model.MPersonalInfo;
import valueObject.VLogin;
import valueObject.VPersonalInfo;

public class SLogin {
	
	public VPersonalInfo validate(VLogin vLogin) // 저장되어 있는 회원정보 불러오기
    	{ MPersonalInfo mPersonalInfo = new MPersonalInfo();
	  VPersonalInfo vPersonalInfo = mPersonalInfo.read(VLogin.id);
		
	if(vPersonalInfo == null) // 저장되어 있는 회원정보가 없을 시
   	{ return vPersonalInfo;}
    	else // 저장되어 있는 회원정보가 있을 시
        { if(VLogin.password.equals(VPersonalInfo.password)) // 저장되어 있는 회원정보와 입력한 값이 같을 때
        { return vPersonalInfo;}
        else // 저장되어 있는 회원정보와 입력한 값이 다를 때
        { return null;}
	}
}}

<VO(Value Object)>

package valueObject;

public class VLogin {

	public static String id;
	public static String password;
	
}

이걸로 로그인 코드는 다 만들었습니다. 다음부터는 수강신청 창을 만들어 보겠습니다.

'프로그래밍 언어 > java' 카테고리의 다른 글

java 계산기 앱 (2)  (0) 2021.01.26
java 파일처리(1) - 파일복사 프로그램  (0) 2021.01.20
java실습 - 계산기(1)  (0) 2021.01.12
java블로그를 시작하며...  (0) 2021.01.11
수강신청 프로그램 제작 -(2)  (0) 2021.01.03
import javax.swing.*;
import java.awt.*;

public class AppCal extends JFrame {
    // AppCal클래스의 필드
    private JTextField printCalculation = new JTextField();// 수식을 화면에 보여주는 JTextField 컴포넌트
    private JButton [] calculationNumberButton = new JButton[10]; // 숫자에 해당하는 버튼들
    private JButton [] calculationButton = { new JButton("<-"), new JButton("계산"),
            new JButton("+"), new JButton("-"), new JButton("×"), new JButton("÷") };// 연산기호에 해당하는 버튼들
    private JTextField printResultCalculation = new JTextField();// 계산 결과를 출력하는 컴포넌트

    // AppCal클래스의 생성자
    public AppCal(){
        setTitle("계산기 프로그램");// 제목을 계산기 프로그램이라는 이름 설정하기
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 창닫기버튼 클릭시 프로그램 종료
        Container contentpane = getContentPane();// 콘텐트팬을 가져오기 => 여기서 gui프로그램을 만든다.
        contentpane.setLayout(new BorderLayout());// 레이아웃을 BorderLayout으로 설정한다.

        contentpane.add(new InputtedCalculation(), BorderLayout.NORTH);//북쪽에 계산식을 보여주는 패널을 부착한다.
        contentpane.add(new CalculationButton(), BorderLayout.CENTER);// 중앙에 계산기에 필요한 숫자들과 사칙연산기호등... 버튼들이 있는 패널을 부착한다.
        contentpane.add(new ResultOfCalculation(), BorderLayout.SOUTH);// 계산결과를 알려주는 패널을 부착한다.

        setSize(380,260);//프로그램 실행시 창을 가로360픽셀, 세로 260픽셀크기로 한다.
        setVisible(true);// 창을 화면에 보이도록 설정한다.
    }
    // AppCal클래스의 내부 클래스로 JPanel을 상속받아 InputtedCalculation 패널클래스구현(계산식(계산수식)을 보여준다.)
    private class InputtedCalculation extends JPanel{
        public InputtedCalculation(){
            setLayout(new GridLayout(1,2)); // 1행과 2렬로 구성된 grid배치관리자로 설정했다.
            setBackground(Color.LIGHT_GRAY);// 배경색을 LIGHT_GRAY로 설정했다.(밝은 회색)
            add(new JLabel("계산식"));// 라벨의 텍스트를 게산식으로 설정해서 부착했다.
            printCalculation.setEditable(false);// 사용자가 JTextField를 수정하지못하도록 설정했다.
            add(printCalculation); // JTextField를 부착했다.
        }
    }
    // AppCal클래스의 내부 클래스로 JPanel을 상속받아 CalculationButton 패널클래스구현(계산기의 버튼들을 만든다.)
    private class CalculationButton extends JPanel{
        public CalculationButton(){
            int i;
            setLayout(new GridLayout(4,4,3,3));// 4행과 4렬로 구성된 grid배치관리자로 설정했다.추가로 상하좌우 간격을 각각 3픽셀씩 간격을 두도록 했다.

            for (i = 0; i < calculationNumberButton.length; i++)// 0~9까지의 텍스트를 가지는 각각 버튼을 부착하는 반복문이다.(+나중에는 이벤트리스너를 구현해서 처리를 할 것 이다.)
            {
                calculationNumberButton[i] = new JButton(Integer.toString(i)); // 숫자는 반복되는데 텍스트를 넣어야하기에 숫자를 문자열로 바꿔 JButton의 인수에 넣었다.
                add(calculationNumberButton[i]);// 숫자에 해당하는 버튼 부착
                calculationNumberButton[i].addActionListener(null);// 아직 미완
            }
            for (i = 0; i < calculationButton.length; i++)// 연산기호에 해당하는 텍스트를 가지는 각각 버튼을 부착하는 반복문이다.(+나중에는 이벤트리스너를 구현해서 처리를 할 것 이다.)
            {
                add(calculationButton[i]);// 연산기호에 해당하는 버튼 부착
                calculationButton[i].addActionListener(null);// 아직 미완이며 따로따로 해줘야될듯 하다. 최대한 공통적으로 만들어보자
            }

        }
    }
    // AppCal클래스의 내부 클래스로 JPanel을 상속받아 ResultOfCalculation 패널클래스구현()
    private class ResultOfCalculation extends JPanel{
        public ResultOfCalculation(){
            setLayout(new GridLayout(1,2));// 1행과 2렬로 구성된 grid배치관리자로 설정했다.
            setBackground(Color.ORANGE);// 배경색을 ORANGE로 설정했다.(오렌지)
            add(new JLabel("계산결과"));// 라벨의 텍스트를 게산결과로 설정해서 부착했다.
            printResultCalculation.setEditable(false);// 사용자가 JTextField를 수정하지못하도록 설정했다.
            add(printResultCalculation);
        }
    }
    public static void main(String[] args) {
        new AppCal();
    }// 메인메소드에서 AppCal클래스 생성자를 실행시켰다.

java 실습으로 계산기GUI프로그램을 만들어보려합니다.

GUI전체적인틀을 구성하는 코드에 대해 설명을 보고 싶다면 주석을 참고해주시면 좋겠습니다.

혹시 코드 틀린부분이나 주석 설명 미흡 또는 잘못설명된게 있다면 댓글이나 개인톡 주시면 감사하겠습니다.

* 아직 완성단계가 아닙니다. 이후에 채워나가겠습니다. *

 

 

 

구조체 형태

#include <stdio.h>

struct student {      //구조체 정의
	int number;       //구조체 멤버 변수
	char name[10];
	double grade;
};

int main(void)
{
	struct student s1; //구조체 변수 선언
           ·
           ·
           ·
}

 

구조체 변수의 특징

1. 구조체 대입 - 가능

#include <stdio.h>

struct point {
	int x;
	int y;
};

int main(void)
{
	struct point p1 = { 1, 2 };
	struct point p2 = { 3, 4 };

	p2 = p1;

	printf("%d %d %d %d", p1.x, p1.y, p2.x, p2.y); //결과확인

	return 0;
}

결과는 1 2 1 2로 대입이 제대로 된 것을 확인할 수 있었다.

 

2. 구조체 비교 - 불가능

#include <stdio.h>

struct point {
	int x;
	int y;
};

int main(void)
{
	struct point p1 = { 1, 2 };
	struct point p2 = { 3, 4 };

	if (p1 == p2) //컴파일 오류
	{
		printf("p1과 p2가 같습니다.");
	}

	return 0;
}

바로 이렇게 에러가 난다.

 

구조체 배열

기본 형태는 이렇다.

#include <stdio.h>
#include <string.h>

struct student {
	int number;
	char name[20];
	double grade;
};

int main(void)
{
	struct student list[100];
	
	list[2].number = 17;
	strcpy(list[2].name, "Lee");
	list[2].grade = 170;

	return 0;
}

 

구조체의 형태와 특징, 배열을 정리해봤다. 다음에는 구조체의 포인터, 공용체, 열거형에 대해 복습을 할 계획이다.

'프로그래밍 언어 > c' 카테고리의 다른 글

C언어 구조체, 공용체, 열거형 (2)  (0) 2021.01.20
C언어 동적메모리  (0) 2021.01.20
구조체와 공용체  (0) 2021.01.10
포인터와 함수 그리고 void형 포인터  (2) 2021.01.07
c언어 (1) - 포인터  (0) 2021.01.05

전에 c언어를 개념 복습 위주로 실습을 했다.

그러다보니 쉽게 질리게 되는것 같다.

그래서 내가 해보고 싶은 거와 내가 중요한 것을 위주로 해보려고 한다.

우선 최소 2일에 1번 실습을 해보면서 개념과 코드를 구체적으로 공부를 해보려한다.

그러면서 java관련 라이브러리와 요새 또 자바 스프링(?)에 대해 많이 나오는 것 같다. 자바 스프링도 알아보고 IOT도 알아보려한다.

기본적으로 JAVA 책에 나오는 실습예제들을 기준으로 그냥 먼저 해보려고 한다. 그러면서 부족한 개념부분을 이해하면서 차근차근 해보려합니다.(JAVA안드로이드도 동시에 해볼 생각!)

내가 하고 싶은거 내가 절박해야 한다는 것을 다시 느꼈으며 한번 사는 인생 제대로 해보고 싶다.(아침이라 그런가 감수성이 터져나오는 것 같다.)

+ Recent posts