본문 바로가기

Programming/국비학원

220524 - 안드로이드 구현 실습

  • 기차 예약 앱 : 체크박스 체크 시 아래 위젯들이 보임 / 라디오버튼 클릭 시 요금이 우측에 나타남 ex. KTX - 50000원 / 할인카드 소지시 20% 할인

기차 예약을 하시겠습니까?
ㅁ 네

인원수 ___
ㅇ KTX
ㅇ새마을호
ㅇ무궁화호

ㅁ할인카드

요금계산버튼


총 지불 요금은 ???원입니다

 

 

  • xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="기차 예약을 하시겠습니까?"
        android:gravity="center"
        android:textSize="20dp"/>

    <CheckBox
        android:id="@+id/chkStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="네"/>

    <LinearLayout
        android:id="@+id/layoutAll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="visible"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="인원 수"
                android:textSize="20dp"
                android:paddingTop="30dp"
                android:paddingLeft="30dp"
                android:paddingRight="30dp"/>

            <EditText
                android:id="@+id/edtNumber"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="        "
                android:inputType="number"/>
            </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        <RadioGroup
            android:id="@+id/trainGroup"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingTop="30dp"
            android:paddingBottom="30dp"
            android:layout_weight="1"
            >

            <RadioButton
                android:id="@+id/ktx"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="KTX"

                />
            <RadioButton
                android:id="@+id/sae"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="새마을호"
                />
            <RadioButton
                android:id="@+id/moo"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="무궁화호"
                />
        </RadioGroup>

        <TextView
            android:id="@+id/tvTrainPrice"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="100,000원"
            android:gravity="center"
            android:layout_weight="1"
            android:textColor="#00f"/>
        </LinearLayout>

        <CheckBox
            android:id="@+id/chkDiscount"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="할인 카드"/>

        <Button
            android:id="@+id/btnFare"
            android:layout_marginTop="30dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="요금 계산"/>

        <TextView
            android:id="@+id/txtResult"
            android:layout_marginTop="30dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#f00"
            android:layout_gravity="center"/>

    </LinearLayout>

</LinearLayout>

 

 

 

  • java

package com.example.tourreserved;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    LinearLayout layoutAll;
    EditText edtNumber;
    RadioGroup trainGroup;
    RadioButton ktx, sae, moo;
    TextView tvTrainPrice, tvResult;
    CheckBox chkStart, chkDiscount;
    Button btnFare;
    double discount=1.0;  //할인카드 체크 안 되어도 * 처리
    int amount=0, pay;
    String strCount;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        layoutAll = findViewById(R.id.layoutAll);
        edtNumber = findViewById(R.id.edtNumber);
        trainGroup = findViewById(R.id.trainGroup);
        ktx = findViewById(R.id.ktx);
        sae = findViewById(R.id.sae);
        moo = findViewById(R.id.moo);
        tvTrainPrice = findViewById(R.id.tvTrainPrice);
        tvResult = findViewById(R.id.tvResult);
        chkStart = findViewById(R.id.chkStart);
        chkDiscount = findViewById(R.id.chkDiscount);
        btnFare = findViewById(R.id.btnFare);

        chkStart.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked){
                    layoutAll.setVisibility(View.VISIBLE);
                }else{
                    layoutAll.setVisibility(View.INVISIBLE);
                }
            }
        });

        edtNumber.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                edtNumber.setText("");
            }
        });

        trainGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId){
                    case R.id.ktx:
                        tvTrainPrice.setText("100,000원");
                        amount=100000;
                        break;
                    case R.id.sae:
                        tvTrainPrice.setText("80,000원");
                        amount=80000;
                        break;
                    case R.id.moo:
                        tvTrainPrice.setText("50,000원");
                        amount=50000;
                        break;
                    default:
                        tvResult.setText("총 지불요금은 0원입니다");

                }
            }
        });

        chkDiscount.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked){
                    discount=0.8;
                }else{
                    discount=1.0;
                }
            }
        });

        btnFare.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                strCount = edtNumber.getText().toString();
                if (strCount.equals("")){
                    Toast.makeText(getApplicationContext(),"숫자를 입력해주세요",Toast.LENGTH_SHORT).show();
                }else if (amount==0){
                    Toast.makeText(getApplicationContext(),"기차를 선택해주세요",Toast.LENGTH_SHORT).show();
                } else {
                    pay =(int) (Integer.parseInt(strCount) * amount * discount);
                    tvResult.setText("총 지불 요금은"+pay+"원입니다");
                }
            }
        });

    }
}

 

 

  • 계산기 앱

 

  • xml

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

    <EditText
        android:id="@+id/edtNum1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="숫자 입력"
        android:layout_margin="5dp"
        android:inputType="number"
        />

    <EditText
        android:id="@+id/edtNum2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="숫자 입력"
        android:layout_margin="5dp"
        android:inputType="number"
        />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"

        android:orientation="horizontal">
        <Button
            android:id="@+id/btn0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:text="0"/>
        <Button
            android:id="@+id/btn1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:text="1"/>
        <Button
            android:id="@+id/btn2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:text="2"/>
        <Button
            android:id="@+id/btn3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:text="3"/>
        <Button
            android:id="@+id/btn4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:text="4"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"

        android:orientation="horizontal">
        <Button
            android:id="@+id/btn5"
            android:layout_margin="5dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="5"/>
        <Button
            android:id="@+id/btn6"
            android:layout_margin="5dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="6"/>
        <Button
            android:id="@+id/btn7"
            android:layout_margin="5dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="7"/>
        <Button
            android:id="@+id/btn8"
            android:layout_margin="5dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="8"/>
        <Button
            android:id="@+id/btn9"
            android:layout_margin="5dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="9"/>
    </LinearLayout>

    <Button
        android:layout_margin="5dp"
        android:id="@+id/btnAdd"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="더하기"/>
    <Button
        android:layout_margin="5dp"
        android:id="@+id/btnSubtract"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="빼기"/>
    <Button
        android:layout_margin="5dp"
        android:id="@+id/btnMultiply"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="곱하기"/>
    <Button
        android:layout_margin="5dp"
        android:id="@+id/btnDivide"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="나누기"/>

    <TextView
        android:layout_margin="5dp"
        android:id="@+id/tvResult"
        android:textSize="30dp"
        android:textColor="#f00"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="계산 결과:"/>

</LinearLayout>

 

 

  • java

package com.example.simplecal;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity extends AppCompatActivity {

    EditText edtNum1, edtNum2;
    TextView tvResult;
    Button[] btnNums = new Button[10]; //숫자 버튼
    Integer[] btnNumsID = {R.id.btn0, R.id.btn1, R.id.btn2, R.id.btn3,
            R.id.btn4, R.id.btn5, R.id.btn6, R.id.btn7, R.id.btn8, R.id.btn9};
    Button[] btnCal = new Button[4];  //사칙연산
    Integer[] btnCalID = {R.id.btnAdd, R.id.btnSubtract, R.id.btnMultiply, R.id.btnDivide};
    String strNum1, strNum2;
    int result;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        for(int i=0;i<btnNums.length;i++){
            btnNums[i]=findViewById(btnNumsID[i]);
        }
        for(int i=0;i<btnCal.length;i++){
            btnCal[i]=findViewById(btnCalID[i]);
        }
        edtNum1=findViewById(R.id.edtNum1);
        edtNum2=findViewById(R.id.edtNum2);
        tvResult=findViewById(R.id.tvResult);


        for (int i=0;i<btnNums.length;i++){
            final int index;
            index=i;  //for문 만날때마다 final 상수 초기화됨 => 숫자 다 넣기 가능
            btnNums[index].setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (edtNum1.isFocused()){
                        strNum1=edtNum1.getText().toString() + btnNums[index].getText().toString();
                        edtNum1.setText(strNum1);
                    }else if (edtNum2.isFocused()){
                        strNum2=edtNum2.getText().toString() + btnNums[index].getText().toString();
                        edtNum2.setText(strNum2);
                    }else{
                        Toast.makeText(getApplicationContext(),"먼저 칸을 선택해주세요",Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }//for

        //연산
        for (int i=0;i<btnCal.length;i++) {
            final int index =i;
            btnCal[index].setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    strNum1 = edtNum1.getText().toString();
                    strNum2 = edtNum2.getText().toString();
                    if (strNum1.equals("")||strNum2.equals("")){
                        Toast.makeText(getApplicationContext(),"숫자를 넣어주세요",Toast.LENGTH_SHORT).show();
                    }else {
                        switch (index) {
                            case 0:
                                result = Integer.parseInt(strNum1) + Integer.parseInt(strNum2);
                                break;
                            case 1:
                                result = Integer.parseInt(strNum1) - Integer.parseInt(strNum2);
                                break;
                            case 2:
                                result = Integer.parseInt(strNum1) * Integer.parseInt(strNum2);
                                break;
                            case 3:
                                if (strNum2.equals("0")) {
                                    Toast.makeText(getApplicationContext(), "0으로 나눌수 없어요",
                                            Toast.LENGTH_SHORT).show();
                                } else {
                                    result = Integer.parseInt(strNum1) / Integer.parseInt(strNum2);
                                }
                                break;
                        }//switch
                        tvResult.setText("계산 결과 : " + result);
                    }
                }//onclick
            });
        }//for
    }//oncreate
}

 

 

//19일부터 안드로이드 앱 구현 실습 이어가는 중

사실 프론트엔드는 막연하게 재밌을 줄 알았는데 이번 실습 때 xml 작성하면서 느꼈다

프론트엔드는 생각보다 적성에 안 맞을 수도 있음을..

이클립스로 자바만 하던 때가 벌써 그립다ㅋㅋㅋ

그래도 우선은 꾸준히 해보고 기본 실무 지식, 경험은 갖춰야지