所花时间:6小时
代码量:300
搏客量:2
了解到的知识点:
1.今日做了一个简单的as项目,用于计算地铁票价
`package com.example.myapplication;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private EditText startStation, endStation, ticketQuantity;
private TextView resultText;
private Button calculateButton, payButton;// 地铁线路数据
private Map<String, Integer> line1 = new HashMap<>();
private Map<String, Integer> line2 = new HashMap<>();
private Map<String, Integer> line3 = new HashMap<>();@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化UI组件startStation = findViewById(R.id.startStation);endStation = findViewById(R.id.endStation);ticketQuantity = findViewById(R.id.ticketQuantity);resultText = findViewById(R.id.resultText);calculateButton = findViewById(R.id.calculateButton);payButton = findViewById(R.id.payButton);// 初始化地铁线路数据initializeSubwayLines();// 计算费用按钮点击事件calculateButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {calculateFare();}});// 缴费按钮点击事件payButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {payFare();}});
}// 初始化地铁线路数据
private void initializeSubwayLines() {// 1号线line1.put("福泽", 1);line1.put("园博园", 2);line1.put("商务中心", 3);line1.put("会展中心", 4);line1.put("东庄", 5);line1.put("西庄", 6);line1.put("洨河大道", 7);line1.put("南村", 8);line1.put("石家庄东站", 9);line1.put("火炬广场", 10);line1.put("留村", 11);line1.put("白佛", 12);line1.put("朝晖桥", 13);line1.put("谈固", 14);line1.put("北宋", 15);line1.put("体育场", 16);line1.put("博物院", 17);line1.put("北国商城", 18);line1.put("平安大街", 19);line1.put("解放广场", 20);line1.put("新百广场", 21);line1.put("烈士陵园", 22);line1.put("和平医院", 23);line1.put("长城桥", 24);line1.put("时光街", 25);line1.put("西王", 26);// 2号线line2.put("柳辛庄", 1);line2.put("铁道大学", 2);line2.put("义堂", 3);line2.put("建和桥", 4);line2.put("长安公园", 5);line2.put("北国商城", 6);line2.put("裕华路", 7);line2.put("槐中路", 8);line2.put("欧韵公园", 9);line2.put("元村", 10);line2.put("石家庄", 11);line2.put("塔坛", 12);line2.put("仓丰路留村", 13);line2.put("南位", 14);line2.put("嘉华路", 15);// 3号线line3.put("乐乡", 1);line3.put("太行南大街", 2);line3.put("南豆", 3);line3.put("中仰陵", 4);line3.put("西仰陵", 5);line3.put("东二环南路", 6);line3.put("位同", 7);line3.put("南王", 8);line3.put("东王", 9);line3.put("塔冢", 10);line3.put("孙村", 11);line3.put("汇通路", 12);line3.put("石家庄", 13);line3.put("西三教", 14);line3.put("槐安桥", 15);line3.put("东里", 16);line3.put("新百广场", 17);line3.put("市二中", 18);line3.put("市庄", 19);line3.put("柏林庄", 20);line3.put("高柱", 21);line3.put("西三庄", 22);
}// 计算地铁费用
private void calculateFare() {String start = startStation.getText().toString();String end = endStation.getText().toString();String quantityStr = ticketQuantity.getText().toString();if (start.isEmpty() || end.isEmpty() || quantityStr.isEmpty()) {Toast.makeText(this, "请输入起点、终点和购票数量", Toast.LENGTH_SHORT).show();return;}int quantity = Integer.parseInt(quantityStr);if (quantity <= 0) {Toast.makeText(this, "购票数量必须大于0", Toast.LENGTH_SHORT).show();return;}int startIndex = getStationIndex(start);int endIndex = getStationIndex(end);if (startIndex == -1 || endIndex == -1) {Toast.makeText(this, "输入的站点不存在", Toast.LENGTH_SHORT).show();return;}int distance = Math.abs(endIndex - startIndex);int farePerTicket = calculateFareBasedOnDistance(distance);int totalFare = farePerTicket * quantity;resultText.setText("费用:" + totalFare + "元");
}// 根据站点名称获取索引
private int getStationIndex(String station) {if (line1.containsKey(station)) {return line1.get(station);} else if (line2.containsKey(station)) {return line2.get(station);} else if (line3.containsKey(station)) {return line3.get(station);}return -1;
}// 根据距离计算费用
private int calculateFareBasedOnDistance(int distance) {if (distance <= 3) {return 1;} else {return 1+distance/3;}
}// 缴费按钮点击事件
private void payFare() {String fare = resultText.getText().toString();if (fare.equals("费用:0元")) {Toast.makeText(this, "请先计算费用", Toast.LENGTH_SHORT).show();} else {Toast.makeText(this, "缴费成功:" + fare, Toast.LENGTH_SHORT).show();}
}
<!-- 起点输入框 -->
<com.google.android.material.textfield.TextInputLayoutandroid:id="@+id/startStationLayout"style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="起点站"app:boxStrokeColor="@color/purple_500"app:boxStrokeWidth="1dp"app:boxStrokeWidthFocused="2dp"android:layout_marginBottom="16dp"><com.google.android.material.textfield.TextInputEditTextandroid:id="@+id/startStation"android:layout_width="match_parent"android:layout_height="wrap_content"android:inputType="text"android:textColor="@color/black"android:textColorHint="@color/gray_500" />
</com.google.android.material.textfield.TextInputLayout><!-- 终点输入框 -->
<com.google.android.material.textfield.TextInputLayoutandroid:id="@+id/endStationLayout"style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="终点站"app:boxStrokeColor="@color/purple_500"app:boxStrokeWidth="1dp"app:boxStrokeWidthFocused="2dp"android:layout_marginBottom="16dp"><com.google.android.material.textfield.TextInputEditTextandroid:id="@+id/endStation"android:layout_width="match_parent"android:layout_height="wrap_content"android:inputType="text"android:textColor="@color/black"android:textColorHint="@color/gray_500" />
</com.google.android.material.textfield.TextInputLayout><!-- 购票数量输入框 -->
<com.google.android.material.textfield.TextInputLayoutandroid:id="@+id/ticketQuantityLayout"style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="购票数量"app:boxStrokeColor="@color/purple_500"app:boxStrokeWidth="1dp"app:boxStrokeWidthFocused="2dp"android:layout_marginBottom="24dp"><com.google.android.material.textfield.TextInputEditTextandroid:id="@+id/ticketQuantity"android:layout_width="match_parent"android:layout_height="wrap_content"android:inputType="number"android:textColor="@color/black"android:textColorHint="@color/gray_500" />
</com.google.android.material.textfield.TextInputLayout><!-- 计算费用按钮 -->
<com.google.android.material.button.MaterialButtonandroid:id="@+id/calculateButton"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="计算费用"android:textColor="@color/white"android:backgroundTint="@color/purple_500"android:layout_marginBottom="16dp"app:iconTint="@color/white"app:iconPadding="8dp"app:cornerRadius="8dp"android:elevation="4dp" /><!-- 显示费用结果 -->
<androidx.cardview.widget.CardViewandroid:layout_width="match_parent"android:layout_height="wrap_content"app:cardBackgroundColor="@color/purple_100"app:cardCornerRadius="8dp"app:cardElevation="4dp"android:layout_marginBottom="16dp"><TextViewandroid:id="@+id/resultText"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="费用:0元"android:textSize="18sp"android:textColor="@color/purple_800"android:gravity="center"android:padding="16dp" />
</androidx.cardview.widget.CardView><!-- 缴费按钮 -->
<com.google.android.material.button.MaterialButtonandroid:id="@+id/payButton"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="缴费"android:textColor="@color/white"android:backgroundTint="@color/purple_500"app:iconTint="@color/white"app:iconPadding="8dp"app:cornerRadius="8dp"android:elevation="4dp" />
`