实战项目-用winform动手写一个计算器
实战项目--用winform动手写一个“计算器”
实战项目旨在交流学习,欢迎在评论区交流意见。
简介:分享一个简单的软件项目---自己动手写一个“计算器”。
先展示效果:
![](http://tukuimg.bdstatic.com/scrop/62ef7211bd6cee021eb20f3ac94fe5a0.gif)
项目开发环境: Visual Studio 2017 winform 开发
开发语言: C#
demo功能: Windows 窗体程序实现计算器功能
PS:其他版本的VS开发步骤基本一样
首先,打开Visual Sdudio,新建一个winform工程
![](https://pics1.baidu.com/feed/79f0f736afc37931b926133e6188ab4d43a9112b.jpeg@f_auto?token=b1c5c260cc1d620a031183c79ac836ff&s=A190CD30DC6DC00BC85D90CF020080B2)
左上角:文件 - 新建 - 项目
![](https://pics2.baidu.com/feed/0df3d7ca7bcb0a4650a2bebbee2fea2c6a60af00.jpeg@f_auto?token=b805f336afddd7d31697d75346f0d65e&s=E190CD385C05D10BD76CC4CA0300E0B1)
选择Visual C# 的 Windows窗体应用(.NET Framework),名称位置自己设定即可
![](https://pics5.baidu.com/feed/2cf5e0fe9925bc31a1a4ca48dd9391b9ca13703e.jpeg@f_auto?token=7baa11bd6239b3ea8296b118470c5162&s=4052CF38078F414B5E6978DB030050B0)
然后点击确定
接着弹出的窗体设计界面就可以用来进行程序界面设计了:
![](https://pics1.baidu.com/feed/838ba61ea8d3fd1ffe09c288b302391794ca5fd0.jpeg@f_auto?token=626e53a82ee42f7d24c59c1dc901d7c5&s=11B04D30C4FDE02B544D40DA0300C0B2)
在左侧工具箱中,拖出需要的按钮,改变其大小和显示标签,如下图所示
![](https://pics1.baidu.com/feed/a71ea8d3fd1f4134bcc0dac4a65389c2d0c85e6d.jpeg@f_auto?token=006689f704a3dc21fbc402fafc04d90f&s=7290E8203D2E5E1F5CF5B0C20300C0B2)
这里设定了0~9的数字按键,加减乘除的基本运算按键还有“=”号和清除键“C”,这里按照个人实际需求设计即可,此例只是示范。
然后拖入一个TextBox控件,调整大小和整体布局,使得界面看起开相对规范:
![](https://pics0.baidu.com/feed/64380cd7912397dda92769dedaceaebfd1a28766.jpeg@f_auto?token=dbf32f4da85639f1b142f91490b775f2&s=3298642011AF4F1F5EF431C2030010B2)
PS:TextBox的属性栏里面,应当将字体改大,以便显示,显示顺序应改为RightToLeft
![](https://pics7.baidu.com/feed/0b7b02087bf40ad1863d5388d4600dd7a8ecce51.jpeg@f_auto?token=6c9e8f62c79577b46bd00332acb00750&s=E800BC1A1F0C40C8587424CC0300C032)
功能布局颜色等按照自己的需求做一下调整,界面就搞定了
![](https://pics6.baidu.com/feed/3c6d55fbb2fb4316a9219d03a5e85a2b09f7d366.jpeg@f_auto?token=5a944265856dc84d18d97749fa7c0bb8&s=3980D810FCA50C9A38C74DD6030050B8)
下面代码实现功能:
![](https://pics1.baidu.com/feed/37d3d539b6003af34136aaa5b766da541138b63f.jpeg@f_auto?token=a9c420ebeba6e39daab3686be255fb86&s=2650C8320B8F51494E652CDA0300C0B0)
表示最终结果,中间结果的值的变量在开头先定义清楚,然后后面在每个按键的触发事件中填入内容即可。
![](https://pics3.baidu.com/feed/f636afc379310a55c6710d5b34095fa183261098.jpeg@f_auto?token=65120f58b53a74e0e85b63bf5afe3969&s=0570C032090E544D425D80DA0300D0B2)
![](https://pics3.baidu.com/feed/a1ec08fa513d269704b50b36d6b7aef34216d8cf.jpeg@f_auto?token=5329599b3272e8f23223561cf23dcb17&s=05707032191A544D0C5DA1DA0300D0B2)
感觉挺简单的算法,自己写的时候还是费了些脑经,多次修改测试后,圆满实现效果。
![](http://tukuimg.bdstatic.com/scrop/62ef7211bd6cee021eb20f3ac94fe5a0.gif)
至此项目介绍完毕,项目中的数学计算还是挺有意思的
下面上源码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
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();
}
double Value = 0;//最终值
double value = 0;//中间值
int[] number = new int[10]; //设定输入数据位数不超过10位
int K = 0;//位数
int flag = 0;//0:加 1:减 2:乘 3:除
private void button0_Click(object sender, EventArgs e)
{
value = 0;//清空中间值
number[K] = 0;
K++;//位数增加
for (int i = 0; i < K; i++)
{
value += number[i] * System.Math.Pow(10, K - i - 1);//乘方:10的K次方
}
// Value = Value + value;
textBox1.Text = value.ToString();//显示
}
private void button1_Click(object sender, EventArgs e)
{
value = 0;//清空中间值
number[K] = 1;
K++;//位数增加
for (int i = 0; i < K; i++)
{
value += number[i] * System.Math.Pow(10, K - i-1);//乘方:10的K次方
}
// Value = Value + value;
textBox1.Text = value.ToString();//显示
}
private void button2_Click(object sender, EventArgs e)
{
value = 0;//清空中间值
number[K] = 2;
K++;//位数增加
for (int i = 0; i < K; i++)
{
value += number[i] * System.Math.Pow(10, K - i - 1);//乘方:10的K次方
}
// Value = Value + value;
textBox1.Text = value.ToString();//显示
}
private void button3_Click(object sender, EventArgs e)
{
value = 0;//清空中间值
number[K] = 3;
K++;//位数增加
for (int i = 0; i < K; i++)
{
value += number[i] * System.Math.Pow(10, K - i - 1);//乘方:10的K次方
}
// Value = Value + value;
textBox1.Text = value.ToString();//显示
}
private void button4_Click(object sender, EventArgs e)
{
value = 0;//清空中间值
number[K] = 4;
K++;//位数增加
for (int i = 0; i < K; i++)
{
value += number[i] * System.Math.Pow(10, K - i - 1);//乘方:10的K次方
}
// Value = Value + value;
textBox1.Text = value.ToString();//显示
}
private void button5_Click(object sender, EventArgs e)
{
value = 0;//清空中间值
number[K] = 5;
K++;//位数增加
for (int i = 0; i < K; i++)
{
value += number[i] * System.Math.Pow(10, K - i - 1);//乘方:10的K次方
}
// Value = Value + value;
textBox1.Text = value.ToString();//显示
}
private void button6_Click(object sender, EventArgs e)
{
value = 0;//清空中间值
number[K] = 6;
K++;//位数增加
for (int i = 0; i < K; i++)
{
value += number[i] * System.Math.Pow(10, K - i - 1);//乘方:10的K次方
}
// Value = Value + value;
textBox1.Text = value.ToString();//显示
}
private void button7_Click(object sender, EventArgs e)
{
value = 0;//清空中间值
number[K] = 7;
K++;//位数增加
for (int i = 0; i < K; i++)
{
value += number[i] * System.Math.Pow(10, K - i - 1);//乘方:10的K次方
}
// Value = Value + value;
textBox1.Text = value.ToString();//显示
}
private void button8_Click(object sender, EventArgs e)
{
value = 0;//清空中间值
number[K] = 8;
K++;//位数增加
for (int i = 0; i < K; i++)
{
value += number[i] * System.Math.Pow(10, K - i - 1);//乘方:10的K次方
}
// Value = Value + value;
textBox1.Text = value.ToString();//显示
}
private void button9_Click(object sender, EventArgs e)
{
value = 0;//清空中间值
number[K] = 9;
K++;//位数增加
for (int i = 0; i < K; i++)
{
value += number[i] * System.Math.Pow(10, K - i - 1);//乘方:10的K次方
}
// Value = Value + value;
textBox1.Text = value.ToString();//显示
}
//加
private void button10_Click(object sender, EventArgs e)
{
//运算
if (flag == 0)
{
Value = Value + value;
}
else if (flag == 1)
{
Value = Value - value;
}
else if (flag == 2)
{
Value = Value * value;
}
else if (flag == 3)
{
Value = Value / value;
}
flag = 0;//标记运算符
textBox1.Text = Value.ToString();//显示
value = 0;
K = 0;
}
//减
private void button11_Click(object sender, EventArgs e)
{
//运算
if (flag == 0)
{
Value = Value + value;
}
else if (flag == 1)
{
Value = Value - value;
}
else if (flag == 2)
{
Value = Value * value;
}
else if (flag == 3)
{
Value = Value / value;
}
flag = 1;//标记运算符
textBox1.Text = Value.ToString();//显示
value = 0;
K = 0;
}
//乘
private void button12_Click(object sender, EventArgs e)
{
//运算
if (flag == 0)
{
Value = Value + value;
}
else if (flag == 1)
{
Value = Value - value;
}
else if (flag == 2)
{
Value = Value * value;
}
else if (flag == 3)
{
Value = Value / value;
}
flag = 2;//标记运算符
textBox1.Text = Value.ToString();//显示
value = 0;
K = 0;
}
//除
private void button13_Click(object sender, EventArgs e)
{
//运算
if (flag == 0)
{
Value = Value + value;
}
else if (flag == 1)
{
Value = Value - value;
}
else if (flag == 2)
{
Value = Value * value;
}
else if (flag == 3)
{
Value = Value / value;
}
flag = 3;//标记运算符
textBox1.Text = Value.ToString();//显示
value = 0;
K = 0;
}
//清空
private void button14_Click(object sender, EventArgs e)
{
Value = 0;
value = 0;
K = 0;
flag = 0;
textBox1.Text = "0";
}
//结果显示
private void button15_Click(object sender, EventArgs e)
{
//运算
if (flag == 0)
{
Value = Value + value;
}
else if (flag == 1)
{
Value = Value - value;
}
else if (flag == 2)
{
Value = Value * value;
}
else if (flag == 3)
{
Value = Value / value;
}
textBox1.Text = Value.ToString();//显示
value = 0;
K = 0;
}
}
}