본문 바로가기
Project/Study | etc

구구단 게임

by 코젼 2022. 8. 11.
728x90
반응형

구구단 게임
2022-08-03(32일차), 11(39일차)



💡구구단 게임 - 08/03

📝MainActivity.java

package com.example.gugudan;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    TextView tv_number;
    TextView tv_result;
    TextView tv_answer;
    TextView tv_count;
    Button btn_start;
    Button btn_check;
    Button btn_cancel;

    String user_number = "";

    int a = 0, b = 0, count = 0;
    String result = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout);

        tv_number = findViewById(R.id.tv_number);
        tv_result = findViewById(R.id.tv_result);
        tv_answer = findViewById(R.id.tv_answer);
        tv_count = findViewById(R.id.tv_count);

        btn_start = findViewById(R.id.btn_start);
        btn_check = findViewById(R.id.btn_check);
        btn_cancel = findViewById(R.id.btn_cancel);

        btn_start.setOnClickListener(lis);
        btn_check.setOnClickListener(lis);
        btn_cancel.setOnClickListener(lis);
    }

    public void onClick1(View v) {
        user_number = user_number + ((Button) v).getText().toString();
        tv_result.append(((Button) v).getText().toString());
    }

    View.OnClickListener lis = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            int id = view.getId();

            if (id == R.id.btn_start) {
                Toast.makeText(MainActivity.this, "게임을 시작합니다!", Toast.LENGTH_SHORT).show();
                a = (int) (Math.random() * 9) + 1;
                b = (int) (Math.random() * 9) + 1;
                result = String.valueOf(a * b);

                String number = a + "x" + b;
                tv_number.setText(number);
            } else if (id == R.id.btn_check) {
                if (result.equals(user_number)) {
                    tv_answer.setText("");
                    tv_answer.append("정답입니다!");
                    count++;
                    tv_count.setText(String.valueOf(count));
                    user_number = "";

                    a = (int) (Math.random() * 9) + 1;
                    b = (int) (Math.random() * 9) + 1;
                    result = String.valueOf(a * b);

                    String number = a + "x" + b;
                    tv_number.setText(number);

                    tv_result.setText("");
                } else {
                    tv_answer.setText("");
                    tv_answer.append("오답입니다.");
                    user_number = "";
                }
            } else if (id == R.id.btn_cancel) {
                tv_result.setText("");
            }
        }
    };


}

📝layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#576F72"
    android:orientation="vertical"
    android:padding="20dp">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/btn_start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="5dp"
            android:backgroundTint="#E2DCC8"
            android:padding="15dp"
            android:text="게임시작"
            android:textColor="@color/black"
            android:textSize="15dp" />

        <Button
            android:id="@+id/btn_end"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="5dp"
            android:layout_toRightOf="@id/btn_start"
            android:backgroundTint="#E2DCC8"
            android:padding="15dp"
            android:text="게임종료"
            android:textColor="@color/black"
            android:textSize="15dp" />

        <TextView
            android:id="@+id/tv_count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@id/btn_start"
            android:layout_marginRight="5dp"
            android:layout_toRightOf="@id/btn_end"
            android:background="#94B49F"
            android:padding="15dp"
            android:text="정답갯수"
            android:textColor="@color/white"
            android:textSize="15dp" />

        <TextView
            android:id="@+id/tv_time"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@id/btn_start"
            android:layout_toRightOf="@id/tv_count"
            android:background="#94B49F"
            android:gravity="center"
            android:padding="15dp"
            android:text="시간"
            android:textColor="@color/white"
            android:textSize="15dp" />
    </RelativeLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="130dp"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/tv_number"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
            android:background="#94B49F"
            android:gravity="center"
            android:text="문제"
            android:textColor="@color/white"
            android:textSize="50dp" />

        <TextView
            android:id="@+id/tv_result"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#94B49F"
            android:gravity="center"
            android:textColor="@color/white"
            android:textSize="50dp" />
    </LinearLayout>

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="330dp"
        android:columnCount="3"
        android:orientation="horizontal"
        android:rowCount="4">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="1"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="2"

            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="3"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="4"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="5"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="6"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="7"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="8"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="9"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="0"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:id="@+id/btn_check"
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:text="정답확인"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:id="@+id/btn_cancel"
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:text="지우기"
            android:textColor="@color/black"
            android:textSize="20dp" />
    </GridLayout>

    <TextView
        android:id="@+id/tv_answer"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="@color/white"
        android:text="결과 : "
        android:gravity="left"
        android:paddingLeft="10dp"
        android:paddingTop="5dp"
        android:textSize="25dp"/>
</LinearLayout>

💁‍♀️다른 방법으로 작성한 코드

▪️ 같은 리스너를 사용하는 버튼들의 객체를 모아 배열에 저장할 수 있다.
package com.example.gugudan;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.util.HashMap;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    int number_ids[] = { R.id.btn_0, R.id.btn_1, R.id.btn_2,
            R.id.btn_3, R.id.btn_4, R.id.btn_5,
            R.id.btn_6, R.id.btn_7, R.id.btn_9, R.id.btn_0};

    TextView tv_answer;
    TextView tv_question;
    int answer;
    int right_count;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.jhl);

        tv_answer = findViewById(R.id.tv_answer);
        tv_question = findViewById(R.id.tv_question);

        findViewById(R.id.btn_start).setOnClickListener(this);
        findViewById(R.id.btn_finish).setOnClickListener(this);
        findViewById(R.id.btn_check).setOnClickListener(this);
        findViewById(R.id.btn_del).setOnClickListener(this);
        setNumberListener();
    }

    void setNumberListener(){
        Button btn;

        for(int i = 0 ; i < number_ids.length ;i++){
            btn = findViewById(number_ids[i]);
            btn.setOnClickListener(btnListener);
        }
    }

    View.OnClickListener btnListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            tv_answer.append(((Button)v).getText());
        }
    };

    @Override
    public void onClick(View v) {
        int nId = v.getId();
        switch (nId){
            case R.id.btn_start:
                gameInit();
                makeQuestion();
                break;
            case  R.id.btn_check:
                int answer = Integer.parseInt(tv_answer.getText().toString());
                if(this.answer == answer){
                    rightAnswer();
                }else{
                    wrongAnswer();
                }
                tv_answer.setText("");
                makeQuestion();
                break;
            case R.id.btn_del:
                tv_answer.setText("");
                break;
            default:
        }
    }

    void gameInit(){
        tv_question.setText("");
        tv_answer.setText("");
        right_count = 0;
    }

    void makeQuestion(){
        int n1 = (int)(Math.random()*8) + 2;
        int n2 = (int)(Math.random()*8) + 2;
        answer = n1* n2;
        tv_question.setText(n1 + " x " + n2);
    }
    public void rightAnswer(){
        right_count++;
        ((TextView)findViewById(R.id.tv_count)).setText(""+right_count);

        Toast.makeText(this, "정답", Toast.LENGTH_SHORT).show();
    }

    public void wrongAnswer(){
        tv_answer.setText("오답");
        Toast.makeText(this, "오답", Toast.LENGTH_SHORT).show();
    }

}

📌완성

💡구구단 게임 - 08/11


📝layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#576F72"
    android:orientation="vertical"
    android:padding="20dp">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/btn_start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="5dp"
            android:backgroundTint="#E2DCC8"
            android:padding="15dp"
            android:text="게임시작"
            android:textColor="@color/black"
            android:textSize="15dp" />

        <Button
            android:id="@+id/btn_end"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="5dp"
            android:layout_toRightOf="@id/btn_start"
            android:backgroundTint="#E2DCC8"
            android:padding="15dp"
            android:text="게임종료"
            android:textColor="@color/black"
            android:textSize="15dp" />

        <TextView
            android:id="@+id/tv_count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@id/btn_start"
            android:layout_marginRight="5dp"
            android:layout_toRightOf="@id/btn_end"
            android:background="#94B49F"
            android:padding="15dp"
            android:text="0"
            android:textColor="@color/white"
            android:textSize="15dp" />

        <TextView
            android:id="@+id/tv_time"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@id/btn_start"
            android:layout_toRightOf="@id/tv_count"
            android:background="#94B49F"
            android:gravity="center"
            android:padding="15dp"
            android:text="시간"
            android:textColor="@color/white"
            android:textSize="15dp" />
    </RelativeLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="130dp"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/tv_number"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
            android:background="#94B49F"
            android:gravity="center"
            android:text="문제"
            android:textColor="@color/white"
            android:textSize="50dp" />

        <TextView
            android:id="@+id/tv_result"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#94B49F"
            android:gravity="center"
            android:textColor="@color/white"
            android:textSize="50dp" />
    </LinearLayout>

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="330dp"
        android:columnCount="3"
        android:orientation="horizontal"
        android:rowCount="4">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="1"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="2"

            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="3"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="4"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="5"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="6"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="7"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="8"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="9"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:onClick="onClick1"
            android:text="0"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:id="@+id/btn_check"
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:text="정답확인"
            android:textColor="@color/black"
            android:textSize="20dp" />

        <Button
            android:id="@+id/btn_cancel"
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_columnWeight="1"
            android:backgroundTint="#E2DCC8"
            android:text="지우기"
            android:textColor="@color/black"
            android:textSize="20dp" />
    </GridLayout>

    <TextView
        android:id="@+id/tv_answer"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="@color/white"
        android:text="결과 : "
        android:gravity="left"
        android:paddingLeft="10dp"
        android:paddingTop="5dp"
        android:textSize="25dp"/>
</LinearLayout>

📝activity_main2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="20dp"
    tools:context=".MainActivity2">

    <TextView
        android:id="@+id/tv_main2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/purple_700"
        android:textColor="@color/white"
        android:gravity="center"
        android:textSize="20dp" />

</LinearLayout>


📝MainActivity.java

package com.example.gugudangame;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    TextView tv_number;
    TextView tv_result;
    TextView tv_answer;
    TextView tv_count;
    TextView tv_time;

    Button btn_start;
    Button btn_check;
    Button btn_cancel;
    Button btn_end;

    String user_number = "";

    int a = 0, b = 0, count = 0;
    String result = "";
    int second = 60;
    Intent intent;

    Handler handler = new Handler(Looper.getMainLooper()) {
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
//            second = 10;
            if(msg.what == 1) {
                if(second != 0) {

                    btn_end.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            removeMessages(1);
                            tv_time.setText("시간");
                            tv_number.setText("문제");
                            tv_result.setText("");
                            tv_count.setText("0");
                            tv_answer.setText("게임 종료!");
                        }
                    });

                    tv_time.setText(second--+"초");
                    sendEmptyMessageDelayed(1, 1000);
                }
                else if(second == 0) {
                    tv_time.setText("0초");
                    tv_answer.setText("게임이 종료되었습니다.");

                    intent = new Intent(MainActivity.this, MainActivity2.class);
                    intent.putExtra("answer", tv_count.getText().toString());
                    startActivityForResult(intent, 1);
                }

            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout);

        tv_number = findViewById(R.id.tv_number);
        tv_result = findViewById(R.id.tv_result);
        tv_answer = findViewById(R.id.tv_answer);
        tv_count = findViewById(R.id.tv_count);
        tv_time = findViewById(R.id.tv_time);

        btn_start = findViewById(R.id.btn_start);
        btn_check = findViewById(R.id.btn_check);
        btn_cancel = findViewById(R.id.btn_cancel);
        btn_end = findViewById(R.id.btn_end);

        btn_start.setOnClickListener(lis);
        btn_check.setOnClickListener(lis);
        btn_cancel.setOnClickListener(lis);
    }

    public void onClick1(View v) {
        user_number = user_number + ((Button) v).getText().toString();
        tv_result.append(((Button) v).getText().toString());
    }

    View.OnClickListener lis = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            int id = view.getId();

            if (id == R.id.btn_start) {
                second = 60;
                handler.sendEmptyMessage(1);
                Toast.makeText(MainActivity.this, "게임을 시작합니다!", Toast.LENGTH_SHORT).show();
                a = (int) (Math.random() * 9) + 1;
                b = (int) (Math.random() * 9) + 1;
                result = String.valueOf(a * b);

                String number = a + "x" + b;
                tv_number.setText(number);
            } else if (id == R.id.btn_check) {
                if (result.equals(user_number)) {
                    tv_answer.setText("");
                    tv_answer.append("정답입니다!");
                    count++;
                    tv_count.setText(String.valueOf(count));
                    user_number = "";

                    a = (int) (Math.random() * 9) + 1;
                    b = (int) (Math.random() * 9) + 1;
                    result = String.valueOf(a * b);

                    String number = a + "x" + b;
                    tv_number.setText(number);

                    tv_result.setText("");
                } else {
                    tv_answer.setText("");
                    tv_answer.append("오답입니다.");
                    user_number = "";
                }
            } else if (id == R.id.btn_cancel) {
                tv_result.setText("");
            }
        }
    };
}

📝MainActivity2.java

package com.example.gugudangame;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.widget.TextView;

public class MainActivity2 extends AppCompatActivity {
    int time = 3;
    Intent intent;
    String str;
    TextView tv_main2;

    Handler handler = new Handler(Looper.getMainLooper()) {
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            intent = getIntent();
            if(msg.what == 1) {
                str = intent.getStringExtra("answer");
                tv_main2 = findViewById(R.id.tv_main2);
                tv_main2.setText("[ 게임 종료 ]\n총" + str + "개를 맞췄습니다!\n" +
                        "\n잠시후 메인 화면으로 돌아갑니다...\n\n" + time--);
                sendEmptyMessageDelayed(1, 1000);

                if(time == 0) {
                    Intent intent = new Intent(MainActivity2.this, MainActivity.class);
                    startActivityForResult(intent, 2);
                }
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        handler.sendEmptyMessage(1);

    }
}

 

728x90
반응형

'Project > Study | etc' 카테고리의 다른 글

8회 테코테코  (0) 2024.11.10
랜덤 숫자 게임  (0) 2022.08.11
Team Project - 계산기 프로그램  (0) 2022.07.01
상품 구매 프로그램  (0) 2022.06.29
성적 관리 프로그램 + 설계, 메소드 구현  (0) 2022.06.28

댓글