- 기차 예약 앱 : 체크박스 체크 시 아래 위젯들이 보임 / 라디오버튼 클릭 시 요금이 우측에 나타남 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 작성하면서 느꼈다
프론트엔드는 생각보다 적성에 안 맞을 수도 있음을..
이클립스로 자바만 하던 때가 벌써 그립다ㅋㅋㅋ
그래도 우선은 꾸준히 해보고 기본 실무 지식, 경험은 갖춰야지
'Programming > 국비학원' 카테고리의 다른 글
220526 - 안드로이드 구현 실습 (투표, 다이어리) (0) | 2022.05.30 |
---|---|
220525 - 안드로이드 구현 실습 (멀티 액티비티, 성적 입력 계산, 투표) (0) | 2022.05.30 |
220519 - 자료구조(queue), IO 기반 입출력, 안드로이드 구현 실습 (0) | 2022.05.20 |
220518 - 람다식, 컬렉션 프레임워크, 자료 구조 (0) | 2022.05.19 |
220517 - 멀티스레드(상태 제어, 데몬스레드), 제네릭(제네릭 타입, 멀티타입파라미터, 제네릭 메소드, 상속 및 구현), 람다식 (0) | 2022.05.18 |