帮我在android studio用java语言写简易计算器,并用SQLite实现历史查询

时间: 2024-03-09 22:46:13 浏览: 30
好的,我可以帮您完成这个任务。下面是一个简单的示例代码,用于创建一个基本的计算器,并使用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模拟器或真实设备上运行该应用程序,并测试它是否按预期工作。您可以使用历史记录功能来查看以前的计算结果,并在需要时重新执行它们。

相关推荐

最新推荐

recommend-type

Android Studio如何获取SQLite数据并显示到ListView上

"Android Studio获取SQLite数据并显示到ListView上" Android Studio是一个功能强大的集成开发环境,提供了许多实用的功能和工具,帮助开发者快速开发高质量的Android应用程序。其中,获取SQLite数据并显示到...
recommend-type

Android studio listview实现列表数据显示 数据循环显示效果

"Android Studio 中 ListView 的实现列表数据显示和循环显示效果" Android Studio 中 ListView 是一个非常重要的控件,广泛应用于移动设备上的数据显示和交互操作。本文将详细介绍 Android Studio 中 ListView 的...
recommend-type

详解Java使用sqlite 数据库如何生成db文件

Java 是一种流行的编程语言,广泛应用于 Android 开发、Web 开发、企业软件开发等领域。 SQLite 是一种轻量级的关系数据库管理系统,广泛应用于移动设备、嵌入式系统等领域。本文将详细介绍 Java 使用 SQLite 数据库...
recommend-type

Android实现SQLite添加、更新及删除行的方法

本文实例讲述了Android实现SQLite添加、更新及删除行的方法。分享给大家供大家参考,具体如下: SQLiteDatabase类暴露了特定的方法,如insert、delete和update等方法,这些方法包装了执行这些动作所需的SQL语句。...
recommend-type

android创建数据库(SQLite)保存图片示例

在Android开发中,SQLite数据库是一种常用的本地数据存储方式,它轻量级、高效且易于使用。本示例主要讲解如何在Android中创建SQLite数据库并实现保存图片到数据库,以及从数据库中取出图片显示。以下是详细步骤和...
recommend-type

GO婚礼设计创业计划:技术驱动的婚庆服务

"婚礼GO网站创业计划书" 在创建婚礼GO网站的创业计划书中,创业者首先阐述了企业的核心业务——GO婚礼设计,专注于提供计算机软件销售和技术开发、技术服务,以及与婚礼相关的各种服务,如APP制作、网页设计、弱电工程安装等。企业类型被定义为服务类,涵盖了一系列与信息技术和婚礼策划相关的业务。 创业者的个人经历显示了他对行业的理解和投入。他曾在北京某科技公司工作,积累了吃苦耐劳的精神和实践经验。此外,他在大学期间担任班长,锻炼了团队管理和领导能力。他还参加了SYB创业培训班,系统地学习了创业意识、计划制定等关键技能。 市场评估部分,目标顾客定位为本地的结婚人群,特别是中等和中上收入者。根据数据显示,广州市内有14家婚庆公司,该企业预计能占据7%的市场份额。广州每年约有1万对新人结婚,公司目标接待200对新人,显示出明确的市场切入点和增长潜力。 市场营销计划是创业成功的关键。尽管文档中没有详细列出具体的营销策略,但可以推断,企业可能通过线上线下结合的方式,利用社交媒体、网络广告和本地推广活动来吸引目标客户。此外,提供高质量的技术解决方案和服务,以区别于竞争对手,可能是其市场差异化策略的一部分。 在组织结构方面,未详细说明,但可以预期包括了技术开发团队、销售与市场部门、客户服务和支持团队,以及可能的行政和财务部门。 在财务规划上,文档提到了固定资产和折旧、流动资金需求、销售收入预测、销售和成本计划以及现金流量计划。这表明创业者已经考虑了启动和运营的初期成本,以及未来12个月的收入预测,旨在确保企业的现金流稳定,并有可能享受政府对大学生初创企业的税收优惠政策。 总结来说,婚礼GO网站的创业计划书详尽地涵盖了企业概述、创业者背景、市场分析、营销策略、组织结构和财务规划等方面,为初创企业的成功奠定了坚实的基础。这份计划书显示了创业者对市场的深刻理解,以及对技术和婚礼行业的专业认识,有望在竞争激烈的婚庆市场中找到一席之地。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【基础】PostgreSQL的安装和配置步骤

![【基础】PostgreSQL的安装和配置步骤](https://img-blog.csdnimg.cn/direct/8e80154f78dd45e4b061508286f9d090.png) # 2.1 安装前的准备工作 ### 2.1.1 系统要求 PostgreSQL 对系统硬件和软件环境有一定要求,具体如下: - 操作系统:支持 Linux、Windows、macOS 等主流操作系统。 - CPU:推荐使用多核 CPU,以提高数据库处理性能。 - 内存:根据数据库规模和并发量确定,一般建议 8GB 以上。 - 硬盘:数据库文件和临时文件需要占用一定空间,建议预留足够的空间。
recommend-type

字节跳动面试题java

字节跳动作为一家知名的互联网公司,在面试Java开发者时可能会关注以下几个方面的问题: 1. **基础技能**:Java语言的核心语法、异常处理、内存管理、集合框架、IO操作等是否熟练掌握。 2. **面向对象编程**:多态、封装、继承的理解和应用,可能会涉及设计模式的提问。 3. **并发编程**:Java并发API(synchronized、volatile、Future、ExecutorService等)的使用,以及对并发模型(线程池、并发容器等)的理解。 4. **框架知识**:Spring Boot、MyBatis、Redis等常用框架的原理和使用经验。 5. **数据库相
recommend-type

微信行业发展现状及未来发展趋势分析

微信行业发展现状及未来行业发展趋势分析 微信作为移动互联网的基础设施,已经成为流量枢纽,月活跃账户达到10.4亿,同增10.9%,是全国用户量最多的手机App。微信的活跃账户从2012年起步月活用户仅为5900万人左右,伴随中国移动互联网进程的不断推进,微信的活跃账户一直维持稳步增长,在2014-2017年年末分别达到5亿月活、6.97亿月活、8.89亿月活和9.89亿月活。 微信月活发展历程显示,微信的用户数量增长已经开始呈现乏力趋势。微信在2018年3月日活达到6.89亿人,同比增长5.5%,环比上个月增长1.7%。微信的日活同比增速下滑至20%以下,并在2017年年底下滑至7.7%左右。微信DAU/MAU的比例也一直较为稳定,从2016年以来一直维持75%-80%左右的比例,用户的粘性极强,继续提升的空间并不大。 微信作为流量枢纽,已经成为移动互联网的基础设施,月活跃账户达到10.4亿,同增10.9%,是全国用户量最多的手机App。微信的活跃账户从2012年起步月活用户仅为5900万人左右,伴随中国移动互联网进程的不断推进,微信的活跃账户一直维持稳步增长,在2014-2017年年末分别达到5亿月活、6.97亿月活、8.89亿月活和9.89亿月活。 微信的用户数量增长已经开始呈现乏力趋势,这是因为微信自身也在重新寻求新的增长点。微信日活发展历程显示,微信的用户数量增长已经开始呈现乏力趋势。微信在2018年3月日活达到6.89亿人,同比增长5.5%,环比上个月增长1.7%。微信的日活同比增速下滑至20%以下,并在2017年年底下滑至7.7%左右。 微信DAU/MAU的比例也一直较为稳定,从2016年以来一直维持75%-80%左右的比例,用户的粘性极强,继续提升的空间并不大。因此,在整体用户数量开始触达天花板的时候,微信自身也在重新寻求新的增长点。 中国的整体移动互联网人均单日使用时长已经较高水平。18Q1中国移动互联网的月度总时长达到了77千亿分钟,环比17Q4增长了14%,单人日均使用时长达到了273分钟,环比17Q4增长了15%。而根据抽样统计,社交始终占据用户时长的最大一部分。2018年3月份,社交软件占据移动互联网35%左右的时长,相比2015年减少了约10pct,但仍然是移动互联网当中最大的时长占据者。 争夺社交软件份额的主要系娱乐类App,目前占比达到约32%左右。移动端的流量时长分布远比PC端更加集中,通常认为“搜索下載”和“网站导航”为PC时代的流量枢纽,但根据统计,搜索的用户量约为4.5亿,为各类应用最高,但其时长占比约为5%左右,落后于网络视频的13%左右位于第二名。PC时代的网络社交时长占比约为4%-5%,基本与搜索相当,但其流量分发能力远弱于搜索。 微信作为移动互联网的基础设施,已经成为流量枢纽,月活跃账户达到10.4亿,同增10.9%,是全国用户量最多的手机App。微信的活跃账户从2012年起步月活用户仅为5900万人左右,伴随中国移动互联网进程的不断推进,微信的活跃账户一直维持稳步增长,在2014-2017年年末分别达到5亿月活、6.97亿月活、8.89亿月活和9.89亿月活。 微信的用户数量增长已经开始呈现乏力趋势,这是因为微信自身也在重新寻求新的增长点。微信日活发展历程显示,微信的用户数量增长已经开始呈现乏力趋势。微信在2018年3月日活达到6.89亿人,同比增长5.5%,环比上个月增长1.7%。微信的日活同比增速下滑至20%以下,并在2017年年底下滑至7.7%左右。 微信DAU/MAU的比例也一直较为稳定,从2016年以来一直维持75%-80%左右的比例,用户的粘性极强,继续提升的空间并不大。因此,在整体用户数量开始触达天花板的时候,微信自身也在重新寻求新的增长点。 微信作为移动互联网的基础设施,已经成为流量枢纽,月活跃账户达到10.4亿,同增10.9%,是全国用户量最多的手机App。微信的活跃账户从2012年起步月活用户仅为5900万人左右,伴随中国移动互联网进程的不断推进,微信的活跃账户一直维持稳步增长,在2014-2017年年末分别达到5亿月活、6.97亿月活、8.89亿月活和9.89亿月活。 微信的用户数量增长已经开始呈现乏力趋势,这是因为微信自身也在重新寻求新的增长点。微信日活发展历程显示,微信的用户数量增长已经开始呈现乏力趋势。微信在2018年3月日活达到6.89亿人,同比增长5.5%,环比上个月增长1.7%。微信的日活同比增速下滑至20%以下,并在2017年年底下滑至7.7%左右。 微信DAU/MAU的比例也一直较为稳定,从2016年以来一直维持75%-80%左右的比例,用户的粘性极强,继续提升的空间并不大。因此,在整体用户数量开始触达天花板的时候,微信自身也在重新寻求新的增长点。 微信作为移动互联网的基础设施,已经成为流量枢纽,月活跃账户达到10.4亿,同增10.9%,是全国用户量最多的手机App。微信的活跃账户从2012年起步月活用户仅为5900万人左右,伴随中国移动互联网进程的不断推进,微信的活跃账户一直维持稳步增长,在2014-2017年年末分别达到5亿月活、6.97亿月活、8.89亿月活和9.89亿月活。 微信的用户数量增长已经开始呈现乏力趋势,这是因为微信自身也在重新寻求新的增长点。微信日活发展历程显示,微信的用户数量增长已经开始呈现乏力趋势。微信在2018年3月日活达到6.89亿人,同比增长5.5%,环比上个月增长1.7%。微信的日活同比增速下滑至20%以下,并在2017年年底下滑至7.7%左右。 微信DAU/MAU的比例也一直较为稳定,从2016年以来一直维持75%-80%左右的比例,用户的粘性极强,继续提升的空间并不大。因此,在整体用户数量开始触达天花板的时候,微信自身也在重新寻求新的增长点。