【数据库系统原理实验作业】二:编写计算器程序

工程文件下载:https://pan.baidu.com/s/118N1FUDjwqlsbZEwr5lJPQ
提取码:4399

一、下载c#

登陆网址:https://visualstudio.microsoft.com/zh-hans/
下载community 2019,登录微软账户即可免费使用vstudio。
在这里插入图片描述
打开安装程序,选择.NET桌面开发,VS就可以帮下载并配置好C#的运行环境。
在这里插入图片描述

二、从创建项目到了解C#

打开VS启动窗口,点击创建新项目,找到windows窗体应用后,点击,然后为你的项目命名。
在这里插入图片描述
从在设计视图中的工具箱一栏可以看到一系列窗体,这些是C#自带的控件。
在这里插入图片描述
这次做计算器主要用到了下面三个控件:

1.textbox:文本框控件
2.button:按钮控件
3.picture:图片控件(图片控件没有也可以,只是为了美观而加的)

可以将控件拖到form中,用鼠标操作代替代码编写,但不建议以这种方式学习C#,最好的方法还是学习用代码处理布局,或者二者相结合。(曾经在书上看到的,其实我也没咋学
在这里插入图片描述
属性栏让我们可以了解与更改窗口的属性。
在这里插入图片描述
然后就可以开始编辑计算器了,这里对一些新的语句做些解释

textBox.Text
→获取文本框的内容,可以对其进行增添和修改,数据类型为string
Convert.ToDouble(String str)
→将String类型转为double类型
.toString()
→将数据类型转为String

三、成品展示

在这里插入图片描述
功能比较简单,按着手机计算器做的,这里就不赘述啦
主要在第四部分分析是如何实现的

四、代码部分及分析

//Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;F
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Calculator
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            textBox1.Text = "0";//将文本框设置初始为0
        }
        double Leftnumber = 0;//运算符左边的数字
        double Rightnumber=0;//运算符右边的数字
        double Result;//运算结果
        String Flag;//运算符
        bool isDone = true; //用于判断所输入的运算符是否已经运算,true为已运算,当无运算符存储在Flag中时,也看作已运算
        bool isEqual = false; //用于判断数字在buttonEqual_Click调用时,是输入给Leftnumber还是Rightnumber
        private void iszero(object sender, EventArgs e)
        {
            if (textBox1.Text == "0"|| isEqual==true)
                textBox1.Text = "";//把首位的零去掉
            if (isEqual == true)
            {
                Leftnumber = 0;
                Flag = null;//当经历过一次等于后将存储的运算符清除
                isDone = true;
                textBox2.Text = "";
            }
            isEqual = false;
        }//用于数字按钮之前,主要功能是在输入数字和运算符之间实现过渡
        private double Calculate(double a, string f, double b)
        {
            double c=0;
            switch (f)
            {
                case ("+"):
                    c = a + b;
                    break;
                case ("-"):
                    c = a - b;
                    break;
                case ("*"):
                    c = a * b;
                    break;
                case ("/"):
                    c = a / b;
                    break;
                default:
                    break;
            }
            return c;
        }//用于计算
        //数字1到数字9的按钮:将数字输入文本框1
        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text += '1';
        }
        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text += '2';
        }
        private void button3_Click(object sender, EventArgs e)
        {
            textBox1.Text += '3';
        }
        private void button4_Click(object sender, EventArgs e)
        {
            textBox1.Text += "4";
        }
        private void button5_Click(object sender, EventArgs e)
        {
            textBox1.Text += "5";
        }
        private void button6_Click(object sender, EventArgs e)
        {
            textBox1.Text += "6";
        }
        private void button7_Click(object sender, EventArgs e)
        {
            textBox1.Text += "7";
        }
        private void button8_Click(object sender, EventArgs e)
        {
            textBox1.Text += "8";
        }
        private void button9_Click(object sender, EventArgs e)
        {
            textBox1.Text += "9";
        }
        private void Form1_Load(object sender, EventArgs e)
        {}
        private void button0_Click(object sender, EventArgs e)
        {
            textBox1.Text += "0";
        }
        private void buttonPoint_Click(object sender, EventArgs e)
        {
            textBox1.Text += ".";
        }
        private void buttonAdd_Click(object sender, EventArgs e)
        {
            isEqual = false;//置为false证明输入等号时,将文本框1的值给Rightnumber
            if (isDone == false)//如果上一个输入的运算符未被使用
            {
                Rightnumber = Convert.ToDouble(textBox1.Text);//获取文本框信息
                if (Rightnumber != 0)//因为textbox1在输入运算符后会置零,避免将初始的零纳入计算
                    Leftnumber = this.Calculate(Leftnumber, Flag, Rightnumber);
                Flag = "+";
                textBox2.Text = Leftnumber.ToString() + "+";
            }
            else
            {
                Leftnumber= Convert.ToDouble(textBox1.Text);
                Flag = "+";
                textBox2.Text = Leftnumber.ToString() + Flag;
            }
            textBox1.Text = "0";//将文本框1置0
            isDone = false;
            
        }
        private void buttonMinus_Click(object sender, EventArgs e)
        {
            isEqual = false;
            if (isDone == false)
            {
                Rightnumber = Convert.ToDouble(textBox1.Text);
                if (Rightnumber != 0)
                    Leftnumber = this.Calculate(Leftnumber, Flag, Rightnumber);
                Flag = "-";
                textBox2.Text = Leftnumber.ToString() + "-";
            }
            else
            {
                Leftnumber = Convert.ToDouble(textBox1.Text);
                Flag = "-";
                textBox2.Text = Leftnumber.ToString() + Flag;
            }
            textBox1.Text = "0";
            isDone = false;
        }
        private void buttonMultiply_Click(object sender, EventArgs e)
        {
            isEqual = false;
            if (isDone == false)
            {
                Rightnumber = Convert.ToDouble(textBox1.Text);
                if(Rightnumber!=0)
                    Leftnumber = this.Calculate(Leftnumber, Flag, Rightnumber);
                Flag = "*";
                textBox2.Text = Leftnumber.ToString() + "*";
            }
            else
            {
                Leftnumber = Convert.ToDouble(textBox1.Text);
                Flag = "*";
                textBox2.Text = Leftnumber.ToString() + Flag;
            }
            textBox1.Text = "0";
            isDone = false;
        }
        private void buttonDivide_Click(object sender, EventArgs e)
        {
            isEqual = false;
            if (isDone == false)
            {
                Rightnumber = Convert.ToDouble(textBox1.Text);
                if (Flag == "/" && Rightnumber == 0)
                {
                    textBox1.Text = "除数不能为0";
                    textBox2.Text = "";
                    return;
                }
                if (Rightnumber != 0)
                    Leftnumber = this.Calculate(Leftnumber, Flag, Rightnumber);
                Flag = "/";
                textBox2.Text = Leftnumber.ToString() + "/";
            }
            else
            {
                Leftnumber = Convert.ToDouble(textBox1.Text);
                Flag = "/";
                textBox2.Text = Leftnumber.ToString() + Flag;
            }
            textBox1.Text = "0";
            isDone = false;
        }
        private void buttonEqual_Click(object sender, EventArgs e)
        {
            if (isEqual == false)
                Rightnumber = Convert.ToDouble(textBox1.Text);
            isEqual = true;
            if (Flag != "/" || Rightnumber != 0)//当输入不违规时
            {
                if (Flag != null)
                {
                    Result = this.Calculate(Leftnumber, Flag, Rightnumber);
                    textBox1.Text = Result.ToString();
                    textBox2.Text = Leftnumber.ToString() + Flag + Rightnumber.ToString() + "=";
                }
                else
                {
                    Leftnumber = Convert.ToDouble(textBox1.Text);
                    textBox2.Text = Leftnumber.ToString() + "=";
                }
            }
            else
            {
                textBox1.Text = "除数不能为0";
                textBox2.Text = "";
            }
            isDone = true;//运算符标记为已使用

        }
        private void buttonC_Click(object sender, EventArgs e)
        {
            Leftnumber = 0;
            Rightnumber = 0;
            Flag = null;
            isDone = true;
            isEqual = false;
            textBox1.Text = "0";
            textBox2.Text = "";
        }//功能C的实现

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
        }
        private void buttonCE_Click(object sender, EventArgs e)
        {
            if (Flag == null) Leftnumber = 0;
            else
            {
                Rightnumber = 0;
                if (isEqual == true)
                {
                    Leftnumber = 0;
                    textBox2.Text = "";
                }
            }
            textBox1.Text = "0";
        }//功能CE的实现
        private void buttonZF_Click(object sender, EventArgs e)
        {
            textBox1.Text =(-(Convert.ToDouble(textBox1.Text))).ToString();
        }//功能相反数的实现
        private void buttonPer_Click(object sender, EventArgs e)
        {
            textBox1.Text = ((Convert.ToDouble(textBox1.Text)*0.01)).ToString();
        }//功能百分数的实现
        private void pictureBox1_Click(object sender, EventArgs e)
        {}
    }
}

五、问题与思考

问题:

①:当在设计视图时调整控件时,在From.Designer.cs为按钮设置的活动会莫名其妙地消失
答:可能是由于太频繁地使用复制粘贴创建控件,导致Vs的自动填充出现异常,在改变控件时,将按钮恢复了默认设置,导致了活动的消失(吃代码 )。所以之后还是老老实实一个一个创建按钮,别想着偷懒复制,不然就要手动写布局了。

思考

:我做的计算器并没有连续点等于,然后重复相加同一数字的功能。主要是为了保证可以在中途换运算符(例如把加换成减),这两个功能冲突了,所以就放弃做了这个功能,还没有想到如何在原有的基础上兼顾两者。在搜索过程中了解到可以使用SQL库计算结果,或许可以试试。

:自己写的不光逻辑乱,格式也乱,后果就是沦为小型bug作坊,平时刷题还是刷的不够多,或者该多去看看网上大佬写的工程。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值