帮我在android studio用java语言写简易计算器,并用SQLite实现历史查询
时间: 2024-03-09 18:46:13 浏览: 98
好的,我可以帮您完成这个任务。下面是一个简单的示例代码,用于创建一个基本的计算器,并使用SQLite实现历史查询。
首先,您需要在Android Studio中创建一个新项目,然后在布局文件中添加一个EditText用于显示计算结果,以及一些Button用于输入数字和运算符。这里我们使用一个GridLayout来放置所有的按钮,如下所示:
```xml
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:columnCount="4"
android:rowCount="5">
<EditText
android:id="@+id/result_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnSpan="4"
android:layout_gravity="fill_horizontal"
android:layout_weight="1"
android:inputType="numberDecimal"
android:padding="16dp"
android:textSize="24sp" />
<Button
android:id="@+id/btn_clear"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="C" />
<Button
android:id="@+id/btn_sign"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="+/-" />
<Button
android:id="@+id/btn_percent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="%" />
<Button
android:id="@+id/btn_divide"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="/" />
<Button
android:id="@+id/btn_7"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="7" />
<Button
android:id="@+id/btn_8"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="8" />
<Button
android:id="@+id/btn_9"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="9" />
<Button
android:id="@+id/btn_multiply"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="*" />
<Button
android:id="@+id/btn_4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="4" />
<Button
android:id="@+id/btn_5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="5" />
<Button
android:id="@+id/btn_6"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="6" />
<Button
android:id="@+id/btn_minus"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="-" />
<Button
android:id="@+id/btn_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="1" />
<Button
android:id="@+id/btn_2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="2" />
<Button
android:id="@+id/btn_3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="3" />
<Button
android:id="@+id/btn_plus"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="+" />
<Button
android:id="@+id/btn_0"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="0" />
<Button
android:id="@+id/btn_dot"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="." />
<Button
android:id="@+id/btn_equals"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="=" />
</GridLayout>
```
接下来,我们在MainActivity.java文件中编写逻辑代码。首先,我们需要定义一些变量来存储当前输入的数字和运算符,以及计算结果。我们还需要使用SQLiteOpenHelper类来创建和管理数据库。这里我们定义一个名为"history"的表,用于存储计算历史记录。
```java
public class MainActivity extends AppCompatActivity {
private EditText resultText;
private String currentNumber = "";
private String currentOperator = "";
private double currentResult = 0.0;
private SQLiteDatabase database;
private static final String DB_NAME = "history.db";
private static final int DB_VERSION = 1;
private static final String TABLE_NAME = "history";
private static final String COLUMN_ID = "_id";
private static final String COLUMN_EXPRESSION = "expression";
private static final String COLUMN_RESULT = "result";
private static final String CREATE_TABLE =
"CREATE TABLE " + TABLE_NAME + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_EXPRESSION + " TEXT, " +
COLUMN_RESULT + " REAL);";
```
在onCreate()方法中,我们需要获取EditText和所有Button的引用,并为它们设置一个点击监听器。当用户点击数字或运算符按钮时,我们将该值附加到当前数字或运算符字符串上。当用户点击“C”按钮时,我们将所有变量重置为默认值。当用户点击“=”按钮时,我们将执行计算,并将结果显示在EditText中。同时,我们还将保存该计算的历史记录到数据库中。
```java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
resultText = findViewById(R.id.result_text);
Button btnClear = findViewById(R.id.btn_clear);
Button btnSign = findViewById(R.id.btn_sign);
Button btnPercent = findViewById(R.id.btn_percent);
Button btnDivide = findViewById(R.id.btn_divide);
Button btn7 = findViewById(R.id.btn_7);
Button btn8 = findViewById(R.id.btn_8);
Button btn9 = findViewById(R.id.btn_9);
Button btnMultiply = findViewById(R.id.btn_multiply);
Button btn4 = findViewById(R.id.btn_4);
Button btn5 = findViewById(R.id.btn_5);
Button btn6 = findViewById(R.id.btn_6);
Button btnMinus = findViewById(R.id.btn_minus);
Button btn1 = findViewById(R.id.btn_1);
Button btn2 = findViewById(R.id.btn_2);
Button btn3 = findViewById(R.id.btn_3);
Button btnPlus = findViewById(R.id.btn_plus);
Button btn0 = findViewById(R.id.btn_0);
Button btnDot = findViewById(R.id.btn_dot);
Button btnEquals = findViewById(R.id.btn_equals);
DatabaseHelper dbHelper = new DatabaseHelper(this);
database = dbHelper.getWritableDatabase();
btnClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
currentNumber = "";
currentOperator = "";
currentResult = 0.0;
resultText.setText("");
}
});
btnSign.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (currentNumber.isEmpty()) {
currentNumber = "-";
} else if (currentNumber.equals("-")) {
currentNumber = "";
} else {
double number = Double.parseDouble(currentNumber);
number = -number;
currentNumber = Double.toString(number);
}
resultText.setText(currentNumber);
}
});
btnPercent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!currentNumber.isEmpty()) {
double number = Double.parseDouble(currentNumber);
number /= 100.0;
currentNumber = Double.toString(number);
resultText.setText(currentNumber);
}
}
});
btnDivide.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!currentNumber.isEmpty()) {
currentOperator = "/";
currentResult = Double.parseDouble(currentNumber);
currentNumber = "";
resultText.setText("");
}
}
});
btn7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("7");
}
});
btn8.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("8");
}
});
btn9.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("9");
}
});
btnMultiply.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!currentNumber.isEmpty()) {
currentOperator = "*";
currentResult = Double.parseDouble(currentNumber);
currentNumber = "";
resultText.setText("");
}
}
});
btn4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("4");
}
});
btn5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("5");
}
});
btn6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("6");
}
});
btnMinus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!currentNumber.isEmpty()) {
currentOperator = "-";
currentResult = Double.parseDouble(currentNumber);
currentNumber = "";
resultText.setText("");
}
}
});
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("1");
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("2");
}
});
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("3");
}
});
btnPlus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!currentNumber.isEmpty()) {
currentOperator = "+";
currentResult = Double.parseDouble(currentNumber);
currentNumber = "";
resultText.setText("");
}
}
});
btn0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("0");
}
});
btnDot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!currentNumber.contains(".")) {
currentNumber += ".";
resultText.setText(currentNumber);
}
}
});
btnEquals.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!currentNumber.isEmpty()) {
double number = Double.parseDouble(currentNumber);
if (currentOperator.equals("+")) {
currentResult += number;
} else if (currentOperator.equals("-")) {
currentResult -= number;
} else if (currentOperator.equals("*")) {
currentResult *= number;
} else if (currentOperator.equals("/")) {
currentResult /= number;
} else {
currentResult = number;
}
currentNumber = Double.toString(currentResult);
resultText.setText(currentNumber);
ContentValues values = new ContentValues();
values.put(COLUMN_EXPRESSION, currentOperator + number);
values.put(COLUMN_RESULT, currentResult);
database.insert(TABLE_NAME, null, values);
}
}
});
}
private void appendNumber(String digit) {
currentNumber += digit;
resultText.setText(currentNumber);
}
```
最后,我们需要编写一个SQLiteOpenHelper类来创建和管理数据库。我们将在onCreate()方法中执行CREATE_TABLE语句,以创建一个名为“history”的表,用于存储计算历史记录。
```java
private static class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
}
```
现在,您可以在Android模拟器或真实设备上运行该应用程序,并测试它是否按预期工作。您可以使用历史记录功能来查看以前的计算结果,并在需要时重新执行它们。
阅读全文