帮我用android studio写一个简单计算器,并用SQLite实现历史查询
时间: 2023-07-20 21:31:08 浏览: 81
好的,我可以帮你完成这个任务。不过,在开始之前,我需要确认一下你的前置技能:你是否已经掌握了 Android Studio 的开发基础,包括 Java 编程和 Android 应用程序设计?
如果你还没有学习过,那么我建议你先学习一些基础知识,例如 Java 编程语言、Android 应用程序设计、Android Studio 开发环境的使用等等。
如果你已经有了这些基础知识,那么我们可以开始着手实现这个简单的计算器。
首先,我们需要为应用程序创建一个新的 Android 项目。在创建项目时,请确保勾选“使用 Kotlin”和“使用 androidx”选项,因为它们是 Android 开发的最新标准。此外,我们还需要添加一个依赖库以使用 SQLite 数据库。
接下来,我们需要设计计算器的用户界面,可以使用 Android Studio 提供的可视化布局编辑器来完成。在这里,我提供一个简单的布局示例供你参考:
```
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入数字" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:text="1"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button1" />
<Button
android:text="2"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button2" />
<Button
android:text="3"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button3" />
<Button
android:text="+"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/buttonPlus" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:text="4"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button4" />
<Button
android:text="5"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button5" />
<Button
android:text="6"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button6" />
<Button
android:text="-"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/buttonMinus" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:text="7"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button7" />
<Button
android:text="8"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button8" />
<Button
android:text="9"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button9" />
<Button
android:text="*"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/buttonMultiply" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:text="0"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button0" />
<Button
android:text="."
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/buttonDot" />
<Button
android:text="="
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/buttonEqual" />
<Button
android:text="/"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/buttonDivide" />
</LinearLayout>
<Button
android:text="历史记录"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/buttonHistory" />
</LinearLayout>
```
这个布局包含一个 EditText 和一组数字和运算符按钮。我们还添加了一个按钮,以便用户可以查看历史记录。
接下来,我们需要编写与这个布局交互的代码。具体来说,我们需要处理按钮的点击事件,并在 EditText 中显示用户输入的数字和运算符。我们还需要编写一个计算函数来计算用户输入的表达式。
这里是一个简单的示例代码:
```
class MainActivity : AppCompatActivity() {
private lateinit var editText: EditText
private var currentOperator = ""
private var currentNumber = ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
editText = findViewById(R.id.editText)
findViewById<Button>(R.id.button0).setOnClickListener { appendNumber("0") }
findViewById<Button>(R.id.button1).setOnClickListener { appendNumber("1") }
findViewById<Button>(R.id.button2).setOnClickListener { appendNumber("2") }
findViewById<Button>(R.id.button3).setOnClickListener { appendNumber("3") }
findViewById<Button>(R.id.button4).setOnClickListener { appendNumber("4") }
findViewById<Button>(R.id.button5).setOnClickListener { appendNumber("5") }
findViewById<Button>(R.id.button6).setOnClickListener { appendNumber("6") }
findViewById<Button>(R.id.button7).setOnClickListener { appendNumber("7") }
findViewById<Button>(R.id.button8).setOnClickListener { appendNumber("8") }
findViewById<Button>(R.id.button9).setOnClickListener { appendNumber("9") }
findViewById<Button>(R.id.buttonDot).setOnClickListener { appendNumber(".") }
findViewById<Button>(R.id.buttonPlus).setOnClickListener { setOperator("+") }
findViewById<Button>(R.id.buttonMinus).setOnClickListener { setOperator("-") }
findViewById<Button>(R.id.buttonMultiply).setOnClickListener { setOperator("*") }
findViewById<Button>(R.id.buttonDivide).setOnClickListener { setOperator("/") }
findViewById<Button>(R.id.buttonEqual).setOnClickListener { calculate() }
findViewById<Button>(R.id.buttonHistory).setOnClickListener { showHistory() }
}
private fun appendNumber(number: String) {
currentNumber += number
editText.setText(currentNumber)
}
private fun setOperator(operator: String) {
if (currentOperator.isNotEmpty()) {
calculate()
}
currentOperator = operator
currentNumber = ""
}
private fun calculate() {
if (currentNumber.isNotEmpty()) {
val firstNumber = editText.text.toString().toDouble()
val secondNumber = currentNumber.toDouble()
val result = when (currentOperator) {
"+" -> firstNumber + secondNumber
"-" -> firstNumber - secondNumber
"*" -> firstNumber * secondNumber
"/" -> firstNumber / secondNumber
else -> 0.0
}
editText.setText(result.toString())
// 插入历史记录
val dbHelper = HistoryDbHelper(this)
dbHelper.insertHistory("$firstNumber $currentOperator $secondNumber = $result")
currentOperator = ""
currentNumber = ""
}
}
private fun showHistory() {
// 显示历史记录
val intent = Intent(this, HistoryActivity::class.java)
startActivity(intent)
}
}
```
这个示例代码中,我们使用了几个关键变量来跟踪用户输入的数字和运算符。在每个数字按钮的点击事件处理函数中,我们将当前数字添加到 currentNumber 变量中,并将其显示在 EditText 中。在每个运算符按钮的点击事件处理函数中,我们使用 setOperator 函数设置当前运算符并清空 currentNumber 变量。在等号按钮的点击事件处理函数中,我们使用 calculate 函数计算用户输入的表达式,并将结果显示在 EditText 中。在 calculate 函数中,我们还将表达式和结果插入到 SQLite 数据库中,以便稍后查看历史记录。
最后,我们需要编写一个 HistoryActivity 类来显示历史记录。这个类非常简单,只需要从 SQLite 数据库中检索历史记录,并将其显示在一个列表视图中即可。这里是一个简单的示例代码:
```
class HistoryActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_history)
val dbHelper = HistoryDbHelper(this)
val historyList = dbHelper.getAllHistory()
val listView = findViewById<ListView>(R.id.historyListView)
listView.adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, historyList)
}
}
```
这个示例代码中,我们使用 HistoryDbHelper 类从 SQLite 数据库中检索历史记录,并将它们存储在一个字符串列表中。然后,我们使用一个简单的 ListView 组件来显示这些历史记录。
好了,现在你应该有一个可以计算简单表达式并显示历史记录的 Android 应用程序。希望这个示例代码能对你有所帮助!