实验三科学计算
一、实验目的:
1、熟练并掌握编程的方法。
2、对比JAVA和C++,掌握C# 编程与前二者的联系与区别。
3、按照教师要求实践针对编程技术的原型系统。
二、实验内容:
实现一个计算器的原型系统。
3、收获与体会(要求小组成员简要填写在课程实验中遇到的主要问题以及解决方法,并手工签上小组所有成员姓名):
遇到的问题及解决方法:
实验过程中遇到的问题及解决方法:
本次实验我们编写了一个Formula类,用以实现通过string计算出表达式结果。对于计算过程当中可能出现的异常(如:表达式无效、尝试在表达式结果未计算时获取表达式结果等)编写自定义异常,并在主程序中获取异常并处理。在处理表达式时如果遇到括号,则将括号内的字符串作为参数,创建一个新的Formula实例(InnerFormula),并将其计算出结果后放回原表达式替换这串括号继续处理。
体会:
虽然这个程序不难编程但是也让我们发现了自己在编程上的许多问题,以及对一些C#的语法还不够熟悉,但也让我们知道自己的不足,以及自己今后需要进行加强的方面是什么。更让我们体会到了团队合作的精神,以及大家在一起互帮互助,共同解决问题的感觉。相信我们今后也会更加默契,共同学习,共同进步。
签名:
附加代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace 计算器
{
    public partial class FrmMain : Form
    {
        bool error = false;
        public FrmMain()
        {
            InitializeComponent();
        }
        private void FrmMain_KeyPress(object sender, KeyPressEventArgs e)
        {
            switch (e.KeyChar)
            {
                case '0':
                    button0.PerformClick();
                    break;
                case '1'科学计算器使用:
                    button1.PerformClick();
                    break;
                case '2':
                    button2.PerformClick();
                    break;
                case '3':
                    button3.PerformClick();
                    break;
                case '4':
                    button4.PerformClick();
                    break;
                case '5':
                    button5.PerformClick();
                    break;
                case '6':
                    button6.PerformClick();
                    break;
                case '7':
                    button7.PerformClick();
                    break;
                case '8':
                    button8.PerformClick();
                    break;
                case '9':
                    button9.PerformClick();
                    break;
                case '+':
                    buttonPlus.PerformClick();
                    break;
                case '-':
                    buttonMinus.PerformClick();
                    break;
                case '*':
                    buttonMultiply.PerformClick();
                    break;
                case '/':
                    buttonDivide.PerformClick();
                    break;
                case '.':
                    buttonDot.PerformClick();
                    break;
                case '(':
                    buttonLeft.PerformClick();
                    break;
                case ')':
                    buttonRight.PerformClick();
                    break;
                case '\b':
                    buttonDelete.PerformClick();
                    break;
                case '\n':
                    buttonEqual.PerformClick();
                    break;
            }
        }
        private void button_Click(object sender, EventArgs e)
        {
            switch (((Button)sender).Text)
            {
                case "":
                    if(textBoxExpression.Text.Length > 0)
                        textBoxExpression.Text = textBoxExpression.Text.Substring(0, textBoxExpression.Text.Length - 1);
                    break;
                case "CE":
                    error = false;
                    textBoxExpression.Text = "";
                    break;
                case "C":
                    textBoxExpression.Text = "";
                    break;
                case "=":
                    DoFormula();
                    break;
                default:
                    textBoxExpression.Text += ((Button)sender).Text;
                    break;
            }
        }
        protected void DoFormula()
        {
            if (error == true)
            {
                MessageBox.Show("请先点击CE按钮清除上一次运算的错误!", "运算错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            Formula fm = new Formula(textBoxExpression.Text);
            try
            {
                fm.Calculate();
            }
            catch (Exception ex)
            {