软件工程作业——c#实现一个简单的可视化计算器

这个作业属于哪个课程https://bbs.csdn.net/forums/ssynkqtd-05
这个作业要求在哪里https://bbs.csdn.net/topics/617294583
这个作业的目标完成一个具有可视化界面的计算器
其他参考文献https://blog.csdn.net/bibiobi/article/details/114823809,https://learn.microsoft.com/zh-cn/visualstudio/get-started/csharp/?view=vs-2022

1、Github项目地址以及项目展示

https://github.com/TongSir02/102101228cst

在这里插入图片描述

2、PSP表格

PSP

Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)

Planning

计划

6050

• Estimate

• 估计这个任务需要多少时间

1515

Development

开发

500500

• Analysis

• 需求分析 (包括学习新技术)

100100

• Design Spec

• 生成设计文档

1515

• Design Review

• 设计复审

3030

• Coding Standard

• 代码规范 (为目前的开发制定合适的规范)

3030

• Design

• 具体设计

1515

• Coding

• 具体编码

200200

• Code Review

• 代码复审

4545

• Test

• 测试(自我测试,修改代码,提交修改)

6565

Reporting

报告

9090

•Test Repor t

• 测试报告

3030

• Size Measurement

• 计算工作量

1515

• Postmortem & Process Improvement Plan

• 事后总结, 并提出过程改进计划

4545
合计650640

3、解题思路描述

看到题目的想法是利用WPF(Windows Presentation Foundation)去做出一个页面,然后再对其进行数据绑定,后面发现visual studio的Windows平台可以与c#语言创建Windows窗体应用项目(类似于低代码搭载平台,可以根据自己的需求,拖动相应组件到相应位置,并对其属性进行更改),比起wpf的适用性更高。
以下为具体操作:
1、创建对应项目,并完成相应组件的位置分配跟属性更改;
2、对每一个组件进行数据的绑定,并对点击各个事件所要求的功能进行实现;
3、进行代码的改进。

4、接口设计和实现过程

1、创建Windows窗体应用程序,在Form1.cs【设计】的工具箱内拖动多个button组件与textbox组件,到窗体内进行布局;
2、对每个button编辑标识名称以及相关文本,textbox用于放置数据就不用设置相关文本,但是要设置可滚动,并且拉长textbox组件,不然显示的数据会非常小;
3、双击button跳转到Form1.cs,并对其进行事件绑定以及编写函数实现点击按钮所需要的功能;
4、对button文本的样式进行更改,美化一下界面;
5、调试一下计算器

5、关键代码展示

private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text += "n";
        }    //用于实现数字的输入,n代表1-9的任意自然数;
        private void button12_Click(object sender, EventArgs e)
        {
            if (textBox1.Text.Contains(".")) return;
            else
            { if (textBox1.Text != "") textBox1.Text += ".";
            }
        }  //小数点实现
        private void button10_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            textBox2.Text = "";
            division.Enabled = true;
            multiplication.Enabled = true;
            addition.Enabled = true;
            subtraction.Enabled = true;
        }  //数据清空的实现

        private void button13_Click(object sender, EventArgs e)
        {
            if
                (textBox1.Text != ""&& textBox1.Text != "-") textBox1.Text = Convert.ToString(double.Parse(textBox1.Text) * -1);
            else if 
                (textBox1.Text != "-") textBox1.Text += "-";
        }  //数据取相反数的实现

        private void button14_Click(object sender, EventArgs e)
        {
            if(textBox1.Text!=""&& textBox1.Text != "-") textBox1.Text = Convert.ToString(double.Parse(textBox1.Text) * 0.01);
        }  //百分号的实现

        private void division_Click(object sender, EventArgs e)
        {
            division.Enabled = false;
            multiplication.Enabled = true;
            addition.Enabled = true;
            subtraction.Enabled = true;
            if(textBox1.Text!="")
            {
                textBox2.Text = textBox1.Text;
                textBox1.Text = "";
            }
            else textBox2.Text = "0";

        } //除法的实现

        private void multiplication_Click(object sender, EventArgs e)
        {
            division.Enabled = true;
            multiplication.Enabled = false;
            addition.Enabled = true;
            subtraction.Enabled = true;
            if (textBox1.Text != "")
            {
                textBox2.Text = textBox1.Text;
                textBox1.Text = "";
            }
            else textBox2.Text = "0";
        }  //乘法的实现

        private void subtraction_Click(object sender, EventArgs e)
        {
            division.Enabled = true;
            multiplication.Enabled = true;
            addition.Enabled = true;
            subtraction.Enabled = false;
            if (textBox1.Text != "")
            {
                textBox2.Text = textBox1.Text;
                textBox1.Text = "";
            }
            else textBox2.Text = "0";
        } //减法的实现


        private void addition_Click(object sender, EventArgs e)
        {
            division.Enabled = true;
            multiplication.Enabled = true;
            addition.Enabled = false;
            subtraction.Enabled = true;
            if (textBox1.Text != "")
            {
                textBox2.Text = textBox1.Text;
                textBox1.Text = "";
            }
            else textBox2.Text = "0";
        }  //加法的实现

        private void button19_Click(object sender, EventArgs e)
        {
            double right;
            double left = double.Parse(textBox2.Text);
            if (textBox1.Text == "")  right = 0;
            else  right = double.Parse(textBox1.Text);
            
            if(division.Enabled==false)
            {
                if (right != 0)
                {
                    textBox1.Text = Convert.ToString(left / right);
                    division.Enabled = true;
                }
                else
                {
                    MessageBox.Show("ERROR!");
                    textBox1.Text = "";
                    return;
                }

            }

            if (multiplication.Enabled == false)
            {             
                textBox1.Text = Convert.ToString(left * right);
                multiplication.Enabled = true;
            }
            if (addition.Enabled == false)
            {
                textBox1.Text = Convert.ToString(left + right);
                addition.Enabled = true;
            }
            if (subtraction.Enabled == false)
            {
                textBox1.Text = Convert.ToString(left - right);
                subtraction.Enabled = true;
            }
    
        }  //等号的实现


        private void button17_Click(object sender, EventArgs e)
        {
            if (textBox1.Text != "") textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - 1);
            else return;

        }  //数据回退的实现


        private void button18_Click(object sender, EventArgs e)
        {
            double x = double.Parse(textBox1.Text);
            textBox1.Text = Convert.ToString(x*x);
            
        }  //平方的实现

        private void button15_Click(object sender, EventArgs e)
        {
            double r = double.Parse(textBox1.Text);
            textBox1.Text = Convert.ToString(Math.Pow(r, 0.5));

        }  //根号的实现
        private void button20_Click(object sender, EventArgs e)
        {
            double s = double.Parse(textBox1.Text);
            int x = (int)s;
            
            if (x != s)
            {
                MessageBox.Show("ERROR");
                textBox1.Text = "";
                return;
            }
            else
            {
                if(x==0)
                {
                    textBox1.Text = "1";
                    return;
                }
                int cnt = 1;
                for(int i = 1; i <= x; i++)
                {
                    cnt *= i;
                }
                textBox1.Text = Convert.ToString(cnt);
            }
        }  //阶乘的实现

6、性能改进

对各个符号文本的组件添加if语句,解决了计算机使用的一些bug,如按“=”textbox内没有文本的话,赋值一个数为0,使界面可以显示出数字0,不至于为空.

           if (textBox1.Text == "")  right = 0;

并且对加减乘除这些基本运算添加了标识,保证计算的时候不会出错

            division.Enabled = true;
            multiplication.Enabled = true;
            addition.Enabled = true;
            subtraction.Enabled = false;

7、单元测试

单元测试代码:

 private void division_Click(object sender, EventArgs e)
        {
            division.Enabled = false;
            multiplication.Enabled = true;
            addition.Enabled = true;
            subtraction.Enabled = true;
            if(textBox1.Text!="")
            {
                textBox2.Text = textBox1.Text;
                textBox1.Text = "";
            }
            else textBox2.Text = "0";

        }

        private void multiplication_Click(object sender, EventArgs e)
        {
            division.Enabled = true;
            multiplication.Enabled = false;
            addition.Enabled = true;
            subtraction.Enabled = true;
            if (textBox1.Text != "")
            {
                textBox2.Text = textBox1.Text;
                textBox1.Text = "";
            }
            else textBox2.Text = "0";
        }

        private void subtraction_Click(object sender, EventArgs e)
        {
            division.Enabled = true;
            multiplication.Enabled = true;
            addition.Enabled = true;
            subtraction.Enabled = false;
            if (textBox1.Text != "")
            {
                textBox2.Text = textBox1.Text;
                textBox1.Text = "";
            }
            else textBox2.Text = "0";
        }


        private void addition_Click(object sender, EventArgs e)
        {
            division.Enabled = true;
            multiplication.Enabled = true;
            addition.Enabled = false;
            subtraction.Enabled = true;
            if (textBox1.Text != "")
            {
                textBox2.Text = textBox1.Text;
                textBox1.Text = "";
            }
            else textBox2.Text = "0";
        }

在这里插入图片描述

8、异常处理

在输入不正确的运算规则时会出现以下异常,后面通过添加if语句解决问题

“System.FormatException”类型的未经处理的异常在 mscorlib.dll 中发生 输入字符串的格式不正确。

9、心得体会

心路历程:在一开始设计了只有加减乘除操作的简易计算器,后面想着可以先设计界面的排版,然后再添加功能如阶乘、根号、平方。但是感觉还是差点意思,没有像HTML+CSS+JS前端三件套设计出来的样式美观,会显得有点古板。
学习收获:在本次软工作业–制作一个可视化的计算器,我学习了c#的相关语法windows窗体应用的使用以及如何让自己的UI变得用户友好,同时也学习了如何对代码做好单元测试。同时,在修改bug的过程中的一次次调试也增强了发现与解决问题的能力。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值