目录
引言
在现代计算机和嵌入式系统中,上位机程序扮演着至关重要的角色。它们不仅用于与硬件设备进行通信和控制,还为用户提供了直观易用的界面来执行各种任务。在本篇博客中,我们将详细介绍如何使用上位机程序来打造一个简易的计算器,为用户提供基本的数学运算功能。通过这个项目,读者将能够了解上位机程序的开发流程、界面设计、功能实现以及测试与调试等方面的知识。
1、项目概述
本项目的目标是开发一个简易的计算器应用程序,它具备基本的数学运算功能,如加、减、乘、除等。我们将使用ET.Windows框架作为上位机程序的开发环境,因为ET.Windows提供了丰富的GUI(图形用户界面)工具和跨平台的支持。
2、开发环境搭建
Visual Studio2022下载地址
官网下载,链接如下:
Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 (microsoft.com)
https://visualstudio.microsoft.com/zh-hans/vs/

下载完成后的安装包如下图所示。
![]()
双击安装包安装完成即可对工作负荷进行选择,建议勾选自己能够用到的即可,全选会很占用内存,后期如果学习内容有所增加还是可以进行再次下载的,如果仅是对c/c++的学习,按照如下图所示勾选即可。

3、界面设计
总体设计方案:我们将使用Windows窗体来设计计算器的界面。Windows窗体是NET.Windows框架提供的一个强大的界面设计工具,它允许你通过拖放控件的方式来创建复杂的界面布局。在计算器的界面中,我们需要包含以下元素:
- 一个文本框,用于显示输入和结果;
- 一些按钮,用于输入数字和运算符;
- 一个等号按钮,用于触发计算操作;
- 一个清除按钮,用于清除文本框中的内容。
你可以使用的拖放功能将这些元素添加到界面中,并调整它们的大小和位置。同时,你还可以设置按钮的文本和图标,以提供更好的用户体验。设计完成后,保存界面文件,以便在后续的开发过程中使用。
首先先新建一个工程项目,选择窗体程序应用,如下图所示。

打开工具箱选择Button按钮和Textbook文本框,如下图所示:

最后来设计计算器的界面。界面应该包含一些基本的元素,如数字按钮、运算符按钮、等号和清除按钮,以及一个用于显示输入和结果的文本框,设置界面如下图所示。

4、功能实现
实现按钮功能:为每个按钮添加点击事件处理代码,如数字按钮用于输入数字,运算符按钮用于确定运算类型。
private void button1_Click(object sender, EventArgs e)
{
this.textBox1.Text += "0";
}
private void button2_Click(object sender, EventArgs e)
{
this.textBox1.Text += "1";
}
private void button3_Click(object sender, EventArgs e)
{
this.textBox1.Text += "2";
}
private void button4_Click(object sender, EventArgs e)
{
this.textBox1.Text += "3";
}
private void button5_Click(object sender, EventArgs e)
{
this.textBox1.Text += "4";
}
private void button6_Click(object sender, EventArgs e)
{
this.textBox1.Text += "5";
}
private void button7_Click(object sender, EventArgs e)
{
this.textBox1.Text += "6";
}
private void button8_Click(object sender, EventArgs e)
{
this.textBox1.Text += "7";
}
private void button9_Click(object sender, EventArgs e)
{
this.textBox1.Text += "8";
}
private void button10_Click(object sender, EventArgs e)
{
this.textBox1.Text += "9";
}
private void button11_Click(object sender, EventArgs e)
{
this.textBox1.Text += ".";
}
实现计算逻辑:编写处理计算逻辑的函数,例如实现加法、减法、乘法和除法等基本运算。
private void button13_Click(object sender, EventArgs e)
{
string text =this.textBox1.Text;
if (text == "")
{
MessageBox.Show("输入框当前没有数据");
firstNuber = 0;
return;
}
try
{
firstNuber = double.Parse(text);
}
catch(Exception e2)
{
MessageBox.Show("数据格式不对");
firstNuber = 0;
}
this.textBox1.Text = "";
this.currentOperator = "+";
}
private void button12_Click(object sender, EventArgs e)
{
string text = this.textBox1.Text;
if (text == "")
{
MessageBox.Show("输入框当前没有数据");
secondNuber = 0;
return;
}
try
{
secondNuber = double.Parse(text);
}
catch (Exception e2)
{
MessageBox.Show("数据格式不对");
firstNuber = 0;
}
double result = 0;
switch(currentOperator)
{
case "+":
result = firstNuber + secondNuber;
break;
}
switch (currentOperator)
{
case "-":
result = firstNuber - secondNuber;
break;
}
switch (currentOperator)
{
case "*":
result = firstNuber * secondNuber;
break;
}
switch (currentOperator)
{
case "/":
result = firstNuber / secondNuber;
break;
}
this.textBox1.Text = result.ToString();
}
private void button14_Click(object sender, EventArgs e)
{
string text = this.textBox1.Text;
if (text == "")
{
MessageBox.Show("输入框当前没有数据");
firstNuber = 0;
return;
}
try
{
firstNuber = double.Parse(text);
}
catch (Exception e2)
{
MessageBox.Show("数据格式不对");
firstNuber = 0;
}
this.textBox1.Text = "";
this.currentOperator = "-";
}
private void button15_Click(object sender, EventArgs e)
{
string text = this.textBox1.Text;
if (text == "")
{
MessageBox.Show("输入框当前没有数据");
firstNuber = 0;
return;
}
try
{
firstNuber = double.Parse(text);
}
catch (Exception e2)
{
MessageBox.Show("数据格式不对");
firstNuber = 0;
}
this.textBox1.Text = "";
this.currentOperator = "*";
}
private void button16_Click(object sender, EventArgs e)
{
string text = this.textBox1.Text;
if (text == "")
{
MessageBox.Show("输入框当前没有数据");
firstNuber = 0;
return;
}
try
{
firstNuber = double.Parse(text);
}
catch (Exception e2)
{
MessageBox.Show("数据格式不对");
firstNuber = 0;
}
this.textBox1.Text = "";
this.currentOperator = "/";
}
对每个部分的功能进行单独测试,确保按钮事件和计算逻辑正确无误。例如在运行的框架里进行测试,显示结果如下图所示。

优化与扩展:
- 添加更多的运算符和函数支持(如开方、百分比等);
- 支持浮点数和整数的混合运算;
- 添加历史记录功能以便用户查看之前的计算结果;
- 支持撤销和重做操作以便用户纠正错误;
- 改进界面设计以提高用户体验(如使用更美观的图标和字体)。
5、源程序代码
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 计算机
{
public partial class Form1 : Form
{
private double firstNuber;
private double secondNuber;
private string currentOperator;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.textBox1.Text += "0";
}
private void button2_Click(object sender, EventArgs e)
{
this.textBox1.Text += "1";
}
private void button3_Click(object sender, EventArgs e)
{
this.textBox1.Text += "2";
}
private void button4_Click(object sender, EventArgs e)
{
this.textBox1.Text += "3";
}
private void button5_Click(object sender, EventArgs e)
{
this.textBox1.Text += "4";
}
private void button6_Click(object sender, EventArgs e)
{
this.textBox1.Text += "5";
}
private void button7_Click(object sender, EventArgs e)
{
this.textBox1.Text += "6";
}
private void button8_Click(object sender, EventArgs e)
{
this.textBox1.Text += "7";
}
private void button9_Click(object sender, EventArgs e)
{
this.textBox1.Text += "8";
}
private void button10_Click(object sender, EventArgs e)
{
this.textBox1.Text += "9";
}
private void button11_Click(object sender, EventArgs e)
{
this.textBox1.Text += ".";
}
private void button17_Click(object sender, EventArgs e)
{
this.textBox1.Text = "";
}
private void button13_Click(object sender, EventArgs e)
{
string text =this.textBox1.Text;
if (text == "")
{
MessageBox.Show("输入框当前没有数据");
firstNuber = 0;
return;
}
try
{
firstNuber = double.Parse(text);
}
catch(Exception e2)
{
MessageBox.Show("数据格式不对");
firstNuber = 0;
}
this.textBox1.Text = "";
this.currentOperator = "+";
}
private void button12_Click(object sender, EventArgs e)
{
string text = this.textBox1.Text;
if (text == "")
{
MessageBox.Show("输入框当前没有数据");
secondNuber = 0;
return;
}
try
{
secondNuber = double.Parse(text);
}
catch (Exception e2)
{
MessageBox.Show("数据格式不对");
firstNuber = 0;
}
double result = 0;
switch(currentOperator)
{
case "+":
result = firstNuber + secondNuber;
break;
}
switch (currentOperator)
{
case "-":
result = firstNuber - secondNuber;
break;
}
switch (currentOperator)
{
case "*":
result = firstNuber * secondNuber;
break;
}
switch (currentOperator)
{
case "/":
result = firstNuber / secondNuber;
break;
}
this.textBox1.Text = result.ToString();
}
private void button14_Click(object sender, EventArgs e)
{
string text = this.textBox1.Text;
if (text == "")
{
MessageBox.Show("输入框当前没有数据");
firstNuber = 0;
return;
}
try
{
firstNuber = double.Parse(text);
}
catch (Exception e2)
{
MessageBox.Show("数据格式不对");
firstNuber = 0;
}
this.textBox1.Text = "";
this.currentOperator = "-";
}
private void button15_Click(object sender, EventArgs e)
{
string text = this.textBox1.Text;
if (text == "")
{
MessageBox.Show("输入框当前没有数据");
firstNuber = 0;
return;
}
try
{
firstNuber = double.Parse(text);
}
catch (Exception e2)
{
MessageBox.Show("数据格式不对");
firstNuber = 0;
}
this.textBox1.Text = "";
this.currentOperator = "*";
}
private void button16_Click(object sender, EventArgs e)
{
string text = this.textBox1.Text;
if (text == "")
{
MessageBox.Show("输入框当前没有数据");
firstNuber = 0;
return;
}
try
{
firstNuber = double.Parse(text);
}
catch (Exception e2)
{
MessageBox.Show("数据格式不对");
firstNuber = 0;
}
this.textBox1.Text = "";
this.currentOperator = "/";
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
6、总结
通过本项目,我们学习了如何使用上位机程序来制作一个简易的计算器。我们使用了Qt框架作为开发环境,并利用了NET.Windows框架来实现界面设计和功能实现。虽然这个计算器只具备基本的数学运算功能,但它为我们提供了一个很好的起点来探索更复杂的上位机程序开发。总的来说,上位机是现代自动化控制系统中不可或缺的重要组成部分,其功能和性能直接影响到整个系统的运行效率和稳定性。
以上就是关于用C#窗体制作一个简易计算器的全部内容,希望对大家有所帮助!

2282

被折叠的 条评论
为什么被折叠?



