您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# C#实现简单计算器功能的脚本怎么写
计算器是编程初学者最经典的练手项目之一。本文将详细介绍如何使用C#语言实现一个具有基础功能的控制台计算器,涵盖从项目搭建到功能实现的完整流程。
## 一、开发环境准备
### 1.1 安装必要工具
首先确保已安装以下开发环境:
- Visual Studio 2022(社区版即可)
- .NET 6.0 SDK或更高版本
### 1.2 创建新项目
1. 打开Visual Studio
2. 选择"创建新项目" > "控制台应用(.NET Core)"
3. 命名为"SimpleCalculator"
4. 选择.NET 6.0作为目标框架
## 二、基础程序结构
我们先建立程序的基本框架:
```csharp
using System;
namespace SimpleCalculator
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("简单计算器 v1.0");
Console.WriteLine("----------------");
bool continueCalculating = true;
while (continueCalculating)
{
try
{
// 计算逻辑将放在这里
Console.Write("是否继续计算?(y/n): ");
continueCalculating = Console.ReadLine().ToLower() == "y";
}
catch (Exception ex)
{
Console.WriteLine($"发生错误: {ex.Message}");
}
}
Console.WriteLine("感谢使用计算器!");
}
}
}
首先添加获取用户输入的方法:
static double GetNumberFromUser(string prompt)
{
double number;
Console.Write(prompt);
while (!double.TryParse(Console.ReadLine(), out number))
{
Console.Write("输入无效,请重新输入数字: ");
}
return number;
}
添加运算符选择方法:
static char GetOperatorFromUser()
{
Console.Write("请选择运算符(+, -, *, /): ");
char op;
while (!char.TryParse(Console.ReadLine(), out op) ||
!(op == '+' || op == '-' || op == '*' || op == '/'))
{
Console.Write("无效运算符,请重新输入(+, -, *, /): ");
}
return op;
}
实现核心计算功能:
static double Calculate(double num1, double num2, char op)
{
return op switch
{
'+' => num1 + num2,
'-' => num1 - num2,
'*' => num1 * num2,
'/' => num2 == 0 ? throw new DivideByZeroException("不能除以零") : num1 / num2,
_ => throw new InvalidOperationException("未知运算符")
};
}
将上述方法整合到主程序中:
using System;
namespace SimpleCalculator
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("简单计算器 v1.0");
Console.WriteLine("----------------");
bool continueCalculating = true;
while (continueCalculating)
{
try
{
double num1 = GetNumberFromUser("请输入第一个数字: ");
char op = GetOperatorFromUser();
double num2 = GetNumberFromUser("请输入第二个数字: ");
double result = Calculate(num1, num2, op);
Console.WriteLine($"结果: {num1} {op} {num2} = {result}");
Console.Write("是否继续计算?(y/n): ");
continueCalculating = Console.ReadLine().ToLower() == "y";
}
catch (Exception ex)
{
Console.WriteLine($"发生错误: {ex.Message}");
}
}
Console.WriteLine("感谢使用计算器!");
}
static double GetNumberFromUser(string prompt)
{
double number;
Console.Write(prompt);
while (!double.TryParse(Console.ReadLine(), out number))
{
Console.Write("输入无效,请重新输入数字: ");
}
return number;
}
static char GetOperatorFromUser()
{
Console.Write("请选择运算符(+, -, *, /): ");
char op;
while (!char.TryParse(Console.ReadLine(), out op) ||
!(op == '+' || op == '-' || op == '*' || op == '/'))
{
Console.Write("无效运算符,请重新输入(+, -, *, /): ");
}
return op;
}
static double Calculate(double num1, double num2, char op)
{
return op switch
{
'+' => num1 + num2,
'-' => num1 - num2,
'*' => num1 * num2,
'/' => num2 == 0 ? throw new DivideByZeroException("不能除以零") : num1 / num2,
_ => throw new InvalidOperationException("未知运算符")
};
}
}
}
我们可以扩展计算器支持更多运算:
static char GetOperatorFromUser()
{
Console.Write("请选择运算符(+, -, *, /, %, ^): ");
char op;
while (!char.TryParse(Console.ReadLine(), out op) ||
!(op == '+' || op == '-' || op == '*' ||
op == '/' || op == '%' || op == '^'))
{
Console.Write("无效运算符,请重新输入(+, -, *, /, %, ^): ");
}
return op;
}
static double Calculate(double num1, double num2, char op)
{
return op switch
{
'+' => num1 + num2,
'-' => num1 - num2,
'*' => num1 * num2,
'/' => num2 == 0 ? throw new DivideByZeroException("不能除以零") : num1 / num2,
'%' => num1 % num2,
'^' => Math.Pow(num1, num2),
_ => throw new InvalidOperationException("未知运算符")
};
}
class CalculationHistory
{
public double Num1 { get; set; }
public double Num2 { get; set; }
public char Operator { get; set; }
public double Result { get; set; }
public DateTime Timestamp { get; set; }
}
// 在主类中添加
static List<CalculationHistory> history = new List<CalculationHistory>();
// 修改主循环中的计算部分
double result = Calculate(num1, num2, op);
Console.WriteLine($"结果: {num1} {op} {num2} = {result}");
history.Add(new CalculationHistory
{
Num1 = num1,
Num2 = num2,
Operator = op,
Result = result,
Timestamp = DateTime.Now
});
// 添加查看历史的方法
static void ShowHistory()
{
Console.WriteLine("\n计算历史:");
Console.WriteLine("----------------");
foreach (var item in history)
{
Console.WriteLine($"[{item.Timestamp:HH:mm:ss}] {item.Num1} {item.Operator} {item.Num2} = {item.Result}");
}
Console.WriteLine("----------------\n");
}
static void ShowMenu()
{
Console.WriteLine("\n菜单选项:");
Console.WriteLine("1. 开始计算");
Console.WriteLine("2. 查看历史");
Console.WriteLine("3. 清除历史");
Console.WriteLine("4. 退出");
Console.Write("请选择: ");
}
// 修改主程序结构
static void Main(string[] args)
{
Console.WriteLine("简单计算器 v1.0");
bool running = true;
while (running)
{
ShowMenu();
string choice = Console.ReadLine();
switch (choice)
{
case "1":
CalculateMode();
break;
case "2":
ShowHistory();
break;
case "3":
history.Clear();
Console.WriteLine("历史记录已清除");
break;
case "4":
running = false;
break;
default:
Console.WriteLine("无效选择");
break;
}
}
Console.WriteLine("感谢使用计算器!");
}
static void CalculateMode()
{
bool continueCalculating = true;
while (continueCalculating)
{
try
{
double num1 = GetNumberFromUser("请输入第一个数字: ");
char op = GetOperatorFromUser();
double num2 = GetNumberFromUser("请输入第二个数字: ");
double result = Calculate(num1, num2, op);
Console.WriteLine($"结果: {num1} {op} {num2} = {result}");
history.Add(new CalculationHistory
{
Num1 = num1,
Num2 = num2,
Operator = op,
Result = result,
Timestamp = DateTime.Now
});
Console.Write("是否继续计算?(y/n): ");
continueCalculating = Console.ReadLine().ToLower() == "y";
}
catch (Exception ex)
{
Console.WriteLine($"发生错误: {ex.Message}");
}
}
}
class InvalidCalculationException : Exception
{
public InvalidCalculationException(string message) : base(message) { }
}
// 修改Calculate方法
static double Calculate(double num1, double num2, char op)
{
try
{
return op switch
{
'+' => num1 + num2,
'-' => num1 - num2,
'*' => num1 * num2,
'/' => num2 == 0 ? throw new DivideByZeroException("不能除以零") : num1 / num2,
'%' => num2 == 0 ? throw new InvalidCalculationException("取模运算除数不能为零") : num1 % num2,
'^' => num1 == 0 && num2 < 0 ?
throw new InvalidCalculationException("零的负指数幂未定义") : Math.Pow(num1, num2),
_ => throw new InvalidOperationException("未知运算符")
};
}
catch (OverflowException)
{
throw new InvalidCalculationException("计算结果超出范围");
}
}
为关键功能添加单元测试:
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class CalculatorTests
{
[TestMethod]
public void TestAddition()
{
Assert.AreEqual(5, Program.Calculate(2, 3, '+'));
}
[TestMethod]
public void TestSubtraction()
{
Assert.AreEqual(-1, Program.Calculate(2, 3, '-'));
}
[TestMethod]
public void TestMultiplication()
{
Assert.AreEqual(6, Program.Calculate(2, 3, '*'));
}
[TestMethod]
public void TestDivision()
{
Assert.AreEqual(0.5, Program.Calculate(1, 2, '/'));
}
[TestMethod]
[ExpectedException(typeof(DivideByZeroException))]
public void TestDivisionByZero()
{
Program.Calculate(1, 0, '/');
}
}
可以使用Inno Setup等工具创建Windows安装程序。
本文详细介绍了如何使用C#实现一个功能完整的控制台计算器,包括: - 基础四则运算实现 - 错误处理机制 - 历史记录功能 - 菜单系统 - 单元测试 - 部署发布
这个项目虽然简单,但涵盖了C#编程的许多基础概念,是初学者很好的练习项目。通过不断扩展功能,可以深入学习更多C#和.NET平台的高级特性。
完整项目代码已托管在GitHub: https://github.com/example/simple-calculator “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。